diff --git a/js/core/telemetrySyncManager.js b/js/core/telemetrySyncManager.js index 9c97642..64aaec9 100644 --- a/js/core/telemetrySyncManager.js +++ b/js/core/telemetrySyncManager.js @@ -42,28 +42,27 @@ var TelemetrySyncManager = { return; } telemetryObj = { - "id": "api.sunbird.telemetry", - "ver": Telemetry._version, - "params": { - "msgid": CryptoJS.MD5(JSON.stringify(telemetryEvents)).toString(), - }, - "ets": (new Date()).getTime() + ((Telemetry.config.timeDiff*1000) || 0), - "events": telemetryEvents + "data": { + "id": "api.mosip.telemetry", + "params": { + "msgid": CryptoJS.MD5(JSON.stringify(telemetryEvents)).toString(), + }, + "ets": getUTCTime(), + "events": telemetryEvents + } }; } var headersParam = {}; - if ('undefined' != typeof Telemetry.config.authtoken) - headersParam["Authorization"] = 'Bearer ' + Telemetry.config.authtoken; + /* if ('undefined' != typeof Telemetry.config.authtoken) + headersParam["Authorization"] = 'Bearer ' + Telemetry.config.authtoken; */ var fullPath = Telemetry.config.host + Telemetry.config.apislug + Telemetry.config.endpoint; headersParam['dataType'] = 'json'; headersParam["Content-Type"] = "application/json"; - headersParam['x-app-id'] = Telemetry.config.pdata.id; - headersParam['x-device-id'] = Telemetry.fingerPrintId; - headersParam['x-channel-id'] = Telemetry.config.channel; + axios.post( fullPath, JSON.stringify(telemetryObj), - {headers: {headersParam}} + {headers: headersParam} ) .then((result) => { Telemetry.config.telemetryDebugEnabled && console.log("Telemetry API success", result); @@ -73,9 +72,9 @@ var TelemetrySyncManager = { instance._failedBatch.push(telemetryObj); } if (error.status == 403) { - console.error("Authentication error: ", error); + console.error("Authentication error: ", JSON.stringify(error)); } else { - console.log("Error while Telemetry sync to server: ", error); + console.log("Error while Telemetry sync to server: ", JSON.stringify(error)); } }); }, diff --git a/js/core/telemetryV3Interface.js b/js/core/telemetryV3Interface.js index 89341e9..33448ff 100644 --- a/js/core/telemetryV3Interface.js +++ b/js/core/telemetryV3Interface.js @@ -1,10 +1,3 @@ -/** - * Telemetry V3 Library - * @author Manjunath Davanam - * @author Akash Gupta - */ - -// To support for node server environment if (typeof require === "function") { var Ajv = require('ajv') } @@ -15,6 +8,10 @@ var libraryDispatcher = { } }; +let getUTCTime = function (){ + return Date.parse(new Date().toUTCString()) +} + const EventListener = function() { const events = {}; @@ -48,41 +45,38 @@ var Telemetry = (function() { var telemetryInstance = this; this.telemetry.initialized = false; this.telemetry.config = {}; - this.telemetry._version = "3.0"; - this.telemetry.fingerPrintId = undefined; EventListener.call(this); this.dispatcher = libraryDispatcher; this.dispatcher.dispatch = this.dispatcher.dispatch.bind(this); this._defaultValue = { - uid: "anonymous", - authtoken: "", - batchsize: 20, - host: "https://api.ekstep.in", - endpoint: "/data/v3/telemetry", - apislug: "/action", - }, - this.telemetryEnvelop = { - "eid": "", - "ets": "", - "ver": "", - "mid": '', - "actor": {}, - "context": {}, - "object": {}, - "tags": [], - "edata": "" - } + uid: "", + authtoken: "", + batchsize: 20, + host: "", + endpoint: "", + apislug: "", + }, + this.telemetryEnvelop = { + "eid": "", + "ets": "", + "mid": "", + "sid": "", + "appid":"", + "actor": {}, + "edata": "" + } this._globalContext = { - "channel": 'in.ekstep', - "pdata": { id: "in.ekstep", ver: "1.0", pid: "" }, - "env": "contentplayer", + "channel": '', + "pdata": { id: "", ver: "", pid: "" }, + "env": "", "sid": "", "did": "", + "appid":"", "cdata": [], "rollup": {} }; - this.runningEnv = 'client'; + //this.runningEnv = 'client'; this.enableValidation = false; this._globalObject = {}; this.startData = []; @@ -106,7 +100,7 @@ var Telemetry = (function() { * @param {object} options [It can have `context, object, actor` can be explicitly passed in this event] */ this.telemetry.start = function(config, contentId, contentVer, data, options) { - data.duration = data.duration || (((new Date()).getTime()) * 0.001); // Converting duration miliSeconds to seconds + //data.duration = data.duration || (getUTCTime() * 0.001); // Converting duration miliSeconds to seconds if (contentId && contentVer) { telemetryInstance._globalObject.id = contentId; telemetryInstance._globalObject.ver = contentVer; @@ -279,6 +273,11 @@ var Telemetry = (function() { instance._dispatch(instance.getEvent('SUMMARY', data)); } + this.telemetry.appinfo = function(data, options) { + instance.updateValues(options); + instance._dispatch(instance.getEvent('APPINFO', data)); + } + /** * Which is used to log the end telemetry event. * @param {object} data [data which is need to pass in this event ex: {"type":"player","mode":"ContentPlayer","pageid":"splash"}] @@ -287,7 +286,7 @@ var Telemetry = (function() { this.telemetry.end = function(data, options) { if (telemetryInstance.startData.length) { var startEventObj = telemetryInstance.startData.pop(); - data.duration = ((new Date()).getTime() - startEventObj.ets) * 0.001; // Converting duration miliSeconds to seconds + data.duration = (getUTCTime() - startEventObj.ets) * 0.001; // Converting duration miliSeconds to seconds instance.updateValues(options); instance._dispatch(instance.getEvent('END', data)); } else { @@ -316,17 +315,16 @@ var Telemetry = (function() { * @param {object} object [Object value] */ this.telemetry.resetObject = function(object) { - telemetryInstance._currentObject = object || {}; - }, - - /** - * Which is used to reset the current actor value. - * @param {object} object [Object value] - */ - this.telemetry.resetActor = function(actor) { - telemetryInstance._currentActor = actor || {}; - } + telemetryInstance._currentObject = object || {}; + }, + /** + * Which is used to reset the current actor value. + * @param {object} object [Object value] + */ + this.telemetry.resetActor = function(actor) { + telemetryInstance._currentActor = actor || {}; + } /** * Which is used to reset the current actor value. @@ -375,34 +373,18 @@ var Telemetry = (function() { instance._dispatch = function(message) { message.mid = message.eid + ':' + CryptoJS.MD5(JSON.stringify(message)).toString(); if (telemetryInstance.enableValidation) { - var validate = ajv.getSchema('http://api.ekstep.org/telemetry/' + message.eid.toLowerCase()) + var schemaBaseUrl = 'http://api.ekstep.org/telemetry/'; + if(telemetry.config.schemaBaseUrl){ + schemaBaseUrl = telemetry.config.schemaBaseUrl; + } + var validate = ajv.getSchema(schemaBaseUrl + message.eid.toLowerCase()) var valid = validate(message) if (!valid) { console.error('Invalid ' + message.eid + ' Event: ' + ajv.errorsText(validate.errors)) return } } - if (telemetryInstance.runningEnv === 'client') { - if (!message.context.did) { - if (!Telemetry.fingerPrintId) { - Telemetry.getFingerPrint(function(result, components) { - message.context.did = result; - message.actor.id = instance.getActorId(message.actor.id, result); - Telemetry.fingerPrintId = result; - dispatcher.dispatch(message); - }) - } else { - message.context.did = Telemetry.fingerPrintId; - message.actor.id = instance.getActorId(message.actor.id, Telemetry.fingerPrintId); - dispatcher.dispatch(message); - } - } else { - message.actor.id = instance.getActorId(message.actor.id, message.context.did); - dispatcher.dispatch(message); - } - } else { - dispatcher.dispatch(message); - } + dispatcher.dispatch(message); } /** @@ -427,14 +409,10 @@ var Telemetry = (function() { */ instance.getEvent = function(eventId, data) { telemetryInstance.telemetryEnvelop.eid = eventId; - // timeDiff (in sec) is diff of server date and local date - telemetryInstance.telemetryEnvelop.ets = (new Date()).getTime() + ((Telemetry.config.timeDiff*1000) || 0); - telemetryInstance.telemetryEnvelop.ver = Telemetry._version; + telemetryInstance.telemetryEnvelop.ets = getUTCTime(); + telemetryInstance.telemetryEnvelop.sid = Telemetry.config.sid; telemetryInstance.telemetryEnvelop.mid = ''; - telemetryInstance.telemetryEnvelop.actor = Object.assign({}, { "id": Telemetry.config.uid || 'anonymous', "type": 'User' }, instance.getUpdatedValue('actor')); - telemetryInstance.telemetryEnvelop.context = Object.assign({}, instance.getGlobalContext(), instance.getUpdatedValue('context')); - telemetryInstance.telemetryEnvelop.object = Object.assign({}, instance.getGlobalObject(), instance.getUpdatedValue('object')); - telemetryInstance.telemetryEnvelop.tags = Object.assign([], Telemetry.config.tags, instance.getUpdatedValue('tags')); + telemetryInstance.telemetryEnvelop.appid = Telemetry.config.appid; telemetryInstance.telemetryEnvelop.edata = data; return telemetryInstance.telemetryEnvelop; } @@ -450,10 +428,9 @@ var Telemetry = (function() { config.rollup && (telemetryInstance._globalContext.rollup = config.rollup); config.sid && (telemetryInstance._globalContext.sid = config.sid); config.did && (telemetryInstance._globalContext.did = config.did); + config.appid && (telemetryInstance._globalContext.appid = config.appid); config.cdata && (telemetryInstance._globalContext.cdata = config.cdata); config.pdata && (telemetryInstance._globalContext.pdata = config.pdata); - - } /** @@ -535,60 +512,7 @@ var Telemetry = (function() { return target; } } - var FPoptions = { - audio: { - timeout: 1000, - // On iOS 11, audio context can only be used in response to user interaction. - // We require users to explicitly enable audio fingerprinting on iOS 11. - // See https://stackoverflow.com/questions/46363048/onaudioprocess-not-called-on-ios11#46534088 - excludeIOS11: true - }, - fonts: { - swfContainerId: 'fingerprintjs2', - swfPath: 'flash/compiled/FontList.swf', - userDefinedFonts: [], - extendedJsFonts: false - }, - screen: { - // To ensure consistent fingerprints when users rotate their mobile devices - detectScreenOrientation: true - }, - plugins: { - sortPluginsFor: [/palemoon/i], - excludeIE: false - }, - extraComponents: [], - excludes: { - // Unreliable on Windows, see https://github.com/Valve/fingerprintjs2/issues/375 - 'enumerateDevices': true, - // devicePixelRatio depends on browser zoom, and it's impossible to detect browser zoom - 'pixelRatio': true, - // DNT depends on incognito mode for some browsers (Chrome) and it's impossible to detect incognito mode - 'doNotTrack': true, - // uses js fonts already - 'fontsFlash': true, - 'screenResolution': true, - 'availableScreenResolution': true - }, - NOT_AVAILABLE: 'not available', - ERROR: 'error', - EXCLUDED: 'excluded' - } - this.telemetry.getFingerPrint = function (cb) { - const ver = 'v1'; - if (localStorage && localStorage.getItem(`fpDetails_${ver}`)) { - var deviceDetails = JSON.parse(localStorage.getItem(`fpDetails_${ver}`)); - if (cb) cb(deviceDetails.result, deviceDetails.components, ver); - } else { - Fingerprint2.getV18(FPoptions, function (result, components) { - if (localStorage) { - // fpDetails contains components and deviceId generated from fingerprintJs - localStorage.setItem(`fpDetails_${ver}`, JSON.stringify({result: result, components: components})) - } - if (cb) cb(result, components, ver) - }) - } - } + if (typeof Object.assign != 'function') { instance.objectAssign(); } @@ -596,18 +520,6 @@ var Telemetry = (function() { return this.telemetry; })(); -/** - * Name space which is being fallowed - * @type {[type]} - */ - EkTelemetry = $t = Telemetry; - - -/** - * To support for the node backEnd, So any node developer can import this telemetry lib. - */ -if (typeof module != 'undefined') { - module.exports = Telemetry; -} \ No newline at end of file +module.exports = Telemetry; \ No newline at end of file diff --git a/js/package.json b/js/package.json index 4cf5f06..74c065f 100644 --- a/js/package.json +++ b/js/package.json @@ -62,6 +62,7 @@ }, "homepage": "https://github.com/project-sunbird/sunbird-telemetry-sdk/tree/master/js#readme", "dependencies": { + "axios": "^1.4.0", "grunt-karma": "^0.12.2", "karma": "^3.0.0" } diff --git a/js/schema/mosip_actor.json b/js/schema/mosip_actor.json index 6d5dc16..757b215 100644 --- a/js/schema/mosip_actor.json +++ b/js/schema/mosip_actor.json @@ -8,6 +8,5 @@ "type": { "type": "string" } - }, - "required": [ "type", "id"] + } } \ No newline at end of file diff --git a/js/schema/mosip_app_info.json b/js/schema/mosip_app_info.json new file mode 100644 index 0000000..541d9b6 --- /dev/null +++ b/js/schema/mosip_app_info.json @@ -0,0 +1,78 @@ +{ + "$id": "http://mosip.io/telemetry/appinfo", + "type": "object", + "required": ["eid", "edata"], + "allOf": [ + { + "$ref": "http://mosip.io/telemetry/common" + }, + { + "properties": { + "eid": { + "type": "string", + "enum": ["APPINFO"] + }, + "edata": { + "type": "object", + "additionalProperties": false, + "properties": { + "env": { + "type": "string", + "minLength": 1 + }, + "injiVersion": { + "type": "string", + "minLength": 1 + }, + "tuvaliVersion": { + "type": "string", + "minLength": 1 + }, + "buildNumber": { + "type": "string", + "minLength": 1 + }, + "preferredLanguage": { + "type": "string" + }, + "brandName": { + "type": "string", + "minLength": 1 + }, + "modelName": { + "type": "string", + "minLength": 1 + }, + "osName": { + "type": "string", + "minLength": 1 + }, + "osVersion": { + "type": "string", + "minLength": 1 + }, + "osApiLevel": { + "type": "string", + "minLength": 1 + }, + "isHardwareKeystoreSupported": { + "type": "boolean", + "minLength": 1 + }, + "dateTime": { + "type": "number", + "minLength": 1 + }, + "zone": { + "type": "string", + "minLength": 1 + }, + "offset": { + "type": "number" + } + } + } + } + } + ] + } \ No newline at end of file diff --git a/js/schema/mosip_common.json b/js/schema/mosip_common.json index 874e95e..ce51364 100644 --- a/js/schema/mosip_common.json +++ b/js/schema/mosip_common.json @@ -1,31 +1,30 @@ { - "$id": "http://mosip.io/telemetry/common", - "type": "object", - "properties": { - "ets": { - "type": "number", - "format": "date-time" - }, - "ver": { - "type": "string" - }, - "mid": { - "type": "string", - "minLength": 1 - }, - "object": { - "type": "object", - "properties": {}, - "required": [] - }, - "actor": { - "$ref": "http://mosip.io/telemetry/actor" - }, - "context": { - "$ref": "http://mosip.io/telemetry/context" - }, - "tags": { - "$ref": "http://mosip.io/telemetry/tags" + "$id": "http://mosip.io/telemetry/common", + "type": "object", + "required": ["ets", "sid", "mid", "appid", "actor"], + "allOf": [ + { + "$ref": "http://mosip.io/telemetry/actor" + }, + { + "properties": { + "ets": { + "type": "number", + "format": "date-time" + }, + "mid": { + "type": "string", + "minLength": 1 + }, + "sid": { + "type": "string", + "minLength": 1 + }, + "appid": { + "type": "string", + "minLength": 1 + } } } - } \ No newline at end of file + ] +} diff --git a/js/schema/mosip_context.json b/js/schema/mosip_context.json deleted file mode 100644 index b631102..0000000 --- a/js/schema/mosip_context.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$id": "http://mosip.io/telemetry/context", - "type": "object", - "properties": { - "channel": { - "type": "string" - }, - "pdata": { - "$ref": "http://mosip.io/telemetry/pdata" - }, - "env": { - "type": "string" - }, - "sid": { - "type": "string" - }, - "did": { - "type": "string" - }, - "cdata": { - "type": "array", - "items": {} - }, - "rollup": { - "type": "object", - "properties": {}, - "required": [] - } - }, - "required": ["env", "sid", "did"] -} diff --git a/js/schema/mosip_end.json b/js/schema/mosip_end.json index 30188e8..375fa40 100644 --- a/js/schema/mosip_end.json +++ b/js/schema/mosip_end.json @@ -1,7 +1,7 @@ { "$id": "http://mosip.io/telemetry/end", "type": "object", - "required": ["eid", "ets", "mid", "tags", "edata"], + "required": ["eid", "edata"], "allOf": [ { "$ref": "http://mosip.io/telemetry/common" @@ -15,12 +15,18 @@ "edata": { "type": "object", "additionalProperties": false, + "required": ["type", "status", "duration"], "properties": { "type": { "type": "string" + }, + "status": { + "type": "string" + }, + "duration": { + "type": "number" } - }, - "required": ["type"] + } } } } diff --git a/js/schema/mosip_error.json b/js/schema/mosip_error.json index 78d1e55..0db1f1d 100644 --- a/js/schema/mosip_error.json +++ b/js/schema/mosip_error.json @@ -1,7 +1,7 @@ { "$id": "http://mosip.io/telemetry/error", "type": "object", - "required": ["eid", "ets", "mid", "tags","edata"], + "required": ["eid", "edata"], "allOf": [ { "$ref": "http://mosip.io/telemetry/common" @@ -17,6 +17,9 @@ "additionalProperties": false, "required": ["errorId", "errorMessage", "stacktrace"], "properties": { + "type": { + "type": "string" + }, "errorId": { "type": "string" }, @@ -25,6 +28,60 @@ }, "stacktrace": { "type": "string" + }, + "env": { + "type": "string", + "minLength": 1 + }, + "injiVersion": { + "type": "string", + "minLength": 1 + }, + "tuvaliVersion": { + "type": "string", + "minLength": 1 + }, + "buildNumber": { + "type": "string", + "minLength": 1 + }, + "preferredLanguage": { + "type": "string" + }, + "brandName": { + "type": "string", + "minLength": 1 + }, + "modelName": { + "type": "string", + "minLength": 1 + }, + "osName": { + "type": "string", + "minLength": 1 + }, + "osVersion": { + "type": "string", + "minLength": 1 + }, + "osApiLevel": { + "type": "string", + "minLength": 1 + }, + "isHardwareKeystoreSupported": { + "type": "string", + "minLength": 1 + }, + "dateTime": { + "type": "string", + "minLength": 1 + }, + "zone": { + "type": "string", + "minLength": 1 + }, + "offset": { + "type": "number" } } } diff --git a/js/schema/mosip_impression.json b/js/schema/mosip_impression.json index 64d8a32..a110b71 100644 --- a/js/schema/mosip_impression.json +++ b/js/schema/mosip_impression.json @@ -1,7 +1,7 @@ { "$id": "http://mosip.io/telemetry/impression", "type": "object", - "required": ["eid", "ets", "mid", "tags", "edata"], + "required": ["eid", "edata"], "allOf": [ { "$ref": "http://mosip.io/telemetry/common" diff --git a/js/schema/mosip_interact.json b/js/schema/mosip_interact.json index cbe5e39..60f0d4a 100644 --- a/js/schema/mosip_interact.json +++ b/js/schema/mosip_interact.json @@ -1,7 +1,7 @@ { "$id": "http://mosip.io/telemetry/interact", "type": "object", - "required": ["eid", "ets", "mid", "tags", "edata"], + "required": ["eid", "edata"], "allOf": [ { "$ref": "http://mosip.io/telemetry/common" @@ -15,6 +15,7 @@ "edata": { "type": "object", "additionalProperties": false, + "required": ["type", "subtype"], "properties": { "type": { "type": "string" @@ -22,9 +23,7 @@ "subtype": { "type": "string" } - - }, - "required": ["type","subtype"] + } } } } diff --git a/js/schema/mosip_log.json b/js/schema/mosip_log.json index 7c11fdc..7b81386 100644 --- a/js/schema/mosip_log.json +++ b/js/schema/mosip_log.json @@ -1,7 +1,7 @@ { "$id": "http://mosip.io/telemetry/log", "type": "object", - "required": ["eid", "ets", "mid", "tags","edata"], + "required": ["eid", "edata"], "allOf": [ { "$ref": "http://mosip.io/telemetry/common" @@ -9,7 +9,7 @@ { "properties": { "eid": { - "$id": "http://mosip.io/telemetry/eid", + "type": "string", "enum": ["LOG"] }, "edata": { diff --git a/js/schema/mosip_pdata.json b/js/schema/mosip_pdata.json deleted file mode 100644 index 13f2340..0000000 --- a/js/schema/mosip_pdata.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$id": "http://mosip.io/telemetry/pdata", - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "ver": { - "type": "string" - }, - "pid": { - "type": "string" - } - }, - "required": [] -} \ No newline at end of file diff --git a/js/schema/mosip_start.json b/js/schema/mosip_start.json index 337b2ee..822d6e7 100644 --- a/js/schema/mosip_start.json +++ b/js/schema/mosip_start.json @@ -1,7 +1,7 @@ { "$id": "http://mosip.io/telemetry/start", "type": "object", - "required": ["eid", "ets", "mid", "tags", "edata"], + "required": ["eid", "edata"], "allOf": [ { "$ref": "http://mosip.io/telemetry/common" @@ -18,12 +18,9 @@ "properties": { "type": { "type": "string" - }, - "duration": { - "type": "number" } }, - "required": ["type", "duration"] + "required": ["type"] } } } diff --git a/js/schema/mosip_tags.json b/js/schema/mosip_tags.json deleted file mode 100644 index cafdff9..0000000 --- a/js/schema/mosip_tags.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "$id": "http://mosip.io/telemetry/tags", - "type": "array", - "items": { - "type": "object", - "properties": { - "osName": { - "type": "string", - "minLength": 1 - }, - "osVersion": { - "type": "string", - "minLength": 1 - }, - "injiVersion": { - "type": "string", - "minLength": 1 - }, - "tuvaliVersion": { - "type": "string", - "minLength": 1 - } - }, - "required": ["osName", "osVersion", "injiVersion", "tuvaliVersion"] - } -} diff --git a/js/schema/telemetry-spec.js b/js/schema/telemetry-spec.js index ebcffc3..2ae3f79 100644 --- a/js/schema/telemetry-spec.js +++ b/js/schema/telemetry-spec.js @@ -1 +1 @@ -var telemetrySchema = [{"$id":"http://api.ekstep.org/telemetry/actor","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/actor/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/actor/type","type":"string"}},"required":["type","id"]},{"$id":"http://api.ekstep.org/telemetry/assess","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["ASSESS"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["item","pass","score","resvalues","duration"],"properties":{"item":{"$ref":"http://api.ekstep.org/telemetry/question"},"index":{"$id":"http://api.ekstep.org/telemetry/edata/index","type":"number"},"pass":{"$id":"http://api.ekstep.org/telemetry/edata/pass","type":"string"},"score":{"$id":"http://api.ekstep.org/telemetry/edata/score","type":"number"},"resvalues":{"$id":"http://api.ekstep.org/telemetry/edata/resvalues","type":"array","items":{"type":"object"}},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/audit","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["AUDIT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"properties":{"props":{"$id":"http://api.ekstep.org/telemetry/edata/props","type":"array","items":{"type":"string"}},"state":{"$id":"http://api.ekstep.org/telemetry/edata/state","type":"string"},"prevstate":{"$id":"http://api.ekstep.org/telemetry/edata/prevstate","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/cdata","type":"array","items":{"type":"object","properties":{"type":{"$id":"http://api.ekstep.org/telemetry/cdata/type","type":"string"},"id":{"$id":"http://api.ekstep.org/telemetry/cdata/id","type":"string"}},"additionalProperties":false,"required":["type","id"]}},{"$id":"http://api.ekstep.org/telemetry/common","type":"object","properties":{"ets":{"$id":"http://api.ekstep.org/telemetry/ets","type":"number","format":"date-time"},"ver":{"$id":"http://api.ekstep.org/telemetry/ver","type":"string","enum":["3.0"]},"mid":{"$id":"http://api.ekstep.org/telemetry/mid","type":"string","minLength":1},"actor":{"$ref":"http://api.ekstep.org/telemetry/actor"},"context":{"$ref":"http://api.ekstep.org/telemetry/context"},"object":{"$ref":"http://api.ekstep.org/telemetry/object"},"tags":{"type":"array","items":{"type":"string"}}}},{"$id":"http://api.ekstep.org/telemetry/context","type":"object","properties":{"channel":{"$id":"http://api.ekstep.org/telemetry/context/channel","type":"string","minLength":1},"pdata":{"$ref":"http://api.ekstep.org/telemetry/pdata"},"env":{"$id":"http://api.ekstep.org/telemetry/context/env","type":"string"},"sid":{"$id":"http://api.ekstep.org/telemetry/context/sid","type":"string"},"did":{"$id":"http://api.ekstep.org/telemetry/context/did","type":"string"},"cdata":{"$ref":"http://api.ekstep.org/telemetry/cdata"}},"required":["channel","env","pdata"]},{"$id":"http://api.ekstep.org/telemetry/dspec","type":"object","properties":{"os":{"$id":"http://api.ekstep.org/telemetry/dspec/os","type":"string"},"make":{"$id":"http://api.ekstep.org/telemetry/dspec/make","type":"string"},"id":{"$id":"http://api.ekstep.org/telemetry/dspec/id","type":"string"},"mem":{"$id":"http://api.ekstep.org/telemetry/dspec/mem","type":"number","minimum":-1},"idisk":{"$id":"http://api.ekstep.org/telemetry/dspec/idisk","type":"number","minimum":-1},"edisk":{"$id":"http://api.ekstep.org/telemetry/dspec/edisk","type":"number","minimum":-1},"scrn":{"$id":"http://api.ekstep.org/telemetry/dspec/scrn","type":"number","minimum":-1},"camera":{"$id":"http://api.ekstep.org/telemetry/dspec/camera","type":"string"},"cpu":{"$id":"http://api.ekstep.org/telemetry/dspec/cpu","type":"string"},"sims":{"$id":"http://api.ekstep.org/telemetry/dspec/sims","type":"number","minimum":-1},"cap":{"$id":"http://api.ekstep.org/telemetry/dspec/cap","type":"array","items":{"type":"string"}}}},{"$id":"http://api.ekstep.org/telemetry/end","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["END"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"mode":{"$id":"http://api.ekstep.org/telemetry/edata/mode","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"summary":{"$id":"http://api.ekstep.org/telemetry/edata/summary","type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/error","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["ERROR"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["err","errtype","stacktrace"],"properties":{"err":{"$id":"http://api.ekstep.org/telemetry/edata/err","type":"string"},"errtype":{"$id":"http://api.ekstep.org/telemetry/edata/errtype","type":"string"},"stacktrace":{"$id":"http://api.ekstep.org/telemetry/edata/stacktrace","type":"string"},"traceid":{"$id":"http://api.ekstep.org/telemetry/edata/traceid","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"object":{"$ref":"http://api.ekstep.org/telemetry/inlineobject"},"plugin":{"$ref":"http://api.ekstep.org/telemetry/plugin"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/exdata","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["EXDATA"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"data":{"$id":"http://api.ekstep.org/telemetry/edata/data","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/feedback","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["FEEDBACK"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"properties":{"rating":{"$id":"http://api.ekstep.org/telemetry/edata/rating","type":"number"},"comments":{"$id":"http://api.ekstep.org/telemetry/edata/comments","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/heartbeat","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["HEARTBEAT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object"}}}]},{"$id":"http://api.ekstep.org/telemetry/impression","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["IMPRESSION"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type","pageid","uri"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"subtype":{"$id":"http://api.ekstep.org/telemetry/edata/subtype","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"uri":{"$id":"http://api.ekstep.org/telemetry/edata/uri","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"visits":{"$id":"http://api.ekstep.org/telemetry/edata/visits","type":"array","items":{"type":"object","properties":{"objid":{"$id":"http://api.ekstep.org/telemetry/edata/visits/objid","type":"string"},"objtype":{"$id":"http://api.ekstep.org/telemetry/edata/visits/objtype","type":"string"},"objver":{"$id":"http://api.ekstep.org/telemetry/edata/visits/objver","type":"string"},"section":{"$id":"http://api.ekstep.org/telemetry/edata/visits/section","type":"string"},"index":{"$id":"http://api.ekstep.org/telemetry/edata/visits/index","type":"number"}},"additionalProperties":false,"required":["objid","objtype"]}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/inlineobject","type":"object","additionalProperties":false,"required":["id","type","ver"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/inlineobject/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/inlineobject/type","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/inlineobject/ver","type":"string"},"subtype":{"$id":"http://api.ekstep.org/telemetry/inlineobject/subtype","type":"string"},"name":{"$id":"http://api.ekstep.org/telemetry/inlineobject/name","type":"string"},"code":{"$id":"http://api.ekstep.org/telemetry/inlineobject/code","type":"string"},"parent":{"$ref":"http://api.ekstep.org/telemetry/parent"}}},{"$id":"http://api.ekstep.org/telemetry/interact","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["INTERACT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type","id"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"subtype":{"$id":"http://api.ekstep.org/telemetry/edata/subtype","type":"string"},"id":{"$id":"http://api.ekstep.org/telemetry/edata/id","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"target":{"$ref":"http://api.ekstep.org/telemetry/target"},"plugin":{"$ref":"http://api.ekstep.org/telemetry/plugin"},"extra":{"$id":"http://api.ekstep.org/telemetry/edata/extra","type":"object"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/interrupt","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["INTERRUPT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/items","type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/items/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/items/type","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/items/ver","type":"string"},"params":{"$id":"http://api.ekstep.org/telemetry/items/params","type":"array","items":{"type":"object"}},"origin":{"$id":"http://api.ekstep.org/telemetry/items/origin","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/items/origin/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/items/origin/type","type":"string"}}},"to":{"$id":"http://api.ekstep.org/telemetry/items/to","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/items/to/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/items/to/type","type":"string"}}}}}},{"$id":"http://api.ekstep.org/telemetry/log","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["LOG"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type","level","message"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"level":{"$id":"http://api.ekstep.org/telemetry/edata/level","type":"string"},"message":{"$id":"http://api.ekstep.org/telemetry/edata/message","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"params":{"$id":"http://api.ekstep.org/telemetry/edata/params","type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://mosip.io/telemetry/actor","type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}},"required":["type","id"]},{"$id":"http://mosip.io/telemetry/common","type":"object","properties":{"ets":{"type":"number","format":"date-time"},"ver":{"type":"string"},"mid":{"type":"string","minLength":1},"object":{"type":"object","properties":{},"required":[]},"actor":{"$ref":"http://mosip.io/telemetry/actor"},"context":{"$ref":"http://mosip.io/telemetry/context"},"tags":{"$ref":"http://mosip.io/telemetry/tags"}}},{"$id":"http://mosip.io/telemetry/context","type":"object","properties":{"channel":{"type":"string"},"pdata":{"$ref":"http://mosip.io/telemetry/pdata"},"env":{"type":"string"},"sid":{"type":"string"},"did":{"type":"string"},"cdata":{"type":"array","items":{}},"rollup":{"type":"object","properties":{},"required":[]}},"required":["env","sid","did"]},{"$id":"http://mosip.io/telemetry/end","type":"object","required":["eid","ets","mid","tags","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["END"]},"edata":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"}},"required":["type"]}}}]},{"$id":"http://mosip.io/telemetry/error","type":"object","required":["eid","ets","mid","tags","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["ERROR"]},"edata":{"type":"object","additionalProperties":false,"required":["errorId","errorMessage","stacktrace"],"properties":{"errorId":{"type":"string"},"errorMessage":{"type":"string"},"stacktrace":{"type":"string"}}}}}]},{"$id":"http://mosip.io/telemetry/impression","type":"object","required":["eid","ets","mid","tags","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["IMPRESSION"]},"edata":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"}},"required":["type"]}}}]},{"$id":"http://mosip.io/telemetry/interact","type":"object","required":["eid","ets","mid","tags","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["INTERACT"]},"edata":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"},"subtype":{"type":"string"}},"required":["type","subtype"]}}}]},{"$id":"http://mosip.io/telemetry/log","type":"object","required":["eid","ets","mid","tags","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"$id":"http://mosip.io/telemetry/eid","enum":["LOG"]},"edata":{"type":"object","additionalProperties":false,"required":["type","level","message"],"properties":{"type":{"type":"string"},"level":{"type":"string"},"message":{"type":"string"},"additionalParameters":{"type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://mosip.io/telemetry/pdata","type":"object","properties":{"id":{"type":"string"},"ver":{"type":"string"},"pid":{"type":"string"}},"required":[]},{"$id":"http://mosip.io/telemetry/start","type":"object","required":["eid","ets","mid","tags","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["START"]},"edata":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"},"duration":{"type":"number"}},"required":["type","duration"]}}}]},{"$id":"http://mosip.io/telemetry/tags","type":"array","items":{"type":"object","properties":{"osName":{"type":"string","minLength":1},"osVersion":{"type":"string","minLength":1},"injiVersion":{"type":"string","minLength":1},"tuvaliVersion":{"type":"string","minLength":1}},"required":["osName","osVersion","injiVersion","tuvaliVersion"]}},{"$id":"http://api.ekstep.org/telemetry/object","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/object/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/object/type","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/object/ver","type":"string"},"rollup":{"$ref":"http://api.ekstep.org/telemetry/rollup"}}},{"$id":"http://api.ekstep.org/telemetry/parent","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/parent/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/parent/type","type":"string"}}},{"$id":"http://api.ekstep.org/telemetry/pdata","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/pdata/id","type":"string"},"pid":{"$id":"http://api.ekstep.org/telemetry/pdata/pid","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/pdata/ver","type":"string"}},"required":["id"]},{"$id":"http://api.ekstep.org/telemetry/plugin","type":"object","additionalProperties":false,"required":["id","ver"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/plugin/id","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/plugin/ver","type":"string"},"category":{"$id":"http://api.ekstep.org/telemetry/plugin/category","type":"string"}}},{"$id":"http://api.ekstep.org/telemetry/question","type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/question/id","type":"string"},"maxscore":{"$id":"http://api.ekstep.org/telemetry/question/maxscore","type":"number"},"exlength":{"$id":"http://api.ekstep.org/telemetry/question/exlength","type":"number"},"params":{"$id":"http://api.ekstep.org/telemetry/question/params","type":"array","items":{"type":"object"}},"uri":{"$id":"http://api.ekstep.org/telemetry/question/uri","type":"string"},"desc":{"$id":"http://api.ekstep.org/telemetry/question/desc","type":"string"},"title":{"$id":"http://api.ekstep.org/telemetry/question/title","type":"string"},"mmc":{"$id":"http://api.ekstep.org/telemetry/question/mmc","type":"array","items":{"type":"string"}},"mc":{"$id":"http://api.ekstep.org/telemetry/question/mc","type":"array","items":{"type":"string"}}}},{"$id":"http://api.ekstep.org/telemetry/response","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["RESPONSE"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["target","type","values"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/type","type":"string"},"target":{"$ref":"http://api.ekstep.org/telemetry/target"},"values":{"type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/rollup","type":"object","properties":{"l1":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l1","type":"string"},"l2":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l2","type":"string"},"l3":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l3","type":"string"},"l4":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l4","type":"string"}}},{"$id":"http://api.ekstep.org/telemetry/search","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["SEARCH"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["query","size","topn"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"query":{"$id":"http://api.ekstep.org/telemetry/edata/query","type":"string"},"filters":{"$id":"http://api.ekstep.org/telemetry/edata/filters","type":"object"},"sort":{"$id":"http://api.ekstep.org/telemetry/edata/sort","type":"object"},"correlationid":{"$id":"http://api.ekstep.org/telemetry/edata/correlationid","type":"string"},"size":{"$id":"http://api.ekstep.org/telemetry/edata/size","type":"number"},"topn":{"$id":"http://api.ekstep.org/telemetry/edata/topn","type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/share","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["SHARE"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["items"],"properties":{"dir":{"$id":"http://api.ekstep.org/telemetry/edata/dir","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"items":{"$ref":"http://api.ekstep.org/telemetry/items"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/start","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["START"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"dspec":{"$ref":"http://api.ekstep.org/telemetry/dspec"},"uaspec":{"$ref":"http://api.ekstep.org/telemetry/uaspec"},"loc":{"$id":"http://api.ekstep.org/telemetry/edata/loc","type":"string"},"mode":{"$id":"http://api.ekstep.org/telemetry/edata/mode","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/target","type":"object","additionalProperties":false,"required":["id","ver","type"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/target/id","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/target/ver","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/target/type","type":"string"},"parent":{"$ref":"http://api.ekstep.org/telemetry/parent"}}},{"$id":"http://api.ekstep.org/telemetry/uaspec","type":"object","properties":{"agent":{"$id":"http://api.ekstep.org/telemetry/uaspec/agent","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/uaspec/ver","type":"string"},"system":{"$id":"http://api.ekstep.org/telemetry/uaspec/system","type":"string"},"platform":{"$id":"http://api.ekstep.org/telemetry/uaspec/platform","type":"string"},"raw":{"$id":"http://api.ekstep.org/telemetry/uaspec/raw","type":"string"}}}] \ No newline at end of file +var telemetrySchema = [{"$id":"http://api.ekstep.org/telemetry/actor","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/actor/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/actor/type","type":"string"}},"required":["type","id"]},{"$id":"http://api.ekstep.org/telemetry/assess","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["ASSESS"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["item","pass","score","resvalues","duration"],"properties":{"item":{"$ref":"http://api.ekstep.org/telemetry/question"},"index":{"$id":"http://api.ekstep.org/telemetry/edata/index","type":"number"},"pass":{"$id":"http://api.ekstep.org/telemetry/edata/pass","type":"string"},"score":{"$id":"http://api.ekstep.org/telemetry/edata/score","type":"number"},"resvalues":{"$id":"http://api.ekstep.org/telemetry/edata/resvalues","type":"array","items":{"type":"object"}},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/audit","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["AUDIT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"properties":{"props":{"$id":"http://api.ekstep.org/telemetry/edata/props","type":"array","items":{"type":"string"}},"state":{"$id":"http://api.ekstep.org/telemetry/edata/state","type":"string"},"prevstate":{"$id":"http://api.ekstep.org/telemetry/edata/prevstate","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/cdata","type":"array","items":{"type":"object","properties":{"type":{"$id":"http://api.ekstep.org/telemetry/cdata/type","type":"string"},"id":{"$id":"http://api.ekstep.org/telemetry/cdata/id","type":"string"}},"additionalProperties":false,"required":["type","id"]}},{"$id":"http://api.ekstep.org/telemetry/common","type":"object","properties":{"ets":{"$id":"http://api.ekstep.org/telemetry/ets","type":"number","format":"date-time"},"ver":{"$id":"http://api.ekstep.org/telemetry/ver","type":"string","enum":["3.0"]},"mid":{"$id":"http://api.ekstep.org/telemetry/mid","type":"string","minLength":1},"actor":{"$ref":"http://api.ekstep.org/telemetry/actor"},"context":{"$ref":"http://api.ekstep.org/telemetry/context"},"object":{"$ref":"http://api.ekstep.org/telemetry/object"},"tags":{"type":"array","items":{"type":"string"}}}},{"$id":"http://api.ekstep.org/telemetry/context","type":"object","properties":{"channel":{"$id":"http://api.ekstep.org/telemetry/context/channel","type":"string","minLength":1},"pdata":{"$ref":"http://api.ekstep.org/telemetry/pdata"},"env":{"$id":"http://api.ekstep.org/telemetry/context/env","type":"string"},"sid":{"$id":"http://api.ekstep.org/telemetry/context/sid","type":"string"},"did":{"$id":"http://api.ekstep.org/telemetry/context/did","type":"string"},"cdata":{"$ref":"http://api.ekstep.org/telemetry/cdata"}},"required":["channel","env","pdata"]},{"$id":"http://api.ekstep.org/telemetry/dspec","type":"object","properties":{"os":{"$id":"http://api.ekstep.org/telemetry/dspec/os","type":"string"},"make":{"$id":"http://api.ekstep.org/telemetry/dspec/make","type":"string"},"id":{"$id":"http://api.ekstep.org/telemetry/dspec/id","type":"string"},"mem":{"$id":"http://api.ekstep.org/telemetry/dspec/mem","type":"number","minimum":-1},"idisk":{"$id":"http://api.ekstep.org/telemetry/dspec/idisk","type":"number","minimum":-1},"edisk":{"$id":"http://api.ekstep.org/telemetry/dspec/edisk","type":"number","minimum":-1},"scrn":{"$id":"http://api.ekstep.org/telemetry/dspec/scrn","type":"number","minimum":-1},"camera":{"$id":"http://api.ekstep.org/telemetry/dspec/camera","type":"string"},"cpu":{"$id":"http://api.ekstep.org/telemetry/dspec/cpu","type":"string"},"sims":{"$id":"http://api.ekstep.org/telemetry/dspec/sims","type":"number","minimum":-1},"cap":{"$id":"http://api.ekstep.org/telemetry/dspec/cap","type":"array","items":{"type":"string"}}}},{"$id":"http://api.ekstep.org/telemetry/end","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["END"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"mode":{"$id":"http://api.ekstep.org/telemetry/edata/mode","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"summary":{"$id":"http://api.ekstep.org/telemetry/edata/summary","type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/error","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["ERROR"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["err","errtype","stacktrace"],"properties":{"err":{"$id":"http://api.ekstep.org/telemetry/edata/err","type":"string"},"errtype":{"$id":"http://api.ekstep.org/telemetry/edata/errtype","type":"string"},"stacktrace":{"$id":"http://api.ekstep.org/telemetry/edata/stacktrace","type":"string"},"traceid":{"$id":"http://api.ekstep.org/telemetry/edata/traceid","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"object":{"$ref":"http://api.ekstep.org/telemetry/inlineobject"},"plugin":{"$ref":"http://api.ekstep.org/telemetry/plugin"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/exdata","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["EXDATA"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"data":{"$id":"http://api.ekstep.org/telemetry/edata/data","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/feedback","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["FEEDBACK"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"properties":{"rating":{"$id":"http://api.ekstep.org/telemetry/edata/rating","type":"number"},"comments":{"$id":"http://api.ekstep.org/telemetry/edata/comments","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/heartbeat","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["HEARTBEAT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object"}}}]},{"$id":"http://api.ekstep.org/telemetry/impression","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["IMPRESSION"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type","pageid","uri"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"subtype":{"$id":"http://api.ekstep.org/telemetry/edata/subtype","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"uri":{"$id":"http://api.ekstep.org/telemetry/edata/uri","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"visits":{"$id":"http://api.ekstep.org/telemetry/edata/visits","type":"array","items":{"type":"object","properties":{"objid":{"$id":"http://api.ekstep.org/telemetry/edata/visits/objid","type":"string"},"objtype":{"$id":"http://api.ekstep.org/telemetry/edata/visits/objtype","type":"string"},"objver":{"$id":"http://api.ekstep.org/telemetry/edata/visits/objver","type":"string"},"section":{"$id":"http://api.ekstep.org/telemetry/edata/visits/section","type":"string"},"index":{"$id":"http://api.ekstep.org/telemetry/edata/visits/index","type":"number"}},"additionalProperties":false,"required":["objid","objtype"]}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/inlineobject","type":"object","additionalProperties":false,"required":["id","type","ver"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/inlineobject/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/inlineobject/type","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/inlineobject/ver","type":"string"},"subtype":{"$id":"http://api.ekstep.org/telemetry/inlineobject/subtype","type":"string"},"name":{"$id":"http://api.ekstep.org/telemetry/inlineobject/name","type":"string"},"code":{"$id":"http://api.ekstep.org/telemetry/inlineobject/code","type":"string"},"parent":{"$ref":"http://api.ekstep.org/telemetry/parent"}}},{"$id":"http://api.ekstep.org/telemetry/interact","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["INTERACT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type","id"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"subtype":{"$id":"http://api.ekstep.org/telemetry/edata/subtype","type":"string"},"id":{"$id":"http://api.ekstep.org/telemetry/edata/id","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"target":{"$ref":"http://api.ekstep.org/telemetry/target"},"plugin":{"$ref":"http://api.ekstep.org/telemetry/plugin"},"extra":{"$id":"http://api.ekstep.org/telemetry/edata/extra","type":"object"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/interrupt","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["INTERRUPT"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/items","type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/items/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/items/type","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/items/ver","type":"string"},"params":{"$id":"http://api.ekstep.org/telemetry/items/params","type":"array","items":{"type":"object"}},"origin":{"$id":"http://api.ekstep.org/telemetry/items/origin","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/items/origin/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/items/origin/type","type":"string"}}},"to":{"$id":"http://api.ekstep.org/telemetry/items/to","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/items/to/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/items/to/type","type":"string"}}}}}},{"$id":"http://api.ekstep.org/telemetry/log","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["LOG"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type","level","message"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"level":{"$id":"http://api.ekstep.org/telemetry/edata/level","type":"string"},"message":{"$id":"http://api.ekstep.org/telemetry/edata/message","type":"string"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"},"params":{"$id":"http://api.ekstep.org/telemetry/edata/params","type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://mosip.io/telemetry/actor","type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"}}},{"$id":"http://mosip.io/telemetry/appinfo","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["APPINFO"]},"edata":{"type":"object","additionalProperties":false,"properties":{"env":{"type":"string","minLength":1},"injiVersion":{"type":"string","minLength":1},"tuvaliVersion":{"type":"string","minLength":1},"buildNumber":{"type":"string","minLength":1},"preferredLanguage":{"type":"string"},"brandName":{"type":"string","minLength":1},"modelName":{"type":"string","minLength":1},"osName":{"type":"string","minLength":1},"osVersion":{"type":"string","minLength":1},"osApiLevel":{"type":"string","minLength":1},"isHardwareKeystoreSupported":{"type":"boolean","minLength":1},"dateTime":{"type":"number","minLength":1},"zone":{"type":"string","minLength":1},"offset":{"type":"number"}}}}}]},{"$id":"http://mosip.io/telemetry/common","type":"object","required":["ets","sid","mid","appid","actor"],"allOf":[{"$ref":"http://mosip.io/telemetry/actor"},{"properties":{"ets":{"type":"number","format":"date-time"},"mid":{"type":"string","minLength":1},"sid":{"type":"string","minLength":1},"appid":{"type":"string","minLength":1}}}]},{"$id":"http://mosip.io/telemetry/end","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["END"]},"edata":{"type":"object","additionalProperties":false,"required":["type","status","duration"],"properties":{"type":{"type":"string"},"status":{"type":"string"},"duration":{"type":"number"}}}}}]},{"$id":"http://mosip.io/telemetry/error","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["ERROR"]},"edata":{"type":"object","additionalProperties":false,"required":["errorId","errorMessage","stacktrace"],"properties":{"type":{"type":"string"},"errorId":{"type":"string"},"errorMessage":{"type":"string"},"stacktrace":{"type":"string"},"env":{"type":"string","minLength":1},"injiVersion":{"type":"string","minLength":1},"tuvaliVersion":{"type":"string","minLength":1},"buildNumber":{"type":"string","minLength":1},"preferredLanguage":{"type":"string"},"brandName":{"type":"string","minLength":1},"modelName":{"type":"string","minLength":1},"osName":{"type":"string","minLength":1},"osVersion":{"type":"string","minLength":1},"osApiLevel":{"type":"string","minLength":1},"isHardwareKeystoreSupported":{"type":"string","minLength":1},"dateTime":{"type":"string","minLength":1},"zone":{"type":"string","minLength":1},"offset":{"type":"number"}}}}}]},{"$id":"http://mosip.io/telemetry/impression","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["IMPRESSION"]},"edata":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"}},"required":["type"]}}}]},{"$id":"http://mosip.io/telemetry/interact","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["INTERACT"]},"edata":{"type":"object","additionalProperties":false,"required":["type","subtype"],"properties":{"type":{"type":"string"},"subtype":{"type":"string"}}}}}]},{"$id":"http://mosip.io/telemetry/log","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["LOG"]},"edata":{"type":"object","additionalProperties":false,"required":["type","level","message"],"properties":{"type":{"type":"string"},"level":{"type":"string"},"message":{"type":"string"},"additionalParameters":{"type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://mosip.io/telemetry/start","type":"object","required":["eid","edata"],"allOf":[{"$ref":"http://mosip.io/telemetry/common"},{"properties":{"eid":{"type":"string","enum":["START"]},"edata":{"type":"object","additionalProperties":false,"properties":{"type":{"type":"string"}},"required":["type"]}}}]},{"$id":"http://api.ekstep.org/telemetry/object","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/object/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/object/type","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/object/ver","type":"string"},"rollup":{"$ref":"http://api.ekstep.org/telemetry/rollup"}}},{"$id":"http://api.ekstep.org/telemetry/parent","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/parent/id","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/parent/type","type":"string"}}},{"$id":"http://api.ekstep.org/telemetry/pdata","type":"object","properties":{"id":{"$id":"http://api.ekstep.org/telemetry/pdata/id","type":"string"},"pid":{"$id":"http://api.ekstep.org/telemetry/pdata/pid","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/pdata/ver","type":"string"}},"required":["id"]},{"$id":"http://api.ekstep.org/telemetry/plugin","type":"object","additionalProperties":false,"required":["id","ver"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/plugin/id","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/plugin/ver","type":"string"},"category":{"$id":"http://api.ekstep.org/telemetry/plugin/category","type":"string"}}},{"$id":"http://api.ekstep.org/telemetry/question","type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/question/id","type":"string"},"maxscore":{"$id":"http://api.ekstep.org/telemetry/question/maxscore","type":"number"},"exlength":{"$id":"http://api.ekstep.org/telemetry/question/exlength","type":"number"},"params":{"$id":"http://api.ekstep.org/telemetry/question/params","type":"array","items":{"type":"object"}},"uri":{"$id":"http://api.ekstep.org/telemetry/question/uri","type":"string"},"desc":{"$id":"http://api.ekstep.org/telemetry/question/desc","type":"string"},"title":{"$id":"http://api.ekstep.org/telemetry/question/title","type":"string"},"mmc":{"$id":"http://api.ekstep.org/telemetry/question/mmc","type":"array","items":{"type":"string"}},"mc":{"$id":"http://api.ekstep.org/telemetry/question/mc","type":"array","items":{"type":"string"}}}},{"$id":"http://api.ekstep.org/telemetry/response","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["RESPONSE"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["target","type","values"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/type","type":"string"},"target":{"$ref":"http://api.ekstep.org/telemetry/target"},"values":{"type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/rollup","type":"object","properties":{"l1":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l1","type":"string"},"l2":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l2","type":"string"},"l3":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l3","type":"string"},"l4":{"$id":"http://api.ekstep.org/telemetry/context/rollup/l4","type":"string"}}},{"$id":"http://api.ekstep.org/telemetry/search","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["SEARCH"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["query","size","topn"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"query":{"$id":"http://api.ekstep.org/telemetry/edata/query","type":"string"},"filters":{"$id":"http://api.ekstep.org/telemetry/edata/filters","type":"object"},"sort":{"$id":"http://api.ekstep.org/telemetry/edata/sort","type":"object"},"correlationid":{"$id":"http://api.ekstep.org/telemetry/edata/correlationid","type":"string"},"size":{"$id":"http://api.ekstep.org/telemetry/edata/size","type":"number"},"topn":{"$id":"http://api.ekstep.org/telemetry/edata/topn","type":"array","items":{"type":"object"}}}}}}]},{"$id":"http://api.ekstep.org/telemetry/share","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["SHARE"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["items"],"properties":{"dir":{"$id":"http://api.ekstep.org/telemetry/edata/dir","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"items":{"$ref":"http://api.ekstep.org/telemetry/items"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/start","type":"object","required":["eid","ets","ver","mid","actor","context","edata"],"allOf":[{"$ref":"http://api.ekstep.org/telemetry/common"},{"properties":{"eid":{"$id":"http://api.ekstep.org/telemetry/eid","enum":["START"]},"edata":{"$id":"http://api.ekstep.org/telemetry/edata","type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"$id":"http://api.ekstep.org/telemetry/edata/type","type":"string"},"dspec":{"$ref":"http://api.ekstep.org/telemetry/dspec"},"uaspec":{"$ref":"http://api.ekstep.org/telemetry/uaspec"},"loc":{"$id":"http://api.ekstep.org/telemetry/edata/loc","type":"string"},"mode":{"$id":"http://api.ekstep.org/telemetry/edata/mode","type":"string"},"duration":{"$id":"http://api.ekstep.org/telemetry/edata/duration","type":"number"},"pageid":{"$id":"http://api.ekstep.org/telemetry/edata/pageid","type":"string"}}}}}]},{"$id":"http://api.ekstep.org/telemetry/target","type":"object","additionalProperties":false,"required":["id","ver","type"],"properties":{"id":{"$id":"http://api.ekstep.org/telemetry/target/id","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/target/ver","type":"string"},"type":{"$id":"http://api.ekstep.org/telemetry/target/type","type":"string"},"parent":{"$ref":"http://api.ekstep.org/telemetry/parent"}}},{"$id":"http://api.ekstep.org/telemetry/uaspec","type":"object","properties":{"agent":{"$id":"http://api.ekstep.org/telemetry/uaspec/agent","type":"string"},"ver":{"$id":"http://api.ekstep.org/telemetry/uaspec/ver","type":"string"},"system":{"$id":"http://api.ekstep.org/telemetry/uaspec/system","type":"string"},"platform":{"$id":"http://api.ekstep.org/telemetry/uaspec/platform","type":"string"},"raw":{"$id":"http://api.ekstep.org/telemetry/uaspec/raw","type":"string"}}}] \ No newline at end of file