diff --git a/package.json b/package.json index efd97c8..2cbb3be 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@appbaseio/analytics", - "version": "1.1.1", + "version": "1.2.0-alpha.1", "description": "Universal analytics library for appbase.io apps", "main": "dist/@appbaseio/analytics.cjs.js", "jsnext:main": "dist/@appbaseio/analytics.es.js", diff --git a/src/index.js b/src/index.js index 77ab1fd..d85c5d9 100644 --- a/src/index.js +++ b/src/index.js @@ -116,6 +116,13 @@ type ConversionRequestBody = { meta?: Object }; +type UsefulnessConfig = { + useful: boolean, + reason?: string, + userID?: string, + meta?: Object +}; + type CallBack = (err: any, res: any) => void; type Metrics = { @@ -149,6 +156,12 @@ type Metrics = { body?: Object, queryParams?: Object, callback?: CallBack + ) => void, + // Save session's usefulness + saveSessionUsefulness?: ( + aiSessionId: string, + usefulnessConfig: UsefulnessConfig, + callback?: CallBack ) => void }; @@ -394,6 +407,42 @@ function initClient(config: AnalyticsConfig = {}) { // get queryID metrics.getQueryID = () => metrics.queryID; + // Save session's usefulness + metrics.saveSessionUsefulness = ( + aiSessionId: string, + usefulnessConfig: { + useful: boolean, + reason?: string, + userID?: string, + meta?: Object + }, + callback?: CallBack + ) => { + if (typeof aiSessionId !== 'string' || aiSessionId === '') { + throw new Error('appbase-analytics: AISessionId is required'); + } + if (typeof usefulnessConfig.useful !== 'boolean') { + throw new Error( + 'appbase-analytics: useful property is required and must be a boolean' + ); + } + + const requestBody = { + useful: usefulnessConfig.useful, + reason: usefulnessConfig.reason, + user_id: usefulnessConfig.userID, + meta: usefulnessConfig.meta + }; + + metrics._request( + 'PUT', + `_ai/${aiSessionId}/analytics`, + requestBody, + null, + callback + ); + }; + return metrics; } diff --git a/src/index.test.js b/src/index.test.js index 01d5893..ecdd558 100644 --- a/src/index.test.js +++ b/src/index.test.js @@ -341,3 +341,40 @@ describe('favorite', () => { ); }); }); +describe('saveSessionUsefulness', () => { + test("should save session's usefulness", done => { + // Note: Chagne credentials or sessionId incase + // the test case fails + var aa = AppbaseAnalytics.init({ + index, + credentials: 'a03a1cb71321:75b6603d-9456-4a5a-af6b-a487b309eb61', + url: URL + }); + // Save session usefulness + aa.saveSessionUsefulness( + 'nt3f6nuE7QHoEWB6JCX5Z6', + { + useful: true, + reason: 'The AI provided accurate information.', + userID: 'john_doe', + meta: { + platform: 'windows' + } + }, + (err, res) => { + if (err) { + console.error(err); + expect(true).toBe(false); + done(); + } else if (res && res.status === 401) { + console.error('401: Credentials no allowed to access AI'); + expect(false).toBe(true); + done(); + } else if (res && res.status === 200) { + expect(true).toBe(true); + done(); + } + } + ); + }); +});