1.0.0 • Published 7 months ago

@ht-sdks/events-sdk-js-node v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

@ht-sdks/events-sdk-js-node

https://www.npmjs.com/package/@ht-sdks/events-sdk-js-node

Runtime Support

  • Node.js >= 14
  • AWS Lambda
  • Cloudflare Workers
  • Vercel Edge Functions
  • Web Workers (experimental)

Quick Start

Install library

# npm
npm install @ht-sdks/events-sdk-js-node
# yarn
yarn add @ht-sdks/events-sdk-js-node
# pnpm
pnpm install @ht-sdks/events-sdk-js-node

Usage

Assuming some express-like web framework.

import { HtEvents } from '@ht-sdks/events-sdk-js-node'
// or, if you use require:
const { HtEvents } = require('@ht-sdks/events-sdk-js-node')

// instantiation
const htevents = new HtEvents({ writeKey: '<MY_WRITE_KEY>' })

app.post('/login', (req, res) => {
   htevents.identify({
      userId: req.body.userId,
      previousId: req.body.previousId
  })
  res.sendStatus(200)
})

app.post('/cart', (req, res) => {
  htevents.track({
    userId: req.body.userId,
    event: 'Add to cart',
    properties: { productId: '123456' }
  })
   res.sendStatus(201)
});

Settings & Configuration

You can also see the complete list of settings in the HtEventsSettings interface.

Usage in non-node runtimes

Usage in AWS Lambda

  • AWS lambda execution environment is challenging for typically non-response-blocking async activites like tracking or logging, since the runtime terminates / freezes after a response is emitted.

Here is an example of using HtEvents within a handler:

const { HtEvents } = require('@ht-sdks/events-sdk-js-node');

// since analytics has the potential to be stateful if there are any plugins added,
// to be on the safe side, we should instantiate a new instance of analytics on every request (the cost of instantiation is low).
const htevents = () => new HtEvents({
      maxEventsInBatch: 1,
      writeKey: '<MY_WRITE_KEY>',
    })
    .on('error', console.error);

module.exports.handler = async (event) => {
  ...
  // we need to await before returning, otherwise the lambda will exit before sending the request.
  await new Promise((resolve) =>
    htevents().track({ ... }, resolve)
   )

  ...
  return {
    statusCode: 200,
  };
  ....
};

Usage in Vercel Edge Functions

import { HtEvents } from '@ht-sdks/events-sdk-js-node';
import { NextRequest, NextResponse } from 'next/server';

export const htevents = new HtEvents({
  writeKey: '<MY_WRITE_KEY>',
  maxEventsInBatch: 1,
})
  .on('error', console.error)

export const config = {
  runtime: 'edge',
};

export default async (req: NextRequest) => {
  await new Promise((resolve) =>
    htevents.track({ ... }, resolve)
  );
  return NextResponse.json({ ... })
};

Usage in Cloudflare Workers

import { HtEvents, Context } from '@ht-sdks/events-sdk-js-node';

export default {
  async fetch(
    request: Request,
    env: Env,
    ctx: ExecutionContext
  ): Promise<Response> {
    const htevents = new HtEvents({
      maxEventsInBatch: 1,
      writeKey: '<MY_WRITE_KEY>',
    }).on('error', console.error);

    await new Promise((resolve, reject) =>
      htevents.track({ ... }, resolve)
    );

    ...
    return new Response(...)
  },
};