@robylon/react-native-sdk 2.0.29-staging.8 → 2.0.31-staging.0

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 (55) hide show
  1. package/lib/commonjs/Chatbotsdk.js +4 -3
  2. package/lib/commonjs/Chatbotsdk.js.map +1 -1
  3. package/lib/commonjs/FloatingButton/launchers/ImageLauncher.js +1 -1
  4. package/lib/commonjs/FloatingButton/launchers/ImageLauncher.js.map +1 -1
  5. package/lib/commonjs/FloatingButton/launchers/TextLauncher.js +1 -1
  6. package/lib/commonjs/FloatingButton/launchers/TextLauncher.js.map +1 -1
  7. package/lib/commonjs/FloatingButton/launchers/TextualImageLauncher.js +1 -1
  8. package/lib/commonjs/FloatingButton/launchers/TextualImageLauncher.js.map +1 -1
  9. package/lib/commonjs/FloatingButton.js +1 -1
  10. package/lib/commonjs/FloatingButton.js.map +1 -1
  11. package/lib/commonjs/LoadingIndicator.js +1 -1
  12. package/lib/commonjs/LoadingIndicator.js.map +1 -1
  13. package/lib/commonjs/Toast.js +1 -1
  14. package/lib/commonjs/Toast.js.map +1 -1
  15. package/lib/commonjs/components/DebugButton.js +1 -1
  16. package/lib/commonjs/components/DebugButton.js.map +1 -1
  17. package/lib/commonjs/types/events.js +1 -1
  18. package/lib/commonjs/types/events.js.map +1 -1
  19. package/lib/commonjs/utils/fileDownload.js +1 -1
  20. package/lib/commonjs/utils/fileDownload.js.map +1 -1
  21. package/lib/commonjs/versions/version.staging.js +1 -1
  22. package/lib/module/Chatbotsdk.js +4 -3
  23. package/lib/module/Chatbotsdk.js.map +1 -1
  24. package/lib/module/FloatingButton/launchers/ImageLauncher.js +1 -1
  25. package/lib/module/FloatingButton/launchers/ImageLauncher.js.map +1 -1
  26. package/lib/module/FloatingButton/launchers/TextLauncher.js +1 -1
  27. package/lib/module/FloatingButton/launchers/TextLauncher.js.map +1 -1
  28. package/lib/module/FloatingButton/launchers/TextualImageLauncher.js +1 -1
  29. package/lib/module/FloatingButton/launchers/TextualImageLauncher.js.map +1 -1
  30. package/lib/module/FloatingButton.js +1 -1
  31. package/lib/module/FloatingButton.js.map +1 -1
  32. package/lib/module/LoadingIndicator.js +1 -1
  33. package/lib/module/LoadingIndicator.js.map +1 -1
  34. package/lib/module/Toast.js +1 -1
  35. package/lib/module/Toast.js.map +1 -1
  36. package/lib/module/components/DebugButton.js +1 -1
  37. package/lib/module/components/DebugButton.js.map +1 -1
  38. package/lib/module/openChatbot.js +2 -1
  39. package/lib/module/openChatbot.js.map +1 -1
  40. package/lib/module/types/events.js +1 -1
  41. package/lib/module/types/events.js.map +1 -1
  42. package/lib/module/utils/fileDownload.js +1 -1
  43. package/lib/module/utils/fileDownload.js.map +1 -1
  44. package/lib/module/versions/version.staging.js +1 -1
  45. package/lib/typescript/Chatbotsdk.d.ts.map +1 -1
  46. package/lib/typescript/types/events.d.ts +4 -1
  47. package/lib/typescript/types/events.d.ts.map +1 -1
  48. package/lib/typescript/utils/fileDownload.d.ts +3 -2
  49. package/lib/typescript/utils/fileDownload.d.ts.map +1 -1
  50. package/lib/typescript/versions/version.staging.d.ts +1 -1
  51. package/package.json +6 -3
  52. package/src/Chatbotsdk.tsx +33 -14
  53. package/src/types/events.ts +3 -0
  54. package/src/utils/fileDownload.ts +116 -14
  55. package/src/versions/version.staging.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_constants","openChatbot","exports","chatbotId","additionalParams","arguments","length","undefined","params","URLSearchParams","Object","assign","id","url","BASE_CHATBOT_URL","toString","Linking","openURL"],"sourceRoot":"../../src","sources":["openChatbot.ts"],"mappings":"oFAAA,IAAAA,YAAA,CAAAC,OAAA,iBACA,IAAAC,UAAA,CAAAD,OAAA,gBAEO,GAAM,CAAAE,WAAW,CAAAC,OAAA,CAAAD,WAAA,CAAG,QAAd,CAAAA,WAAWA,CACtBE,SAAiB,CAER,IADT,CAAAC,gBAAwC,CAAAC,SAAA,CAAAC,MAAA,IAAAD,SAAA,MAAAE,SAAA,CAAAF,SAAA,IAAG,CAAC,CAAC,CAE7C,GAAM,CAAAG,MAAM,CAAG,GAAI,CAAAC,eAAe,CAAAC,MAAA,CAAAC,MAAA,EAAGC,EAAE,CAAET,SAAS,EAAKC,gBAAgB,CAAE,CAAC,CAC1E,GAAM,CAAAS,GAAG,CAAG,GAAGC,2BAAgB,IAAIN,MAAM,CAACO,QAAQ,CAAC,CAAC,EAAE,CACtDC,oBAAO,CAACC,OAAO,CAACJ,GAAG,CAAC,CACtB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["openChatbot.tsx"],"mappings":"","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.InternalEventType=exports.ChatbotEventType=void 0;var ChatbotEventType=exports.ChatbotEventType=function(ChatbotEventType){ChatbotEventType["CHATBOT_BUTTON_LOADED"]="CHATBOT_BUTTON_LOADED";ChatbotEventType["CHATBOT_BUTTON_CLICKED"]="CHATBOT_BUTTON_CLICKED";ChatbotEventType["CHATBOT_OPENED"]="CHATBOT_OPENED";ChatbotEventType["CHATBOT_CLOSED"]="CHATBOT_CLOSED";ChatbotEventType["CHATBOT_APP_READY"]="CHATBOT_APP_READY";ChatbotEventType["CHATBOT_LOADED"]="CHATBOT_LOADED";ChatbotEventType["CHAT_INITIALIZED"]="CHAT_INITIALIZED";ChatbotEventType["SESSION_REFRESHED"]="SESSION_REFRESHED";ChatbotEventType["CHAT_INITIALIZATION_FAILED"]="CHAT_INITIALIZATION_FAILED";return ChatbotEventType;}({});var InternalEventType=exports.InternalEventType=function(InternalEventType){InternalEventType["CHAT_MOVED"]="CHAT_MOVED";return InternalEventType;}({});
1
+ Object.defineProperty(exports,"__esModule",{value:true});exports.InternalEventType=exports.ChatbotEventType=void 0;var ChatbotEventType=exports.ChatbotEventType=function(ChatbotEventType){ChatbotEventType["CHATBOT_BUTTON_LOADED"]="CHATBOT_BUTTON_LOADED";ChatbotEventType["CHATBOT_BUTTON_CLICKED"]="CHATBOT_BUTTON_CLICKED";ChatbotEventType["CHATBOT_OPENED"]="CHATBOT_OPENED";ChatbotEventType["CHATBOT_CLOSED"]="CHATBOT_CLOSED";ChatbotEventType["CHATBOT_APP_READY"]="CHATBOT_APP_READY";ChatbotEventType["CHATBOT_LOADED"]="CHATBOT_LOADED";ChatbotEventType["CHAT_INITIALIZED"]="CHAT_INITIALIZED";ChatbotEventType["SESSION_REFRESHED"]="SESSION_REFRESHED";ChatbotEventType["CHAT_INITIALIZATION_FAILED"]="CHAT_INITIALIZATION_FAILED";ChatbotEventType["REQUEST_MIC_PERMISSION"]="REQUEST_MIC_PERMISSION";ChatbotEventType["MIC_PERMISSION_GRANTED"]="MIC_PERMISSION_GRANTED";ChatbotEventType["MIC_PERMISSION_DENIED"]="MIC_PERMISSION_DENIED";return ChatbotEventType;}({});var InternalEventType=exports.InternalEventType=function(InternalEventType){InternalEventType["CHAT_MOVED"]="CHAT_MOVED";return InternalEventType;}({});
2
2
  //# sourceMappingURL=events.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["ChatbotEventType","exports","InternalEventType"],"sourceRoot":"../../../src","sources":["types/events.ts"],"mappings":"sHAAY,CAAAA,gBAAgB,CAAAC,OAAA,CAAAD,gBAAA,UAAhBA,gBAAgB,EAAhBA,gBAAgB,kDAAhBA,gBAAgB,oDAAhBA,gBAAgB,oCAAhBA,gBAAgB,oCAAhBA,gBAAgB,0CAAhBA,gBAAgB,oCAAhBA,gBAAgB,wCAAhBA,gBAAgB,0CAAhBA,gBAAgB,kEAAhB,CAAAA,gBAAgB,UAYhB,CAAAE,iBAAiB,CAAAD,OAAA,CAAAC,iBAAA,UAAjBA,iBAAiB,EAAjBA,iBAAiB,kCAAjB,CAAAA,iBAAiB","ignoreList":[]}
1
+ {"version":3,"names":["ChatbotEventType","exports","InternalEventType"],"sourceRoot":"../../../src","sources":["types/events.ts"],"mappings":"sHAAY,CAAAA,gBAAgB,CAAAC,OAAA,CAAAD,gBAAA,UAAhBA,gBAAgB,EAAhBA,gBAAgB,kDAAhBA,gBAAgB,oDAAhBA,gBAAgB,oCAAhBA,gBAAgB,oCAAhBA,gBAAgB,0CAAhBA,gBAAgB,oCAAhBA,gBAAgB,wCAAhBA,gBAAgB,0CAAhBA,gBAAgB,4DAAhBA,gBAAgB,oDAAhBA,gBAAgB,oDAAhBA,gBAAgB,wDAAhB,CAAAA,gBAAgB,UAehB,CAAAE,iBAAiB,CAAAD,OAAA,CAAAC,iBAAA,UAAjBA,iBAAiB,EAAjBA,iBAAiB,kCAAjB,CAAAA,iBAAiB","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.handleDownloadRequest=exports.downloadFile=void 0;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _reactNative=require("react-native");var _logger=require("./logger");var downloadFile=exports.downloadFile=function(){var _ref=(0,_asyncToGenerator2.default)(function*(url,filename){try{_logger.logger.debug("Initiating file download",{url:url,filename:filename});if(!url||typeof url!=="string"){throw new Error("Invalid URL provided for download");}var supported=yield _reactNative.Linking.canOpenURL(url);if(!supported){throw new Error("Cannot open the provided URL");}yield _reactNative.Linking.openURL(url);_logger.logger.debug("File download initiated successfully");}catch(error){_logger.logger.error("File download failed",{url:url,filename:filename,error:error});throw error;}});return function downloadFile(_x,_x2){return _ref.apply(this,arguments);};}();var handleDownloadRequest=exports.handleDownloadRequest=function(){var _ref2=(0,_asyncToGenerator2.default)(function*(downloadRequest){var url=downloadRequest.url,filename=downloadRequest.filename;if(!url){_logger.logger.error("Download request missing URL");return;}try{yield downloadFile(url,filename);}catch(error){_logger.logger.error("Failed to handle download request",{downloadRequest:downloadRequest,error:error});}});return function handleDownloadRequest(_x3){return _ref2.apply(this,arguments);};}();
1
+ var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.handleDownloadRequest=exports.downloadFile=void 0;var _asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));var _reactNative=require("react-native");var _reactNativeBlobUtil=_interopRequireDefault(require("react-native-blob-util"));var _logger=require("./logger");var normalizeUrl=function normalizeUrl(url){return url==null?void 0:url.trim();};var sanitizeFileName=function sanitizeFileName(filename){var fallbackName=`chat-transcript-${Date.now()}.pdf`;var trimmedName=filename==null?void 0:filename.trim();if(!trimmedName)return fallbackName;return trimmedName.replace(/[<>:"/\\|?*\x00-\x1F]/g,"_");};var isValidHttpUrl=function isValidHttpUrl(url){return /^https?:\/\//i.test(url);};var openUrlWithFallback=function(){var _ref=(0,_asyncToGenerator2.default)(function*(url){try{yield _reactNative.Linking.openURL(url);return;}catch(primaryError){_logger.logger.warn("Primary URL open failed, trying browser fallback",{url:url,primaryError:primaryError instanceof Error?primaryError==null?void 0:primaryError.message:String(primaryError)});}yield _reactNative.Linking.openURL(`https://docs.google.com/viewer?url=${encodeURIComponent(url)}`);});return function openUrlWithFallback(_x){return _ref.apply(this,arguments);};}();var downloadOnAndroid=function(){var _ref2=(0,_asyncToGenerator2.default)(function*(url,filename){var fs=_reactNativeBlobUtil.default.fs,config=_reactNativeBlobUtil.default.config;var downloadPath=`${fs.dirs.DownloadDir}/${filename}`;yield config({fileCache:true,path:downloadPath,addAndroidDownloads:{useDownloadManager:true,notification:true,title:filename,description:"Downloading transcript",mime:"application/pdf",mediaScannable:true,path:downloadPath}}).fetch("GET",url);});return function downloadOnAndroid(_x2,_x3){return _ref2.apply(this,arguments);};}();var downloadOniOS=function(){var _ref3=(0,_asyncToGenerator2.default)(function*(url,filename){var fs=_reactNativeBlobUtil.default.fs,config=_reactNativeBlobUtil.default.config;var iosPath=`${fs.dirs.DocumentDir}/${filename}`;yield config({fileCache:true,path:iosPath}).fetch("GET",url);yield _reactNative.Share.share({url:`file://${iosPath}`,message:filename,title:filename});});return function downloadOniOS(_x4,_x5){return _ref3.apply(this,arguments);};}();var downloadWithNativeStorage=function(){var _ref4=(0,_asyncToGenerator2.default)(function*(url,filename){var safeName=sanitizeFileName(filename);if(_reactNative.Platform.OS==="android"){yield downloadOnAndroid(url,safeName);return;}yield downloadOniOS(url,safeName);});return function downloadWithNativeStorage(_x6,_x7){return _ref4.apply(this,arguments);};}();var shouldUseInPlaceDownload=function shouldUseInPlaceDownload(downloadRequest){return(downloadRequest==null?void 0:downloadRequest.inPlace)===true;};var downloadFile=exports.downloadFile=function(){var _ref5=(0,_asyncToGenerator2.default)(function*(url,filename,inPlace){try{var normalizedUrl=normalizeUrl(url);_logger.logger.debug("Initiating file download",{url:normalizedUrl,filename:filename});if(!normalizedUrl||typeof normalizedUrl!=="string"){throw new Error("Invalid URL provided for download");}if(!isValidHttpUrl(normalizedUrl)){throw new Error("Download URL must be an http/https URL");}if(inPlace){try{yield downloadWithNativeStorage(normalizedUrl,filename);_logger.logger.debug("File downloaded with native storage flow");}catch(nativeDownloadError){_logger.logger.warn("Native download failed, falling back to URL open",{url:normalizedUrl,nativeDownloadError:nativeDownloadError instanceof Error?nativeDownloadError==null?void 0:nativeDownloadError.message:String(nativeDownloadError)});yield openUrlWithFallback(normalizedUrl);_logger.logger.debug("File download opened with fallback browser flow");}return;}yield openUrlWithFallback(normalizedUrl);_logger.logger.debug("File download opened with legacy URL flow");}catch(error){_logger.logger.error("File download failed",{url:url,filename:filename,error:error instanceof Error?error==null?void 0:error.message:String(error)});throw error;}});return function downloadFile(_x8,_x9,_x10){return _ref5.apply(this,arguments);};}();var handleDownloadRequest=exports.handleDownloadRequest=function(){var _ref6=(0,_asyncToGenerator2.default)(function*(downloadRequest){var url=downloadRequest.url,filename=downloadRequest.filename;if(!url){_logger.logger.error("Download request missing URL");return;}try{yield downloadFile(url,filename,shouldUseInPlaceDownload(downloadRequest));}catch(error){_logger.logger.error("Failed to handle download request",{downloadRequest:downloadRequest,error:error});}});return function handleDownloadRequest(_x11){return _ref6.apply(this,arguments);};}();
2
2
  //# sourceMappingURL=fileDownload.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_logger","downloadFile","exports","_ref","_asyncToGenerator2","default","url","filename","logger","debug","Error","supported","Linking","canOpenURL","openURL","error","_x","_x2","apply","arguments","handleDownloadRequest","_ref2","downloadRequest","_x3"],"sourceRoot":"../../../src","sources":["utils/fileDownload.ts"],"mappings":"wSAKA,IAAAA,YAAA,CAAAC,OAAA,iBACA,IAAAC,OAAA,CAAAD,OAAA,aAYO,GAAM,CAAAE,YAAY,CAAAC,OAAA,CAAAD,YAAA,gBAAAE,IAAA,IAAAC,kBAAA,CAAAC,OAAA,EAAG,UAC1BC,GAAW,CACXC,QAAiB,CACC,CAClB,GAAI,CACFC,cAAM,CAACC,KAAK,CAAC,0BAA0B,CAAE,CAAEH,GAAG,CAAHA,GAAG,CAAEC,QAAQ,CAARA,QAAS,CAAC,CAAC,CAG3D,GAAI,CAACD,GAAG,EAAI,MAAO,CAAAA,GAAG,GAAK,QAAQ,CAAE,CACnC,KAAM,IAAI,CAAAI,KAAK,CAAC,mCAAmC,CAAC,CACtD,CAIA,GAAM,CAAAC,SAAS,MAAS,CAAAC,oBAAO,CAACC,UAAU,CAACP,GAAG,CAAC,CAE/C,GAAI,CAACK,SAAS,CAAE,CACd,KAAM,IAAI,CAAAD,KAAK,CAAC,8BAA8B,CAAC,CACjD,CAEA,KAAM,CAAAE,oBAAO,CAACE,OAAO,CAACR,GAAG,CAAC,CAC1BE,cAAM,CAACC,KAAK,CAAC,sCAAsC,CAAC,CACtD,CAAE,MAAOM,KAAK,CAAE,CACdP,cAAM,CAACO,KAAK,CAAC,sBAAsB,CAAE,CAAET,GAAG,CAAHA,GAAG,CAAEC,QAAQ,CAARA,QAAQ,CAAEQ,KAAK,CAALA,KAAM,CAAC,CAAC,CAC9D,KAAM,CAAAA,KAAK,CACb,CACF,CAAC,iBA1BY,CAAAd,YAAYA,CAAAe,EAAA,CAAAC,GAAA,SAAAd,IAAA,CAAAe,KAAA,MAAAC,SAAA,OA0BxB,CAMM,GAAM,CAAAC,qBAAqB,CAAAlB,OAAA,CAAAkB,qBAAA,gBAAAC,KAAA,IAAAjB,kBAAA,CAAAC,OAAA,EAAG,UACnCiB,eAAgC,CACd,CAClB,GAAQ,CAAAhB,GAAG,CAAegB,eAAe,CAAjChB,GAAG,CAAEC,QAAQ,CAAKe,eAAe,CAA5Bf,QAAQ,CAErB,GAAI,CAACD,GAAG,CAAE,CACRE,cAAM,CAACO,KAAK,CAAC,8BAA8B,CAAC,CAC5C,OACF,CAEA,GAAI,CACF,KAAM,CAAAd,YAAY,CAACK,GAAG,CAAEC,QAAQ,CAAC,CACnC,CAAE,MAAOQ,KAAK,CAAE,CACdP,cAAM,CAACO,KAAK,CAAC,mCAAmC,CAAE,CAChDO,eAAe,CAAfA,eAAe,CACfP,KAAK,CAALA,KACF,CAAC,CAAC,CAEJ,CACF,CAAC,iBAnBY,CAAAK,qBAAqBA,CAAAG,GAAA,SAAAF,KAAA,CAAAH,KAAA,MAAAC,SAAA,OAmBjC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_reactNativeBlobUtil","_interopRequireDefault","_logger","normalizeUrl","url","trim","sanitizeFileName","filename","fallbackName","Date","now","trimmedName","replace","isValidHttpUrl","test","openUrlWithFallback","_ref","_asyncToGenerator2","default","Linking","openURL","primaryError","logger","warn","Error","message","String","encodeURIComponent","_x","apply","arguments","downloadOnAndroid","_ref2","fs","ReactNativeBlobUtil","config","downloadPath","dirs","DownloadDir","fileCache","path","addAndroidDownloads","useDownloadManager","notification","title","description","mime","mediaScannable","fetch","_x2","_x3","downloadOniOS","_ref3","iosPath","DocumentDir","Share","share","_x4","_x5","downloadWithNativeStorage","_ref4","safeName","Platform","OS","_x6","_x7","shouldUseInPlaceDownload","downloadRequest","inPlace","downloadFile","exports","_ref5","normalizedUrl","debug","nativeDownloadError","error","_x8","_x9","_x10","handleDownloadRequest","_ref6","_x11"],"sourceRoot":"../../../src","sources":["utils/fileDownload.ts"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;var SDK_VERSION=exports.SDK_VERSION='2.0.29-staging.8';
1
+ Object.defineProperty(exports,"__esModule",{value:true});exports.SDK_VERSION=void 0;var SDK_VERSION=exports.SDK_VERSION='2.0.31-staging.0';
2
2
  //# sourceMappingURL=version.staging.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Chatbotsdk.d.ts","sourceRoot":"","sources":["../../src/Chatbotsdk.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAkBf,OAAO,EAAoB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAsBvE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;KAC7B,CAAC;IACF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC;CACxB;AAED,UAAU,oBAAqB,SAAQ,YAAY;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAUD,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,mBAAmB;IAC7B,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,aAAa,kBAAkB;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE;QACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;IACjD,aAAa,EAAE,YAAY,CAAC;IAC5B,mBAAmB,EAAE;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QACN,kBAAkB,CAAC,EAAE;YACnB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,QAAA,MAAM,OAAO,yFA+uBZ,CAAC;AA0CF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Chatbotsdk.d.ts","sourceRoot":"","sources":["../../src/Chatbotsdk.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAkBf,OAAO,EAEL,mBAAmB,EAEpB,MAAM,gBAAgB,CAAC;AAsBxB,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;KAC7B,CAAC;IACF,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC;CACxB;AAED,UAAU,oBAAqB,SAAQ,YAAY;IACjD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAWD,oBAAY,oBAAoB;IAC9B,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,KAAK,UAAU;CAChB;AAED,oBAAY,mBAAmB;IAC7B,KAAK,UAAU;IACf,IAAI,SAAS;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,aAAa,kBAAkB;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE;QACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,oBAAoB,CAAC,EAAE,yBAAyB,CAAC;IACjD,aAAa,EAAE,YAAY,CAAC;IAC5B,mBAAmB,EAAE;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,MAAM,EAAE;QACN,kBAAkB,CAAC,EAAE;YACnB,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,QAAA,MAAM,OAAO,yFA6vBZ,CAAC;AA0CF,eAAe,OAAO,CAAC"}
@@ -7,7 +7,10 @@ export declare enum ChatbotEventType {
7
7
  CHATBOT_LOADED = "CHATBOT_LOADED",
8
8
  CHAT_INITIALIZED = "CHAT_INITIALIZED",
9
9
  SESSION_REFRESHED = "SESSION_REFRESHED",
10
- CHAT_INITIALIZATION_FAILED = "CHAT_INITIALIZATION_FAILED"
10
+ CHAT_INITIALIZATION_FAILED = "CHAT_INITIALIZATION_FAILED",
11
+ REQUEST_MIC_PERMISSION = "REQUEST_MIC_PERMISSION",
12
+ MIC_PERMISSION_GRANTED = "MIC_PERMISSION_GRANTED",
13
+ MIC_PERMISSION_DENIED = "MIC_PERMISSION_DENIED"
11
14
  }
12
15
  export declare enum InternalEventType {
13
16
  CHAT_MOVED = "CHAT_MOVED"
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/events.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,qBAAqB,0BAA0B;IAC/C,sBAAsB,2BAA2B;IACjD,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,0BAA0B,+BAA+B;CAC1D;AAED,oBAAY,iBAAiB;IAC3B,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/types/events.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC1B,qBAAqB,0BAA0B;IAC/C,sBAAsB,2BAA2B;IACjD,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,iBAAiB,sBAAsB;IACvC,0BAA0B,+BAA+B;IACzD,sBAAsB,2BAA2B;IACjD,sBAAsB,2BAA2B;IACjD,qBAAqB,0BAA0B;CAChD;AAED,oBAAY,iBAAiB;IAC3B,UAAU,eAAe;CAC1B;AAED,MAAM,MAAM,aAAa,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC"}
@@ -5,13 +5,14 @@
5
5
  export interface DownloadRequest {
6
6
  url: string;
7
7
  filename?: string;
8
+ inPlace?: boolean;
8
9
  }
9
10
  /**
10
- * Downloads a file using the platform's default mechanism
11
+ * Downloads a file using native storage when possible
11
12
  * @param url - The URL of the file to download
12
13
  * @param filename - Optional filename for the download
13
14
  */
14
- export declare const downloadFile: (url: string, filename?: string) => Promise<void>;
15
+ export declare const downloadFile: (url: string, filename?: string, inPlace?: boolean) => Promise<void>;
15
16
  /**
16
17
  * Handles download request from WebView post message
17
18
  * @param downloadRequest - The download request object
@@ -1 +1 @@
1
- {"version":3,"file":"fileDownload.d.ts","sourceRoot":"","sources":["../../../src/utils/fileDownload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAClB,MAAM,aACA,MAAM,KAChB,QAAQ,IAAI,CAuBd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,oBACf,eAAe,KAC/B,QAAQ,IAAI,CAiBd,CAAC"}
1
+ {"version":3,"file":"fileDownload.d.ts","sourceRoot":"","sources":["../../../src/utils/fileDownload.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAkFD;;;;GAIG;AACH,eAAO,MAAM,YAAY,QAClB,MAAM,aACA,MAAM,YACP,OAAO,KAChB,QAAQ,IAAI,CA0Cd,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,oBACf,eAAe,KAC/B,QAAQ,IAAI,CAiBd,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const SDK_VERSION = "2.0.29-staging.8";
1
+ export declare const SDK_VERSION = "2.0.31-staging.0";
2
2
  //# sourceMappingURL=version.staging.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robylon/react-native-sdk",
3
- "version": "2.0.29-staging.8",
3
+ "version": "2.0.31-staging.0",
4
4
  "description": "React Native SDK for Robylon",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -42,13 +42,13 @@
42
42
  "babel-plugin-transform-inline-environment-variables": "^0.4.4",
43
43
  "env-cmd": "^10.1.0",
44
44
  "husky": "^8.0.3",
45
+ "metro-react-native-babel-preset": "^0.76.5",
45
46
  "react": "^18.0.0",
46
47
  "react-native": "^0.76.5",
47
48
  "react-native-builder-bob": "^0.20.0",
48
49
  "rimraf": "^6.0.1",
49
50
  "semver": "^7.5.4",
50
- "typescript": "^4.5.2",
51
- "metro-react-native-babel-preset": "^0.76.5"
51
+ "typescript": "^4.5.2"
52
52
  },
53
53
  "react-native-builder-bob": {
54
54
  "source": "src",
@@ -82,5 +82,8 @@
82
82
  "commit-msg": "sh scripts/validate-branch-name.sh",
83
83
  "post-checkout": "node scripts/prevent-direct-branch.js"
84
84
  }
85
+ },
86
+ "dependencies": {
87
+ "react-native-blob-util": "^0.24.7"
85
88
  }
86
89
  }
@@ -24,7 +24,11 @@ import FloatingButton from "./FloatingButton";
24
24
  import { API_URL, BASE_CHATBOT_URL, DEFAULT_LAUNCHER_IMAGE } from "./constants";
25
25
  import { getSystemInfo, getBrowserAndOSInfoScript } from "./utils/systemInfo";
26
26
  import { useChatbotEvents } from "./hooks/useChatbotEvents";
27
- import { ChatbotEventType, ChatbotEventHandler } from "./types/events";
27
+ import {
28
+ ChatbotEventType,
29
+ ChatbotEventHandler,
30
+ InternalEventType,
31
+ } from "./types/events";
28
32
  import { logger } from "./utils/logger";
29
33
  import { enableNetworkDebug, enableWebViewDebug } from "./utils/debugConfig";
30
34
  import DebugButton from "./components/DebugButton";
@@ -83,6 +87,7 @@ interface ChatbotMessage {
83
87
  level?: string;
84
88
  url?: string;
85
89
  filename?: string;
90
+ inPlace?: boolean;
86
91
  }
87
92
 
88
93
  export enum ChatbotInterfaceType {
@@ -244,12 +249,11 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
244
249
 
245
250
  // Handle WebView messages
246
251
  const handleMessage = useCallback(
247
- (event: WebViewMessageEvent) => {
252
+ async (event: WebViewMessageEvent) => {
248
253
  const { data } = event.nativeEvent;
249
254
 
250
255
  try {
251
256
  const parsedData: ChatbotMessage = JSON.parse(data);
252
-
253
257
  // Handle storage messages
254
258
  if (
255
259
  Object.values(StorageMessageType).includes(
@@ -350,6 +354,7 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
350
354
  const downloadData: DownloadRequest = parsedData?.data || {
351
355
  url: parsedData?.url,
352
356
  filename: parsedData?.filename,
357
+ inPlace: parsedData?.inPlace,
353
358
  };
354
359
  handleDownloadRequest(downloadData);
355
360
  }
@@ -369,6 +374,26 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
369
374
  parsedData?.data
370
375
  );
371
376
  break;
377
+ case "REQUEST_MIC_PERMISSION":
378
+ const granted = await requestAndroidMicPermission();
379
+ if (webViewRef.current && isWebViewVisible) {
380
+ const messageData = {
381
+ name: "requestMicPermission",
382
+ action: "requestMicPermission",
383
+ type: granted
384
+ ? "MIC_PERMISSION_GRANTED"
385
+ : "MIC_PERMISSION_DENIED",
386
+ };
387
+ logger.debug("messageData====>", JSON.stringify(messageData));
388
+ webViewRef.current?.injectJavaScript(`
389
+ window.postMessage(${JSON.stringify(messageData)}, '*');`);
390
+ }
391
+ // if (granted) {
392
+ // emitEvent(ChatbotEventType.MIC_PERMISSION_GRANTED);
393
+ // } else {
394
+ // emitEvent(ChatbotEventType.MIC_PERMISSION_DENIED);
395
+ // }
396
+ break;
372
397
  default:
373
398
  if (onMessage) onMessage(parsedData ?? {});
374
399
  }
@@ -618,11 +643,10 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
618
643
  };
619
644
 
620
645
  const requestAndroidMicPermission = useCallback(async () => {
621
- Alert.alert(
622
- "Microphone permission",
623
- "This app uses your microphone for voice features in the chatbot."
624
- );
625
646
  try {
647
+ if (Platform.OS === "ios") {
648
+ return true;
649
+ }
626
650
  // Check if already granted
627
651
  const alreadyGranted = await PermissionsAndroid.check(
628
652
  PermissionsAndroid.PERMISSIONS.RECORD_AUDIO
@@ -636,8 +660,7 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
636
660
  PermissionsAndroid.PERMISSIONS.RECORD_AUDIO,
637
661
  {
638
662
  title: "Microphone permission",
639
- message:
640
- "This app uses your microphone for voice features in the chatbot.",
663
+ message: "This app uses your microphone for voice features.",
641
664
  buttonPositive: "Allow",
642
665
  buttonNegative: "Deny",
643
666
  }
@@ -660,11 +683,6 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
660
683
  }
661
684
  }, []);
662
685
 
663
- useEffect(() => {
664
- // Fire and forget: we just want the OS dialog to show early
665
- requestAndroidMicPermission();
666
- }, [requestAndroidMicPermission]);
667
-
668
686
  const screenDimensions = getScreenDimensions();
669
687
 
670
688
  useEffect(() => {
@@ -749,6 +767,7 @@ const Chatbot = forwardRef<ChatbotRef, InternalChatbotProps>(
749
767
  >
750
768
  <ErrorBoundary componentName="ChatbotWebView">
751
769
  <WebView
770
+ mediaCapturePermissionGrantType={"grant"}
752
771
  webviewDebuggingEnabled={true}
753
772
  ref={webViewRef}
754
773
  source={{
@@ -8,6 +8,9 @@ export enum ChatbotEventType {
8
8
  CHAT_INITIALIZED = "CHAT_INITIALIZED",
9
9
  SESSION_REFRESHED = "SESSION_REFRESHED",
10
10
  CHAT_INITIALIZATION_FAILED = "CHAT_INITIALIZATION_FAILED",
11
+ REQUEST_MIC_PERMISSION = "REQUEST_MIC_PERMISSION",
12
+ MIC_PERMISSION_GRANTED = "MIC_PERMISSION_GRANTED",
13
+ MIC_PERMISSION_DENIED = "MIC_PERMISSION_DENIED",
11
14
  }
12
15
 
13
16
  export enum InternalEventType {
@@ -3,43 +3,145 @@
3
3
  * Utility functions for handling file downloads
4
4
  */
5
5
 
6
- import { Platform, Linking } from "react-native";
6
+ import { Linking, Platform, Share } from "react-native";
7
+ import ReactNativeBlobUtil from "react-native-blob-util";
7
8
  import { logger } from "./logger";
8
9
 
9
10
  export interface DownloadRequest {
10
11
  url: string;
11
12
  filename?: string;
13
+ inPlace?: boolean;
12
14
  }
13
15
 
16
+ const normalizeUrl = (url: string): string => {
17
+ return url?.trim();
18
+ };
19
+
20
+ const sanitizeFileName = (filename?: string): string => {
21
+ const fallbackName = `chat-transcript-${Date.now()}.pdf`;
22
+ const trimmedName = filename?.trim();
23
+ if (!trimmedName) return fallbackName;
24
+ return trimmedName.replace(/[<>:"/\\|?*\x00-\x1F]/g, "_");
25
+ };
26
+
27
+ const isValidHttpUrl = (url: string): boolean => {
28
+ return /^https?:\/\//i.test(url);
29
+ };
30
+
31
+ const openUrlWithFallback = async (url: string): Promise<void> => {
32
+ try {
33
+ await Linking.openURL(url);
34
+ return;
35
+ } catch (primaryError) {
36
+ logger.warn("Primary URL open failed, trying browser fallback", {
37
+ url,
38
+ primaryError:
39
+ primaryError instanceof Error
40
+ ? primaryError?.message
41
+ : String(primaryError),
42
+ });
43
+ }
44
+
45
+ await Linking.openURL(`https://docs.google.com/viewer?url=${encodeURIComponent(url)}`);
46
+ };
47
+
48
+ const downloadOnAndroid = async (url: string, filename: string): Promise<void> => {
49
+ const { fs, config } = ReactNativeBlobUtil;
50
+ const downloadPath = `${fs.dirs.DownloadDir}/${filename}`;
51
+ await config({
52
+ fileCache: true,
53
+ path: downloadPath,
54
+ addAndroidDownloads: {
55
+ useDownloadManager: true,
56
+ notification: true,
57
+ title: filename,
58
+ description: "Downloading transcript",
59
+ mime: "application/pdf",
60
+ mediaScannable: true,
61
+ path: downloadPath,
62
+ },
63
+ }).fetch("GET", url);
64
+ };
65
+
66
+ const downloadOniOS = async (url: string, filename: string): Promise<void> => {
67
+ const { fs, config } = ReactNativeBlobUtil;
68
+ const iosPath = `${fs.dirs.DocumentDir}/${filename}`;
69
+ await config({
70
+ fileCache: true,
71
+ path: iosPath,
72
+ }).fetch("GET", url);
73
+ await Share.share({
74
+ url: `file://${iosPath}`,
75
+ message: filename,
76
+ title: filename,
77
+ });
78
+ };
79
+
80
+ const downloadWithNativeStorage = async (
81
+ url: string,
82
+ filename?: string
83
+ ): Promise<void> => {
84
+ const safeName = sanitizeFileName(filename);
85
+ if (Platform.OS === "android") {
86
+ await downloadOnAndroid(url, safeName);
87
+ return;
88
+ }
89
+ await downloadOniOS(url, safeName);
90
+ };
91
+
92
+ const shouldUseInPlaceDownload = (downloadRequest?: DownloadRequest): boolean => {
93
+ return downloadRequest?.inPlace === true;
94
+ };
95
+
14
96
  /**
15
- * Downloads a file using the platform's default mechanism
97
+ * Downloads a file using native storage when possible
16
98
  * @param url - The URL of the file to download
17
99
  * @param filename - Optional filename for the download
18
100
  */
19
101
  export const downloadFile = async (
20
102
  url: string,
21
- filename?: string
103
+ filename?: string,
104
+ inPlace?: boolean
22
105
  ): Promise<void> => {
23
106
  try {
24
- logger.debug("Initiating file download", { url, filename });
107
+ const normalizedUrl = normalizeUrl(url);
108
+ logger.debug("Initiating file download", { url: normalizedUrl, filename });
25
109
 
26
110
  // Validate URL
27
- if (!url || typeof url !== "string") {
111
+ if (!normalizedUrl || typeof normalizedUrl !== "string") {
28
112
  throw new Error("Invalid URL provided for download");
29
113
  }
30
114
 
31
- // For React Native, we'll use Linking to open the URL
32
- // This will use the device's default browser/download manager
33
- const supported = await Linking.canOpenURL(url);
115
+ if (!isValidHttpUrl(normalizedUrl)) {
116
+ throw new Error("Download URL must be an http/https URL");
117
+ }
34
118
 
35
- if (!supported) {
36
- throw new Error("Cannot open the provided URL");
119
+ if (inPlace) {
120
+ try {
121
+ await downloadWithNativeStorage(normalizedUrl, filename);
122
+ logger.debug("File downloaded with native storage flow");
123
+ } catch (nativeDownloadError) {
124
+ logger.warn("Native download failed, falling back to URL open", {
125
+ url: normalizedUrl,
126
+ nativeDownloadError:
127
+ nativeDownloadError instanceof Error
128
+ ? nativeDownloadError?.message
129
+ : String(nativeDownloadError),
130
+ });
131
+ await openUrlWithFallback(normalizedUrl);
132
+ logger.debug("File download opened with fallback browser flow");
133
+ }
134
+ return;
37
135
  }
38
136
 
39
- await Linking.openURL(url);
40
- logger.debug("File download initiated successfully");
137
+ await openUrlWithFallback(normalizedUrl);
138
+ logger.debug("File download opened with legacy URL flow");
41
139
  } catch (error) {
42
- logger.error("File download failed", { url, filename, error });
140
+ logger.error("File download failed", {
141
+ url,
142
+ filename,
143
+ error: error instanceof Error ? error?.message : String(error),
144
+ });
43
145
  throw error;
44
146
  }
45
147
  };
@@ -59,7 +161,7 @@ export const handleDownloadRequest = async (
59
161
  }
60
162
 
61
163
  try {
62
- await downloadFile(url, filename);
164
+ await downloadFile(url, filename, shouldUseInPlaceDownload(downloadRequest));
63
165
  } catch (error) {
64
166
  logger.error("Failed to handle download request", {
65
167
  downloadRequest,
@@ -1,2 +1,2 @@
1
1
  // This file is auto-generated. Do not modify it manually.
2
- export const SDK_VERSION = '2.0.29-staging.8';
2
+ export const SDK_VERSION = '2.0.31-staging.0';