@empa-electronics/tiremo-sdk-client-node 0.1.0
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 +15 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +155 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Node.js client for the TIREMO SDK.
|
|
2
|
+
|
|
3
|
+
Published as `@empa-electronics/tiremo-sdk-client-node` on [npm](https://www.npmjs.com/package/@empa-electronics/tiremo-sdk-client-node).
|
|
4
|
+
|
|
5
|
+
Requires Node.js 18+ (native `fetch`; WebSocket on Node 22+).
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @empa-electronics/tiremo-sdk-client-node
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { TiremoClient } from "@empa-electronics/tiremo-sdk-client-node";
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
See the [repository README](../../README.md) for usage details.
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { LiveEventMap, LiveSubscribeAlarmOptions, LiveSubscribePresenceOptions, LiveSubscribeTelemetryOptions, LiveTokenResponse, TelemetryLatestOptions, TelemetryLatestResponse, TiremoClientOptions } from "./types.js";
|
|
2
|
+
type EventHandler<T> = (event: T) => void;
|
|
3
|
+
export declare class TiremoLiveClient {
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
private readonly auth;
|
|
6
|
+
private socket;
|
|
7
|
+
private readonly handlers;
|
|
8
|
+
constructor(baseUrl: string, auth: {
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
token?: string;
|
|
11
|
+
});
|
|
12
|
+
connect(): void;
|
|
13
|
+
disconnect(): void;
|
|
14
|
+
on<T extends keyof LiveEventMap>(event: T, handler: EventHandler<LiveEventMap[T]>): () => void;
|
|
15
|
+
subscribeTelemetry(options: LiveSubscribeTelemetryOptions): void;
|
|
16
|
+
subscribePresence(options: LiveSubscribePresenceOptions): void;
|
|
17
|
+
subscribeAlarm(options: LiveSubscribeAlarmOptions): void;
|
|
18
|
+
unsubscribe(subscriptionId: string): void;
|
|
19
|
+
private send;
|
|
20
|
+
}
|
|
21
|
+
export declare class TiremoClient {
|
|
22
|
+
private readonly options;
|
|
23
|
+
readonly devices: {
|
|
24
|
+
getTelemetryLatest: (deviceIdentifier: string, options?: TelemetryLatestOptions) => Promise<TelemetryLatestResponse>;
|
|
25
|
+
};
|
|
26
|
+
readonly live: {
|
|
27
|
+
createToken: () => Promise<LiveTokenResponse>;
|
|
28
|
+
connectWithToken: (token: string) => TiremoLiveClient;
|
|
29
|
+
connectWithSecretKey: () => TiremoLiveClient;
|
|
30
|
+
};
|
|
31
|
+
constructor(options: TiremoClientOptions);
|
|
32
|
+
}
|
|
33
|
+
export type { LiveAlarmEvent, LiveErrorEvent, LiveEvent, LiveEventMap, LivePresenceEvent, LiveSubscribeAlarmOptions, LiveSubscribePresenceOptions, LiveSubscribeTelemetryOptions, LiveTelemetryEvent, LiveTokenResponse, TelemetryLatestOptions, TelemetryLatestResponse, TiremoClientOptions, } from "./types.js";
|
|
34
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,YAAY,EACZ,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAEpB,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAE1C,qBAAa,gBAAgB;IAmBzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAnBvB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAcvB;gBAGiB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAG5D,OAAO,IAAI,IAAI;IA4Cf,UAAU,IAAI,IAAI;IAKlB,EAAE,CAAC,CAAC,SAAS,MAAM,YAAY,EAC7B,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GACrC,MAAM,IAAI;IAMb,kBAAkB,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI;IAUhE,iBAAiB,CAAC,OAAO,EAAE,4BAA4B,GAAG,IAAI;IAS9D,cAAc,CAAC,OAAO,EAAE,yBAAyB,GAAG,IAAI;IASxD,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIzC,OAAO,CAAC,IAAI;CAMb;AAED,qBAAa,YAAY;IAcX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAbpC,QAAQ,CAAC,OAAO,EAAE;QAChB,kBAAkB,EAAE,CAClB,gBAAgB,EAAE,MAAM,EACxB,OAAO,CAAC,EAAE,sBAAsB,KAC7B,OAAO,CAAC,uBAAuB,CAAC,CAAC;KACvC,CAAC;IAEF,QAAQ,CAAC,IAAI,EAAE;QACb,WAAW,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC9C,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAAC;QACtD,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;KAC9C,CAAC;gBAE2B,OAAO,EAAE,mBAAmB;CA2D1D;AAED,YAAY,EACV,cAAc,EACd,cAAc,EACd,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,yBAAyB,EACzB,4BAA4B,EAC5B,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
export class TiremoLiveClient {
|
|
2
|
+
baseUrl;
|
|
3
|
+
auth;
|
|
4
|
+
socket = null;
|
|
5
|
+
handlers = {
|
|
6
|
+
connected: new Set(),
|
|
7
|
+
telemetry: new Set(),
|
|
8
|
+
presence: new Set(),
|
|
9
|
+
alarm: new Set(),
|
|
10
|
+
error: new Set(),
|
|
11
|
+
message: new Set(),
|
|
12
|
+
};
|
|
13
|
+
constructor(baseUrl, auth) {
|
|
14
|
+
this.baseUrl = baseUrl;
|
|
15
|
+
this.auth = auth;
|
|
16
|
+
}
|
|
17
|
+
connect() {
|
|
18
|
+
if (this.socket) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const wsBase = this.baseUrl.replace(/^http/, "ws").replace(/\/$/, "");
|
|
22
|
+
let url = `${wsBase}/v1/live`;
|
|
23
|
+
if (this.auth.token) {
|
|
24
|
+
url += `?token=${encodeURIComponent(this.auth.token)}`;
|
|
25
|
+
}
|
|
26
|
+
else if (this.auth.apiKey) {
|
|
27
|
+
url += `?apiKey=${encodeURIComponent(this.auth.apiKey)}`;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
throw new Error("Live connection requires either a short-lived token or a secret API key.");
|
|
31
|
+
}
|
|
32
|
+
this.socket = new WebSocket(url);
|
|
33
|
+
this.socket.addEventListener("message", (event) => {
|
|
34
|
+
let parsed;
|
|
35
|
+
try {
|
|
36
|
+
parsed = JSON.parse(String(event.data));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.handlers.message.forEach((handler) => handler(parsed));
|
|
42
|
+
if (parsed.type === "connected") {
|
|
43
|
+
this.handlers.connected.forEach((handler) => handler(parsed));
|
|
44
|
+
}
|
|
45
|
+
else if (parsed.type === "telemetry") {
|
|
46
|
+
this.handlers.telemetry.forEach((handler) => handler(parsed));
|
|
47
|
+
}
|
|
48
|
+
else if (parsed.type === "presence") {
|
|
49
|
+
this.handlers.presence.forEach((handler) => handler(parsed));
|
|
50
|
+
}
|
|
51
|
+
else if (parsed.type === "alarm") {
|
|
52
|
+
this.handlers.alarm.forEach((handler) => handler(parsed));
|
|
53
|
+
}
|
|
54
|
+
else if (parsed.type === "error") {
|
|
55
|
+
this.handlers.error.forEach((handler) => handler(parsed));
|
|
56
|
+
}
|
|
57
|
+
else if (parsed.type === "ping") {
|
|
58
|
+
this.send({ type: "pong" });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
disconnect() {
|
|
63
|
+
this.socket?.close();
|
|
64
|
+
this.socket = null;
|
|
65
|
+
}
|
|
66
|
+
on(event, handler) {
|
|
67
|
+
const set = this.handlers[event];
|
|
68
|
+
set.add(handler);
|
|
69
|
+
return () => set.delete(handler);
|
|
70
|
+
}
|
|
71
|
+
subscribeTelemetry(options) {
|
|
72
|
+
this.send({
|
|
73
|
+
type: "subscribe",
|
|
74
|
+
id: options.id,
|
|
75
|
+
channel: "telemetry",
|
|
76
|
+
deviceIdentifier: options.deviceIdentifier,
|
|
77
|
+
keys: options.keys,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
subscribePresence(options) {
|
|
81
|
+
this.send({
|
|
82
|
+
type: "subscribe",
|
|
83
|
+
id: options.id,
|
|
84
|
+
channel: "presence",
|
|
85
|
+
deviceIdentifier: options.deviceIdentifier,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
subscribeAlarm(options) {
|
|
89
|
+
this.send({
|
|
90
|
+
type: "subscribe",
|
|
91
|
+
id: options.id,
|
|
92
|
+
channel: "alarm",
|
|
93
|
+
deviceIdentifier: options.deviceIdentifier,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
unsubscribe(subscriptionId) {
|
|
97
|
+
this.send({ type: "unsubscribe", id: subscriptionId });
|
|
98
|
+
}
|
|
99
|
+
send(payload) {
|
|
100
|
+
if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
|
|
101
|
+
throw new Error("Live socket is not connected");
|
|
102
|
+
}
|
|
103
|
+
this.socket.send(JSON.stringify(payload));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
export class TiremoClient {
|
|
107
|
+
options;
|
|
108
|
+
devices;
|
|
109
|
+
live;
|
|
110
|
+
constructor(options) {
|
|
111
|
+
this.options = options;
|
|
112
|
+
const baseUrl = options.baseUrl.replace(/\/$/, "");
|
|
113
|
+
this.devices = {
|
|
114
|
+
getTelemetryLatest: async (deviceIdentifier, queryOptions) => {
|
|
115
|
+
const params = new URLSearchParams();
|
|
116
|
+
if (queryOptions?.keys?.length) {
|
|
117
|
+
for (const key of queryOptions.keys) {
|
|
118
|
+
params.append("keys", key);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const suffix = params.size > 0 ? `?${params.toString()}` : "";
|
|
122
|
+
const response = await fetch(`${baseUrl}/v1/devices/${encodeURIComponent(deviceIdentifier)}/telemetry/latest/${suffix}`, {
|
|
123
|
+
headers: {
|
|
124
|
+
"X-API-Key": options.apiKey,
|
|
125
|
+
Accept: "application/json",
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
if (!response.ok) {
|
|
129
|
+
const body = (await response.json().catch(() => ({})));
|
|
130
|
+
throw new Error(body.message ?? `Request failed (${response.status})`);
|
|
131
|
+
}
|
|
132
|
+
return (await response.json());
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
this.live = {
|
|
136
|
+
createToken: async () => {
|
|
137
|
+
const response = await fetch(`${baseUrl}/v1/live/token/`, {
|
|
138
|
+
method: "POST",
|
|
139
|
+
headers: {
|
|
140
|
+
"X-API-Key": options.apiKey,
|
|
141
|
+
Accept: "application/json",
|
|
142
|
+
},
|
|
143
|
+
});
|
|
144
|
+
if (!response.ok) {
|
|
145
|
+
const body = (await response.json().catch(() => ({})));
|
|
146
|
+
throw new Error(body.message ?? `Token request failed (${response.status})`);
|
|
147
|
+
}
|
|
148
|
+
return (await response.json());
|
|
149
|
+
},
|
|
150
|
+
connectWithToken: (token) => new TiremoLiveClient(baseUrl, { token }),
|
|
151
|
+
connectWithSecretKey: () => new TiremoLiveClient(baseUrl, { apiKey: options.apiKey }),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
export interface LiveTokenResponse {
|
|
2
|
+
token: string;
|
|
3
|
+
expiresAt: string;
|
|
4
|
+
}
|
|
5
|
+
export interface TiremoClientOptions {
|
|
6
|
+
apiKey: string;
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
}
|
|
9
|
+
export interface TelemetryLatestOptions {
|
|
10
|
+
keys?: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface TelemetryLatestResponse {
|
|
13
|
+
deviceIdentifier: string;
|
|
14
|
+
timestamp: string;
|
|
15
|
+
data: Record<string, unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface LiveSubscribeTelemetryOptions {
|
|
18
|
+
id: string;
|
|
19
|
+
deviceIdentifier: string;
|
|
20
|
+
keys?: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface LiveSubscribePresenceOptions {
|
|
23
|
+
id: string;
|
|
24
|
+
deviceIdentifier: string;
|
|
25
|
+
}
|
|
26
|
+
export interface LiveSubscribeAlarmOptions {
|
|
27
|
+
id: string;
|
|
28
|
+
deviceIdentifier: string;
|
|
29
|
+
}
|
|
30
|
+
export interface LiveTelemetryEvent {
|
|
31
|
+
type: "telemetry";
|
|
32
|
+
subscriptionId: string;
|
|
33
|
+
deviceIdentifier: string;
|
|
34
|
+
timestamp: string;
|
|
35
|
+
data: Record<string, unknown>;
|
|
36
|
+
}
|
|
37
|
+
export interface LivePresenceEvent {
|
|
38
|
+
type: "presence";
|
|
39
|
+
subscriptionId: string;
|
|
40
|
+
deviceIdentifier: string;
|
|
41
|
+
isOnline: boolean;
|
|
42
|
+
lastSeenAt: string | null;
|
|
43
|
+
}
|
|
44
|
+
export interface LiveAlarmEvent {
|
|
45
|
+
type: "alarm";
|
|
46
|
+
subscriptionId: string;
|
|
47
|
+
deviceIdentifier: string;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
alarmType: string;
|
|
50
|
+
code: string;
|
|
51
|
+
exception: string;
|
|
52
|
+
severity: "CRITICAL" | "MAJOR" | "MINOR" | "WARNING" | "INFO";
|
|
53
|
+
}
|
|
54
|
+
export interface LiveErrorEvent {
|
|
55
|
+
type: "error";
|
|
56
|
+
code: string;
|
|
57
|
+
message: string;
|
|
58
|
+
}
|
|
59
|
+
export type LiveEvent = LiveTelemetryEvent | LivePresenceEvent | LiveAlarmEvent | LiveErrorEvent | {
|
|
60
|
+
type: "connected";
|
|
61
|
+
productIdentifier: string;
|
|
62
|
+
protocolVersion: 1;
|
|
63
|
+
} | {
|
|
64
|
+
type: "ping";
|
|
65
|
+
} | {
|
|
66
|
+
type: "pong";
|
|
67
|
+
};
|
|
68
|
+
export type LiveEventMap = {
|
|
69
|
+
connected: Extract<LiveEvent, {
|
|
70
|
+
type: "connected";
|
|
71
|
+
}>;
|
|
72
|
+
telemetry: LiveTelemetryEvent;
|
|
73
|
+
presence: LivePresenceEvent;
|
|
74
|
+
alarm: LiveAlarmEvent;
|
|
75
|
+
error: LiveErrorEvent;
|
|
76
|
+
message: LiveEvent;
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,6BAA6B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,WAAW,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;CAC/D;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,SAAS,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,cAAc,GACd,cAAc,GACd;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,CAAC,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IACrD,SAAS,EAAE,kBAAkB,CAAC;IAC9B,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@empa-electronics/tiremo-sdk-client-node",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Node.js client for the TIREMO SDK REST and live WebSocket APIs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"repository": {
|
|
18
|
+
"type": "git",
|
|
19
|
+
"url": "git+https://github.com/Empa-Electronics/TIREMO-SDK-CLIENT.git",
|
|
20
|
+
"directory": "packages/client-node"
|
|
21
|
+
},
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public",
|
|
24
|
+
"registry": "https://registry.npmjs.org"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.json",
|
|
28
|
+
"clean": "rm -rf dist",
|
|
29
|
+
"check:build": "tsc -p tsconfig.json --noEmit",
|
|
30
|
+
"lint": "eslint ./src",
|
|
31
|
+
"lint:fix": "eslint --fix ./src",
|
|
32
|
+
"new-version": "npm version patch && git push && git push --tags"
|
|
33
|
+
},
|
|
34
|
+
"license": "ISC",
|
|
35
|
+
"devDependencies": {
|
|
36
|
+
"@eslint/js": "^9.35.0",
|
|
37
|
+
"@types/node": "^22.15.21",
|
|
38
|
+
"eslint": "^9.35.0",
|
|
39
|
+
"typescript": "^5.9.2",
|
|
40
|
+
"typescript-eslint": "^8.42.0"
|
|
41
|
+
}
|
|
42
|
+
}
|