rutilus-analytics-node-js
Version:
Provides a GUI web app that allows users to examine their data in detail. Includes CSV export functionality.
359 lines (358 loc) • 8.55 kB
JavaScript
/**
* Rutilus
*
* @homepage https://gmrutilus.github.io
* @license Apache-2.0
*/
/**
*
* @typedef {{
* on: Function,
* pipe: Function,
* once: Function,
* }} WritableStream
*
* @typedef {{
* presetId: Number,
* tags: Array<String>,
* paramMap: Array<{ paramValue: String, paramName: String }>|undefined,
* invalidFields: Array<String>|undefined,
* }} DashboardSavedQuery
*
* @typedef {{
* request: {
* rateLimit: {
* limit: Number,
* remaining: Number,
* },
* body: Object<String, *>,
* },
* type: *,
* body: *,
* res: {
* joinsLib: JoinsLib|undefined,
* presets: Array<Preset>|undefined,
* schemas: Object<String, Query>|undefined,
* logger: MessageLogger|undefined,
* resultStreamer: ResultStreamer|undefined,
* extraInformation: Array<ExtraInformation>|undefined,
* errorHandler: ErrorHandler|undefined,
* emailer: Emailer|undefined,
* affinityTool: AffinityToolSettings|undefined,
* algorithms: Algorithms|undefined,
* dashboardSourceCode: String|undefined,
* recalculationLock: RecalculationLock|undefined,
* jsonToMongo: JsonToMongo|undefined,
* querySchedule: QuerySchedule|undefined,
* status: {
* requestingStatus,
* requestingToken,
* }|undefined
* },
* query: {
* p: String|undefined,
* f: String|undefined,
* d: String|undefined,
* start: String|undefined,
* end: String|undefined,
* },
* req: Object,
* isAuthenticated: Function,
* redirect: Function,
* logout: Function,
* }} KoaCtx
*
* @typedef {{
* _id: String,
* actions: {
* date: Number|undefined,
* type: String|undefined,
* text: String|undefined,
* url: String|undefined,
* positionX: Number|undefined,
* positionY: Number|undefined,
* sizeX: Number|undefined,
* sizeY: Number|undefined,
* isFixed: Boolean|undefined,
* isIframe: Boolean|undefined,
* id: String|undefined,
* classes: Array<String>|undefined,
* name: String|undefined,
* rawTag: String|undefined,
* target: String|undefined,
* inputName: String|undefined,
* inputRawTag: String|undefined,
* attributes: Object|undefined,
* inputContents: Object|undefined,
* flag: String|undefined,
* numCurrentShares: String|undefined,
* service: String|undefined,
* imageUrl: String|undefined,
* triggerName: String|undefined,
* },
* ads: Array<{
* url: String,
* positionX: Number,
* positionY: Number,
* sizeX: Number,
* sizeY: Number,
* isFixed: Boolean,
* }>,
* author: String,
* authorId: String,
* browser: {
* major: String,
* name: String,
* version: String,
* },
* charsNo: Number,
* city: String,
* country: String,
* clickback: String,
* clickTag: String,
* cookies: String,
* cookieEnabled: Boolean,
* commentsNo: Number,
* cpu: {
* architecture: String,
* },
* date: Number,
* dateClose: Number,
* device: {
* model: String,
* type: String,
* vendor: String,
* },
* documentSizeX: Number,
* documentSizeY: Number,
* engine: {
* name: String,
* version: String,
* },
* imagesNo: Number,
* ip: String,
* latitude: Number,
* loadTime: Number,
* longitude: Number,
* operatingSystem: {
* name: String,
* version: String,
* },
* paragraphsNo: Number,
* screenSizeX: Number,
* screenSizeY: Number,
* sessionCreationDate: Number,
* sessionId: String,
* sourceId: String,
* sourceType: String,
* tags: Array<String>,
* title: String,
* url: String,
* userAgent: String,
* userId: String,
* userName: String,
* usingAdBlock: Boolean,
* usingMobile: Boolean,
* videosNo: Number,
* wordsInBody: Object<String, Number>,
* wordsInTitle: Object<String, Number>,
* wordsNo: Number,
* }} Visit
*
* ????
*
*
* @typedef {{
* type: String,
* payload: *
* }} ReduxAction
*
* @typedef {Object<String, {
* path: Array<String>,
* key: String
* }>} IdOptions
*
* @typedef {{
* collection: String,
* path: Array<String>,
* foreignKey: String,
* localKey: String,
* }} MergeOption
*
*
* @typedef {XML} Group
* @typedef {XML} Condition
* @typedef {XML} Filter
*
* @typedef {Object<String, [GroupObject]>} Filters
*
* @typedef {Array<Object>} Projections
*
* @typedef {Object<String, Object>} MongoMatchFilters
*
* @typedef {{
* id: String|undefined,
* matchType: String,
* conditions: Array<ConditionObject>,
* groups: Array<GroupObject>,
* onDrop: Function|undefined,
* onChangeConditions: Function|undefined,
* onChangeMatch: Function|undefined,
* onChangeGroups: Function|undefined,
* }} GroupObject
*
* @typedef {{
* id: String,
* onDrop: Function,
* key: String,
* operator: ConditionOperator,
* value: *,
* isValid: Boolean
* }} ConditionObject
*
* @typedef {{
* label: String,
* value: String,
* field: ConditionOperatorField,
* }} ConditionOperator
*
* @typedef {Function} ConditionOperatorField
*
* @typedef {
* {
* title: String,
* description: String,
* type: Number,
* validate: Function,
* queryString: String
* }
* } Field
*
* @typedef {
* {
* title: String,
* description: String,
* fields: [Field],
* execute: Generator
* }
* } Preset
*
* @typedef {{
* date: Number,
* sessionId: String,
* userId: Number,
* _id: ObjectId,
* value: {
* affinity: UAT_Affinity,
* persona: UAT_Persona,
* profile: UAT_Profile,
* user: UAT_User,
* }
* }} UserAffinity
*
* @typedef {{
* section: Array<{
* average: Number,
* count: Number,
* relevance: Number,
* score: Number,
* sourceType: String,
* tagScores: Array<{
* average: Number,
* count: Number,
* relevance: Number,
* score: Number,
* tag: String,
* }>
* }>
* }} UAT_Affinity
*
* @typedef {Object} UAT_Persona
*
* @typedef {Object} UAT_Profile
*
* @typedef {
* {
* resourcesVisited: ResourcesVisited|undefined,
* userName: String|undefined,
* }
* } UAT_User
*
* @typedef {
* {
* _id: String,
* userId: Array<Number>|undefined,
* usingMobile: Boolean|undefined,
* screenSizeX: String|undefined,
* screenSizeY: String|undefined,
* browserId: String|undefined,
* operatingSystemId: String|undefined,
* deviceId: String|undefined,
* engineId: String|undefined,
* cpuId: String|undefined,
* resourcesVisited: ResourcesVisited|[]|undefined,
* }
* } UAT_Session
*
* @typedef {{
* sourceType: String,
* score: Number,
* average: Number,
* count: Number,
* relevance: Number,
* tagScores: [{
* tag: String,
* score: Number,
* average: Number,
* count: Number,
* relevance: Number,
* }]
* }} UAT_SectionAffinity
*
* @typedef {{
* author: String,
* score: Number,
* average: Number,
* count: Number,
* relevance: Number,
* }} UAT_AuthorAffinity
*
* @typedef {{
* authorId: Number,
* score: Number,
* average: Number,
* count: Number,
* relevance: Number,
* }} UAT_AuthorIdAffinity
*
* @typedef {
* [{
* sourceType: String,
* ids: [ResourceVisited],
* }]
* } ResourcesVisited
*
* @typedef {
* {
* author: String,
* authorId: Number,
* visitId: String,
* sourceId: String,
* tag: String
* }
* } ResourceVisited
*
* @typedef {{
* label: String,
* fieldName: String,
* type: String,
* target: String,
* inAffinityUser: Boolean|undefined,
* inAffinityPersona: Boolean|undefined,
* inAffinityProfile: Boolean|undefined,
* includeInOrientationQueries: Boolean|undefined,
* weight: Number|undefined,
* }} ExtraInformation
*
*
*/