UNPKG

@freshworks/react-native-freshdesk-sdk

Version:
363 lines (339 loc) 10.8 kB
"use strict"; 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