@freshworks/react-native-freshdesk-sdk
Version:
React Native wrapper for Freshdesk Android and iOS SDKs
363 lines (339 loc) • 10.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "FreshdeskErrorCode", {
enumerable: true,
get: function () {
return _types.FreshdeskErrorCode;
}
});
Object.defineProperty(exports, "FreshdeskEvents", {
enumerable: true,
get: function () {
return _events.FreshdeskEvents;
}
});
exports.FreshdeskSDK = void 0;
Object.defineProperty(exports, "UserState", {
enumerable: true,
get: function () {
return _types.UserState;
}
});
exports.addUnreadCountListener = addUnreadCountListener;
exports.addUserCreatedListener = addUserCreatedListener;
exports.addUserStateListener = addUserStateListener;
exports.authenticateAndUpdate = authenticateAndUpdate;
exports.default = void 0;
exports.dismiss = dismiss;
exports.enableDebugLogs = enableDebugLogs;
Object.defineProperty(exports, "formatDiagnosticReport", {
enumerable: true,
get: function () {
return _diagnostics.formatDiagnosticReport;
}
});
exports.getSDKVersion = getSDKVersion;
exports.getUnreadCount = getUnreadCount;
exports.getUser = getUser;
exports.initialize = initialize;
Object.defineProperty(exports, "isBareFreshdeskHost", {
enumerable: true,
get: function () {
return _normalizeHost.isBareFreshdeskHost;
}
});
Object.defineProperty(exports, "normalizeFreshdeskHost", {
enumerable: true,
get: function () {
return _normalizeHost.normalizeFreshdeskHost;
}
});
exports.openKnowledgeBase = openKnowledgeBase;
exports.openSupport = openSupport;
exports.openTopic = openTopic;
Object.defineProperty(exports, "parseDiagnosticReport", {
enumerable: true,
get: function () {
return _diagnostics.parseDiagnosticReport;
}
});
exports.removeAllListeners = removeAllListeners;
exports.resetUser = resetUser;
exports.runDiagnostics = runDiagnostics;
exports.setContentConfiguration = setContentConfiguration;
exports.setLinkHandler = setLinkHandler;
exports.setTicketProperties = setTicketProperties;
exports.setUserProperties = setUserProperties;
exports.trackEvent = trackEvent;
var _FreshdeskModule = require("./FreshdeskModule");
var _events = require("./events");
var _diagnostics = require("./diagnostics");
var _normalizeHost = require("./utils/normalizeHost");
var _types = require("./types");
/**
* Initialize the Freshdesk SDK with configuration
* Must be called before any other SDK methods
* @param config SDK configuration
*/
function initialize(config) {
if (!_FreshdeskModule.isNativeModuleAvailable) {
return Promise.reject(new Error('Freshdesk native module not available'));
}
return _FreshdeskModule.nativeModule.initialize({
...config,
host: (0, _normalizeHost.normalizeFreshdeskHost)(config.host)
});
}
/**
* Open the Freshdesk support home screen
*/
function openSupport() {
return _FreshdeskModule.nativeModule.openSupport();
}
/**
* Open the Freshdesk knowledge base / FAQ screen
*/
function openKnowledgeBase() {
return _FreshdeskModule.nativeModule.openKnowledgeBase();
}
/**
* Open a specific support topic
* @param topic Topic information (name and optional ID)
*/
function openTopic(topic) {
return _FreshdeskModule.nativeModule.openTopic(topic.topicName, topic.topicId ?? '');
}
/**
* Get the current unread message count
*
* Platform note: on Android this resolves a cached, broadcast-driven value and
* is `0` until the first broadcast arrives after `initialize()`; on iOS it is
* live. Prefer {@link addUnreadCountListener} for a value you can trust
* immediately on both platforms. See PLATFORM_DIFFERENCES.md.
*
* @returns Promise resolving to the unread count
*/
function getUnreadCount() {
return _FreshdeskModule.nativeModule.getUnreadCount();
}
/**
* Track a user event for analytics and context
* @param name Event name
* @param properties Event properties
*/
function trackEvent(name, properties) {
return _FreshdeskModule.nativeModule.trackEvent(name, properties ?? {});
}
/**
* Set user properties (only for non-JWT enforced SDKs)
* @param properties User properties
*/
function setUserProperties(properties) {
return _FreshdeskModule.nativeModule.setUserProperties(properties);
}
/**
* Set ticket properties
* @param properties Ticket properties
*/
function setTicketProperties(properties) {
return _FreshdeskModule.nativeModule.setTicketProperties(properties);
}
/**
* Authenticate or update user with JWT token
* @param jwt JWT token
*/
function authenticateAndUpdate(jwt) {
return _FreshdeskModule.nativeModule.authenticateAndUpdate(jwt);
}
/**
* Reset the current user and clear session data
* Call this when user logs out
*
* Platform note: Android can resolve `{ success: false, error }` on a genuine
* reset failure; iOS's native SDK has no failure callback for this operation
* and always resolves `{ success: true }` once initialized (it only rejects
* for the not-initialized usage error). Don't rely on `success: false` as a
* cross-platform signal. See PLATFORM_DIFFERENCES.md.
*/
function resetUser() {
return _FreshdeskModule.nativeModule.resetUser().then(r => {
const result = {
success: r.success
};
if (r.message) {
result.message = r.message;
}
if (r.error) {
result.error = r.error;
}
return result;
});
}
/**
* Dismiss any open Freshdesk views
*/
function dismiss() {
return _FreshdeskModule.nativeModule.dismiss();
}
/**
* Set a custom link handler
* When a link is pressed in the SDK, an event will be emitted
* @param handler Callback function to handle link presses
* @returns EmitterSubscription to remove the listener
*/
function setLinkHandler(handler) {
if (!_FreshdeskModule.eventEmitter) {
console.warn('Freshdesk event emitter not available');
return null;
}
// Enable link handler in native module
_FreshdeskModule.nativeModule.setLinkHandlerEnabled(true).catch(err => {
console.warn('Failed to enable link handler:', err);
});
return _FreshdeskModule.eventEmitter.addListener(_events.FreshdeskEvents.ON_LINK_PRESSED, handler);
}
/**
* Add a listener for unread count changes
* @param listener Callback function receiving the unread count
* @returns EmitterSubscription to remove the listener
*/
function addUnreadCountListener(listener) {
if (!_FreshdeskModule.eventEmitter) {
console.warn('Freshdesk event emitter not available');
return null;
}
return _FreshdeskModule.eventEmitter.addListener(_events.FreshdeskEvents.UNREAD_COUNT_CHANGED, listener);
}
/**
* Add a listener for user state changes
* @param listener Callback function receiving the user state
* @returns EmitterSubscription to remove the listener
*/
function addUserStateListener(listener) {
if (!_FreshdeskModule.eventEmitter) {
console.warn('Freshdesk event emitter not available');
return null;
}
return _FreshdeskModule.eventEmitter.addListener(_events.FreshdeskEvents.USER_STATE_CHANGED, listener);
}
/**
* Add a listener for user creation events
* @param listener Callback function receiving user creation event
* @returns EmitterSubscription to remove the listener
*/
function addUserCreatedListener(listener) {
if (!_FreshdeskModule.eventEmitter) {
console.warn('Freshdesk event emitter not available');
return null;
}
return _FreshdeskModule.eventEmitter.addListener(_events.FreshdeskEvents.USER_CREATED, listener);
}
/**
* Remove all Freshdesk event listeners
* Call this when cleaning up (e.g., on component unmount)
*/
function removeAllListeners() {
if (!_FreshdeskModule.eventEmitter) {
return;
}
_FreshdeskModule.eventEmitter.removeAllListeners(_events.FreshdeskEvents.UNREAD_COUNT_CHANGED);
_FreshdeskModule.eventEmitter.removeAllListeners(_events.FreshdeskEvents.USER_STATE_CHANGED);
_FreshdeskModule.eventEmitter.removeAllListeners(_events.FreshdeskEvents.USER_CREATED);
_FreshdeskModule.eventEmitter.removeAllListeners(_events.FreshdeskEvents.ON_LINK_PRESSED);
// Disable link handler
_FreshdeskModule.nativeModule.setLinkHandlerEnabled(false).catch(() => {
// Ignore errors when disabling
});
}
/**
* Get the SDK version string
* @returns Promise resolving to SDK version (e.g., "1.0.1")
*/
function getSDKVersion() {
if (!_FreshdeskModule.isNativeModuleAvailable) {
return Promise.resolve('unknown');
}
return _FreshdeskModule.nativeModule.getSDKVersion();
}
/**
* Get the current user information from the SDK
* @returns Promise resolving to user data object
*/
async function getUser() {
if (!_FreshdeskModule.isNativeModuleAvailable) {
return Promise.resolve({});
}
const userJson = await _FreshdeskModule.nativeModule.getUser();
try {
return JSON.parse(userJson);
} catch {
return {};
}
}
/**
* Set content configuration to customize SDK UI text
* @param config Content configuration for headers, placeholders, etc.
*/
function setContentConfiguration(config) {
if (!_FreshdeskModule.isNativeModuleAvailable) {
return Promise.reject(new Error('Freshdesk native module not available'));
}
const configString = JSON.stringify(config);
return _FreshdeskModule.nativeModule.setContentConfiguration(configString);
}
/**
* Enable or disable Freshdesk SDK debug logs
*
* Platform note: reliable at runtime on iOS only. On Android, debug logging
* can only be set at `initialize()` time (`debugMode: true`); calling this
* afterward is a no-op there. See PLATFORM_DIFFERENCES.md.
*
* @param enabled Whether debug logging should be enabled
*/
function enableDebugLogs(enabled) {
if (!_FreshdeskModule.isNativeModuleAvailable) {
return Promise.reject(new Error('Freshdesk native module not available'));
}
return _FreshdeskModule.nativeModule.enableDebugLogs(enabled);
}
/**
* Run Freshdesk SDK diagnostics and return a structured report
*/
async function runDiagnostics() {
if (!_FreshdeskModule.isNativeModuleAvailable) {
return (0, _diagnostics.parseDiagnosticReport)(await _FreshdeskModule.nativeModule.runDiagnostics());
}
const raw = await _FreshdeskModule.nativeModule.runDiagnostics();
return (0, _diagnostics.parseDiagnosticReport)(raw);
}
/**
* Freshdesk SDK object for convenient access
*/
const FreshdeskSDK = exports.FreshdeskSDK = {
initialize,
openSupport,
openKnowledgeBase,
openTopic,
getUnreadCount,
trackEvent,
setUserProperties,
setTicketProperties,
authenticateAndUpdate,
resetUser,
dismiss,
setLinkHandler,
addUnreadCountListener,
addUserStateListener,
addUserCreatedListener,
removeAllListeners,
getSDKVersion,
getUser,
setContentConfiguration,
enableDebugLogs,
runDiagnostics,
events: _events.FreshdeskEvents
};
var _default = exports.default = FreshdeskSDK;
//# sourceMappingURL=index.js.map