@chirpier/chirpier-js 0.1.6 → 0.2.1
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 +184 -108
- package/dist/__tests__/chirpier.test.js +435 -100
- package/dist/constants.d.ts +7 -6
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +5 -4
- package/dist/index.d.ts +129 -56
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +483 -203
- package/package.json +5 -5
- package/src/__tests__/chirpier.test.ts +296 -92
- package/src/constants.ts +7 -6
- package/src/index.ts +492 -206
package/dist/constants.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// constants.ts
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.DEFAULT_API_ENDPOINT = exports.MAX_QUEUE_SIZE = exports.DEFAULT_FLUSH_DELAY = exports.DEFAULT_BATCH_SIZE = exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRIES = void 0;
|
|
4
|
+
exports.DEFAULT_SERVICER_ENDPOINT = exports.DEFAULT_API_ENDPOINT = exports.MAX_QUEUE_SIZE = exports.DEFAULT_FLUSH_DELAY = exports.DEFAULT_BATCH_SIZE = exports.DEFAULT_TIMEOUT = exports.DEFAULT_RETRIES = void 0;
|
|
5
5
|
exports.DEFAULT_RETRIES = 15;
|
|
6
6
|
exports.DEFAULT_TIMEOUT = 5000;
|
|
7
|
-
exports.DEFAULT_BATCH_SIZE =
|
|
7
|
+
exports.DEFAULT_BATCH_SIZE = 500;
|
|
8
8
|
exports.DEFAULT_FLUSH_DELAY = 500;
|
|
9
|
-
exports.MAX_QUEUE_SIZE =
|
|
10
|
-
exports.DEFAULT_API_ENDPOINT = "https://
|
|
9
|
+
exports.MAX_QUEUE_SIZE = 5000;
|
|
10
|
+
exports.DEFAULT_API_ENDPOINT = "https://logs.chirpier.co/v1.0/logs";
|
|
11
|
+
exports.DEFAULT_SERVICER_ENDPOINT = "https://api.chirpier.co/v1.0";
|
package/dist/index.d.ts
CHANGED
|
@@ -1,81 +1,154 @@
|
|
|
1
|
-
export declare enum LogLevel {
|
|
1
|
+
export declare const enum LogLevel {
|
|
2
2
|
None = 0,
|
|
3
3
|
Error = 1,
|
|
4
4
|
Info = 2,
|
|
5
5
|
Debug = 3
|
|
6
6
|
}
|
|
7
|
-
interface
|
|
8
|
-
key
|
|
9
|
-
|
|
7
|
+
export interface Config {
|
|
8
|
+
key?: string;
|
|
9
|
+
apiEndpoint?: string;
|
|
10
|
+
servicerEndpoint?: string;
|
|
10
11
|
logLevel?: LogLevel;
|
|
12
|
+
retries?: number;
|
|
13
|
+
timeout?: number;
|
|
14
|
+
batchSize?: number;
|
|
15
|
+
flushDelay?: number;
|
|
16
|
+
/** @deprecated Queues are unbounded in memory. */
|
|
17
|
+
maxQueueSize?: number;
|
|
11
18
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
/**
|
|
20
|
+
* @deprecated Use Config.
|
|
21
|
+
*/
|
|
22
|
+
export type Options = Config;
|
|
23
|
+
export interface Log {
|
|
24
|
+
log_id?: string;
|
|
25
|
+
agent?: string;
|
|
26
|
+
event: string;
|
|
15
27
|
value: number;
|
|
28
|
+
meta?: unknown;
|
|
29
|
+
occurred_at?: string | Date;
|
|
30
|
+
}
|
|
31
|
+
export interface Event {
|
|
32
|
+
readonly event_id: string;
|
|
33
|
+
readonly agent?: string;
|
|
34
|
+
readonly event: string;
|
|
35
|
+
readonly title?: string;
|
|
36
|
+
readonly public: boolean;
|
|
37
|
+
readonly description?: string;
|
|
38
|
+
readonly unit?: string;
|
|
39
|
+
readonly timezone: string;
|
|
40
|
+
readonly created_at?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface Policy {
|
|
43
|
+
readonly policy_id: string;
|
|
44
|
+
readonly event_id: string;
|
|
45
|
+
readonly title: string;
|
|
46
|
+
readonly description?: string;
|
|
47
|
+
readonly channel: string;
|
|
48
|
+
readonly period: string;
|
|
49
|
+
readonly aggregate: string;
|
|
50
|
+
readonly condition: string;
|
|
51
|
+
readonly threshold: number;
|
|
52
|
+
readonly severity: string;
|
|
53
|
+
readonly enabled: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface Alert {
|
|
56
|
+
readonly alert_id: string;
|
|
57
|
+
readonly policy_id: string;
|
|
58
|
+
readonly event_id: string;
|
|
59
|
+
readonly agent?: string;
|
|
60
|
+
readonly event: string;
|
|
61
|
+
readonly title: string;
|
|
62
|
+
readonly period: string;
|
|
63
|
+
readonly aggregate: string;
|
|
64
|
+
readonly condition: string;
|
|
65
|
+
readonly threshold: number;
|
|
66
|
+
readonly severity: string;
|
|
67
|
+
readonly status: string;
|
|
68
|
+
readonly value: number;
|
|
69
|
+
readonly count: number;
|
|
70
|
+
readonly min: number;
|
|
71
|
+
readonly max: number;
|
|
72
|
+
readonly triggered_at?: string;
|
|
73
|
+
readonly acknowledged_at?: string;
|
|
74
|
+
readonly resolved_at?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface AlertDelivery {
|
|
77
|
+
readonly attempt_id: string;
|
|
78
|
+
readonly alert_id: string;
|
|
79
|
+
readonly webhook_id?: string;
|
|
80
|
+
readonly channel: string;
|
|
81
|
+
readonly target: string;
|
|
82
|
+
readonly status: string;
|
|
83
|
+
readonly response_status?: number;
|
|
84
|
+
readonly error_message?: string;
|
|
85
|
+
readonly created_at: string;
|
|
16
86
|
}
|
|
87
|
+
export interface EventLogPoint {
|
|
88
|
+
readonly event_id: string;
|
|
89
|
+
readonly agent?: string;
|
|
90
|
+
readonly event: string;
|
|
91
|
+
readonly period: string;
|
|
92
|
+
readonly occurred_at: string;
|
|
93
|
+
readonly count: number;
|
|
94
|
+
readonly value: number;
|
|
95
|
+
readonly squares: number;
|
|
96
|
+
readonly min: number;
|
|
97
|
+
readonly max: number;
|
|
98
|
+
}
|
|
99
|
+
export interface PaginationOptions {
|
|
100
|
+
period?: "minute" | "hour" | "day";
|
|
101
|
+
limit?: number;
|
|
102
|
+
offset?: number;
|
|
103
|
+
}
|
|
104
|
+
export type DeliveryKind = "alert" | "test" | "all";
|
|
17
105
|
export declare class ChirpierError extends Error {
|
|
18
|
-
|
|
106
|
+
readonly code?: string | undefined;
|
|
107
|
+
constructor(message: string, code?: string | undefined);
|
|
19
108
|
}
|
|
20
|
-
|
|
21
|
-
* Main Chirpier class for monitoring events.
|
|
22
|
-
*/
|
|
23
|
-
export declare class Chirpier {
|
|
24
|
-
private static instance;
|
|
109
|
+
export declare class Client {
|
|
25
110
|
private readonly apiKey;
|
|
26
111
|
private readonly apiEndpoint;
|
|
112
|
+
private readonly servicerEndpoint;
|
|
27
113
|
private readonly retries;
|
|
28
114
|
private readonly timeout;
|
|
29
115
|
private readonly axiosInstance;
|
|
30
|
-
private
|
|
116
|
+
private logQueue;
|
|
31
117
|
private readonly batchSize;
|
|
32
118
|
private readonly flushDelay;
|
|
33
119
|
private flushTimeoutId;
|
|
34
120
|
private readonly queueLock;
|
|
35
121
|
private readonly flushLock;
|
|
36
122
|
private readonly logLevel;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
private constructor();
|
|
42
|
-
/**
|
|
43
|
-
* Gets the singleton instance of Chirpier, creating it if it doesn't exist.
|
|
44
|
-
* @param options - Configuration options for the SDK.
|
|
45
|
-
* @returns The Chirpier instance.
|
|
46
|
-
*/
|
|
47
|
-
static getInstance(options: Options): Chirpier | null;
|
|
48
|
-
/**
|
|
49
|
-
* Validates the event structure.
|
|
50
|
-
* @param event - The event to validate.
|
|
51
|
-
* @returns True if valid, false otherwise.
|
|
52
|
-
*/
|
|
53
|
-
private isValidEvent;
|
|
54
|
-
/**
|
|
55
|
-
* Monitors an event by adding it to the queue and scheduling a flush if necessary.
|
|
56
|
-
* @param event - The event to monitor.
|
|
57
|
-
*/
|
|
58
|
-
monitor(event: Event): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Flushes the event queue by sending all events to the API.
|
|
61
|
-
*/
|
|
123
|
+
constructor(options?: Config);
|
|
124
|
+
private isValidLog;
|
|
125
|
+
private normalizeLog;
|
|
126
|
+
log(log: Log): Promise<void>;
|
|
62
127
|
private flushQueue;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
128
|
+
private sendLogs;
|
|
129
|
+
flush(): Promise<void>;
|
|
130
|
+
shutdown(): Promise<void>;
|
|
131
|
+
close(): Promise<void>;
|
|
132
|
+
listEvents(): Promise<Event[]>;
|
|
133
|
+
getEvent(eventID: string): Promise<Event>;
|
|
134
|
+
updateEvent(eventID: string, payload: Partial<Omit<Event, "event_id" | "created_at">>): Promise<Event>;
|
|
135
|
+
listPolicies(): Promise<Policy[]>;
|
|
136
|
+
createPolicy(payload: Omit<Policy, "policy_id">): Promise<Policy>;
|
|
137
|
+
listAlerts(status?: string): Promise<Alert[]>;
|
|
138
|
+
getAlertDeliveries(alertID: string, options?: {
|
|
139
|
+
limit?: number;
|
|
140
|
+
offset?: number;
|
|
141
|
+
kind?: DeliveryKind;
|
|
142
|
+
}): Promise<AlertDelivery[]>;
|
|
143
|
+
acknowledgeAlert(alertID: string): Promise<Alert>;
|
|
144
|
+
archiveAlert(alertID: string): Promise<Alert>;
|
|
145
|
+
testWebhook(webhookID: string): Promise<void>;
|
|
146
|
+
getEventLogs(eventID: string, options?: PaginationOptions): Promise<EventLogPoint[]>;
|
|
147
|
+
resolveAlert(alertID: string): Promise<Alert>;
|
|
69
148
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
export declare function
|
|
75
|
-
/**
|
|
76
|
-
* Monitors an event using the Chirpier SDK.
|
|
77
|
-
* @param event - The event to monitor.
|
|
78
|
-
*/
|
|
79
|
-
export declare function monitor(event: Event): void;
|
|
80
|
-
export {};
|
|
149
|
+
export declare function createClient(config?: Config): Client;
|
|
150
|
+
export declare function initialize(options?: Config): void;
|
|
151
|
+
export declare function logEvent(log: Log): Promise<void>;
|
|
152
|
+
export declare function stop(): Promise<void>;
|
|
153
|
+
export declare function flush(): Promise<void>;
|
|
81
154
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|