capacitor-gleap-plugin 19.0.0 → 19.1.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.
- package/CapacitorGleapPlugin.podspec +1 -1
- package/Package.swift +1 -1
- package/README.md +144 -1
- package/android/build.gradle +1 -1
- package/android/src/main/java/io/gleapplugins/capacitor/GleapPlugin.java +143 -0
- package/dist/docs.json +112 -0
- package/dist/esm/definitions.d.ts +66 -0
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/logs/webViewLogs.d.ts +18 -2
- package/dist/esm/logs/webViewLogs.js +45 -7
- package/dist/esm/logs/webViewLogs.js.map +1 -1
- package/dist/esm/web.d.ts +16 -0
- package/dist/esm/web.js +29 -0
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +74 -7
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +74 -7
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/GleapPlugin/GleapPlugin.swift +92 -0
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\nexport type CallbackID = string;\n\nexport interface GleapEventMessage {\n name: string,\n data?: any,\n}\n\nexport type GleapEventCallback = (message: GleapEventMessage | null, err?: any) => void;\n\n/**\n * A console log entry as the plugin hands it to the native SDK.\n */\nexport interface GleapConsoleLogEntry {\n /** ISO-8601 UTC timestamp with milliseconds. */\n date: string;\n priority: 'ERROR' | 'WARNING' | 'INFO';\n log: string;\n}\n\n/**\n * A network log entry (fetch / XMLHttpRequest) as the plugin hands it to the native SDK.\n */\nexport interface GleapNetworkLogEntry {\n /** ISO-8601 UTC timestamp of the request start. */\n date: string;\n /** HTTP method, uppercase. */\n type: string;\n url: string;\n /** Milliseconds from the request start to the response headers (or the failure). */\n duration?: number;\n /** true when an HTTP response arrived (any status), false on a transport error, abort or timeout. */\n success?: boolean;\n request?: {\n headers?: { [name: string]: string };\n payload?: string;\n };\n response?: {\n status?: number;\n statusText?: string;\n headers?: { [name: string]: string };\n responseText?: string;\n /** Set instead of status and body when the request failed. */\n errorText?: string;\n };\n}\n\n/**\n * The network log settings of your Gleap project, sent by the native SDK once its config is loaded.\n */\nexport interface GleapLogConfig {\n enableNetworkLogs: boolean;\n networkLogPropsToIgnore: string[];\n networkLogBlacklist: string[];\n}\n\nexport interface GleapPlugin {\n /**\n * Initialize Gleap with an API key\n *\n * @since 7.0.0\n */\n initialize(options: {\n API_KEY: string;\n }): Promise<{\n initialized: boolean;\n }>;\n\n /**\n * Set the data region of your Gleap project (\"eu\" is the default).\n * Sets the API, websocket and realtime hosts at once. Must be called before initialize.\n * A manual setter (setApiUrl, setWSApiUrl, setRealtimeHost) called afterwards overrides that single host.\n *\n * @since 18.0.0\n */\n setRegion(options: {\n region: 'eu' | 'us';\n }): Promise<{\n region: string;\n }>;\n\n /**\n * Set a custom API url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setApiUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom websocket API url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setWSApiUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom realtime host (hostname only, without protocol or path). Must be called before initialize.\n *\n * @since 18.0.0\n */\n setRealtimeHost(options: {\n host: string;\n }): Promise<{\n host: string;\n }>;\n\n /**\n * Set a custom widget frame url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setFrameUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom banner url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setBannerUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom modal url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setModalUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set user identity\n *\n * @since 7.0.0\n */\n identify(options: {\n userId: string;\n userHash?: string;\n name?: string;\n email?: string;\n phone?: string;\n companyId?: string;\n companyName?: string;\n avatar?: string;\n sla?: number;\n plan?: string;\n value?: number;\n customData?: Record<string, any>;\n }): Promise<{\n identify: boolean;\n }>;\n\n /**\n * Update user properties\n *\n * @since 13.2.1\n */\n updateContact(options: {\n name?: string;\n email?: string;\n phone?: string;\n companyId?: string;\n companyName?: string;\n avatar?: string;\n sla?: number;\n plan?: string;\n value?: number;\n customData?: Record<string, any>;\n }): Promise<{\n identify: boolean;\n }>;\n\n /**\n * Clear user identity\n *\n * @since 7.0.0\n */\n clearIdentity(): Promise<{\n clearIdentity: boolean;\n }>;\n\n /**\n * Get the current user identity\n *\n * @since 8.1.0\n */\n getIdentity(): Promise<{\n identity: {\n userId: string;\n name?: string;\n email?: string;\n phone?: string;\n value?: number;\n };\n }>;\n\n /**\n * User identified status.\n *\n * @since 8.1.0\n */\n isUserIdentified(): Promise<{\n isUserIdentified: boolean;\n }>;\n\n /**\n * Submit a custom log message with the given level\n *\n * @since 7.0.0\n */\n log(options: {\n message: string;\n logLevel?: \"ERROR\" | \"WARNING\" | \"INFO\";\n }): Promise<{\n logged: boolean;\n }>;\n\n /**\n * Manually show a survey.\n *\n * @since 8.5.1\n */\n showSurvey(options: {\n surveyId: string;\n format?: \"survey\" | \"survey_full\";\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Add custom data\n *\n * @since 7.0.0\n */\n attachCustomData(options: {\n data: any;\n }): Promise<{\n attachedCustomData: boolean;\n }>;\n\n /**\n * Set tags\n *\n * @since 8.6.0\n */\n setTags(options: {\n tags: string[];\n }): Promise<{\n tagsSet: boolean;\n }>;\n\n /**\n * Set network logs blacklist\n *\n * @since 13.2.1\n */\n setNetworkLogsBlacklist(options: {\n blacklist: string[];\n }): Promise<{\n blacklistSet: boolean;\n }>;\n\n /**\n * Set network logs props to ignore\n *\n * @since 13.2.1\n */\n setNetworkLogPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{\n propsToIgnoreSet: boolean;\n }>;\n\n /**\n * Hands the network requests made inside the app's WebView (fetch and XMLHttpRequest) to the native SDK, so they\n * show up in the network logs of tickets. The plugin calls this for you on iOS and Android; each call replaces\n * the previously attached WebView network logs. No-op on web, where the JavaScript SDK records requests itself.\n *\n * @since 19.0.0\n */\n attachNetworkLogs(options: {\n logs: GleapNetworkLogEntry[];\n }): Promise<{\n networkLogsAttached: boolean;\n }>;\n\n /**\n * Hands the console output of the app's WebView (console.log/info/warn/error/debug, uncaught errors and\n * unhandled promise rejections) to the native SDK, so it shows up in the console logs of tickets. The plugin\n * calls this for you on iOS and Android; each call replaces the previously attached WebView console logs.\n * No-op on web, where the JavaScript SDK records the console itself.\n *\n * @since 19.0.0\n */\n attachConsoleLogs(options: {\n logs: GleapConsoleLogEntry[];\n }): Promise<{\n consoleLogsAttached: boolean;\n }>;\n\n /**\n * Set env data props to ignore. The given env data keys (exact and case-sensitive, e.g. \"deviceName\" or \"currentUrl\")\n * are removed before a ticket or conversation is sent. Each call replaces the previous list, an empty list resets it.\n * Can be called before or after initialize.\n *\n * @since 18.1.0\n */\n setEnvDataPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{\n envDataPropsToIgnoreSet: boolean;\n }>;\n\n /**\n * Registers a Frontend tool defined on your AI agent in the Gleap dashboard.\n * Prefer the `registerAgentTool(name, handler)` helper exported by this\n * package — it wires the agentToolExecution event and result round-trip for\n * you.\n *\n * @since 15.0.0\n */\n registerAgentTool(options: {\n name: string;\n }): Promise<void>;\n\n /**\n * Resolves a pending agent tool execution with the handler's result.\n * Used by the `registerAgentTool(name, handler)` helper.\n *\n * @since 15.0.0\n */\n sendAgentToolResult(options: {\n executionId: string;\n result: string;\n }): Promise<void>;\n\n /**\n * Called when a registered agent tool should execute.\n *\n * @since 15.0.0\n */\n addListener(\n eventName: 'agentToolExecution',\n listenerFunc: (data: {\n executionId: string;\n name: string;\n params: any;\n }) => void,\n ): Promise<PluginListenerHandle>;\n\n /**\n * Called on iOS and Android when the project config is loaded, with the network log settings the plugin's\n * WebView log capture needs (network logs are only recorded when they are enabled for your project).\n *\n * @since 19.0.0\n */\n addListener(\n eventName: 'logConfigLoaded',\n listenerFunc: (config: GleapLogConfig) => void,\n ): Promise<PluginListenerHandle>;\n\n /**\n * Sets the value of a ticket attribute\n *\n * @since 13.5.0\n */\n setTicketAttribute(options: {\n key: string;\n value: string;\n }): Promise<{\n setTicketAttribute: boolean;\n }>;\n\n /**\n * Unset a ticket attribute\n *\n * @since 14.1.0\n */\n unsetTicketAttribute(options: {\n key: string;\n }): Promise<{\n unsetTicketAttribute: boolean;\n }>;\n\n /**\n * Clear all ticket attributes\n *\n * @since 14.1.0\n */\n clearTicketAttributes(): Promise<{\n clearTicketAttributes: boolean;\n }>;\n\n /**\n * Set custom data\n *\n * @since 7.0.0\n */\n setCustomData(options: {\n key: string;\n value: string;\n }): Promise<{\n setCustomData: boolean;\n }>;\n\n /**\n * Remove custom data by key\n *\n * @since 7.0.0\n */\n removeCustomData(options: {\n key: string;\n }): Promise<{\n removedCustomData: boolean;\n }>;\n\n /**\n * Clear custom data\n *\n * @since 7.0.0\n */\n clearCustomData(): Promise<{\n clearedCustomData: boolean;\n }>;\n\n /**\n * Log event to Gleap\n *\n * @since 8.0.0\n */\n trackEvent(options: {\n name: string;\n data?: any;\n }): Promise<{\n loggedEvent: boolean;\n }>;\n\n /**\n * Track a page view\n *\n * @since 8.4.1\n */\n trackPage(options: {\n pageName: string;\n }): Promise<{\n trackedPage: boolean;\n }>;\n\n /**\n * \n *\n * @since 7.0.0\n */\n setEventCallback(\n callback: GleapEventCallback,\n ): Promise<CallbackID>;\n\n /**\n * Log event to Gleap\n *\n * @since 7.0.0\n */\n sendSilentCrashReport(options: {\n description: string,\n severity?: \"LOW\" | \"MEDIUM\" | \"HIGH\";\n dataExclusion?: {\n customData: Boolean;\n metaData: Boolean;\n attachments: Boolean;\n consoleLog: Boolean;\n networkLogs: Boolean;\n customEventLog: Boolean;\n screenshot: Boolean;\n replays: Boolean;\n };\n }): Promise<{\n sentSilentBugReport: boolean;\n }>;\n\n /**\n * Prefills the widget's form data\n *\n * @since 7.0.0\n */\n preFillForm(options: {\n data: any;\n }): Promise<{\n preFilledForm: boolean;\n }>;\n\n /**\n * Add attachment as bas64 string\n *\n * @since 7.0.0\n */\n addAttachment(options: {\n base64data: string;\n name: string;\n }): Promise<{\n attachmentAdded: boolean;\n }>;\n\n /**\n * All attachments removed\n *\n * @since 7.0.0\n */\n removeAllAttachments(): Promise<{\n allAttachmentsRemoved: boolean;\n }>;\n\n /**\n * Open widget\n *\n * @since 7.0.0\n */\n open(): Promise<{\n openedWidget: boolean;\n }>;\n\n /**\n * Open checklists\n *\n * @since 19.0.0\n */\n openChecklists(options: {\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open checklist\n *\n * @since 19.0.0\n */\n openChecklist(options: {\n checklistId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Start checklist\n *\n * @since 19.0.0\n */\n startChecklist(options: {\n outboundId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open news\n *\n * @since 8.4.0\n */\n openNews(options: {\n showBackButton?: boolean;\n }): Promise<{\n openedNews: boolean;\n }>;\n\n /**\n * Open news article\n *\n * @since 8.4.0\n */\n openNewsArticle(options: {\n articleId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open help center\n *\n * @since 8.4.0\n */\n openHelpCenter(options: {\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open help center article\n *\n * @since 8.4.0\n */\n openHelpCenterArticle(options: {\n articleId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Ask the AI a question\n *\n * @since 15.0.0\n */\n askAI(options: {\n question: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open help center collection\n *\n * @since 8.4.0\n */\n openHelpCenterCollection(options: {\n collectionId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Search help center\n *\n * @since 8.4.0\n */\n searchHelpCenter(options: {\n term: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open feature requests\n *\n * @since 8.4.0\n */\n openFeatureRequests(options: {\n showBackButton?: boolean;\n }): Promise<{\n openedFeatureRequests: boolean;\n }>;\n\n /**\n * Close widget\n *\n * @since 7.0.0\n */\n close(): Promise<{\n closedWidget: boolean;\n }>;\n\n /**\n * Check widget status code\n *\n * @since 7.0.0\n */\n isOpened(): Promise<{\n isOpened: boolean;\n }>;\n\n /**\n * Start feedback flow\n *\n * @since 7.0.0\n */\n startFeedbackFlow(options: {\n feedbackFlow?: string;\n showBackButton?: boolean;\n }): Promise<{\n startedFeedbackFlow: boolean;\n }>;\n\n /**\n * Start a classic form\n *\n * @since 13.1.0\n */\n startClassicForm(options: {\n formId?: string;\n showBackButton?: boolean;\n }): Promise<{\n classicFormStarted: boolean;\n }>;\n\n /**\n * Start a new conversation\n *\n * @since 13.1.0\n */\n startConversation(options: {\n showBackButton?: boolean;\n }): Promise<{\n conversationStarted: boolean;\n }>;\n\n /**\n * Opens the conversations tab.\n *\n * @since 13.9.0\n */\n openConversation(options: {\n showBackButton?: boolean;\n }): Promise<{\n conversationsOpened: boolean;\n }>;\n\n /**\n * Opens the conversations tab (same as openConversation).\n *\n * @since 19.0.0\n */\n openConversations(options: {\n showBackButton?: boolean;\n }): Promise<{\n conversationsOpened: boolean;\n }>;\n\n /**\n * Start bot\n *\n * @since 10.0.3\n */\n startBot(options: {\n botId?: string;\n showBackButton?: boolean;\n }): Promise<{\n startedBot: boolean;\n }>;\n\n /**\n * Show or hide the feedback button.\n *\n * @since 8.0.0\n */\n showFeedbackButton(options: {\n show?: boolean;\n }): Promise<{\n feedbackButtonShown: boolean;\n }>;\n\n /**\n* Disable in app notifications.\n*\n* @since 8.6.1\n*/\n setDisableInAppNotifications(options: {\n disableInAppNotifications?: boolean;\n }): Promise<{\n inAppNotificationsDisabled: boolean;\n }>;\n\n /**\n * Disable env data. While disabled (true), no env data (device, OS, screen size, locale, URL, ...) is collected\n * and tickets are sent without it. Pass false to collect env data again. Can be called before or after initialize.\n *\n * @since 18.1.0\n */\n setDisableEnvData(options: {\n disableEnvData: boolean;\n }): Promise<{\n envDataDisabled: boolean;\n }>;\n\n /**\n * Set the color scheme of the widget. Overrides the color scheme configured in the Gleap dashboard.\n * Only takes effect when \"Adapt to dark / light mode\" is enabled in the dashboard; otherwise the widget\n * always keeps its normal colors. Before the first call the dashboard setting applies.\n * \"auto\" follows the device appearance (dark/light mode) on iOS and Android, and the page theme on web.\n * Apps with their own in-app theme toggle should pass \"light\" / \"dark\" explicitly and call it again whenever\n * the theme changes.\n * In dark mode the widget uses the dark mode colors, logo, header image and composer glow set in the Gleap dashboard;\n * without dark colors it keeps its normal colors. lightBackgroundColor / darkBackgroundColor override the background.\n * Can be called before or after initialize and applies live.\n *\n * @since 19.0.0\n */\n setColorScheme(options: {\n colorScheme: 'auto' | 'light' | 'dark';\n lightBackgroundColor?: string;\n darkBackgroundColor?: string;\n }): Promise<{\n colorScheme: string;\n }>;\n\n /**\n * Set Language\n *\n * @since 7.0.0\n */\n setLanguage(options: {\n languageCode: string;\n }): Promise<{\n setLanguage: string;\n }>;\n\n /**\n * Disable console log overwrite: stops recording the console output of the app's WebView\n * (console methods are restored) and drops the WebView console logs recorded so far.\n *\n * @since 7.0.0\n */\n disableConsoleLogOverwrite(): Promise<{\n consoleLogDisabled: boolean;\n }>;\n\n /**\n * Enable debug console log\n *\n * @since 7.0.0\n */\n enableDebugConsoleLog(): Promise<{\n debugConsoleLogEnabled: boolean;\n }>;\n\n /**\n * Set the notification container offset\n *\n * @since 15.2.0\n */\n setNotificationContainerOffset(options: {\n x: number;\n y: number;\n }): Promise<{\n notificationContainerOffsetSet: boolean;\n }>;\n\n}"]}
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["import type { PluginListenerHandle } from '@capacitor/core';\n\nexport type CallbackID = string;\n\nexport interface GleapEventMessage {\n name: string,\n data?: any,\n}\n\nexport type GleapEventCallback = (message: GleapEventMessage | null, err?: any) => void;\n\n/**\n * A console log entry as the plugin hands it to the native SDK.\n */\nexport interface GleapConsoleLogEntry {\n /** ISO-8601 UTC timestamp with milliseconds. */\n date: string;\n priority: 'ERROR' | 'WARNING' | 'INFO';\n log: string;\n}\n\n/**\n * A network log entry (fetch / XMLHttpRequest) as the plugin hands it to the native SDK.\n */\nexport interface GleapNetworkLogEntry {\n /** ISO-8601 UTC timestamp of the request start. */\n date: string;\n /** HTTP method, uppercase. */\n type: string;\n url: string;\n /** Milliseconds from the request start to the response headers (or the failure). */\n duration?: number;\n /** true when an HTTP response arrived (any status), false on a transport error, abort or timeout. */\n success?: boolean;\n request?: {\n headers?: { [name: string]: string };\n payload?: string;\n };\n response?: {\n status?: number;\n statusText?: string;\n headers?: { [name: string]: string };\n responseText?: string;\n /** Set instead of status and body when the request failed. */\n errorText?: string;\n };\n}\n\n/**\n * The network log settings of your Gleap project, sent by the native SDK once its config is loaded.\n */\nexport interface GleapLogConfig {\n enableNetworkLogs: boolean;\n networkLogPropsToIgnore: string[];\n networkLogBlacklist: string[];\n}\n\nexport interface GleapPlugin {\n /**\n * Initialize Gleap with an API key\n *\n * @since 7.0.0\n */\n initialize(options: {\n API_KEY: string;\n }): Promise<{\n initialized: boolean;\n }>;\n\n /**\n * Set the data region of your Gleap project (\"eu\" is the default).\n * Sets the API, websocket and realtime hosts at once. Must be called before initialize.\n * A manual setter (setApiUrl, setWSApiUrl, setRealtimeHost) called afterwards overrides that single host.\n *\n * @since 18.0.0\n */\n setRegion(options: {\n region: 'eu' | 'us';\n }): Promise<{\n region: string;\n }>;\n\n /**\n * Set a custom API url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setApiUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom websocket API url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setWSApiUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom realtime host (hostname only, without protocol or path). Must be called before initialize.\n *\n * @since 18.0.0\n */\n setRealtimeHost(options: {\n host: string;\n }): Promise<{\n host: string;\n }>;\n\n /**\n * Set a custom widget frame url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setFrameUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom banner url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setBannerUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set a custom modal url. Must be called before initialize.\n *\n * @since 18.0.0\n */\n setModalUrl(options: {\n url: string;\n }): Promise<{\n url: string;\n }>;\n\n /**\n * Set user identity\n *\n * @since 7.0.0\n */\n identify(options: {\n userId: string;\n userHash?: string;\n name?: string;\n email?: string;\n phone?: string;\n companyId?: string;\n companyName?: string;\n avatar?: string;\n sla?: number;\n plan?: string;\n value?: number;\n customData?: Record<string, any>;\n }): Promise<{\n identify: boolean;\n }>;\n\n /**\n * Update user properties\n *\n * @since 13.2.1\n */\n updateContact(options: {\n name?: string;\n email?: string;\n phone?: string;\n companyId?: string;\n companyName?: string;\n avatar?: string;\n sla?: number;\n plan?: string;\n value?: number;\n customData?: Record<string, any>;\n }): Promise<{\n identify: boolean;\n }>;\n\n /**\n * Clear user identity\n *\n * @since 7.0.0\n */\n clearIdentity(): Promise<{\n clearIdentity: boolean;\n }>;\n\n /**\n * Get the current user identity\n *\n * @since 8.1.0\n */\n getIdentity(): Promise<{\n identity: {\n userId: string;\n name?: string;\n email?: string;\n phone?: string;\n value?: number;\n };\n }>;\n\n /**\n * User identified status.\n *\n * @since 8.1.0\n */\n isUserIdentified(): Promise<{\n isUserIdentified: boolean;\n }>;\n\n /**\n * Submit a custom log message with the given level\n *\n * @since 7.0.0\n */\n log(options: {\n message: string;\n logLevel?: \"ERROR\" | \"WARNING\" | \"INFO\";\n }): Promise<{\n logged: boolean;\n }>;\n\n /**\n * Manually show a survey.\n *\n * @since 8.5.1\n */\n showSurvey(options: {\n surveyId: string;\n format?: \"survey\" | \"survey_full\";\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Add custom data\n *\n * @since 7.0.0\n */\n attachCustomData(options: {\n data: any;\n }): Promise<{\n attachedCustomData: boolean;\n }>;\n\n /**\n * Set tags\n *\n * @since 8.6.0\n */\n setTags(options: {\n tags: string[];\n }): Promise<{\n tagsSet: boolean;\n }>;\n\n /**\n * Set network logs blacklist\n *\n * @since 13.2.1\n */\n setNetworkLogsBlacklist(options: {\n blacklist: string[];\n }): Promise<{\n blacklistSet: boolean;\n }>;\n\n /**\n * Set network logs props to ignore\n *\n * @since 13.2.1\n */\n setNetworkLogPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{\n propsToIgnoreSet: boolean;\n }>;\n\n /**\n * Hands the network requests made inside the app's WebView (fetch and XMLHttpRequest) to the native SDK, so they\n * show up in the network logs of tickets. The plugin calls this for you on iOS and Android; each call replaces\n * the previously attached WebView network logs. No-op on web, where the JavaScript SDK records requests itself.\n *\n * @since 19.0.0\n */\n attachNetworkLogs(options: {\n logs: GleapNetworkLogEntry[];\n }): Promise<{\n networkLogsAttached: boolean;\n }>;\n\n /**\n * Hands the console output of the app's WebView (console.log/info/warn/error/debug, uncaught errors and\n * unhandled promise rejections) to the native SDK, so it shows up in the console logs of tickets. The plugin\n * calls this for you on iOS and Android; each call replaces the previously attached WebView console logs.\n * No-op on web, where the JavaScript SDK records the console itself.\n *\n * @since 19.0.0\n */\n attachConsoleLogs(options: {\n logs: GleapConsoleLogEntry[];\n }): Promise<{\n consoleLogsAttached: boolean;\n }>;\n\n /**\n * Answers a `flushLogs` event once the WebView console and network logs the plugin buffers were handed to the native\n * SDK, so it collects the logs for a capture request with them. The plugin calls this for you on iOS and Android.\n * No-op on web.\n *\n * @since 19.1.0\n */\n logsFlushed(options: {\n flushId: string;\n }): Promise<void>;\n\n /**\n * Set env data props to ignore. The given env data keys (exact and case-sensitive, e.g. \"deviceName\" or \"currentUrl\")\n * are removed before a ticket or conversation is sent. Each call replaces the previous list, an empty list resets it.\n * Can be called before or after initialize.\n *\n * @since 18.1.0\n */\n setEnvDataPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{\n envDataPropsToIgnoreSet: boolean;\n }>;\n\n /**\n * Registers a Frontend tool defined on your AI agent in the Gleap dashboard.\n * Prefer the `registerAgentTool(name, handler)` helper exported by this\n * package — it wires the agentToolExecution event and result round-trip for\n * you.\n *\n * @since 15.0.0\n */\n registerAgentTool(options: {\n name: string;\n }): Promise<void>;\n\n /**\n * Resolves a pending agent tool execution with the handler's result.\n * Used by the `registerAgentTool(name, handler)` helper.\n *\n * @since 15.0.0\n */\n sendAgentToolResult(options: {\n executionId: string;\n result: string;\n }): Promise<void>;\n\n /**\n * Called when a registered agent tool should execute.\n *\n * @since 15.0.0\n */\n addListener(\n eventName: 'agentToolExecution',\n listenerFunc: (data: {\n executionId: string;\n name: string;\n params: any;\n }) => void,\n ): Promise<PluginListenerHandle>;\n\n /**\n * Called on iOS and Android when the project config is loaded, with the network log settings the plugin's\n * WebView log capture needs (network logs are only recorded when they are enabled for your project).\n *\n * @since 19.0.0\n */\n addListener(\n eventName: 'logConfigLoaded',\n listenerFunc: (config: GleapLogConfig) => void,\n ): Promise<PluginListenerHandle>;\n\n /**\n * Called on iOS and Android right before the native SDK collects the logs for a capture request: the plugin's\n * WebView log capture hands over what it buffers (it pushes at most every 500 ms otherwise) and answers with\n * `logsFlushed`. The native SDK waits at most 500 ms for the answer. The plugin listens for you.\n *\n * @since 19.1.0\n */\n addListener(\n eventName: 'flushLogs',\n listenerFunc: (data: { flushId: string }) => void,\n ): Promise<PluginListenerHandle>;\n\n /**\n * Sets the value of a ticket attribute\n *\n * @since 13.5.0\n */\n setTicketAttribute(options: {\n key: string;\n value: string;\n }): Promise<{\n setTicketAttribute: boolean;\n }>;\n\n /**\n * Unset a ticket attribute\n *\n * @since 14.1.0\n */\n unsetTicketAttribute(options: {\n key: string;\n }): Promise<{\n unsetTicketAttribute: boolean;\n }>;\n\n /**\n * Clear all ticket attributes\n *\n * @since 14.1.0\n */\n clearTicketAttributes(): Promise<{\n clearTicketAttributes: boolean;\n }>;\n\n /**\n * Set custom data\n *\n * @since 7.0.0\n */\n setCustomData(options: {\n key: string;\n value: string;\n }): Promise<{\n setCustomData: boolean;\n }>;\n\n /**\n * Remove custom data by key\n *\n * @since 7.0.0\n */\n removeCustomData(options: {\n key: string;\n }): Promise<{\n removedCustomData: boolean;\n }>;\n\n /**\n * Clear custom data\n *\n * @since 7.0.0\n */\n clearCustomData(): Promise<{\n clearedCustomData: boolean;\n }>;\n\n /**\n * Log event to Gleap\n *\n * @since 8.0.0\n */\n trackEvent(options: {\n name: string;\n data?: any;\n }): Promise<{\n loggedEvent: boolean;\n }>;\n\n /**\n * Track a page view\n *\n * @since 8.4.1\n */\n trackPage(options: {\n pageName: string;\n }): Promise<{\n trackedPage: boolean;\n }>;\n\n /**\n * \n *\n * @since 7.0.0\n */\n setEventCallback(\n callback: GleapEventCallback,\n ): Promise<CallbackID>;\n\n /**\n * Log event to Gleap\n *\n * @since 7.0.0\n */\n sendSilentCrashReport(options: {\n description: string,\n severity?: \"LOW\" | \"MEDIUM\" | \"HIGH\";\n dataExclusion?: {\n customData: Boolean;\n metaData: Boolean;\n attachments: Boolean;\n consoleLog: Boolean;\n networkLogs: Boolean;\n customEventLog: Boolean;\n screenshot: Boolean;\n replays: Boolean;\n };\n }): Promise<{\n sentSilentBugReport: boolean;\n }>;\n\n /**\n * Prefills the widget's form data\n *\n * @since 7.0.0\n */\n preFillForm(options: {\n data: any;\n }): Promise<{\n preFilledForm: boolean;\n }>;\n\n /**\n * Add attachment as bas64 string\n *\n * @since 7.0.0\n */\n addAttachment(options: {\n base64data: string;\n name: string;\n }): Promise<{\n attachmentAdded: boolean;\n }>;\n\n /**\n * All attachments removed\n *\n * @since 7.0.0\n */\n removeAllAttachments(): Promise<{\n allAttachmentsRemoved: boolean;\n }>;\n\n /**\n * Open widget\n *\n * @since 7.0.0\n */\n open(): Promise<{\n openedWidget: boolean;\n }>;\n\n /**\n * Open checklists\n *\n * @since 19.0.0\n */\n openChecklists(options: {\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open checklist\n *\n * @since 19.0.0\n */\n openChecklist(options: {\n checklistId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Start checklist\n *\n * @since 19.0.0\n */\n startChecklist(options: {\n outboundId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open news\n *\n * @since 8.4.0\n */\n openNews(options: {\n showBackButton?: boolean;\n }): Promise<{\n openedNews: boolean;\n }>;\n\n /**\n * Open news article\n *\n * @since 8.4.0\n */\n openNewsArticle(options: {\n articleId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open help center\n *\n * @since 8.4.0\n */\n openHelpCenter(options: {\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open help center article\n *\n * @since 8.4.0\n */\n openHelpCenterArticle(options: {\n articleId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Ask the AI a question\n *\n * @since 15.0.0\n */\n askAI(options: {\n question: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open help center collection\n *\n * @since 8.4.0\n */\n openHelpCenterCollection(options: {\n collectionId: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Search help center\n *\n * @since 8.4.0\n */\n searchHelpCenter(options: {\n term: string;\n showBackButton?: boolean;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Open feature requests\n *\n * @since 8.4.0\n */\n openFeatureRequests(options: {\n showBackButton?: boolean;\n }): Promise<{\n openedFeatureRequests: boolean;\n }>;\n\n /**\n * Close widget\n *\n * @since 7.0.0\n */\n close(): Promise<{\n closedWidget: boolean;\n }>;\n\n /**\n * Check widget status code\n *\n * @since 7.0.0\n */\n isOpened(): Promise<{\n isOpened: boolean;\n }>;\n\n /**\n * Start feedback flow\n *\n * @since 7.0.0\n */\n startFeedbackFlow(options: {\n feedbackFlow?: string;\n showBackButton?: boolean;\n }): Promise<{\n startedFeedbackFlow: boolean;\n }>;\n\n /**\n * Start a classic form\n *\n * @since 13.1.0\n */\n startClassicForm(options: {\n formId?: string;\n showBackButton?: boolean;\n }): Promise<{\n classicFormStarted: boolean;\n }>;\n\n /**\n * Start a new conversation\n *\n * @since 13.1.0\n */\n startConversation(options: {\n showBackButton?: boolean;\n }): Promise<{\n conversationStarted: boolean;\n }>;\n\n /**\n * Opens the conversations tab.\n *\n * @since 13.9.0\n */\n openConversation(options: {\n showBackButton?: boolean;\n }): Promise<{\n conversationsOpened: boolean;\n }>;\n\n /**\n * Opens the conversations tab (same as openConversation).\n *\n * @since 19.0.0\n */\n openConversations(options: {\n showBackButton?: boolean;\n }): Promise<{\n conversationsOpened: boolean;\n }>;\n\n /**\n * Open the conversation of a protected file from an emailed link.\n * With \"Require authenticated file access\" enabled, email replies link attachments to your customer\n * application URL with a `gleapFile` query parameter. If that URL opens your app (for example as a\n * universal link / App Link), pass it here, e.g. from `App.addListener('appUrlOpen')` or\n * `App.getLaunchUrl()` of `@capacitor/app`. `opened` is true when the URL carries a Gleap file reference.\n * The conversation opens once the customer is identified with a user hash (`identify` with `userHash`);\n * the link alone grants nothing. On web the JavaScript SDK handles `?gleapFile=` automatically on page load,\n * so this resolves `{ opened: false }` there.\n *\n * @since 19.0.1\n */\n openProtectedFileFromUrl(options: {\n url: string;\n }): Promise<{\n opened: boolean;\n }>;\n\n /**\n * Start bot\n *\n * @since 10.0.3\n */\n startBot(options: {\n botId?: string;\n showBackButton?: boolean;\n }): Promise<{\n startedBot: boolean;\n }>;\n\n /**\n * Show or hide the feedback button.\n *\n * @since 8.0.0\n */\n showFeedbackButton(options: {\n show?: boolean;\n }): Promise<{\n feedbackButtonShown: boolean;\n }>;\n\n /**\n* Disable in app notifications.\n*\n* @since 8.6.1\n*/\n setDisableInAppNotifications(options: {\n disableInAppNotifications?: boolean;\n }): Promise<{\n inAppNotificationsDisabled: boolean;\n }>;\n\n /**\n * Disable env data. While disabled (true), no env data (device, OS, screen size, locale, URL, ...) is collected\n * and tickets are sent without it. Pass false to collect env data again. Can be called before or after initialize.\n *\n * @since 18.1.0\n */\n setDisableEnvData(options: {\n disableEnvData: boolean;\n }): Promise<{\n envDataDisabled: boolean;\n }>;\n\n /**\n * Set the color scheme of the widget. Overrides the color scheme configured in the Gleap dashboard.\n * Only takes effect when \"Adapt to dark / light mode\" is enabled in the dashboard; otherwise the widget\n * always keeps its normal colors. Before the first call the dashboard setting applies.\n * \"auto\" follows the device appearance (dark/light mode) on iOS and Android, and the page theme on web.\n * Apps with their own in-app theme toggle should pass \"light\" / \"dark\" explicitly and call it again whenever\n * the theme changes.\n * In dark mode the widget uses the dark mode colors, logo, header image and composer glow set in the Gleap dashboard;\n * without dark colors it keeps its normal colors. lightBackgroundColor / darkBackgroundColor override the background.\n * Can be called before or after initialize and applies live.\n *\n * @since 19.0.0\n */\n setColorScheme(options: {\n colorScheme: 'auto' | 'light' | 'dark';\n lightBackgroundColor?: string;\n darkBackgroundColor?: string;\n }): Promise<{\n colorScheme: string;\n }>;\n\n /**\n * Enable or disable screenshots and screen recordings for capture requests: when a workflow, an AI agent or a\n * teammate asks the user in the widget to show the issue, the widget steps aside, a small bar lets the user go to\n * the right screen, and the SDK captures the app once they tap Capture (or records it between Start and Stop).\n * Nothing is captured without that tap. While disabled, the widget only offers to upload a file.\n * Enabled by default. Works on iOS, Android and web and can be called before or after initialize.\n *\n * @since 19.1.0\n */\n setCaptureEnabled(options: {\n enabled: boolean;\n }): Promise<{\n captureEnabled: boolean;\n }>;\n\n /**\n * Enable or disable sending the app's logs for capture requests: a workflow or an AI agent can ask for the logs\n * while the app runs (no user action), and screenshots and recordings can bring the logs around them. The logs are\n * what a bug report carries (console and network logs, custom data, env data, custom events; the replay only when\n * it is asked for and enabled in the dashboard), and the existing settings still apply (e.g. setDisableEnvData).\n * While disabled, log requests are answered as not supported and captures are sent without logs.\n * Enabled by default. Works on iOS, Android and web and can be called before or after initialize.\n *\n * @since 19.1.0\n */\n setRemoteLogCollectionEnabled(options: {\n enabled: boolean;\n }): Promise<{\n remoteLogCollectionEnabled: boolean;\n }>;\n\n /**\n * Set Language\n *\n * @since 7.0.0\n */\n setLanguage(options: {\n languageCode: string;\n }): Promise<{\n setLanguage: string;\n }>;\n\n /**\n * Disable console log overwrite: stops recording the console output of the app's WebView\n * (console methods are restored) and drops the WebView console logs recorded so far.\n *\n * @since 7.0.0\n */\n disableConsoleLogOverwrite(): Promise<{\n consoleLogDisabled: boolean;\n }>;\n\n /**\n * Enable debug console log\n *\n * @since 7.0.0\n */\n enableDebugConsoleLog(): Promise<{\n debugConsoleLogEnabled: boolean;\n }>;\n\n /**\n * Set the notification container offset\n *\n * @since 15.2.0\n */\n setNotificationContainerOffset(options: {\n x: number;\n y: number;\n }): Promise<{\n notificationContainerOffsetSet: boolean;\n }>;\n\n}"]}
|
|
@@ -8,7 +8,13 @@ export interface LogTarget {
|
|
|
8
8
|
attachNetworkLogs(options: {
|
|
9
9
|
logs: GleapNetworkLogEntry[];
|
|
10
10
|
}): Promise<unknown>;
|
|
11
|
+
logsFlushed(options: {
|
|
12
|
+
flushId: string;
|
|
13
|
+
}): Promise<unknown>;
|
|
11
14
|
addListener(eventName: 'logConfigLoaded', listenerFunc: (config: GleapLogConfig) => void): Promise<unknown>;
|
|
15
|
+
addListener(eventName: 'flushLogs', listenerFunc: (data: {
|
|
16
|
+
flushId: string;
|
|
17
|
+
}) => void): Promise<unknown>;
|
|
12
18
|
}
|
|
13
19
|
/**
|
|
14
20
|
* Captures console output and fetch/XHR traffic inside the WebView of a native (iOS / Android) app
|
|
@@ -42,17 +48,27 @@ export declare class WebViewLogCapture {
|
|
|
42
48
|
*/
|
|
43
49
|
private nativeLogsConsole;
|
|
44
50
|
private listenForConfig;
|
|
51
|
+
/**
|
|
52
|
+
* Capture requests: right before the native SDK collects the logs for a request, it asks for what is still
|
|
53
|
+
* buffered here (pushed at most every PUSH_DELAY_MS otherwise) and waits up to 500 ms for the answer.
|
|
54
|
+
*/
|
|
55
|
+
private listenForFlush;
|
|
56
|
+
private answerFlush;
|
|
45
57
|
applyRemoteConfig(config: GleapLogConfig | null | undefined): void;
|
|
46
58
|
setLocalPropsToIgnore(props: unknown): void;
|
|
47
59
|
setLocalBlacklist(blacklist: unknown): void;
|
|
48
60
|
/** disableConsoleLogOverwrite(): restore the console and drop what was recorded (also natively). */
|
|
49
61
|
disableConsole(): void;
|
|
50
62
|
onInitialize(): void;
|
|
51
|
-
/**
|
|
52
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Pushes pending changes now (before a plugin call that can produce a report, or when the native SDK collects the
|
|
65
|
+
* logs for a capture request). Resolves once the native side took them; never rejects.
|
|
66
|
+
*/
|
|
67
|
+
flushNow(): Promise<void>;
|
|
53
68
|
private updateRules;
|
|
54
69
|
private canPush;
|
|
55
70
|
private markDirty;
|
|
71
|
+
/** Resolves once the push it started (if any) was answered; never rejects. */
|
|
56
72
|
private flushChannel;
|
|
57
73
|
private onPushFailed;
|
|
58
74
|
/** Redacted copies of the buffered entries; unchanged entries reuse their previous copy. */
|
|
@@ -61,6 +61,7 @@ export class WebViewLogCapture {
|
|
|
61
61
|
// logs are enabled (like the JavaScript SDK), so nothing is held in memory before that.
|
|
62
62
|
this.networkCapture.install();
|
|
63
63
|
this.listenForConfig();
|
|
64
|
+
this.listenForFlush();
|
|
64
65
|
}
|
|
65
66
|
/**
|
|
66
67
|
* Android debug builds (Capacitor's loggingBehavior) write the WebView console to logcat, which the
|
|
@@ -83,6 +84,36 @@ export class WebViewLogCapture {
|
|
|
83
84
|
// The native side predates the event: network logs stay off.
|
|
84
85
|
}
|
|
85
86
|
}
|
|
87
|
+
/**
|
|
88
|
+
* Capture requests: right before the native SDK collects the logs for a request, it asks for what is still
|
|
89
|
+
* buffered here (pushed at most every PUSH_DELAY_MS otherwise) and waits up to 500 ms for the answer.
|
|
90
|
+
*/
|
|
91
|
+
listenForFlush() {
|
|
92
|
+
try {
|
|
93
|
+
const handle = this.target.addListener('flushLogs', (data) => {
|
|
94
|
+
const flushId = data && typeof data.flushId === 'string' ? data.flushId : null;
|
|
95
|
+
runOutsideZone(() => this.flushNow().then(() => {
|
|
96
|
+
if (flushId) {
|
|
97
|
+
this.answerFlush(flushId);
|
|
98
|
+
}
|
|
99
|
+
}));
|
|
100
|
+
});
|
|
101
|
+
if (handle && typeof handle.catch === 'function') {
|
|
102
|
+
handle.catch(() => undefined);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
catch (e) {
|
|
106
|
+
// The native side predates the event: nothing asks for flushes.
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
answerFlush(flushId) {
|
|
110
|
+
try {
|
|
111
|
+
Promise.resolve(this.target.logsFlushed({ flushId })).catch(() => undefined);
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
// The native side gives up waiting after 500 ms.
|
|
115
|
+
}
|
|
116
|
+
}
|
|
86
117
|
applyRemoteConfig(config) {
|
|
87
118
|
try {
|
|
88
119
|
if (!config || typeof config !== 'object') {
|
|
@@ -125,15 +156,20 @@ export class WebViewLogCapture {
|
|
|
125
156
|
this.markDirty(this.consoleChannel);
|
|
126
157
|
this.markDirty(this.networkChannel);
|
|
127
158
|
}
|
|
128
|
-
/**
|
|
159
|
+
/**
|
|
160
|
+
* Pushes pending changes now (before a plugin call that can produce a report, or when the native SDK collects the
|
|
161
|
+
* logs for a capture request). Resolves once the native side took them; never rejects.
|
|
162
|
+
*/
|
|
129
163
|
flushNow() {
|
|
164
|
+
const pushes = [];
|
|
130
165
|
try {
|
|
131
|
-
this.flushChannel(this.consoleChannel);
|
|
132
|
-
this.flushChannel(this.networkChannel);
|
|
166
|
+
pushes.push(this.flushChannel(this.consoleChannel));
|
|
167
|
+
pushes.push(this.flushChannel(this.networkChannel));
|
|
133
168
|
}
|
|
134
169
|
catch (e) {
|
|
135
170
|
// Ignore.
|
|
136
171
|
}
|
|
172
|
+
return Promise.all(pushes).then(() => undefined, () => undefined);
|
|
137
173
|
}
|
|
138
174
|
updateRules() {
|
|
139
175
|
this.rules = createRedactionRules([...this.remoteProps, ...this.localProps], [...this.remoteBlacklist, ...this.localBlacklist]);
|
|
@@ -164,20 +200,21 @@ export class WebViewLogCapture {
|
|
|
164
200
|
channel.timer = null;
|
|
165
201
|
}
|
|
166
202
|
}
|
|
203
|
+
/** Resolves once the push it started (if any) was answered; never rejects. */
|
|
167
204
|
flushChannel(channel) {
|
|
168
205
|
if (channel.timer !== null) {
|
|
169
206
|
clearTimeout(channel.timer);
|
|
170
207
|
channel.timer = null;
|
|
171
208
|
}
|
|
172
209
|
if (!channel.isDirty || !this.canPush(channel)) {
|
|
173
|
-
return;
|
|
210
|
+
return Promise.resolve();
|
|
174
211
|
}
|
|
175
212
|
channel.isDirty = false;
|
|
176
213
|
let push;
|
|
177
214
|
if (channel.name === 'console') {
|
|
178
215
|
const logs = this.consoleCapture ? this.consoleCapture.getEntries() : [];
|
|
179
216
|
if (logs.length === 0 && !channel.hasPushedLogs) {
|
|
180
|
-
return;
|
|
217
|
+
return Promise.resolve();
|
|
181
218
|
}
|
|
182
219
|
channel.hasPushedLogs = logs.length > 0;
|
|
183
220
|
push = runOutsideZone(() => this.target.attachConsoleLogs({ logs }));
|
|
@@ -185,18 +222,19 @@ export class WebViewLogCapture {
|
|
|
185
222
|
else {
|
|
186
223
|
const logs = this.isNetworkEnabled ? this.buildNetworkLogs() : [];
|
|
187
224
|
if (logs.length === 0 && !channel.hasPushedLogs) {
|
|
188
|
-
return;
|
|
225
|
+
return Promise.resolve();
|
|
189
226
|
}
|
|
190
227
|
channel.hasPushedLogs = logs.length > 0;
|
|
191
228
|
push = runOutsideZone(() => this.target.attachNetworkLogs({ logs }));
|
|
192
229
|
}
|
|
193
230
|
try {
|
|
194
|
-
Promise.resolve(push).then(() => {
|
|
231
|
+
return Promise.resolve(push).then(() => {
|
|
195
232
|
channel.failures = 0;
|
|
196
233
|
}, () => this.onPushFailed(channel));
|
|
197
234
|
}
|
|
198
235
|
catch (e) {
|
|
199
236
|
this.onPushFailed(channel);
|
|
237
|
+
return Promise.resolve();
|
|
200
238
|
}
|
|
201
239
|
}
|
|
202
240
|
onPushFailed(channel) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webViewLogs.js","sourceRoot":"","sources":["../../../src/logs/webViewLogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\nimport type { GleapConsoleLogEntry, GleapLogConfig, GleapNetworkLogEntry } from '../definitions';\n\nimport { ConsoleCapture } from './consoleCapture';\nimport { NetworkCapture } from './networkCapture';\nimport type { RedactionRules } from './redaction';\nimport { createRedactionRules, isBlacklistedUrl, redactNetworkLogEntryOrStrip } from './redaction';\nimport { runOutsideZone } from './zone';\n\n/** Pushes are batched: at most one per channel every PUSH_DELAY_MS. */\nexport const PUSH_DELAY_MS = 500;\n/** A channel stops pushing after this many failed pushes in a row (e.g. an outdated native plugin). */\nconst MAX_FAILED_PUSHES = 3;\nconst GLOBAL_KEY = '__gleapWebViewLogCapture';\n\n/** Plugin calls that can lead to a report: the latest logs are pushed right before them. */\nconst FLUSH_BEFORE_METHODS = [\n 'sendSilentCrashReport',\n 'open',\n 'startFeedbackFlow',\n 'startClassicForm',\n 'startConversation',\n 'openConversation',\n 'openConversations',\n 'startBot',\n];\n\nexport interface LogTarget {\n attachConsoleLogs(options: { logs: GleapConsoleLogEntry[] }): Promise<unknown>;\n attachNetworkLogs(options: { logs: GleapNetworkLogEntry[] }): Promise<unknown>;\n addListener(eventName: 'logConfigLoaded', listenerFunc: (config: GleapLogConfig) => void): Promise<unknown>;\n}\n\ninterface Channel {\n name: 'console' | 'network';\n isDirty: boolean;\n timer: ReturnType<typeof setTimeout> | null;\n failures: number;\n isStopped: boolean;\n /** Whether native currently holds a non-empty list (so an empty list must be pushed to clear it). */\n hasPushedLogs: boolean;\n}\n\ninterface CachedEntry {\n version: number;\n rulesVersion: number;\n entry: GleapNetworkLogEntry | null;\n}\n\nconst createChannel = (name: Channel['name']): Channel => ({\n name,\n isDirty: false,\n timer: null,\n failures: 0,\n isStopped: false,\n hasPushedLogs: false,\n});\n\nconst toStringArray = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n\n/**\n * Captures console output and fetch/XHR traffic inside the WebView of a native (iOS / Android) app\n * and hands them to the native SDK, which attaches them to tickets. The native SDKs cannot see\n * either: WebView requests do not go through URLSession / OkHttp, and console output only reaches\n * the native log in debug builds.\n */\nexport class WebViewLogCapture {\n private consoleCapture: ConsoleCapture | null = null;\n private readonly networkCapture: NetworkCapture;\n private readonly consoleChannel = createChannel('console');\n private readonly networkChannel = createChannel('network');\n private isNetworkEnabled = false;\n private remoteProps: string[] = [];\n private localProps: string[] = [];\n private remoteBlacklist: string[] = [];\n private localBlacklist: string[] = [];\n private rules: RedactionRules = createRedactionRules([], []);\n private rulesVersion = 0;\n private redactedEntries = new Map<number, CachedEntry>();\n\n constructor(\n private readonly win: Window,\n private readonly target: LogTarget,\n private readonly platform: string,\n ) {\n this.networkCapture = new NetworkCapture(win, () => this.markDirty(this.networkChannel));\n }\n\n start(): void {\n if (!this.nativeLogsConsole()) {\n this.consoleCapture = new ConsoleCapture(this.win, () => this.markDirty(this.consoleChannel));\n this.consoleCapture.install();\n }\n // The hooks go in now, but requests are only recorded once the project config says network\n // logs are enabled (like the JavaScript SDK), so nothing is held in memory before that.\n this.networkCapture.install();\n this.listenForConfig();\n }\n\n /**\n * Android debug builds (Capacitor's loggingBehavior) write the WebView console to logcat, which the\n * Android SDK already reads: capturing it here too would log every line twice. On iOS, Capacitor\n * prints it to stdout as \"⚡️ [level] - message\"; the iOS SDK drops those lines for Capacitor apps\n * (application type CAPACITOR, set in initialize), so iOS always captures here.\n */\n private nativeLogsConsole(): boolean {\n const capacitor = (\n this.win as unknown as {\n Capacitor?: { isLoggingEnabled?: unknown };\n }\n ).Capacitor;\n return this.platform === 'android' && !!capacitor && capacitor.isLoggingEnabled === true;\n }\n\n private listenForConfig(): void {\n try {\n const handle = this.target.addListener('logConfigLoaded', (config) => this.applyRemoteConfig(config));\n if (handle && typeof handle.catch === 'function') {\n handle.catch(() => undefined);\n }\n } catch (e) {\n // The native side predates the event: network logs stay off.\n }\n }\n\n applyRemoteConfig(config: GleapLogConfig | null | undefined): void {\n try {\n if (!config || typeof config !== 'object') {\n return;\n }\n this.remoteProps = toStringArray(config.networkLogPropsToIgnore);\n this.remoteBlacklist = toStringArray(config.networkLogBlacklist);\n this.updateRules();\n this.isNetworkEnabled = config.enableNetworkLogs === true;\n this.networkCapture.setActive(this.isNetworkEnabled);\n this.markDirty(this.networkChannel);\n } catch (e) {\n // Ignore.\n }\n }\n\n setLocalPropsToIgnore(props: unknown): void {\n this.localProps = toStringArray(props);\n this.updateRules();\n }\n\n setLocalBlacklist(blacklist: unknown): void {\n this.localBlacklist = toStringArray(blacklist);\n this.updateRules();\n }\n\n /** disableConsoleLogOverwrite(): restore the console and drop what was recorded (also natively). */\n disableConsole(): void {\n try {\n if (this.consoleCapture) {\n this.consoleCapture.uninstall();\n this.consoleCapture = null;\n }\n this.markDirty(this.consoleChannel);\n this.flushChannel(this.consoleChannel);\n } catch (e) {\n // Ignore.\n }\n }\n\n onInitialize(): void {\n this.markDirty(this.consoleChannel);\n this.markDirty(this.networkChannel);\n }\n\n /** Pushes pending changes now (before a plugin call that can produce a report). */\n flushNow(): void {\n try {\n this.flushChannel(this.consoleChannel);\n this.flushChannel(this.networkChannel);\n } catch (e) {\n // Ignore.\n }\n }\n\n private updateRules(): void {\n this.rules = createRedactionRules(\n [...this.remoteProps, ...this.localProps],\n [...this.remoteBlacklist, ...this.localBlacklist],\n );\n this.rulesVersion++;\n this.markDirty(this.networkChannel);\n }\n\n private canPush(channel: Channel): boolean {\n if (channel.isStopped) {\n return false;\n }\n if (channel.name === 'network') {\n return this.isNetworkEnabled || channel.hasPushedLogs;\n }\n return true;\n }\n\n private markDirty(channel: Channel): void {\n channel.isDirty = true;\n if (channel.timer !== null || !this.canPush(channel)) {\n return;\n }\n try {\n channel.timer = runOutsideZone(() =>\n setTimeout(() => {\n channel.timer = null;\n this.flushChannel(channel);\n }, PUSH_DELAY_MS),\n );\n } catch (e) {\n channel.timer = null;\n }\n }\n\n private flushChannel(channel: Channel): void {\n if (channel.timer !== null) {\n clearTimeout(channel.timer);\n channel.timer = null;\n }\n if (!channel.isDirty || !this.canPush(channel)) {\n return;\n }\n channel.isDirty = false;\n\n let push: Promise<unknown>;\n if (channel.name === 'console') {\n const logs = this.consoleCapture ? this.consoleCapture.getEntries() : [];\n if (logs.length === 0 && !channel.hasPushedLogs) {\n return;\n }\n channel.hasPushedLogs = logs.length > 0;\n push = runOutsideZone(() => this.target.attachConsoleLogs({ logs }));\n } else {\n const logs = this.isNetworkEnabled ? this.buildNetworkLogs() : [];\n if (logs.length === 0 && !channel.hasPushedLogs) {\n return;\n }\n channel.hasPushedLogs = logs.length > 0;\n push = runOutsideZone(() => this.target.attachNetworkLogs({ logs }));\n }\n\n try {\n Promise.resolve(push).then(\n () => {\n channel.failures = 0;\n },\n () => this.onPushFailed(channel),\n );\n } catch (e) {\n this.onPushFailed(channel);\n }\n }\n\n private onPushFailed(channel: Channel): void {\n channel.failures++;\n if (channel.failures >= MAX_FAILED_PUSHES) {\n channel.isStopped = true;\n return;\n }\n this.markDirty(channel);\n }\n\n /** Redacted copies of the buffered entries; unchanged entries reuse their previous copy. */\n private buildNetworkLogs(): GleapNetworkLogEntry[] {\n const logs: GleapNetworkLogEntry[] = [];\n const cache = new Map<number, CachedEntry>();\n for (const snapshot of this.networkCapture.getSnapshots()) {\n let cached = this.redactedEntries.get(snapshot.id);\n if (!cached || cached.version !== snapshot.version || cached.rulesVersion !== this.rulesVersion) {\n cached = {\n version: snapshot.version,\n rulesVersion: this.rulesVersion,\n entry: isBlacklistedUrl(snapshot.entry.url, this.rules)\n ? null\n : redactNetworkLogEntryOrStrip(snapshot.entry, this.rules),\n };\n }\n cache.set(snapshot.id, cached);\n if (cached.entry) {\n logs.push(cached.entry);\n }\n }\n this.redactedEntries = cache;\n return logs;\n }\n}\n\n/**\n * Starts the WebView log capture on iOS and Android (not on web, where the JavaScript SDK records\n * the console and network itself). Safe to call more than once.\n */\nexport function installWebViewLogCapture(target: LogTarget): WebViewLogCapture | null {\n try {\n if (typeof window === 'undefined' || !Capacitor.isNativePlatform()) {\n return null;\n }\n const win = window as unknown as { [GLOBAL_KEY]?: WebViewLogCapture };\n const existing = win[GLOBAL_KEY];\n if (existing) {\n return existing;\n }\n const capture = new WebViewLogCapture(window, target, Capacitor.getPlatform());\n win[GLOBAL_KEY] = capture;\n capture.start();\n return capture;\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Wraps the registered plugin so the calls that affect the WebView capture reach it before they go\n * to native. Every other call passes through unchanged.\n */\nexport function wrapPluginWithLogCapture<T extends object>(plugin: T, capture: WebViewLogCapture): T {\n return new Proxy(plugin, {\n get(target, property, receiver) {\n const value = Reflect.get(target, property, receiver);\n if (typeof property !== 'string' || typeof value !== 'function') {\n return value;\n }\n const method = value as (...args: unknown[]) => unknown;\n const before =\n (hook: (options: { [key: string]: unknown }) => void) =>\n (...args: unknown[]) => {\n try {\n const options = args[0];\n hook(options && typeof options === 'object' ? (options as { [key: string]: unknown }) : {});\n } catch (e) {\n // Never break the plugin call.\n }\n return method(...args);\n };\n\n switch (property) {\n case 'initialize':\n return before(() => capture.onInitialize());\n case 'setNetworkLogPropsToIgnore':\n return before((options) => capture.setLocalPropsToIgnore(options.propsToIgnore));\n case 'setNetworkLogsBlacklist':\n return before((options) => capture.setLocalBlacklist(options.blacklist));\n case 'disableConsoleLogOverwrite':\n return before(() => capture.disableConsole());\n default:\n if (FLUSH_BEFORE_METHODS.indexOf(property) > -1) {\n return before(() => capture.flushNow());\n }\n return value;\n }\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"webViewLogs.js","sourceRoot":"","sources":["../../../src/logs/webViewLogs.ts"],"names":[],"mappings":"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","sourcesContent":["import { Capacitor } from '@capacitor/core';\n\nimport type { GleapConsoleLogEntry, GleapLogConfig, GleapNetworkLogEntry } from '../definitions';\n\nimport { ConsoleCapture } from './consoleCapture';\nimport { NetworkCapture } from './networkCapture';\nimport type { RedactionRules } from './redaction';\nimport { createRedactionRules, isBlacklistedUrl, redactNetworkLogEntryOrStrip } from './redaction';\nimport { runOutsideZone } from './zone';\n\n/** Pushes are batched: at most one per channel every PUSH_DELAY_MS. */\nexport const PUSH_DELAY_MS = 500;\n/** A channel stops pushing after this many failed pushes in a row (e.g. an outdated native plugin). */\nconst MAX_FAILED_PUSHES = 3;\nconst GLOBAL_KEY = '__gleapWebViewLogCapture';\n\n/** Plugin calls that can lead to a report: the latest logs are pushed right before them. */\nconst FLUSH_BEFORE_METHODS = [\n 'sendSilentCrashReport',\n 'open',\n 'startFeedbackFlow',\n 'startClassicForm',\n 'startConversation',\n 'openConversation',\n 'openConversations',\n 'startBot',\n];\n\nexport interface LogTarget {\n attachConsoleLogs(options: { logs: GleapConsoleLogEntry[] }): Promise<unknown>;\n attachNetworkLogs(options: { logs: GleapNetworkLogEntry[] }): Promise<unknown>;\n logsFlushed(options: { flushId: string }): Promise<unknown>;\n addListener(eventName: 'logConfigLoaded', listenerFunc: (config: GleapLogConfig) => void): Promise<unknown>;\n addListener(eventName: 'flushLogs', listenerFunc: (data: { flushId: string }) => void): Promise<unknown>;\n}\n\ninterface Channel {\n name: 'console' | 'network';\n isDirty: boolean;\n timer: ReturnType<typeof setTimeout> | null;\n failures: number;\n isStopped: boolean;\n /** Whether native currently holds a non-empty list (so an empty list must be pushed to clear it). */\n hasPushedLogs: boolean;\n}\n\ninterface CachedEntry {\n version: number;\n rulesVersion: number;\n entry: GleapNetworkLogEntry | null;\n}\n\nconst createChannel = (name: Channel['name']): Channel => ({\n name,\n isDirty: false,\n timer: null,\n failures: 0,\n isStopped: false,\n hasPushedLogs: false,\n});\n\nconst toStringArray = (value: unknown): string[] =>\n Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : [];\n\n/**\n * Captures console output and fetch/XHR traffic inside the WebView of a native (iOS / Android) app\n * and hands them to the native SDK, which attaches them to tickets. The native SDKs cannot see\n * either: WebView requests do not go through URLSession / OkHttp, and console output only reaches\n * the native log in debug builds.\n */\nexport class WebViewLogCapture {\n private consoleCapture: ConsoleCapture | null = null;\n private readonly networkCapture: NetworkCapture;\n private readonly consoleChannel = createChannel('console');\n private readonly networkChannel = createChannel('network');\n private isNetworkEnabled = false;\n private remoteProps: string[] = [];\n private localProps: string[] = [];\n private remoteBlacklist: string[] = [];\n private localBlacklist: string[] = [];\n private rules: RedactionRules = createRedactionRules([], []);\n private rulesVersion = 0;\n private redactedEntries = new Map<number, CachedEntry>();\n\n constructor(\n private readonly win: Window,\n private readonly target: LogTarget,\n private readonly platform: string,\n ) {\n this.networkCapture = new NetworkCapture(win, () => this.markDirty(this.networkChannel));\n }\n\n start(): void {\n if (!this.nativeLogsConsole()) {\n this.consoleCapture = new ConsoleCapture(this.win, () => this.markDirty(this.consoleChannel));\n this.consoleCapture.install();\n }\n // The hooks go in now, but requests are only recorded once the project config says network\n // logs are enabled (like the JavaScript SDK), so nothing is held in memory before that.\n this.networkCapture.install();\n this.listenForConfig();\n this.listenForFlush();\n }\n\n /**\n * Android debug builds (Capacitor's loggingBehavior) write the WebView console to logcat, which the\n * Android SDK already reads: capturing it here too would log every line twice. On iOS, Capacitor\n * prints it to stdout as \"⚡️ [level] - message\"; the iOS SDK drops those lines for Capacitor apps\n * (application type CAPACITOR, set in initialize), so iOS always captures here.\n */\n private nativeLogsConsole(): boolean {\n const capacitor = (\n this.win as unknown as {\n Capacitor?: { isLoggingEnabled?: unknown };\n }\n ).Capacitor;\n return this.platform === 'android' && !!capacitor && capacitor.isLoggingEnabled === true;\n }\n\n private listenForConfig(): void {\n try {\n const handle = this.target.addListener('logConfigLoaded', (config) => this.applyRemoteConfig(config));\n if (handle && typeof handle.catch === 'function') {\n handle.catch(() => undefined);\n }\n } catch (e) {\n // The native side predates the event: network logs stay off.\n }\n }\n\n /**\n * Capture requests: right before the native SDK collects the logs for a request, it asks for what is still\n * buffered here (pushed at most every PUSH_DELAY_MS otherwise) and waits up to 500 ms for the answer.\n */\n private listenForFlush(): void {\n try {\n const handle = this.target.addListener('flushLogs', (data) => {\n const flushId = data && typeof data.flushId === 'string' ? data.flushId : null;\n runOutsideZone(() =>\n this.flushNow().then(() => {\n if (flushId) {\n this.answerFlush(flushId);\n }\n }),\n );\n });\n if (handle && typeof handle.catch === 'function') {\n handle.catch(() => undefined);\n }\n } catch (e) {\n // The native side predates the event: nothing asks for flushes.\n }\n }\n\n private answerFlush(flushId: string): void {\n try {\n Promise.resolve(this.target.logsFlushed({ flushId })).catch(() => undefined);\n } catch (e) {\n // The native side gives up waiting after 500 ms.\n }\n }\n\n applyRemoteConfig(config: GleapLogConfig | null | undefined): void {\n try {\n if (!config || typeof config !== 'object') {\n return;\n }\n this.remoteProps = toStringArray(config.networkLogPropsToIgnore);\n this.remoteBlacklist = toStringArray(config.networkLogBlacklist);\n this.updateRules();\n this.isNetworkEnabled = config.enableNetworkLogs === true;\n this.networkCapture.setActive(this.isNetworkEnabled);\n this.markDirty(this.networkChannel);\n } catch (e) {\n // Ignore.\n }\n }\n\n setLocalPropsToIgnore(props: unknown): void {\n this.localProps = toStringArray(props);\n this.updateRules();\n }\n\n setLocalBlacklist(blacklist: unknown): void {\n this.localBlacklist = toStringArray(blacklist);\n this.updateRules();\n }\n\n /** disableConsoleLogOverwrite(): restore the console and drop what was recorded (also natively). */\n disableConsole(): void {\n try {\n if (this.consoleCapture) {\n this.consoleCapture.uninstall();\n this.consoleCapture = null;\n }\n this.markDirty(this.consoleChannel);\n this.flushChannel(this.consoleChannel);\n } catch (e) {\n // Ignore.\n }\n }\n\n onInitialize(): void {\n this.markDirty(this.consoleChannel);\n this.markDirty(this.networkChannel);\n }\n\n /**\n * Pushes pending changes now (before a plugin call that can produce a report, or when the native SDK collects the\n * logs for a capture request). Resolves once the native side took them; never rejects.\n */\n flushNow(): Promise<void> {\n const pushes: Promise<unknown>[] = [];\n try {\n pushes.push(this.flushChannel(this.consoleChannel));\n pushes.push(this.flushChannel(this.networkChannel));\n } catch (e) {\n // Ignore.\n }\n return Promise.all(pushes).then(\n () => undefined,\n () => undefined,\n );\n }\n\n private updateRules(): void {\n this.rules = createRedactionRules(\n [...this.remoteProps, ...this.localProps],\n [...this.remoteBlacklist, ...this.localBlacklist],\n );\n this.rulesVersion++;\n this.markDirty(this.networkChannel);\n }\n\n private canPush(channel: Channel): boolean {\n if (channel.isStopped) {\n return false;\n }\n if (channel.name === 'network') {\n return this.isNetworkEnabled || channel.hasPushedLogs;\n }\n return true;\n }\n\n private markDirty(channel: Channel): void {\n channel.isDirty = true;\n if (channel.timer !== null || !this.canPush(channel)) {\n return;\n }\n try {\n channel.timer = runOutsideZone(() =>\n setTimeout(() => {\n channel.timer = null;\n this.flushChannel(channel);\n }, PUSH_DELAY_MS),\n );\n } catch (e) {\n channel.timer = null;\n }\n }\n\n /** Resolves once the push it started (if any) was answered; never rejects. */\n private flushChannel(channel: Channel): Promise<void> {\n if (channel.timer !== null) {\n clearTimeout(channel.timer);\n channel.timer = null;\n }\n if (!channel.isDirty || !this.canPush(channel)) {\n return Promise.resolve();\n }\n channel.isDirty = false;\n\n let push: Promise<unknown>;\n if (channel.name === 'console') {\n const logs = this.consoleCapture ? this.consoleCapture.getEntries() : [];\n if (logs.length === 0 && !channel.hasPushedLogs) {\n return Promise.resolve();\n }\n channel.hasPushedLogs = logs.length > 0;\n push = runOutsideZone(() => this.target.attachConsoleLogs({ logs }));\n } else {\n const logs = this.isNetworkEnabled ? this.buildNetworkLogs() : [];\n if (logs.length === 0 && !channel.hasPushedLogs) {\n return Promise.resolve();\n }\n channel.hasPushedLogs = logs.length > 0;\n push = runOutsideZone(() => this.target.attachNetworkLogs({ logs }));\n }\n\n try {\n return Promise.resolve(push).then(\n () => {\n channel.failures = 0;\n },\n () => this.onPushFailed(channel),\n );\n } catch (e) {\n this.onPushFailed(channel);\n return Promise.resolve();\n }\n }\n\n private onPushFailed(channel: Channel): void {\n channel.failures++;\n if (channel.failures >= MAX_FAILED_PUSHES) {\n channel.isStopped = true;\n return;\n }\n this.markDirty(channel);\n }\n\n /** Redacted copies of the buffered entries; unchanged entries reuse their previous copy. */\n private buildNetworkLogs(): GleapNetworkLogEntry[] {\n const logs: GleapNetworkLogEntry[] = [];\n const cache = new Map<number, CachedEntry>();\n for (const snapshot of this.networkCapture.getSnapshots()) {\n let cached = this.redactedEntries.get(snapshot.id);\n if (!cached || cached.version !== snapshot.version || cached.rulesVersion !== this.rulesVersion) {\n cached = {\n version: snapshot.version,\n rulesVersion: this.rulesVersion,\n entry: isBlacklistedUrl(snapshot.entry.url, this.rules)\n ? null\n : redactNetworkLogEntryOrStrip(snapshot.entry, this.rules),\n };\n }\n cache.set(snapshot.id, cached);\n if (cached.entry) {\n logs.push(cached.entry);\n }\n }\n this.redactedEntries = cache;\n return logs;\n }\n}\n\n/**\n * Starts the WebView log capture on iOS and Android (not on web, where the JavaScript SDK records\n * the console and network itself). Safe to call more than once.\n */\nexport function installWebViewLogCapture(target: LogTarget): WebViewLogCapture | null {\n try {\n if (typeof window === 'undefined' || !Capacitor.isNativePlatform()) {\n return null;\n }\n const win = window as unknown as { [GLOBAL_KEY]?: WebViewLogCapture };\n const existing = win[GLOBAL_KEY];\n if (existing) {\n return existing;\n }\n const capture = new WebViewLogCapture(window, target, Capacitor.getPlatform());\n win[GLOBAL_KEY] = capture;\n capture.start();\n return capture;\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Wraps the registered plugin so the calls that affect the WebView capture reach it before they go\n * to native. Every other call passes through unchanged.\n */\nexport function wrapPluginWithLogCapture<T extends object>(plugin: T, capture: WebViewLogCapture): T {\n return new Proxy(plugin, {\n get(target, property, receiver) {\n const value = Reflect.get(target, property, receiver);\n if (typeof property !== 'string' || typeof value !== 'function') {\n return value;\n }\n const method = value as (...args: unknown[]) => unknown;\n const before =\n (hook: (options: { [key: string]: unknown }) => void) =>\n (...args: unknown[]) => {\n try {\n const options = args[0];\n hook(options && typeof options === 'object' ? (options as { [key: string]: unknown }) : {});\n } catch (e) {\n // Never break the plugin call.\n }\n return method(...args);\n };\n\n switch (property) {\n case 'initialize':\n return before(() => capture.onInitialize());\n case 'setNetworkLogPropsToIgnore':\n return before((options) => capture.setLocalPropsToIgnore(options.propsToIgnore));\n case 'setNetworkLogsBlacklist':\n return before((options) => capture.setLocalBlacklist(options.blacklist));\n case 'disableConsoleLogOverwrite':\n return before(() => capture.disableConsole());\n default:\n if (FLUSH_BEFORE_METHODS.indexOf(property) > -1) {\n return before(() => capture.flushNow());\n }\n return value;\n }\n },\n });\n}\n"]}
|
package/dist/esm/web.d.ts
CHANGED
|
@@ -91,6 +91,11 @@ export declare class GleapWeb extends WebPlugin implements GleapPlugin {
|
|
|
91
91
|
}): Promise<{
|
|
92
92
|
conversationsOpened: boolean;
|
|
93
93
|
}>;
|
|
94
|
+
openProtectedFileFromUrl(_options: {
|
|
95
|
+
url: string;
|
|
96
|
+
}): Promise<{
|
|
97
|
+
opened: boolean;
|
|
98
|
+
}>;
|
|
94
99
|
showSurvey(options: {
|
|
95
100
|
surveyId: string;
|
|
96
101
|
format?: 'survey' | 'survey_full' | undefined;
|
|
@@ -119,6 +124,16 @@ export declare class GleapWeb extends WebPlugin implements GleapPlugin {
|
|
|
119
124
|
}): Promise<{
|
|
120
125
|
colorScheme: string;
|
|
121
126
|
}>;
|
|
127
|
+
setCaptureEnabled(options: {
|
|
128
|
+
enabled: boolean;
|
|
129
|
+
}): Promise<{
|
|
130
|
+
captureEnabled: boolean;
|
|
131
|
+
}>;
|
|
132
|
+
setRemoteLogCollectionEnabled(options: {
|
|
133
|
+
enabled: boolean;
|
|
134
|
+
}): Promise<{
|
|
135
|
+
remoteLogCollectionEnabled: boolean;
|
|
136
|
+
}>;
|
|
122
137
|
identify(options: {
|
|
123
138
|
userId: string;
|
|
124
139
|
userHash?: string | undefined;
|
|
@@ -162,6 +177,7 @@ export declare class GleapWeb extends WebPlugin implements GleapPlugin {
|
|
|
162
177
|
attachNetworkLogs(): Promise<{
|
|
163
178
|
networkLogsAttached: boolean;
|
|
164
179
|
}>;
|
|
180
|
+
logsFlushed(): Promise<void>;
|
|
165
181
|
attachConsoleLogs(): Promise<{
|
|
166
182
|
consoleLogsAttached: boolean;
|
|
167
183
|
}>;
|
package/dist/esm/web.js
CHANGED
|
@@ -164,6 +164,10 @@ export class GleapWeb extends WebPlugin {
|
|
|
164
164
|
Gleap.openConversations(options.showBackButton);
|
|
165
165
|
return { conversationsOpened: true };
|
|
166
166
|
}
|
|
167
|
+
// The JavaScript SDK opens `?gleapFile=` links itself on page load.
|
|
168
|
+
async openProtectedFileFromUrl(_options) {
|
|
169
|
+
return { opened: false };
|
|
170
|
+
}
|
|
167
171
|
async showSurvey(options) {
|
|
168
172
|
Gleap.showSurvey(options.surveyId, options.format);
|
|
169
173
|
return { opened: true };
|
|
@@ -192,6 +196,28 @@ export class GleapWeb extends WebPlugin {
|
|
|
192
196
|
});
|
|
193
197
|
return { colorScheme: options.colorScheme };
|
|
194
198
|
}
|
|
199
|
+
async setCaptureEnabled(options) {
|
|
200
|
+
if (typeof (options === null || options === void 0 ? void 0 : options.enabled) !== 'boolean') {
|
|
201
|
+
throw new Error('No enabled value provided');
|
|
202
|
+
}
|
|
203
|
+
// A JavaScript SDK older than capture requests has nothing to switch.
|
|
204
|
+
const jsSdk = Gleap;
|
|
205
|
+
if (typeof jsSdk.setCaptureEnabled === 'function') {
|
|
206
|
+
jsSdk.setCaptureEnabled(options.enabled);
|
|
207
|
+
}
|
|
208
|
+
return { captureEnabled: options.enabled };
|
|
209
|
+
}
|
|
210
|
+
async setRemoteLogCollectionEnabled(options) {
|
|
211
|
+
if (typeof (options === null || options === void 0 ? void 0 : options.enabled) !== 'boolean') {
|
|
212
|
+
throw new Error('No enabled value provided');
|
|
213
|
+
}
|
|
214
|
+
// A JavaScript SDK older than capture requests has nothing to switch.
|
|
215
|
+
const jsSdk = Gleap;
|
|
216
|
+
if (typeof jsSdk.setRemoteLogCollectionEnabled === 'function') {
|
|
217
|
+
jsSdk.setRemoteLogCollectionEnabled(options.enabled);
|
|
218
|
+
}
|
|
219
|
+
return { remoteLogCollectionEnabled: options.enabled };
|
|
220
|
+
}
|
|
195
221
|
async identify(options) {
|
|
196
222
|
var userData = {
|
|
197
223
|
name: options.name,
|
|
@@ -229,6 +255,9 @@ export class GleapWeb extends WebPlugin {
|
|
|
229
255
|
// The JavaScript SDK records the page's requests itself on web.
|
|
230
256
|
return { networkLogsAttached: false };
|
|
231
257
|
}
|
|
258
|
+
async logsFlushed() {
|
|
259
|
+
// The JavaScript SDK collects the logs on web itself: nothing is buffered here.
|
|
260
|
+
}
|
|
232
261
|
async attachConsoleLogs() {
|
|
233
262
|
// The JavaScript SDK records the page's console itself on web.
|
|
234
263
|
return { consoleLogsAttached: false };
|
package/dist/esm/web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport Gleap from 'gleap';\n\nimport type { GleapEventCallback, GleapPlugin } from './definitions';\n\nexport class GleapWeb extends WebPlugin implements GleapPlugin {\n static callbacks: { [key: string]: GleapEventCallback } = {};\n static initialized = false;\n static agentToolExecutionCounter = 0;\n\n private pendingAgentToolExecutions: {\n [executionId: string]: (result: string) => void;\n } = {};\n\n async initialize(options: {\n API_KEY: string;\n }): Promise<{ initialized: boolean }> {\n if (GleapWeb.initialized) {\n return { initialized: true };\n }\n\n Gleap.initialize(options.API_KEY);\n\n GleapWeb.initialized = true;\n this.registerCallbackListeners();\n\n return { initialized: true };\n }\n\n async setRegion(options: {\n region: 'eu' | 'us';\n }): Promise<{ region: string }> {\n if (!options?.region) {\n throw new Error('No region provided');\n }\n\n Gleap.setRegion(options.region);\n\n return { region: options.region };\n }\n\n async setApiUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setApiUrl(options.url);\n\n return { url: options.url };\n }\n\n async setWSApiUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setWSApiUrl(options.url);\n\n return { url: options.url };\n }\n\n async setRealtimeHost(options: { host: string }): Promise<{ host: string }> {\n if (!options?.host) {\n throw new Error('No host provided');\n }\n\n Gleap.setRealtimeHost(options.host);\n\n return { host: options.host };\n }\n\n async setFrameUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setFrameUrl(options.url);\n\n return { url: options.url };\n }\n\n async setBannerUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setBannerUrl(options.url);\n\n return { url: options.url };\n }\n\n async setModalUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setModalUrl(options.url);\n\n return { url: options.url };\n }\n\n registerCallbackListeners(): void {\n Gleap.on('open', () => {\n this.notifyCallbacks('open', {});\n });\n\n Gleap.on('initialized', () => {\n this.notifyCallbacks('initialized', {});\n });\n\n Gleap.on('close', () => {\n this.notifyCallbacks('close', {});\n });\n\n Gleap.on('feedback-sent', formData => {\n this.notifyCallbacks('feedback-sent', formData);\n });\n\n Gleap.on('outbound-sent', formData => {\n this.notifyCallbacks('outbound-sent', formData);\n });\n\n Gleap.on('tool-execution', toolExecution => {\n this.notifyCallbacks('tool-execution', toolExecution);\n });\n\n Gleap.on('flow-started', flow => {\n this.notifyCallbacks('flow-started', flow);\n });\n\n Gleap.on('error-while-sending', () => {\n this.notifyCallbacks('error-while-sending', {});\n });\n\n Gleap.on('unregister-pushmessage-group', groupName => {\n this.notifyCallbacks('unregister-pushmessage-group', groupName);\n });\n\n Gleap.on('register-pushmessage-group', groupName => {\n this.notifyCallbacks('register-pushmessage-group', groupName);\n });\n\n Gleap.on('unread-count-changed', groupName => {\n this.notifyCallbacks('notification-count-updated', groupName);\n });\n\n Gleap.registerCustomAction(customAction => {\n this.notifyCallbacks('custom-action-called', customAction);\n });\n }\n\n async registerAgentTool(options: { name: string }): Promise<void> {\n const gleapSdk = Gleap as any;\n if (typeof gleapSdk.registerAgentTool !== 'function') {\n console.warn(\n 'Gleap: registerAgentTool requires a newer version of the Gleap JS SDK.',\n );\n return;\n }\n\n gleapSdk.registerAgentTool(\n options.name,\n (params: any) =>\n new Promise<string>(resolve => {\n const executionId = `web-${++GleapWeb.agentToolExecutionCounter}`;\n this.pendingAgentToolExecutions[executionId] = resolve;\n\n this.notifyListeners('agentToolExecution', {\n executionId,\n name: options.name,\n params: params ?? {},\n });\n }),\n );\n }\n\n async sendAgentToolResult(options: {\n executionId: string;\n result: string;\n }): Promise<void> {\n const resolve = this.pendingAgentToolExecutions[options.executionId];\n if (resolve) {\n delete this.pendingAgentToolExecutions[options.executionId];\n resolve(options.result);\n }\n }\n\n async setTicketAttribute(options: {\n key: string;\n value: string;\n }): Promise<{ setTicketAttribute: boolean }> {\n Gleap.setTicketAttribute(options.key, options.value);\n\n return { setTicketAttribute: true };\n }\n\n async unsetTicketAttribute(options: {\n key: string;\n }): Promise<{ unsetTicketAttribute: boolean }> {\n Gleap.unsetTicketAttribute(options.key);\n\n return { unsetTicketAttribute: true };\n }\n\n async clearTicketAttributes(): Promise<{ clearTicketAttributes: boolean }> {\n Gleap.clearTicketAttributes();\n\n return { clearTicketAttributes: true };\n }\n\n notifyCallbacks(event: string, data: any): void {\n if (!GleapWeb.callbacks) {\n return;\n }\n\n for (var callbackId in GleapWeb.callbacks) {\n GleapWeb.callbacks[callbackId]({\n name: event,\n data,\n });\n }\n }\n\n async startClassicForm(options: {\n formId?: string | undefined;\n showBackButton?: boolean | undefined;\n }): Promise<{ classicFormStarted: boolean }> {\n Gleap.startClassicForm(options.formId ?? '', options.showBackButton);\n\n return { classicFormStarted: true };\n }\n\n async startConversation(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ conversationStarted: boolean }> {\n Gleap.startConversation(options.showBackButton);\n\n return { conversationStarted: true };\n }\n\n async openConversation(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ conversationsOpened: boolean }> {\n Gleap.openConversations(options.showBackButton);\n\n return { conversationsOpened: true };\n }\n\n async openConversations(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ conversationsOpened: boolean }> {\n Gleap.openConversations(options.showBackButton);\n\n return { conversationsOpened: true };\n }\n\n async showSurvey(options: {\n surveyId: string;\n format?: 'survey' | 'survey_full' | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.showSurvey(options.surveyId, options.format);\n\n return { opened: true };\n }\n\n async showFeedbackButton(options: {\n show: boolean;\n }): Promise<{ feedbackButtonShown: boolean }> {\n Gleap.showFeedbackButton(options.show ? true : false);\n\n return { feedbackButtonShown: true };\n }\n\n async setDisableInAppNotifications(options: {\n disableInAppNotifications?: boolean | undefined;\n }): Promise<{ inAppNotificationsDisabled: boolean }> {\n Gleap.setDisableInAppNotifications(\n options.disableInAppNotifications ?? false,\n );\n\n return { inAppNotificationsDisabled: true };\n }\n\n async setDisableEnvData(options: {\n disableEnvData: boolean;\n }): Promise<{ envDataDisabled: boolean }> {\n Gleap.setDisableEnvData(options.disableEnvData ?? false);\n\n return { envDataDisabled: true };\n }\n\n async setColorScheme(options: {\n colorScheme: 'auto' | 'light' | 'dark';\n lightBackgroundColor?: string;\n darkBackgroundColor?: string;\n }): Promise<{ colorScheme: string }> {\n if (!options?.colorScheme) {\n throw new Error('No colorScheme provided');\n }\n\n Gleap.setColorScheme(options.colorScheme, {\n lightBackgroundColor: options.lightBackgroundColor,\n darkBackgroundColor: options.darkBackgroundColor,\n });\n\n return { colorScheme: options.colorScheme };\n }\n\n async identify(options: {\n userId: string;\n userHash?: string | undefined;\n customData?: Record<string, any> | undefined;\n name?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n companyId?: string | undefined;\n companyName?: string | undefined;\n avatar?: string | undefined;\n sla?: number | undefined;\n plan?: string | undefined;\n value?: number | undefined;\n }): Promise<{ identify: boolean }> {\n var userData = {\n name: options.name,\n email: options.email,\n phone: options.phone,\n companyId: options.companyId,\n companyName: options.companyName,\n avatar: options.avatar,\n sla: options.sla,\n plan: options.plan,\n value: options.value,\n customData: options.customData,\n };\n if (options.userHash) {\n Gleap.identify(options.userId, userData, options.userHash);\n } else {\n Gleap.identify(options.userId, userData);\n }\n\n return { identify: true };\n }\n\n async updateContact(options: {\n name?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n companyId?: string | undefined;\n companyName?: string | undefined;\n avatar?: string | undefined;\n sla?: number | undefined;\n plan?: string | undefined;\n value?: number | undefined;\n customData?: Record<string, any> | undefined;\n }): Promise<{ identify: boolean }> {\n Gleap.updateContact(options);\n\n return { identify: true };\n }\n\n async setNetworkLogsBlacklist(options: {\n blacklist: string[];\n }): Promise<{ blacklistSet: boolean }> {\n Gleap.setNetworkLogsBlacklist(options.blacklist);\n\n return { blacklistSet: true };\n }\n\n async setNetworkLogPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{ propsToIgnoreSet: boolean }> {\n Gleap.setNetworkLogPropsToIgnore(options.propsToIgnore);\n\n return { propsToIgnoreSet: true };\n }\n\n async attachNetworkLogs(): Promise<{ networkLogsAttached: boolean }> {\n // The JavaScript SDK records the page's requests itself on web.\n return { networkLogsAttached: false };\n }\n\n async attachConsoleLogs(): Promise<{ consoleLogsAttached: boolean }> {\n // The JavaScript SDK records the page's console itself on web.\n return { consoleLogsAttached: false };\n }\n\n async setEnvDataPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{ envDataPropsToIgnoreSet: boolean }> {\n Gleap.setEnvDataPropsToIgnore(options.propsToIgnore);\n\n return { envDataPropsToIgnoreSet: true };\n }\n\n async setTags(options: { tags: string[] }): Promise<{ tagsSet: boolean }> {\n Gleap.setTags(options.tags);\n\n return { tagsSet: true };\n }\n\n async clearIdentity(): Promise<{ clearIdentity: boolean }> {\n Gleap.clearIdentity();\n\n return { clearIdentity: true };\n }\n\n async getIdentity(): Promise<{\n identity: {\n userId: string;\n name?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n companyId?: string | undefined;\n companyName?: string | undefined;\n avatar?: string | undefined;\n sla?: number | undefined;\n plan?: string | undefined;\n value?: number | undefined;\n };\n }> {\n return { identity: Gleap.getIdentity() };\n }\n\n async isUserIdentified(): Promise<{ isUserIdentified: boolean }> {\n return { isUserIdentified: Gleap.isUserIdentified() };\n }\n\n async attachCustomData(options: {\n data: any;\n }): Promise<{ attachedCustomData: boolean }> {\n Gleap.attachCustomData(options.data);\n\n return { attachedCustomData: true };\n }\n\n async setCustomData(options: {\n key: string;\n value: string;\n }): Promise<{ setCustomData: boolean }> {\n Gleap.setCustomData(options.key, options.value);\n\n return { setCustomData: true };\n }\n\n async removeCustomData(options: {\n key: string;\n }): Promise<{ removedCustomData: boolean }> {\n Gleap.removeCustomData(options.key);\n\n return { removedCustomData: true };\n }\n\n async clearCustomData(): Promise<{ clearedCustomData: boolean }> {\n Gleap.clearCustomData();\n\n return { clearedCustomData: true };\n }\n\n async trackEvent(options: {\n name: string;\n data?: any;\n }): Promise<{ loggedEvent: boolean }> {\n Gleap.trackEvent(options.name, options.data);\n\n return { loggedEvent: true };\n }\n\n async trackPage(options: {\n pageName: string;\n }): Promise<{ trackedPage: boolean }> {\n Gleap.trackEvent('pageView', {\n page: options.pageName,\n });\n\n return { trackedPage: true };\n }\n\n async startFeedbackFlow(options: {\n feedbackFlow?: string | undefined;\n showBackButton?: boolean | undefined;\n }): Promise<{ startedFeedbackFlow: boolean }> {\n if (!options.feedbackFlow) {\n }\n\n Gleap.startFeedbackFlow(\n options.feedbackFlow ?? 'bugreporting',\n options.showBackButton,\n );\n\n return { startedFeedbackFlow: true };\n }\n\n async startBot(options: {\n botId?: string | undefined;\n showBackButton?: boolean | undefined;\n }): Promise<{ startedBot: boolean }> {\n if (!options.botId) {\n }\n\n Gleap.startBot(options.botId ?? '', options.showBackButton);\n\n return { startedBot: true };\n }\n\n async setLanguage(options: {\n languageCode: string;\n }): Promise<{ setLanguage: string }> {\n Gleap.setLanguage(options.languageCode);\n\n return { setLanguage: options.languageCode };\n }\n\n async log(options: {\n message: string;\n logLevel?: 'ERROR' | 'WARNING' | 'INFO' | undefined;\n }): Promise<{ logged: boolean }> {\n Gleap.log(options.message, options.logLevel);\n\n return { logged: true };\n }\n\n async setEventCallback(callback: GleapEventCallback): Promise<string> {\n var callbackId = this.makeid(10);\n GleapWeb.callbacks[callbackId] = callback;\n return callbackId;\n }\n\n async sendSilentCrashReport(options: {\n description: string;\n severity?: 'LOW' | 'MEDIUM' | 'HIGH' | undefined;\n dataExclusion?:\n | {\n customData: Boolean;\n metaData: Boolean;\n attachments: Boolean;\n consoleLog: Boolean;\n networkLogs: Boolean;\n customEventLog: Boolean;\n screenshot: Boolean;\n replays: Boolean;\n }\n | undefined;\n }): Promise<{ sentSilentBugReport: boolean }> {\n Gleap.sendSilentCrashReport(\n options.description,\n options.severity,\n options.dataExclusion,\n );\n\n return { sentSilentBugReport: true };\n }\n\n async open(): Promise<{ openedWidget: boolean }> {\n Gleap.open();\n\n return { openedWidget: true };\n }\n\n async openChecklists(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openChecklists(options.showBackButton);\n\n return { opened: true };\n }\n\n async openChecklist(options: {\n checklistId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openChecklist(options.checklistId, options.showBackButton);\n\n return { opened: true };\n }\n\n async startChecklist(options: {\n outboundId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.startChecklist(options.outboundId, options.showBackButton);\n\n return { opened: true };\n }\n\n async openFeatureRequests(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ openedFeatureRequests: boolean }> {\n Gleap.openFeatureRequests(options.showBackButton);\n\n return { openedFeatureRequests: true };\n }\n\n async openNews(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ openedNews: boolean }> {\n Gleap.openNews(options.showBackButton);\n\n return { openedNews: true };\n }\n\n async openNewsArticle(options: {\n articleId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openNewsArticle(options.articleId, options.showBackButton);\n\n return { opened: true };\n }\n\n async openHelpCenter(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openHelpCenter(options.showBackButton);\n\n return { opened: true };\n }\n\n async openHelpCenterArticle(options: {\n articleId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openHelpCenterArticle(options.articleId, options.showBackButton);\n\n return { opened: true };\n }\n\n async askAI(options: {\n question: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.askAI(options.question, options.showBackButton);\n\n return { opened: true };\n }\n\n async openHelpCenterCollection(options: {\n collectionId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openHelpCenterCollection(\n options.collectionId,\n options.showBackButton,\n );\n\n return { opened: true };\n }\n\n async searchHelpCenter(options: {\n term: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.searchHelpCenter(options.term, options.showBackButton);\n\n return { opened: true };\n }\n\n async close(): Promise<{ closedWidget: boolean }> {\n Gleap.close();\n\n return { closedWidget: true };\n }\n\n async isOpened(): Promise<{ isOpened: boolean }> {\n return { isOpened: Gleap.isOpened() };\n }\n\n async disableConsoleLogOverwrite(): Promise<{ consoleLogDisabled: boolean }> {\n Gleap.disableConsoleLogOverwrite();\n\n return { consoleLogDisabled: true };\n }\n\n async enableDebugConsoleLog(): Promise<{ debugConsoleLogEnabled: boolean }> {\n return { debugConsoleLogEnabled: true };\n }\n\n async preFillForm(options: {\n data: any;\n }): Promise<{ preFilledForm: boolean }> {\n Gleap.preFillForm(options.data);\n\n return { preFilledForm: true };\n }\n\n async addAttachment(_options: {\n base64data: string;\n name: string;\n }): Promise<{ attachmentAdded: boolean }> {\n throw this.unavailable('addAttachment not available for browsers');\n }\n\n async removeAllAttachments(): Promise<{ allAttachmentsRemoved: boolean }> {\n throw this.unavailable('removeAllAttachments not available for browsers');\n }\n\n async setNotificationContainerOffset(_options: {\n x: number;\n y: number;\n }): Promise<{ notificationContainerOffsetSet: boolean }> {\n return { notificationContainerOffsetSet: true };\n }\n\n private makeid(length: number): string {\n var result = '';\n var characters =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var charactersLength = characters.length;\n for (var i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport Gleap from 'gleap';\n\nimport type { GleapEventCallback, GleapPlugin } from './definitions';\n\nexport class GleapWeb extends WebPlugin implements GleapPlugin {\n static callbacks: { [key: string]: GleapEventCallback } = {};\n static initialized = false;\n static agentToolExecutionCounter = 0;\n\n private pendingAgentToolExecutions: {\n [executionId: string]: (result: string) => void;\n } = {};\n\n async initialize(options: {\n API_KEY: string;\n }): Promise<{ initialized: boolean }> {\n if (GleapWeb.initialized) {\n return { initialized: true };\n }\n\n Gleap.initialize(options.API_KEY);\n\n GleapWeb.initialized = true;\n this.registerCallbackListeners();\n\n return { initialized: true };\n }\n\n async setRegion(options: {\n region: 'eu' | 'us';\n }): Promise<{ region: string }> {\n if (!options?.region) {\n throw new Error('No region provided');\n }\n\n Gleap.setRegion(options.region);\n\n return { region: options.region };\n }\n\n async setApiUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setApiUrl(options.url);\n\n return { url: options.url };\n }\n\n async setWSApiUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setWSApiUrl(options.url);\n\n return { url: options.url };\n }\n\n async setRealtimeHost(options: { host: string }): Promise<{ host: string }> {\n if (!options?.host) {\n throw new Error('No host provided');\n }\n\n Gleap.setRealtimeHost(options.host);\n\n return { host: options.host };\n }\n\n async setFrameUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setFrameUrl(options.url);\n\n return { url: options.url };\n }\n\n async setBannerUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setBannerUrl(options.url);\n\n return { url: options.url };\n }\n\n async setModalUrl(options: { url: string }): Promise<{ url: string }> {\n if (!options?.url) {\n throw new Error('No url provided');\n }\n\n Gleap.setModalUrl(options.url);\n\n return { url: options.url };\n }\n\n registerCallbackListeners(): void {\n Gleap.on('open', () => {\n this.notifyCallbacks('open', {});\n });\n\n Gleap.on('initialized', () => {\n this.notifyCallbacks('initialized', {});\n });\n\n Gleap.on('close', () => {\n this.notifyCallbacks('close', {});\n });\n\n Gleap.on('feedback-sent', formData => {\n this.notifyCallbacks('feedback-sent', formData);\n });\n\n Gleap.on('outbound-sent', formData => {\n this.notifyCallbacks('outbound-sent', formData);\n });\n\n Gleap.on('tool-execution', toolExecution => {\n this.notifyCallbacks('tool-execution', toolExecution);\n });\n\n Gleap.on('flow-started', flow => {\n this.notifyCallbacks('flow-started', flow);\n });\n\n Gleap.on('error-while-sending', () => {\n this.notifyCallbacks('error-while-sending', {});\n });\n\n Gleap.on('unregister-pushmessage-group', groupName => {\n this.notifyCallbacks('unregister-pushmessage-group', groupName);\n });\n\n Gleap.on('register-pushmessage-group', groupName => {\n this.notifyCallbacks('register-pushmessage-group', groupName);\n });\n\n Gleap.on('unread-count-changed', groupName => {\n this.notifyCallbacks('notification-count-updated', groupName);\n });\n\n Gleap.registerCustomAction(customAction => {\n this.notifyCallbacks('custom-action-called', customAction);\n });\n }\n\n async registerAgentTool(options: { name: string }): Promise<void> {\n const gleapSdk = Gleap as any;\n if (typeof gleapSdk.registerAgentTool !== 'function') {\n console.warn(\n 'Gleap: registerAgentTool requires a newer version of the Gleap JS SDK.',\n );\n return;\n }\n\n gleapSdk.registerAgentTool(\n options.name,\n (params: any) =>\n new Promise<string>(resolve => {\n const executionId = `web-${++GleapWeb.agentToolExecutionCounter}`;\n this.pendingAgentToolExecutions[executionId] = resolve;\n\n this.notifyListeners('agentToolExecution', {\n executionId,\n name: options.name,\n params: params ?? {},\n });\n }),\n );\n }\n\n async sendAgentToolResult(options: {\n executionId: string;\n result: string;\n }): Promise<void> {\n const resolve = this.pendingAgentToolExecutions[options.executionId];\n if (resolve) {\n delete this.pendingAgentToolExecutions[options.executionId];\n resolve(options.result);\n }\n }\n\n async setTicketAttribute(options: {\n key: string;\n value: string;\n }): Promise<{ setTicketAttribute: boolean }> {\n Gleap.setTicketAttribute(options.key, options.value);\n\n return { setTicketAttribute: true };\n }\n\n async unsetTicketAttribute(options: {\n key: string;\n }): Promise<{ unsetTicketAttribute: boolean }> {\n Gleap.unsetTicketAttribute(options.key);\n\n return { unsetTicketAttribute: true };\n }\n\n async clearTicketAttributes(): Promise<{ clearTicketAttributes: boolean }> {\n Gleap.clearTicketAttributes();\n\n return { clearTicketAttributes: true };\n }\n\n notifyCallbacks(event: string, data: any): void {\n if (!GleapWeb.callbacks) {\n return;\n }\n\n for (var callbackId in GleapWeb.callbacks) {\n GleapWeb.callbacks[callbackId]({\n name: event,\n data,\n });\n }\n }\n\n async startClassicForm(options: {\n formId?: string | undefined;\n showBackButton?: boolean | undefined;\n }): Promise<{ classicFormStarted: boolean }> {\n Gleap.startClassicForm(options.formId ?? '', options.showBackButton);\n\n return { classicFormStarted: true };\n }\n\n async startConversation(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ conversationStarted: boolean }> {\n Gleap.startConversation(options.showBackButton);\n\n return { conversationStarted: true };\n }\n\n async openConversation(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ conversationsOpened: boolean }> {\n Gleap.openConversations(options.showBackButton);\n\n return { conversationsOpened: true };\n }\n\n async openConversations(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ conversationsOpened: boolean }> {\n Gleap.openConversations(options.showBackButton);\n\n return { conversationsOpened: true };\n }\n\n // The JavaScript SDK opens `?gleapFile=` links itself on page load.\n async openProtectedFileFromUrl(_options: {\n url: string;\n }): Promise<{ opened: boolean }> {\n return { opened: false };\n }\n\n async showSurvey(options: {\n surveyId: string;\n format?: 'survey' | 'survey_full' | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.showSurvey(options.surveyId, options.format);\n\n return { opened: true };\n }\n\n async showFeedbackButton(options: {\n show: boolean;\n }): Promise<{ feedbackButtonShown: boolean }> {\n Gleap.showFeedbackButton(options.show ? true : false);\n\n return { feedbackButtonShown: true };\n }\n\n async setDisableInAppNotifications(options: {\n disableInAppNotifications?: boolean | undefined;\n }): Promise<{ inAppNotificationsDisabled: boolean }> {\n Gleap.setDisableInAppNotifications(\n options.disableInAppNotifications ?? false,\n );\n\n return { inAppNotificationsDisabled: true };\n }\n\n async setDisableEnvData(options: {\n disableEnvData: boolean;\n }): Promise<{ envDataDisabled: boolean }> {\n Gleap.setDisableEnvData(options.disableEnvData ?? false);\n\n return { envDataDisabled: true };\n }\n\n async setColorScheme(options: {\n colorScheme: 'auto' | 'light' | 'dark';\n lightBackgroundColor?: string;\n darkBackgroundColor?: string;\n }): Promise<{ colorScheme: string }> {\n if (!options?.colorScheme) {\n throw new Error('No colorScheme provided');\n }\n\n Gleap.setColorScheme(options.colorScheme, {\n lightBackgroundColor: options.lightBackgroundColor,\n darkBackgroundColor: options.darkBackgroundColor,\n });\n\n return { colorScheme: options.colorScheme };\n }\n\n async setCaptureEnabled(options: {\n enabled: boolean;\n }): Promise<{ captureEnabled: boolean }> {\n if (typeof options?.enabled !== 'boolean') {\n throw new Error('No enabled value provided');\n }\n\n // A JavaScript SDK older than capture requests has nothing to switch.\n const jsSdk = Gleap as unknown as {\n setCaptureEnabled?: (enabled: boolean) => void;\n };\n if (typeof jsSdk.setCaptureEnabled === 'function') {\n jsSdk.setCaptureEnabled(options.enabled);\n }\n\n return { captureEnabled: options.enabled };\n }\n\n async setRemoteLogCollectionEnabled(options: {\n enabled: boolean;\n }): Promise<{ remoteLogCollectionEnabled: boolean }> {\n if (typeof options?.enabled !== 'boolean') {\n throw new Error('No enabled value provided');\n }\n\n // A JavaScript SDK older than capture requests has nothing to switch.\n const jsSdk = Gleap as unknown as {\n setRemoteLogCollectionEnabled?: (enabled: boolean) => void;\n };\n if (typeof jsSdk.setRemoteLogCollectionEnabled === 'function') {\n jsSdk.setRemoteLogCollectionEnabled(options.enabled);\n }\n\n return { remoteLogCollectionEnabled: options.enabled };\n }\n\n async identify(options: {\n userId: string;\n userHash?: string | undefined;\n customData?: Record<string, any> | undefined;\n name?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n companyId?: string | undefined;\n companyName?: string | undefined;\n avatar?: string | undefined;\n sla?: number | undefined;\n plan?: string | undefined;\n value?: number | undefined;\n }): Promise<{ identify: boolean }> {\n var userData = {\n name: options.name,\n email: options.email,\n phone: options.phone,\n companyId: options.companyId,\n companyName: options.companyName,\n avatar: options.avatar,\n sla: options.sla,\n plan: options.plan,\n value: options.value,\n customData: options.customData,\n };\n if (options.userHash) {\n Gleap.identify(options.userId, userData, options.userHash);\n } else {\n Gleap.identify(options.userId, userData);\n }\n\n return { identify: true };\n }\n\n async updateContact(options: {\n name?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n companyId?: string | undefined;\n companyName?: string | undefined;\n avatar?: string | undefined;\n sla?: number | undefined;\n plan?: string | undefined;\n value?: number | undefined;\n customData?: Record<string, any> | undefined;\n }): Promise<{ identify: boolean }> {\n Gleap.updateContact(options);\n\n return { identify: true };\n }\n\n async setNetworkLogsBlacklist(options: {\n blacklist: string[];\n }): Promise<{ blacklistSet: boolean }> {\n Gleap.setNetworkLogsBlacklist(options.blacklist);\n\n return { blacklistSet: true };\n }\n\n async setNetworkLogPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{ propsToIgnoreSet: boolean }> {\n Gleap.setNetworkLogPropsToIgnore(options.propsToIgnore);\n\n return { propsToIgnoreSet: true };\n }\n\n async attachNetworkLogs(): Promise<{ networkLogsAttached: boolean }> {\n // The JavaScript SDK records the page's requests itself on web.\n return { networkLogsAttached: false };\n }\n\n async logsFlushed(): Promise<void> {\n // The JavaScript SDK collects the logs on web itself: nothing is buffered here.\n }\n\n async attachConsoleLogs(): Promise<{ consoleLogsAttached: boolean }> {\n // The JavaScript SDK records the page's console itself on web.\n return { consoleLogsAttached: false };\n }\n\n async setEnvDataPropsToIgnore(options: {\n propsToIgnore: string[];\n }): Promise<{ envDataPropsToIgnoreSet: boolean }> {\n Gleap.setEnvDataPropsToIgnore(options.propsToIgnore);\n\n return { envDataPropsToIgnoreSet: true };\n }\n\n async setTags(options: { tags: string[] }): Promise<{ tagsSet: boolean }> {\n Gleap.setTags(options.tags);\n\n return { tagsSet: true };\n }\n\n async clearIdentity(): Promise<{ clearIdentity: boolean }> {\n Gleap.clearIdentity();\n\n return { clearIdentity: true };\n }\n\n async getIdentity(): Promise<{\n identity: {\n userId: string;\n name?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n companyId?: string | undefined;\n companyName?: string | undefined;\n avatar?: string | undefined;\n sla?: number | undefined;\n plan?: string | undefined;\n value?: number | undefined;\n };\n }> {\n return { identity: Gleap.getIdentity() };\n }\n\n async isUserIdentified(): Promise<{ isUserIdentified: boolean }> {\n return { isUserIdentified: Gleap.isUserIdentified() };\n }\n\n async attachCustomData(options: {\n data: any;\n }): Promise<{ attachedCustomData: boolean }> {\n Gleap.attachCustomData(options.data);\n\n return { attachedCustomData: true };\n }\n\n async setCustomData(options: {\n key: string;\n value: string;\n }): Promise<{ setCustomData: boolean }> {\n Gleap.setCustomData(options.key, options.value);\n\n return { setCustomData: true };\n }\n\n async removeCustomData(options: {\n key: string;\n }): Promise<{ removedCustomData: boolean }> {\n Gleap.removeCustomData(options.key);\n\n return { removedCustomData: true };\n }\n\n async clearCustomData(): Promise<{ clearedCustomData: boolean }> {\n Gleap.clearCustomData();\n\n return { clearedCustomData: true };\n }\n\n async trackEvent(options: {\n name: string;\n data?: any;\n }): Promise<{ loggedEvent: boolean }> {\n Gleap.trackEvent(options.name, options.data);\n\n return { loggedEvent: true };\n }\n\n async trackPage(options: {\n pageName: string;\n }): Promise<{ trackedPage: boolean }> {\n Gleap.trackEvent('pageView', {\n page: options.pageName,\n });\n\n return { trackedPage: true };\n }\n\n async startFeedbackFlow(options: {\n feedbackFlow?: string | undefined;\n showBackButton?: boolean | undefined;\n }): Promise<{ startedFeedbackFlow: boolean }> {\n if (!options.feedbackFlow) {\n }\n\n Gleap.startFeedbackFlow(\n options.feedbackFlow ?? 'bugreporting',\n options.showBackButton,\n );\n\n return { startedFeedbackFlow: true };\n }\n\n async startBot(options: {\n botId?: string | undefined;\n showBackButton?: boolean | undefined;\n }): Promise<{ startedBot: boolean }> {\n if (!options.botId) {\n }\n\n Gleap.startBot(options.botId ?? '', options.showBackButton);\n\n return { startedBot: true };\n }\n\n async setLanguage(options: {\n languageCode: string;\n }): Promise<{ setLanguage: string }> {\n Gleap.setLanguage(options.languageCode);\n\n return { setLanguage: options.languageCode };\n }\n\n async log(options: {\n message: string;\n logLevel?: 'ERROR' | 'WARNING' | 'INFO' | undefined;\n }): Promise<{ logged: boolean }> {\n Gleap.log(options.message, options.logLevel);\n\n return { logged: true };\n }\n\n async setEventCallback(callback: GleapEventCallback): Promise<string> {\n var callbackId = this.makeid(10);\n GleapWeb.callbacks[callbackId] = callback;\n return callbackId;\n }\n\n async sendSilentCrashReport(options: {\n description: string;\n severity?: 'LOW' | 'MEDIUM' | 'HIGH' | undefined;\n dataExclusion?:\n | {\n customData: Boolean;\n metaData: Boolean;\n attachments: Boolean;\n consoleLog: Boolean;\n networkLogs: Boolean;\n customEventLog: Boolean;\n screenshot: Boolean;\n replays: Boolean;\n }\n | undefined;\n }): Promise<{ sentSilentBugReport: boolean }> {\n Gleap.sendSilentCrashReport(\n options.description,\n options.severity,\n options.dataExclusion,\n );\n\n return { sentSilentBugReport: true };\n }\n\n async open(): Promise<{ openedWidget: boolean }> {\n Gleap.open();\n\n return { openedWidget: true };\n }\n\n async openChecklists(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openChecklists(options.showBackButton);\n\n return { opened: true };\n }\n\n async openChecklist(options: {\n checklistId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openChecklist(options.checklistId, options.showBackButton);\n\n return { opened: true };\n }\n\n async startChecklist(options: {\n outboundId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.startChecklist(options.outboundId, options.showBackButton);\n\n return { opened: true };\n }\n\n async openFeatureRequests(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ openedFeatureRequests: boolean }> {\n Gleap.openFeatureRequests(options.showBackButton);\n\n return { openedFeatureRequests: true };\n }\n\n async openNews(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ openedNews: boolean }> {\n Gleap.openNews(options.showBackButton);\n\n return { openedNews: true };\n }\n\n async openNewsArticle(options: {\n articleId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openNewsArticle(options.articleId, options.showBackButton);\n\n return { opened: true };\n }\n\n async openHelpCenter(options: {\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openHelpCenter(options.showBackButton);\n\n return { opened: true };\n }\n\n async openHelpCenterArticle(options: {\n articleId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openHelpCenterArticle(options.articleId, options.showBackButton);\n\n return { opened: true };\n }\n\n async askAI(options: {\n question: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.askAI(options.question, options.showBackButton);\n\n return { opened: true };\n }\n\n async openHelpCenterCollection(options: {\n collectionId: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.openHelpCenterCollection(\n options.collectionId,\n options.showBackButton,\n );\n\n return { opened: true };\n }\n\n async searchHelpCenter(options: {\n term: string;\n showBackButton?: boolean | undefined;\n }): Promise<{ opened: boolean }> {\n Gleap.searchHelpCenter(options.term, options.showBackButton);\n\n return { opened: true };\n }\n\n async close(): Promise<{ closedWidget: boolean }> {\n Gleap.close();\n\n return { closedWidget: true };\n }\n\n async isOpened(): Promise<{ isOpened: boolean }> {\n return { isOpened: Gleap.isOpened() };\n }\n\n async disableConsoleLogOverwrite(): Promise<{ consoleLogDisabled: boolean }> {\n Gleap.disableConsoleLogOverwrite();\n\n return { consoleLogDisabled: true };\n }\n\n async enableDebugConsoleLog(): Promise<{ debugConsoleLogEnabled: boolean }> {\n return { debugConsoleLogEnabled: true };\n }\n\n async preFillForm(options: {\n data: any;\n }): Promise<{ preFilledForm: boolean }> {\n Gleap.preFillForm(options.data);\n\n return { preFilledForm: true };\n }\n\n async addAttachment(_options: {\n base64data: string;\n name: string;\n }): Promise<{ attachmentAdded: boolean }> {\n throw this.unavailable('addAttachment not available for browsers');\n }\n\n async removeAllAttachments(): Promise<{ allAttachmentsRemoved: boolean }> {\n throw this.unavailable('removeAllAttachments not available for browsers');\n }\n\n async setNotificationContainerOffset(_options: {\n x: number;\n y: number;\n }): Promise<{ notificationContainerOffsetSet: boolean }> {\n return { notificationContainerOffsetSet: true };\n }\n\n private makeid(length: number): string {\n var result = '';\n var characters =\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var charactersLength = characters.length;\n for (var i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n }\n}\n"]}
|