@ceralive/cerastream 2026.6.0-rc.2 → 2026.6.2

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.
@@ -8,7 +8,7 @@ export declare const PROTOCOL_VERSION: "cerastream-ipc/1";
8
8
  * additive-only within protocol major `cerastream-ipc/1` (ADR-0002 §4); this value
9
9
  * only moves when the wire schema itself does, in lockstep across both languages.
10
10
  */
11
- export declare const SCHEMA_VERSION: "0.1.0-stub";
11
+ export declare const SCHEMA_VERSION: "0.3.0";
12
12
  /** Runtime dir holding both control + preview sockets. systemd `RuntimeDirectory=cerastream`. */
13
13
  export declare const DEFAULT_IPC_DIR: "/run/cerastream";
14
14
  /** Env override for the IPC dir (tests/dev). Defaults to {@link DEFAULT_IPC_DIR}. */
@@ -23,6 +23,8 @@ export declare const CONTROL_SOCKET_PATH: "/run/cerastream/control.sock";
23
23
  export declare const PREVIEW_SOCKET_PATH: "/run/cerastream/preview.sock";
24
24
  /** Per-line framing cap (ADR-0002 §1): an oversized line is a fatal protocol error. */
25
25
  export declare const MAX_LINE_BYTES: number;
26
+ /** Upper bound (ms) for `reload-config.audio.delay_ms`. Mirrors the Rust `AUDIO_DELAY_MAX_MS` and CeraUI's `AUDIO_DELAY_MAX`. */
27
+ export declare const AUDIO_DELAY_MAX_MS = 2000;
26
28
  /** Engine binary name (systemd-owned; CeraUI never spawns it — ADR-0005). */
27
29
  export declare const CERASTREAM_BIN: "cerastream";
28
30
  export declare const DEFAULT_MIN_BITRATE = 300;
package/dist/constants.js CHANGED
@@ -11,7 +11,7 @@ export const PROTOCOL_VERSION = "cerastream-ipc/1";
11
11
  * additive-only within protocol major `cerastream-ipc/1` (ADR-0002 §4); this value
12
12
  * only moves when the wire schema itself does, in lockstep across both languages.
13
13
  */
14
- export const SCHEMA_VERSION = "0.1.0-stub";
14
+ export const SCHEMA_VERSION = "0.3.0";
15
15
  /** Runtime dir holding both control + preview sockets. systemd `RuntimeDirectory=cerastream`. */
16
16
  export const DEFAULT_IPC_DIR = "/run/cerastream";
17
17
  /** Env override for the IPC dir (tests/dev). Defaults to {@link DEFAULT_IPC_DIR}. */
@@ -26,6 +26,8 @@ export const CONTROL_SOCKET_PATH = "/run/cerastream/control.sock";
26
26
  export const PREVIEW_SOCKET_PATH = "/run/cerastream/preview.sock";
27
27
  /** Per-line framing cap (ADR-0002 §1): an oversized line is a fatal protocol error. */
28
28
  export const MAX_LINE_BYTES = 1024 * 1024; // 1 MiB
29
+ /** Upper bound (ms) for `reload-config.audio.delay_ms`. Mirrors the Rust `AUDIO_DELAY_MAX_MS` and CeraUI's `AUDIO_DELAY_MAX`. */
30
+ export const AUDIO_DELAY_MAX_MS = 2000;
29
31
  /** Engine binary name (systemd-owned; CeraUI never spawns it — ADR-0005). */
30
32
  export const CERASTREAM_BIN = "cerastream";
31
33
  // ---- config defaults (mirror ceracoder, the engine being replaced) ----
package/dist/errors.d.ts CHANGED
@@ -42,6 +42,7 @@ export declare const rpcErrorCodeSchema: z.ZodEnum<{
42
42
  "cerastream.state.not_streaming": "cerastream.state.not_streaming";
43
43
  "cerastream.state.already_streaming": "cerastream.state.already_streaming";
44
44
  "cerastream.device.not_found": "cerastream.device.not_found";
45
+ "cerastream.audio.device_not_found": "cerastream.audio.device_not_found";
45
46
  "cerastream.bitrate.out_of_range": "cerastream.bitrate.out_of_range";
46
47
  "cerastream.preview.unsupported_tier": "cerastream.preview.unsupported_tier";
47
48
  "cerastream.internal": "cerastream.internal";
package/dist/errors.js CHANGED
@@ -60,6 +60,7 @@ export const rpcErrorCodeSchema = z.enum([
60
60
  "cerastream.state.not_streaming",
61
61
  "cerastream.state.already_streaming",
62
62
  "cerastream.device.not_found",
63
+ "cerastream.audio.device_not_found",
63
64
  "cerastream.bitrate.out_of_range",
64
65
  "cerastream.preview.unsupported_tier",
65
66
  "cerastream.internal",
@@ -75,6 +76,7 @@ export const RPC_ERROR_NUMERIC = {
75
76
  "cerastream.state.not_streaming": -32001,
76
77
  "cerastream.state.already_streaming": -32002,
77
78
  "cerastream.device.not_found": -32003,
79
+ "cerastream.audio.device_not_found": -32006,
78
80
  "cerastream.bitrate.out_of_range": -32004,
79
81
  "cerastream.preview.unsupported_tier": -32005,
80
82
  "cerastream.internal": -32603,
package/dist/events.d.ts CHANGED
@@ -21,6 +21,10 @@ export declare const switchEventSchema: z.ZodObject<{
21
21
  auto: "auto";
22
22
  }>;
23
23
  reason: z.ZodOptional<z.ZodString>;
24
+ media_class: z.ZodOptional<z.ZodEnum<{
25
+ video: "video";
26
+ audio: "audio";
27
+ }>>;
24
28
  }, z.core.$strip>;
25
29
  export type SwitchEvent = z.infer<typeof switchEventSchema>;
26
30
  export declare const deviceEventSchema: z.ZodObject<{
@@ -42,6 +46,7 @@ export declare const deviceEventSchema: z.ZodObject<{
42
46
  width: z.ZodOptional<z.ZodNumber>;
43
47
  height: z.ZodOptional<z.ZodNumber>;
44
48
  framerate: z.ZodOptional<z.ZodString>;
49
+ media_type: z.ZodOptional<z.ZodString>;
45
50
  }, z.core.$strip>>>;
46
51
  }, z.core.$strip>;
47
52
  }, z.core.$strip>;
@@ -108,6 +113,10 @@ export declare const eventParamsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
108
113
  auto: "auto";
109
114
  }>;
110
115
  reason: z.ZodOptional<z.ZodString>;
116
+ media_class: z.ZodOptional<z.ZodEnum<{
117
+ video: "video";
118
+ audio: "audio";
119
+ }>>;
111
120
  }, z.core.$strip>, z.ZodObject<{
112
121
  type: z.ZodLiteral<"device">;
113
122
  seq: z.ZodNumber;
@@ -127,6 +136,7 @@ export declare const eventParamsSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
127
136
  width: z.ZodOptional<z.ZodNumber>;
128
137
  height: z.ZodOptional<z.ZodNumber>;
129
138
  framerate: z.ZodOptional<z.ZodString>;
139
+ media_type: z.ZodOptional<z.ZodString>;
130
140
  }, z.core.$strip>>>;
131
141
  }, z.core.$strip>;
132
142
  }, z.core.$strip>, z.ZodObject<{
@@ -188,6 +198,10 @@ export declare const cerastreamEventSchema: z.ZodObject<{
188
198
  auto: "auto";
189
199
  }>;
190
200
  reason: z.ZodOptional<z.ZodString>;
201
+ media_class: z.ZodOptional<z.ZodEnum<{
202
+ video: "video";
203
+ audio: "audio";
204
+ }>>;
191
205
  }, z.core.$strip>, z.ZodObject<{
192
206
  type: z.ZodLiteral<"device">;
193
207
  seq: z.ZodNumber;
@@ -207,6 +221,7 @@ export declare const cerastreamEventSchema: z.ZodObject<{
207
221
  width: z.ZodOptional<z.ZodNumber>;
208
222
  height: z.ZodOptional<z.ZodNumber>;
209
223
  framerate: z.ZodOptional<z.ZodString>;
224
+ media_type: z.ZodOptional<z.ZodString>;
210
225
  }, z.core.$strip>>>;
211
226
  }, z.core.$strip>;
212
227
  }, z.core.$strip>, z.ZodObject<{
@@ -271,6 +286,10 @@ export declare const eventSchemas: {
271
286
  auto: "auto";
272
287
  }>;
273
288
  reason: z.ZodOptional<z.ZodString>;
289
+ media_class: z.ZodOptional<z.ZodEnum<{
290
+ video: "video";
291
+ audio: "audio";
292
+ }>>;
274
293
  }, z.core.$strip>;
275
294
  readonly device: z.ZodObject<{
276
295
  type: z.ZodLiteral<"device">;
@@ -291,6 +310,7 @@ export declare const eventSchemas: {
291
310
  width: z.ZodOptional<z.ZodNumber>;
292
311
  height: z.ZodOptional<z.ZodNumber>;
293
312
  framerate: z.ZodOptional<z.ZodString>;
313
+ media_type: z.ZodOptional<z.ZodString>;
294
314
  }, z.core.$strip>>>;
295
315
  }, z.core.$strip>;
296
316
  }, z.core.$strip>;
package/dist/events.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { processErrorCodeSchema, processErrorSourceSchema, } from "./errors.js";
3
- import { captureDeviceSchema, inputModeSchema, streamStateSchema, } from "./types.js";
3
+ import { captureDeviceSchema, inputModeSchema, mediaClassSchema, streamStateSchema, } from "./types.js";
4
4
  // Server → client `event` notifications, delivered after `subscribe-events`
5
5
  // (schema.md "Events"). Each event is the inner `params` of an rpcEventSchema:
6
6
  // { type, seq, … }. `type` discriminates; `seq` is a per-type monotonic counter.
@@ -13,13 +13,15 @@ export const statusEventSchema = z.object({
13
13
  streaming: z.boolean(),
14
14
  active_input: z.string().optional(),
15
15
  });
16
- // switch — active input changed (manual or failover)
16
+ // switch — active input changed (manual or failover). media_class is additive
17
+ // (absent on legacy video-only emitters); switch-audio sets it to "audio".
17
18
  export const switchEventSchema = z.object({
18
19
  type: z.literal("switch"),
19
20
  seq,
20
21
  active_input: z.string(),
21
22
  mode: inputModeSchema,
22
23
  reason: z.string().optional(),
24
+ media_class: mediaClassSchema.optional(),
23
25
  });
24
26
  // device — GstDeviceMonitor hotplug
25
27
  export const deviceEventSchema = z.object({
@@ -56,6 +56,9 @@ export declare const reloadConfigParamsSchema: z.ZodObject<{
56
56
  srt: z.ZodOptional<z.ZodObject<{
57
57
  latency_ms: z.ZodOptional<z.ZodNumber>;
58
58
  }, z.core.$strip>>;
59
+ audio: z.ZodOptional<z.ZodObject<{
60
+ delay_ms: z.ZodOptional<z.ZodNumber>;
61
+ }, z.core.$strip>>;
59
62
  }, z.core.$strip>;
60
63
  export type ReloadConfigParams = z.infer<typeof reloadConfigParamsSchema>;
61
64
  export declare const reloadConfigResultSchema: z.ZodObject<{
@@ -72,6 +75,9 @@ export declare const reloadConfigResultSchema: z.ZodObject<{
72
75
  srt: z.ZodOptional<z.ZodObject<{
73
76
  latency_ms: z.ZodOptional<z.ZodNumber>;
74
77
  }, z.core.$strip>>;
78
+ audio: z.ZodOptional<z.ZodObject<{
79
+ delay_ms: z.ZodOptional<z.ZodNumber>;
80
+ }, z.core.$strip>>;
75
81
  }, z.core.$strip>;
76
82
  }, z.core.$strip>;
77
83
  export type ReloadConfigResult = z.infer<typeof reloadConfigResultSchema>;
@@ -101,6 +107,22 @@ export declare const switchInputResultSchema: z.ZodObject<{
101
107
  }>;
102
108
  }, z.core.$strip>;
103
109
  export type SwitchInputResult = z.infer<typeof switchInputResultSchema>;
110
+ export declare const switchAudioParamsSchema: z.ZodObject<{
111
+ audio_input_id: z.ZodString;
112
+ mode: z.ZodOptional<z.ZodEnum<{
113
+ manual: "manual";
114
+ auto: "auto";
115
+ }>>;
116
+ }, z.core.$strip>;
117
+ export type SwitchAudioParams = z.infer<typeof switchAudioParamsSchema>;
118
+ export declare const switchAudioResultSchema: z.ZodObject<{
119
+ active_audio_input: z.ZodString;
120
+ mode: z.ZodEnum<{
121
+ manual: "manual";
122
+ auto: "auto";
123
+ }>;
124
+ }, z.core.$strip>;
125
+ export type SwitchAudioResult = z.infer<typeof switchAudioResultSchema>;
104
126
  export declare const listDevicesParamsSchema: z.ZodOptional<z.ZodObject<{
105
127
  media_class: z.ZodOptional<z.ZodEnum<{
106
128
  video: "video";
@@ -121,6 +143,7 @@ export declare const listDevicesResultSchema: z.ZodObject<{
121
143
  width: z.ZodOptional<z.ZodNumber>;
122
144
  height: z.ZodOptional<z.ZodNumber>;
123
145
  framerate: z.ZodOptional<z.ZodString>;
146
+ media_type: z.ZodOptional<z.ZodString>;
124
147
  }, z.core.$strip>>>;
125
148
  }, z.core.$strip>>;
126
149
  }, z.core.$strip>;
@@ -190,6 +213,61 @@ export declare const previewSessionResultSchema: z.ZodObject<{
190
213
  }, z.core.$strip>], "kind">;
191
214
  }, z.core.$strip>;
192
215
  export type PreviewSessionResult = z.infer<typeof previewSessionResultSchema>;
216
+ export declare const videoSourceCapSchema: z.ZodObject<{
217
+ id: z.ZodString;
218
+ supports_audio: z.ZodBoolean;
219
+ supports_resolution_override: z.ZodBoolean;
220
+ supports_framerate_override: z.ZodBoolean;
221
+ default_resolution: z.ZodString;
222
+ default_framerate: z.ZodNumber;
223
+ }, z.core.$strip>;
224
+ export type VideoSourceCap = z.infer<typeof videoSourceCapSchema>;
225
+ export declare const bitrateRangeCapsSchema: z.ZodObject<{
226
+ min: z.ZodNumber;
227
+ max: z.ZodNumber;
228
+ unit: z.ZodString;
229
+ }, z.core.$strip>;
230
+ export type BitrateRangeCaps = z.infer<typeof bitrateRangeCapsSchema>;
231
+ export declare const encoderCapsSchema: z.ZodObject<{
232
+ codecs: z.ZodArray<z.ZodString>;
233
+ bitrate_range: z.ZodObject<{
234
+ min: z.ZodNumber;
235
+ max: z.ZodNumber;
236
+ unit: z.ZodString;
237
+ }, z.core.$strip>;
238
+ }, z.core.$strip>;
239
+ export type EncoderCaps = z.infer<typeof encoderCapsSchema>;
240
+ export declare const platformCapsSchema: z.ZodObject<{
241
+ supports_h265: z.ZodBoolean;
242
+ hardware_accelerated: z.ZodBoolean;
243
+ max_resolution: z.ZodString;
244
+ }, z.core.$strip>;
245
+ export type PlatformCaps = z.infer<typeof platformCapsSchema>;
246
+ export declare const getCapabilitiesResultSchema: z.ZodObject<{
247
+ platform: z.ZodObject<{
248
+ supports_h265: z.ZodBoolean;
249
+ hardware_accelerated: z.ZodBoolean;
250
+ max_resolution: z.ZodString;
251
+ }, z.core.$strip>;
252
+ encoder: z.ZodObject<{
253
+ codecs: z.ZodArray<z.ZodString>;
254
+ bitrate_range: z.ZodObject<{
255
+ min: z.ZodNumber;
256
+ max: z.ZodNumber;
257
+ unit: z.ZodString;
258
+ }, z.core.$strip>;
259
+ }, z.core.$strip>;
260
+ sources: z.ZodArray<z.ZodObject<{
261
+ id: z.ZodString;
262
+ supports_audio: z.ZodBoolean;
263
+ supports_resolution_override: z.ZodBoolean;
264
+ supports_framerate_override: z.ZodBoolean;
265
+ default_resolution: z.ZodString;
266
+ default_framerate: z.ZodNumber;
267
+ }, z.core.$strip>>;
268
+ audio_live_switch: z.ZodOptional<z.ZodBoolean>;
269
+ }, z.core.$strip>;
270
+ export type GetCapabilitiesResult = z.infer<typeof getCapabilitiesResultSchema>;
193
271
  /** The eight v1 control methods (the literal JSON-RPC `method` strings). */
194
272
  export declare const V1_METHODS: readonly ["start", "stop", "reload-config", "set-bitrate", "switch-input", "list-devices", "subscribe-events", "preview-session"];
195
273
  export type V1Method = (typeof V1_METHODS)[number];
@@ -268,6 +346,9 @@ export declare const requestSchemas: {
268
346
  srt: z.ZodOptional<z.ZodObject<{
269
347
  latency_ms: z.ZodOptional<z.ZodNumber>;
270
348
  }, z.core.$strip>>;
349
+ audio: z.ZodOptional<z.ZodObject<{
350
+ delay_ms: z.ZodOptional<z.ZodNumber>;
351
+ }, z.core.$strip>>;
271
352
  }, z.core.$strip>;
272
353
  readonly result: z.ZodObject<{
273
354
  applied: z.ZodObject<{
@@ -283,6 +364,9 @@ export declare const requestSchemas: {
283
364
  srt: z.ZodOptional<z.ZodObject<{
284
365
  latency_ms: z.ZodOptional<z.ZodNumber>;
285
366
  }, z.core.$strip>>;
367
+ audio: z.ZodOptional<z.ZodObject<{
368
+ delay_ms: z.ZodOptional<z.ZodNumber>;
369
+ }, z.core.$strip>>;
286
370
  }, z.core.$strip>;
287
371
  }, z.core.$strip>;
288
372
  };
@@ -332,6 +416,7 @@ export declare const requestSchemas: {
332
416
  width: z.ZodOptional<z.ZodNumber>;
333
417
  height: z.ZodOptional<z.ZodNumber>;
334
418
  framerate: z.ZodOptional<z.ZodString>;
419
+ media_type: z.ZodOptional<z.ZodString>;
335
420
  }, z.core.$strip>>>;
336
421
  }, z.core.$strip>>;
337
422
  }, z.core.$strip>;
package/dist/messages.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { z } from "zod";
2
+ import { AUDIO_DELAY_MAX_MS } from "./constants.js";
2
3
  import { helloParamsSchema, helloResultSchema, } from "./envelope.js";
3
4
  import { balancerAlgorithmSchema, captureDeviceSchema, cerastreamConfigSchema, inputModeSchema, mediaClassSchema, previewTierSchema, streamStateSchema, } from "./types.js";
4
5
  // The eight v1 control methods (schema.md "v1 messages"). Each is matched
@@ -34,6 +35,11 @@ export const reloadConfigParamsSchema = z.object({
34
35
  latency_ms: z.number().int().min(100).max(10_000).optional(),
35
36
  })
36
37
  .optional(),
38
+ audio: z
39
+ .object({
40
+ delay_ms: z.number().int().min(0).max(AUDIO_DELAY_MAX_MS).optional(),
41
+ })
42
+ .optional(),
37
43
  });
38
44
  export const reloadConfigResultSchema = z.object({
39
45
  applied: reloadConfigParamsSchema, // post-clamp values actually applied
@@ -54,6 +60,18 @@ export const switchInputResultSchema = z.object({
54
60
  active_input: z.string(),
55
61
  mode: inputModeSchema,
56
62
  });
63
+ // ---- 5b. switch-audio (additive; the audio mirror of switch-input) ----
64
+ // Drives the live audio fallbackswitch active-pad. Additive standalone schema
65
+ // (like get-capabilities): kept OUT of V1_METHODS / requestSchemas so the frozen
66
+ // eight-method contract count is unchanged. `mode` is optional (absent ⇒ manual).
67
+ export const switchAudioParamsSchema = z.object({
68
+ audio_input_id: z.string(), // audio device/input identifier from list-devices
69
+ mode: inputModeSchema.optional(),
70
+ });
71
+ export const switchAudioResultSchema = z.object({
72
+ active_audio_input: z.string(),
73
+ mode: inputModeSchema,
74
+ });
57
75
  // ---- 6. list-devices ----
58
76
  export const listDevicesParamsSchema = z
59
77
  .object({
@@ -104,6 +122,37 @@ export const previewSessionResultSchema = z.object({
104
122
  z.object({ kind: z.literal("webrtc"), sdp: z.string().optional() }),
105
123
  ]),
106
124
  });
125
+ // ---- 9. get-capabilities ----
126
+ // Deliberately absent from V1_METHODS / requestSchemas: it is an additive
127
+ // standalone schema, so the frozen eight-method contract-count stays eight.
128
+ export const videoSourceCapSchema = z.object({
129
+ id: z.string(),
130
+ supports_audio: z.boolean(),
131
+ supports_resolution_override: z.boolean(),
132
+ supports_framerate_override: z.boolean(),
133
+ default_resolution: z.string(),
134
+ default_framerate: z.number().int(),
135
+ });
136
+ export const bitrateRangeCapsSchema = z.object({
137
+ min: z.number().int(),
138
+ max: z.number().int(),
139
+ unit: z.string(), // "bps" or "kbps"
140
+ });
141
+ export const encoderCapsSchema = z.object({
142
+ codecs: z.array(z.string()),
143
+ bitrate_range: bitrateRangeCapsSchema,
144
+ });
145
+ export const platformCapsSchema = z.object({
146
+ supports_h265: z.boolean(),
147
+ hardware_accelerated: z.boolean(),
148
+ max_resolution: z.string(),
149
+ });
150
+ export const getCapabilitiesResultSchema = z.object({
151
+ platform: platformCapsSchema,
152
+ encoder: encoderCapsSchema,
153
+ sources: z.array(videoSourceCapSchema),
154
+ audio_live_switch: z.boolean().optional(),
155
+ });
107
156
  // ---- method registry (count-assertion source of truth) ----
108
157
  /** The eight v1 control methods (the literal JSON-RPC `method` strings). */
109
158
  export const V1_METHODS = [
package/dist/types.d.ts CHANGED
@@ -85,6 +85,7 @@ export declare const captureCapSchema: z.ZodObject<{
85
85
  width: z.ZodOptional<z.ZodNumber>;
86
86
  height: z.ZodOptional<z.ZodNumber>;
87
87
  framerate: z.ZodOptional<z.ZodString>;
88
+ media_type: z.ZodOptional<z.ZodString>;
88
89
  }, z.core.$strip>;
89
90
  export type CaptureCap = z.infer<typeof captureCapSchema>;
90
91
  export declare const captureDeviceSchema: z.ZodObject<{
@@ -99,6 +100,7 @@ export declare const captureDeviceSchema: z.ZodObject<{
99
100
  width: z.ZodOptional<z.ZodNumber>;
100
101
  height: z.ZodOptional<z.ZodNumber>;
101
102
  framerate: z.ZodOptional<z.ZodString>;
103
+ media_type: z.ZodOptional<z.ZodString>;
102
104
  }, z.core.$strip>>>;
103
105
  }, z.core.$strip>;
104
106
  export type CaptureDevice = z.infer<typeof captureDeviceSchema>;
package/dist/types.js CHANGED
@@ -53,6 +53,7 @@ export const captureCapSchema = z.object({
53
53
  width: z.number().int().optional(),
54
54
  height: z.number().int().optional(),
55
55
  framerate: z.string().optional(), // e.g. "30/1"
56
+ media_type: z.string().optional(), // e.g. "video/x-h265"; additive, absent on legacy producers
56
57
  });
57
58
  export const captureDeviceSchema = z.object({
58
59
  input_id: z.string(), // stable id used by switch-input
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ceralive/cerastream",
3
- "version": "2026.6.0-rc.2",
3
+ "version": "2026.6.2",
4
4
  "description": "Type-safe TypeScript schema + IPC client for the cerastream streaming engine (JSON-RPC 2.0 / NDJSON over a Unix domain socket).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",