@highoutput/analytics
Advanced tools
Comparing version 0.1.6 to 0.2.2
import { Mixpanel } from 'mixpanel'; | ||
import PQueue from 'p-queue'; | ||
export declare class Analytics { | ||
protected project: string; | ||
protected driver: Mixpanel; | ||
protected queue: PQueue; | ||
protected status: 'STARTED' | 'SHUTTING_DOWN'; | ||
constructor(params: { | ||
project: string; | ||
token: string; | ||
}); | ||
@@ -14,9 +18,11 @@ createAccount(params: { | ||
created?: Date; | ||
[key: string]: any; | ||
}): void; | ||
createEvent(params: { | ||
name: string; | ||
eventName: string; | ||
accountId: string; | ||
body: Record<any, any>; | ||
}): void; | ||
stop(): Promise<void>; | ||
} | ||
//# sourceMappingURL=analytics.d.ts.map |
@@ -7,24 +7,74 @@ "use strict"; | ||
exports.Analytics = void 0; | ||
const logger_1 = __importDefault(require("@highoutput/logger")); | ||
const object_id_1 = require("@highoutput/object-id"); | ||
const mixpanel_1 = __importDefault(require("mixpanel")); | ||
const p_queue_1 = __importDefault(require("p-queue")); | ||
const ramda_1 = __importDefault(require("ramda")); | ||
const logger = new logger_1.default(['analytics']); | ||
function serialize(doc) { | ||
const obj = doc; | ||
return ramda_1.default.reduce((accum, [field, value]) => { | ||
if (value instanceof Buffer) { | ||
return Object.assign(Object.assign({}, accum), { [field]: new object_id_1.ObjectId(value).toString() }); | ||
} | ||
if (value instanceof object_id_1.ObjectId) { | ||
return Object.assign(Object.assign({}, accum), { [field]: value.toString() }); | ||
} | ||
return Object.assign(Object.assign({}, accum), { [field]: value }); | ||
}, {}, ramda_1.default.toPairs(obj)); | ||
} | ||
class Analytics { | ||
constructor(params) { | ||
this.project = params.project; | ||
this.driver = mixpanel_1.default.init(process.env.MIXPANEL_TOKEN || 'secrets'); | ||
this.driver = mixpanel_1.default.init(params.token); | ||
this.queue = new p_queue_1.default({ concurrency: 1 }); | ||
this.status = 'STARTED'; | ||
} | ||
createAccount(params) { | ||
var _a; | ||
this.driver.people.set(params.accountId.toString(), { | ||
$distinct_id: params.accountId.toString(), | ||
meta: { project: this.project }, | ||
$first_name: params.firstname, | ||
$last_name: params.lastname, | ||
$email: params.email, | ||
$created: (_a = params.created) !== null && _a !== void 0 ? _a : new Date(), | ||
if (this.status === 'SHUTTING_DOWN') | ||
return; | ||
const extraFields = serialize(ramda_1.default.omit(['accountId', 'firstname', 'lastname', 'email', 'created'], params)); | ||
this.queue.add(async () => { | ||
try { | ||
await new Promise((resolve, reject) => { | ||
var _a; | ||
this.driver.people.set(params.accountId.toString(), Object.assign({ $distinct_id: params.accountId.toString(), meta: { project: this.project }, $first_name: params.firstname, $last_name: params.lastname, $email: params.email, $created: (_a = params.created) !== null && _a !== void 0 ? _a : new Date() }, extraFields), (err) => { | ||
if (err) { | ||
reject(err); | ||
} | ||
resolve(); | ||
}); | ||
}); | ||
} | ||
catch (error) { | ||
logger.tag('createAccount').verbose(error); | ||
} | ||
}); | ||
} | ||
createEvent(params) { | ||
this.driver.track(params.name, Object.assign({ $distinct_id: params.accountId, meta: { project: this.project } }, params.body)); | ||
if (this.status === 'SHUTTING_DOWN') | ||
return; | ||
this.queue.add(async () => { | ||
try { | ||
await new Promise((resolve, reject) => { | ||
this.driver.track(params.eventName, Object.assign({ $distinct_id: params.accountId, meta: { project: this.project } }, serialize(params.body)), (err) => { | ||
if (err) { | ||
reject(err); | ||
} | ||
resolve(); | ||
}); | ||
}); | ||
} | ||
catch (error) { | ||
logger.tag('createEvent').verbose(error); | ||
} | ||
}); | ||
} | ||
async stop() { | ||
this.status = 'SHUTTING_DOWN'; | ||
this.queue.clear(); | ||
await this.queue.onIdle(); | ||
} | ||
} | ||
exports.Analytics = Analytics; | ||
//# sourceMappingURL=analytics.js.map |
export { Analytics } from './analytics'; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -0,0 +0,0 @@ "use strict"; |
{ | ||
"name": "@highoutput/analytics", | ||
"version": "0.1.6", | ||
"version": "0.2.2", | ||
"description": "Analytics", | ||
"main": "dist/index.js", | ||
"scripts": { | ||
"prepublishOnly": "npm run build", | ||
"prebuild": "rimraf dist/", | ||
"build": "tsc --project tsconfig.json", | ||
"test": "jest --config=./jest.config.js --coverage", | ||
"eslint": "eslint --fix --ext .ts,.tsx src/** tests/**" | ||
}, | ||
"publishConfig": { | ||
@@ -20,27 +27,27 @@ "access": "public" | ||
"dependencies": { | ||
"mixpanel": "^0.16.0", | ||
"typescript": "^4.7.4" | ||
"@highoutput/logger": "^0.5.19", | ||
"@highoutput/object-id": "0.1.8", | ||
"mixpanel": "0.16.0", | ||
"p-queue": "^6.6.2", | ||
"ramda": "0.28.0", | ||
"typescript": "4.7.4" | ||
}, | ||
"devDependencies": { | ||
"@types/chance": "^1.1.3", | ||
"@types/jest": "^28.1.5", | ||
"@types/node": "^18.0.3", | ||
"@typescript-eslint/eslint-plugin": "^5.30.6", | ||
"@typescript-eslint/parser": "^5.30.6", | ||
"chance": "^1.1.8", | ||
"eslint": "^8.19.0", | ||
"eslint-config-airbnb-base": "^15.0.0", | ||
"eslint-plugin-import": "^2.26.0", | ||
"eslint-plugin-prettier": "^4.2.1", | ||
"jest": "^28.1.2", | ||
"prettier": "^2.7.1", | ||
"ts-jest": "^28.0.5" | ||
"@highoutput/delay": "^0.2.8", | ||
"@types/chance": "1.1.3", | ||
"@types/jest": "28.1.5", | ||
"@types/node": "18.0.3", | ||
"@types/ramda": "0.28.15", | ||
"@typescript-eslint/eslint-plugin": "5.30.6", | ||
"@typescript-eslint/parser": "5.30.6", | ||
"chance": "1.1.8", | ||
"eslint": "8.19.0", | ||
"eslint-config-airbnb-base": "15.0.0", | ||
"eslint-plugin-import": "2.26.0", | ||
"eslint-plugin-prettier": "4.2.1", | ||
"jest": "28.1.2", | ||
"prettier": "2.7.1", | ||
"ts-jest": "28.0.5" | ||
}, | ||
"gitHead": "f6d14c3ca3a4fa04758b42513f5a167e41138c94", | ||
"scripts": { | ||
"prebuild": "rimraf dist/", | ||
"build": "tsc --project tsconfig.json", | ||
"test": "jest --config=./jest.config.js --coverage", | ||
"eslint": "eslint --fix --ext .ts,.tsx src/** tests/**" | ||
} | ||
} | ||
"gitHead": "86810b36720697c0a8ef64ed7b8c6d8ac3aa3a11" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
11600
10
111
1
82
0
0
6
15
+ Added@highoutput/logger@^0.5.19
+ Added@highoutput/object-id@0.1.8
+ Addedp-queue@^6.6.2
+ Addedramda@0.28.0
+ Added@highoutput/logger@0.5.19(transitive)
+ Added@highoutput/object-id@0.1.8(transitive)
+ Addedbase-x@4.0.0(transitive)
+ Addedbase64-js@1.5.1(transitive)
+ Addedbs58@5.0.0(transitive)
+ Addedbson@4.7.2(transitive)
+ Addedbuffer@5.7.1(transitive)
+ Addeddebug@3.2.7(transitive)
+ Addedeventemitter3@4.0.7(transitive)
+ Addedieee754@1.2.1(transitive)
+ Addedlru-cache@6.0.0(transitive)
+ Addedp-finally@1.0.0(transitive)
+ Addedp-queue@6.6.2(transitive)
+ Addedp-timeout@3.2.0(transitive)
+ Addedramda@0.28.0(transitive)
+ Addedrandombytes@2.1.0(transitive)
+ Addedsafe-buffer@5.2.1(transitive)
+ Addedtypescript@4.7.4(transitive)
+ Addedyallist@4.0.0(transitive)
- Removedtypescript@4.9.5(transitive)
Updatedmixpanel@0.16.0
Updatedtypescript@4.7.4