@chirpier/chirpier-js 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Chirpier SDK
2
2
 
3
- The Chirpier SDK is a lightweight, versatile library for monitoring and tracking streams of data in both browser and server environments. With built-in retry logic, and offline handling, the Chirpier SDK makes it easy to collect and send data to the Chirpier API.
3
+ The Chirpier SDK is a lightweight, library for monitoring and tracking streams of data in both browser and server environments. With built-in retry logic, and offline handling, the Chirpier SDK makes it easy to collect and send data to the Chirpier API.
4
4
 
5
5
  ## Features
6
6
 
@@ -12,8 +12,9 @@ The Chirpier SDK is a lightweight, versatile library for monitoring and tracking
12
12
  ## Installation
13
13
 
14
14
  You can install the Chirpier SDK via npm:
15
+
15
16
  ```
16
- npm install @chirpier/sdk
17
+ npm install @chirpier/chirpier-js
17
18
  ```
18
19
 
19
20
  ## Getting Started
@@ -23,8 +24,9 @@ npm install @chirpier/sdk
23
24
  To start using the SDK, you need to initialize it with your API key. The SDK works in both browser and Node.js environments.
24
25
 
25
26
  #### In a Browser
27
+
26
28
  ```
27
- import { initialize, monitor } from '@chirpier/sdk-js';
29
+ import { initialize, monitor, Event } from '@chirpier/chirpier-js';
28
30
 
29
31
  // Initialize the SDK with your API key
30
32
  initialize({ key: 'your-api-key' });
@@ -32,15 +34,16 @@ initialize({ key: 'your-api-key' });
32
34
  // Send a data stream tied to a group of streams
33
35
  monitor({
34
36
  group_id: '02e4f4d8-415e-4fc1-b01a-677ac5bc9207',
35
- stream: 'Sales',
37
+ stream_name: 'Sales',
36
38
  value: 15.30,
37
- });
39
+ } as Event);
38
40
  ```
39
41
 
40
42
  #### In a Server (e.g., Express.js)
43
+
41
44
  ```
42
45
  const express = require('express');
43
- const { initialize, monitor } = require('@chirpier/sdk-js');
46
+ const { initialize, monitor, Event } = require('@chirpier/chirpier-js');
44
47
 
45
48
  const app = express();
46
49
  const port = 3000;
@@ -50,15 +53,15 @@ initialize({ key: 'your-api-key' });
50
53
 
51
54
  app.use(express.json());
52
55
 
53
- app.post('/track-event', (req, res) => {
54
- const { group_id, monitor, value } = req.body;
56
+ app.post('/monitor', (req, res) => {
57
+ const { group_id, stream_name, value } = req.body;
55
58
 
56
- if (!group_id || !monitor || !value) {
59
+ if (!group_id || !stream_name || !value) {
57
60
  return res.status(400).json({ error: 'Missing required fields' });
58
61
  }
59
62
 
60
63
  // Monitor an event
61
- monitor({ group_id, monitor, value });
64
+ monitor({ group_id, stream_name, value } as Event);
62
65
 
63
66
  res.status(200).json({ message: 'Event tracked successfully' });
64
67
  });
@@ -69,6 +72,7 @@ app.listen(port, () => {
69
72
  ```
70
73
 
71
74
  ## Example
75
+
72
76
  ```
73
77
  // Initialize the SDK with your API key
74
78
  initialize({ key: 'your-api-key' });
@@ -76,16 +80,7 @@ initialize({ key: 'your-api-key' });
76
80
  // Monitor an event
77
81
  monitor({
78
82
  group_id: 'group UUID',
79
- stream: 'Sales',
83
+ stream_name: 'My measurement',
80
84
  value: 15.3,
81
85
  });
82
86
  ```
83
-
84
- ## Advanced Usage
85
- Handling Offline Scenarios
86
-
87
- The SDK automatically queues events when the network is unavailable and sends them when the connection is restored.
88
-
89
- ## Custom Storage Mechanisms
90
-
91
- The SDK uses localStorage for browser environments and in memory storage for Node.js. If you need a custom storage mechanism, you can extend the SDK by implementing the Storage interface.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=chirpier.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chirpier.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/chirpier.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ var index_1 = require("../index");
43
+ var constants_1 = require("../constants");
44
+ var axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter"));
45
+ var axios_1 = __importDefault(require("axios"));
46
+ describe("Chirpier SDK", function () {
47
+ describe("Initialization", function () {
48
+ test("should throw error if monitor is called before initialize", function () {
49
+ var event = {
50
+ group_id: "bfd9299d-817a-452f-bc53-6e154f2281fc",
51
+ stream_name: "test-stream",
52
+ value: 1,
53
+ };
54
+ expect(function () { return (0, index_1.monitor)(event); }).toThrow(index_1.ChirpierError);
55
+ expect(function () { return (0, index_1.monitor)(event); }).toThrow("Chirpier SDK is not initialized. Please call initialize() first.");
56
+ });
57
+ test("should initialize with default values", function () {
58
+ (0, index_1.initialize)({
59
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
60
+ logLevel: index_1.LogLevel.None
61
+ });
62
+ var chirpier = index_1.Chirpier.getInstance({});
63
+ // Setup mock server
64
+ var mock = new axios_mock_adapter_1.default(axios_1.default);
65
+ mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
66
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["apiEndpoint"]).toBe(constants_1.DEFAULT_API_ENDPOINT);
67
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["retries"]).toBe(constants_1.DEFAULT_RETRIES);
68
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["timeout"]).toBe(constants_1.DEFAULT_TIMEOUT);
69
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["batchSize"]).toBe(constants_1.DEFAULT_BATCH_SIZE);
70
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["flushDelay"]).toBe(constants_1.DEFAULT_FLUSH_DELAY);
71
+ index_1.Chirpier.stop();
72
+ });
73
+ test("should throw error if key is not provided", function () {
74
+ expect(function () {
75
+ (0, index_1.initialize)({
76
+ key: "api_key",
77
+ logLevel: index_1.LogLevel.None
78
+ });
79
+ }).toThrow(index_1.ChirpierError);
80
+ expect(function () {
81
+ (0, index_1.initialize)({
82
+ key: "api_key",
83
+ logLevel: index_1.LogLevel.None
84
+ });
85
+ }).toThrow("Invalid API key: Not a valid JWT");
86
+ });
87
+ });
88
+ describe("monitor", function () {
89
+ test("event should be sent", function () { return __awaiter(void 0, void 0, void 0, function () {
90
+ var mock, event;
91
+ return __generator(this, function (_a) {
92
+ switch (_a.label) {
93
+ case 0:
94
+ mock = new axios_mock_adapter_1.default(axios_1.default);
95
+ mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
96
+ (0, index_1.initialize)({
97
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
98
+ logLevel: index_1.LogLevel.None
99
+ });
100
+ event = {
101
+ group_id: "bfd9299d-817a-452f-bc53-6e154f2281fc",
102
+ stream_name: "test-stream",
103
+ value: 1,
104
+ };
105
+ (0, index_1.monitor)(event);
106
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
107
+ case 1:
108
+ _a.sent(); // Wait for flush
109
+ expect(mock.history.post.length).toBe(1);
110
+ expect(mock.history.post[0].url).toBe(constants_1.DEFAULT_API_ENDPOINT);
111
+ expect(JSON.parse(mock.history.post[0].data)).toEqual([
112
+ {
113
+ group_id: "bfd9299d-817a-452f-bc53-6e154f2281fc",
114
+ stream_name: "test-stream",
115
+ value: 1,
116
+ },
117
+ ]);
118
+ // Clean up the mock
119
+ mock.reset();
120
+ index_1.Chirpier.stop();
121
+ return [2 /*return*/];
122
+ }
123
+ });
124
+ }); });
125
+ test("should throw error for invalid event", function () { return __awaiter(void 0, void 0, void 0, function () {
126
+ var chirpier, invalidEvent;
127
+ return __generator(this, function (_a) {
128
+ switch (_a.label) {
129
+ case 0:
130
+ (0, index_1.initialize)({
131
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
132
+ logLevel: index_1.LogLevel.None
133
+ });
134
+ chirpier = index_1.Chirpier.getInstance({});
135
+ invalidEvent = {
136
+ group_id: "bfd9299d-817a-452f-bc53-6e154f2281fc",
137
+ };
138
+ return [4 /*yield*/, expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier.monitor(invalidEvent)).rejects.toThrow(index_1.ChirpierError)];
139
+ case 1:
140
+ _a.sent();
141
+ // Clean up the mock
142
+ index_1.Chirpier.stop();
143
+ return [2 /*return*/];
144
+ }
145
+ });
146
+ }); });
147
+ test("should batch events and flush when batch size is reached", function () { return __awaiter(void 0, void 0, void 0, function () {
148
+ var mock, event;
149
+ return __generator(this, function (_a) {
150
+ switch (_a.label) {
151
+ case 0:
152
+ mock = new axios_mock_adapter_1.default(axios_1.default);
153
+ mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
154
+ (0, index_1.initialize)({
155
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
156
+ logLevel: index_1.LogLevel.None
157
+ });
158
+ event = {
159
+ group_id: "bfd9299d-817a-452f-bc53-6e154f2281fc",
160
+ stream_name: "test-stream",
161
+ value: 1,
162
+ };
163
+ (0, index_1.monitor)(event);
164
+ (0, index_1.monitor)(event);
165
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
166
+ case 1:
167
+ _a.sent(); // Wait for flush
168
+ expect(mock.history.post.length).toBe(1);
169
+ expect(JSON.parse(mock.history.post[0].data).length).toBe(2);
170
+ mock.reset();
171
+ index_1.Chirpier.stop();
172
+ return [2 /*return*/];
173
+ }
174
+ });
175
+ }); });
176
+ test("should flush events after interval", function () { return __awaiter(void 0, void 0, void 0, function () {
177
+ var mock, event;
178
+ return __generator(this, function (_a) {
179
+ switch (_a.label) {
180
+ case 0:
181
+ mock = new axios_mock_adapter_1.default(axios_1.default);
182
+ mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
183
+ (0, index_1.initialize)({
184
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
185
+ logLevel: index_1.LogLevel.None
186
+ });
187
+ event = {
188
+ group_id: "bfd9299d-817a-452f-bc53-6e154f2281fc",
189
+ stream_name: "test-stream",
190
+ value: 1,
191
+ };
192
+ (0, index_1.monitor)(event);
193
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
194
+ case 1:
195
+ _a.sent(); // Wait for flush
196
+ expect(mock.history.post.length).toBe(1);
197
+ expect(JSON.parse(mock.history.post[0].data).length).toBe(1);
198
+ mock.reset();
199
+ index_1.Chirpier.stop();
200
+ return [2 /*return*/];
201
+ }
202
+ });
203
+ }); });
204
+ });
205
+ });
@@ -43,216 +43,153 @@ var index_1 = require("../index");
43
43
  var constants_1 = require("../constants");
44
44
  var axios_mock_adapter_1 = __importDefault(require("axios-mock-adapter"));
45
45
  var axios_1 = __importDefault(require("axios"));
46
- var server_1 = require("./mocks/server");
47
- var uuid_1 = require("@lukeed/uuid");
48
- jest.mock("@lukeed/uuid");
49
46
  describe("Chirpier SDK", function () {
50
- var chirpier;
51
- afterEach(function () {
52
- // Clean up mock server
53
- (0, server_1.cleanupMockServer)();
54
- });
55
47
  describe("Initialization", function () {
56
- test("should initialize with default values", function () {
57
- chirpier = new index_1.Chirpier({
58
- key: "api_key",
59
- });
60
- // Setup mock server
61
- var mock = new axios_mock_adapter_1.default(axios_1.default);
62
- mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
63
- expect(chirpier["apiEndpoint"]).toBe(constants_1.DEFAULT_API_ENDPOINT);
64
- expect(chirpier["retries"]).toBe(constants_1.DEFAULT_RETRIES);
48
+ test("should throw error if monitor is called before initialize", function () {
49
+ var event = {
50
+ group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
51
+ stream_name: "test-stream",
52
+ value: 1,
53
+ };
54
+ expect(function () { return (0, index_1.monitor)(event); }).toThrow(index_1.ChirpierError);
55
+ expect(function () { return (0, index_1.monitor)(event); }).toThrow("Chirpier SDK is not initialized. Please call initialize() first.");
65
56
  });
66
- test("should initialize with custom values using mock server", function () {
67
- chirpier = new index_1.Chirpier({
68
- key: "api_key",
57
+ test("should initialize with default values", function () {
58
+ (0, index_1.initialize)({
59
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
69
60
  });
61
+ var chirpier = index_1.Chirpier.getInstance({});
70
62
  // Setup mock server
71
63
  var mock = new axios_mock_adapter_1.default(axios_1.default);
72
64
  mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
73
- var customChirpier = new index_1.Chirpier({
74
- key: "api_key",
75
- apiEndpoint: constants_1.DEFAULT_API_ENDPOINT,
76
- retries: 5,
77
- });
78
- expect(customChirpier["apiEndpoint"]).toBe(constants_1.DEFAULT_API_ENDPOINT);
79
- expect(customChirpier["retries"]).toBe(5);
65
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["apiEndpoint"]).toBe(constants_1.DEFAULT_API_ENDPOINT);
66
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["retries"]).toBe(constants_1.DEFAULT_RETRIES);
67
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["timeout"]).toBe(constants_1.DEFAULT_TIMEOUT);
68
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["batchSize"]).toBe(constants_1.DEFAULT_BATCH_SIZE);
69
+ expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier["flushTimeout"]).toBe(constants_1.DEFAULT_FLUSH_DELAY);
70
+ index_1.Chirpier.stop();
80
71
  });
81
72
  test("should throw error if key is not provided", function () {
82
- chirpier = new index_1.Chirpier({
83
- key: "api_key",
84
- });
85
- // Setup mock server
86
- var mock = new axios_mock_adapter_1.default(axios_1.default);
87
- mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
88
- expect(function () { return new index_1.Chirpier({}); }).toThrow(index_1.ChirpierError);
89
- });
90
- test("should throw error if key is not a valid JWT", function () {
91
- expect(function () { return (0, index_1.initialize)({ key: "invalid_key" }); }).toThrow(index_1.ChirpierError);
92
- });
93
- test("should initialize successfully with a valid JWT", function () {
94
- var validJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
95
- expect(function () { return (0, index_1.initialize)({ key: validJWT }); }).not.toThrow();
73
+ expect(function () {
74
+ (0, index_1.initialize)({
75
+ key: "api_key",
76
+ });
77
+ }).toThrow(index_1.ChirpierError);
78
+ expect(function () {
79
+ (0, index_1.initialize)({
80
+ key: "api_key",
81
+ });
82
+ }).toThrow("Invalid API key: Not a valid JWT");
96
83
  });
97
84
  });
98
85
  describe("monitor", function () {
99
86
  test("event should be sent", function () { return __awaiter(void 0, void 0, void 0, function () {
100
- var mock, validJWT, event;
87
+ var mock, event;
101
88
  return __generator(this, function (_a) {
102
89
  switch (_a.label) {
103
90
  case 0:
104
- chirpier = new index_1.Chirpier({
105
- key: "api_key",
106
- });
107
91
  mock = new axios_mock_adapter_1.default(axios_1.default);
108
92
  mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
109
- validJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
110
- (0, index_1.initialize)({ key: validJWT });
93
+ (0, index_1.initialize)({
94
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
95
+ });
111
96
  event = {
112
97
  group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
113
- stream: "test-stream",
98
+ stream_name: "test-stream",
114
99
  value: 1,
115
100
  };
116
- return [4 /*yield*/, chirpier.monitor(event)];
101
+ (0, index_1.monitor)(event);
102
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
117
103
  case 1:
118
- _a.sent();
119
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
120
- case 2:
121
104
  _a.sent(); // Wait for flush
122
105
  expect(mock.history.post.length).toBe(1);
123
106
  expect(mock.history.post[0].url).toBe(constants_1.DEFAULT_API_ENDPOINT);
124
107
  expect(JSON.parse(mock.history.post[0].data)).toEqual([
125
108
  {
126
109
  group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
127
- stream: "test-stream",
110
+ stream_name: "test-stream",
128
111
  value: 1,
129
112
  },
130
113
  ]);
131
114
  // Clean up the mock
132
115
  mock.reset();
116
+ index_1.Chirpier.stop();
133
117
  return [2 /*return*/];
134
118
  }
135
119
  });
136
120
  }); });
137
121
  test("should throw error for invalid event", function () { return __awaiter(void 0, void 0, void 0, function () {
138
- var invalidEvent, mock;
122
+ var chirpier, invalidEvent;
139
123
  return __generator(this, function (_a) {
140
124
  switch (_a.label) {
141
125
  case 0:
142
- chirpier = new index_1.Chirpier({
143
- key: "api_key",
126
+ (0, index_1.initialize)({
127
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
144
128
  });
129
+ chirpier = index_1.Chirpier.getInstance({});
145
130
  invalidEvent = {
146
131
  group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
147
132
  };
148
- return [4 /*yield*/, expect(chirpier.monitor(invalidEvent)).rejects.toThrow(index_1.ChirpierError)];
133
+ return [4 /*yield*/, expect(chirpier === null || chirpier === void 0 ? void 0 : chirpier.monitor(invalidEvent)).rejects.toThrow(index_1.ChirpierError)];
149
134
  case 1:
150
135
  _a.sent();
151
- mock = new axios_mock_adapter_1.default(axios_1.default);
152
- mock.reset();
136
+ // Clean up the mock
137
+ index_1.Chirpier.stop();
153
138
  return [2 /*return*/];
154
139
  }
155
140
  });
156
141
  }); });
157
142
  test("should batch events and flush when batch size is reached", function () { return __awaiter(void 0, void 0, void 0, function () {
158
- var mock, validJWT, event;
143
+ var mock, event;
159
144
  return __generator(this, function (_a) {
160
145
  switch (_a.label) {
161
146
  case 0:
162
147
  mock = new axios_mock_adapter_1.default(axios_1.default);
163
148
  mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
164
- validJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
165
- (0, index_1.initialize)({ key: validJWT, batchSize: 2 });
149
+ (0, index_1.initialize)({
150
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
151
+ });
166
152
  event = {
167
153
  group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
168
- stream: "test-stream",
154
+ stream_name: "test-stream",
169
155
  value: 1,
170
156
  };
171
157
  (0, index_1.monitor)(event);
172
158
  (0, index_1.monitor)(event);
173
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 100); })];
159
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
174
160
  case 1:
175
161
  _a.sent(); // Wait for flush
176
162
  expect(mock.history.post.length).toBe(1);
177
163
  expect(JSON.parse(mock.history.post[0].data).length).toBe(2);
178
164
  mock.reset();
165
+ index_1.Chirpier.stop();
179
166
  return [2 /*return*/];
180
167
  }
181
168
  });
182
169
  }); });
183
170
  test("should flush events after interval", function () { return __awaiter(void 0, void 0, void 0, function () {
184
- var mock, validJWT, event;
171
+ var mock, event;
185
172
  return __generator(this, function (_a) {
186
173
  switch (_a.label) {
187
174
  case 0:
188
175
  mock = new axios_mock_adapter_1.default(axios_1.default);
189
176
  mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
190
- validJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
191
- (0, index_1.initialize)({ key: validJWT, flushInterval: 100 });
177
+ (0, index_1.initialize)({
178
+ key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
179
+ });
192
180
  event = {
193
181
  group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
194
- stream: "test-stream",
182
+ stream_name: "test-stream",
195
183
  value: 1,
196
184
  };
197
185
  (0, index_1.monitor)(event);
198
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
186
+ return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })];
199
187
  case 1:
200
188
  _a.sent(); // Wait for flush
201
189
  expect(mock.history.post.length).toBe(1);
202
190
  expect(JSON.parse(mock.history.post[0].data).length).toBe(1);
203
191
  mock.reset();
204
- return [2 /*return*/];
205
- }
206
- });
207
- }); });
208
- test("should use provided event_id if available", function () { return __awaiter(void 0, void 0, void 0, function () {
209
- var mock, validJWT, event;
210
- return __generator(this, function (_a) {
211
- switch (_a.label) {
212
- case 0:
213
- mock = new axios_mock_adapter_1.default(axios_1.default);
214
- mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
215
- validJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
216
- (0, index_1.initialize)({ key: validJWT });
217
- event = {
218
- group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
219
- stream: "test-stream",
220
- value: 1,
221
- event_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
222
- };
223
- (0, index_1.monitor)(event);
224
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
225
- case 1:
226
- _a.sent(); // Wait for flush
227
- expect(mock.history.post.length).toBe(1);
228
- expect(JSON.parse(mock.history.post[0].data)[0].event_id).toBe("f3438ee9-b964-48aa-b938-a803df440a3c");
229
- mock.reset();
230
- return [2 /*return*/];
231
- }
232
- });
233
- }); });
234
- test("should generate event_id if not provided", function () { return __awaiter(void 0, void 0, void 0, function () {
235
- var mock, validJWT, event;
236
- return __generator(this, function (_a) {
237
- switch (_a.label) {
238
- case 0:
239
- mock = new axios_mock_adapter_1.default(axios_1.default);
240
- mock.onPost(constants_1.DEFAULT_API_ENDPOINT).reply(200, { success: true });
241
- uuid_1.v4.mockReturnValue("generated-uuid");
242
- validJWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
243
- (0, index_1.initialize)({ key: validJWT });
244
- event = {
245
- group_id: "f3438ee9-b964-48aa-b938-a803df440a3c",
246
- stream: "test-stream",
247
- value: 1,
248
- };
249
- (0, index_1.monitor)(event);
250
- return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 1000); })];
251
- case 1:
252
- _a.sent(); // Wait for flush
253
- expect(mock.history.post.length).toBe(1);
254
- expect(JSON.parse(mock.history.post[0].data)[0].event_id).toBe("generated-uuid");
255
- mock.reset();
192
+ index_1.Chirpier.stop();
256
193
  return [2 /*return*/];
257
194
  }
258
195
  });
@@ -1,4 +1,7 @@
1
- export declare const DEFAULT_API_ENDPOINT = "https://events.chirpier.co/api/events";
2
- export declare const DEFAULT_RETRIES = 30;
1
+ export declare const DEFAULT_API_ENDPOINT = "https://events.chirpier.co/v1.0/events";
2
+ export declare const DEFAULT_RETRIES = 15;
3
3
  export declare const DEFAULT_TIMEOUT = 5000;
4
+ export declare const DEFAULT_BATCH_SIZE = 100;
5
+ export declare const DEFAULT_FLUSH_DELAY = 500;
6
+ export declare const MAX_QUEUE_SIZE = 2000;
4
7
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,0CAA0C,CAAC;AAC5E,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,OAAO,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,2CAA2C,CAAC;AAC7E,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,eAAO,MAAM,eAAe,OAAO,CAAA;AACnC,eAAO,MAAM,kBAAkB,MAAM,CAAC;AACtC,eAAO,MAAM,mBAAmB,MAAM,CAAC;AACvC,eAAO,MAAM,cAAc,OAAO,CAAC"}
package/dist/constants.js CHANGED
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  // constants.ts
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRIES = exports.DEFAULT_API_ENDPOINT = void 0;
5
- exports.DEFAULT_API_ENDPOINT = 'https://events.chirpier.co/api/events';
6
- exports.DEFAULT_RETRIES = 30;
4
+ exports.MAX_QUEUE_SIZE = exports.DEFAULT_FLUSH_DELAY = exports.DEFAULT_BATCH_SIZE = exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRIES = exports.DEFAULT_API_ENDPOINT = void 0;
5
+ exports.DEFAULT_API_ENDPOINT = 'https://events.chirpier.co/v1.0/events';
6
+ exports.DEFAULT_RETRIES = 15;
7
7
  exports.DEFAULT_TIMEOUT = 5000;
8
+ exports.DEFAULT_BATCH_SIZE = 100;
9
+ exports.DEFAULT_FLUSH_DELAY = 500;
10
+ exports.MAX_QUEUE_SIZE = 2000;