@signalk/server-api 2.23.0 → 2.24.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.
Files changed (44) hide show
  1. package/dist/history.d.ts +24 -6
  2. package/dist/history.d.ts.map +1 -1
  3. package/dist/history.js +7 -2
  4. package/dist/propertyvalues.d.ts.map +1 -1
  5. package/dist/propertyvalues.js +35 -5
  6. package/dist/serverapi.d.ts +3 -2
  7. package/dist/serverapi.d.ts.map +1 -1
  8. package/dist/streambundle.d.ts +4 -4
  9. package/dist/streambundle.d.ts.map +1 -1
  10. package/dist/typebox/autopilot-schemas.d.ts +59 -0
  11. package/dist/typebox/autopilot-schemas.d.ts.map +1 -0
  12. package/dist/typebox/autopilot-schemas.js +86 -0
  13. package/dist/typebox/course-schemas.d.ts +218 -0
  14. package/dist/typebox/course-schemas.d.ts.map +1 -0
  15. package/dist/typebox/course-schemas.js +317 -0
  16. package/dist/typebox/discovery-schemas.d.ts +53 -0
  17. package/dist/typebox/discovery-schemas.d.ts.map +1 -0
  18. package/dist/typebox/discovery-schemas.js +73 -0
  19. package/dist/typebox/history-schemas.d.ts +34 -0
  20. package/dist/typebox/history-schemas.d.ts.map +1 -0
  21. package/dist/typebox/history-schemas.js +75 -0
  22. package/dist/typebox/index.d.ts +11 -0
  23. package/dist/typebox/index.d.ts.map +1 -0
  24. package/dist/typebox/index.js +26 -0
  25. package/dist/typebox/notifications-schemas.d.ts +50 -0
  26. package/dist/typebox/notifications-schemas.d.ts.map +1 -0
  27. package/dist/typebox/notifications-schemas.js +53 -0
  28. package/dist/typebox/protocol-schemas.d.ts +432 -0
  29. package/dist/typebox/protocol-schemas.d.ts.map +1 -0
  30. package/dist/typebox/protocol-schemas.js +352 -0
  31. package/dist/typebox/radar-schemas.d.ts +50 -0
  32. package/dist/typebox/radar-schemas.d.ts.map +1 -0
  33. package/dist/typebox/radar-schemas.js +70 -0
  34. package/dist/typebox/resources-schemas.d.ts +152 -0
  35. package/dist/typebox/resources-schemas.d.ts.map +1 -0
  36. package/dist/typebox/resources-schemas.js +214 -0
  37. package/dist/typebox/shared-schemas.d.ts +92 -0
  38. package/dist/typebox/shared-schemas.d.ts.map +1 -0
  39. package/dist/typebox/shared-schemas.js +149 -0
  40. package/dist/typebox/weather-schemas.d.ts +82 -0
  41. package/dist/typebox/weather-schemas.d.ts.map +1 -0
  42. package/dist/typebox/weather-schemas.js +215 -0
  43. package/package.json +10 -4
  44. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,50 @@
1
+ /**
2
+ * TypeBox Schema Definitions for the Signal K Notifications API
3
+ */
4
+ import { type Static } from '@sinclair/typebox';
5
+ import { AlarmStateSchema, AlarmMethodSchema, AlarmStatusSchema, NotificationSchema } from './protocol-schemas';
6
+ export { AlarmStateSchema, AlarmMethodSchema, AlarmStatusSchema, NotificationSchema };
7
+ /**
8
+ * Alarm method array — wraps the AlarmMethod enum for OpenAPI.
9
+ */
10
+ export declare const AlarmMethodArraySchema: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visual">, import("@sinclair/typebox").TLiteral<"sound">]>>;
11
+ /**
12
+ * Alarm object — state, method, message, and optional status.
13
+ * Used as the `value` field in a notification response.
14
+ */
15
+ export declare const AlarmSchema: import("@sinclair/typebox").TObject<{
16
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
17
+ method: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visual">, import("@sinclair/typebox").TLiteral<"sound">]>>;
18
+ message: import("@sinclair/typebox").TString;
19
+ status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
20
+ silenced: import("@sinclair/typebox").TBoolean;
21
+ acknowledged: import("@sinclair/typebox").TBoolean;
22
+ canSilence: import("@sinclair/typebox").TBoolean;
23
+ canAcknowledge: import("@sinclair/typebox").TBoolean;
24
+ canClear: import("@sinclair/typebox").TBoolean;
25
+ }>>;
26
+ }>;
27
+ export type Alarm = Static<typeof AlarmSchema>;
28
+ /**
29
+ * Notification response wrapper — value containing an alarm.
30
+ */
31
+ export declare const NotificationResponseSchema: import("@sinclair/typebox").TObject<{
32
+ value: import("@sinclair/typebox").TObject<{
33
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
34
+ method: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visual">, import("@sinclair/typebox").TLiteral<"sound">]>>;
35
+ message: import("@sinclair/typebox").TString;
36
+ status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
37
+ silenced: import("@sinclair/typebox").TBoolean;
38
+ acknowledged: import("@sinclair/typebox").TBoolean;
39
+ canSilence: import("@sinclair/typebox").TBoolean;
40
+ canAcknowledge: import("@sinclair/typebox").TBoolean;
41
+ canClear: import("@sinclair/typebox").TBoolean;
42
+ }>>;
43
+ }>;
44
+ }>;
45
+ export type NotificationResponse = Static<typeof NotificationResponseSchema>;
46
+ /**
47
+ * Notification ID parameter — UUID v4 format.
48
+ */
49
+ export declare const NotificationIdParamSchema: import("@sinclair/typebox").TString;
50
+ //# sourceMappingURL=notifications-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications-schemas.d.ts","sourceRoot":"","sources":["../../src/typebox/notifications-schemas.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,oBAAoB,CAAA;AAG3B,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EACnB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,yKAKjC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;EAWvB,CAAA;AACD,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAA;AAE9C;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;EAQtC,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE5E;;GAEG;AACH,eAAO,MAAM,yBAAyB,qCAKpC,CAAA"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * TypeBox Schema Definitions for the Signal K Notifications API
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NotificationIdParamSchema = exports.NotificationResponseSchema = exports.AlarmSchema = exports.AlarmMethodArraySchema = exports.NotificationSchema = exports.AlarmStatusSchema = exports.AlarmMethodSchema = exports.AlarmStateSchema = void 0;
7
+ const typebox_1 = require("@sinclair/typebox");
8
+ const protocol_schemas_1 = require("./protocol-schemas");
9
+ Object.defineProperty(exports, "AlarmStateSchema", { enumerable: true, get: function () { return protocol_schemas_1.AlarmStateSchema; } });
10
+ Object.defineProperty(exports, "AlarmMethodSchema", { enumerable: true, get: function () { return protocol_schemas_1.AlarmMethodSchema; } });
11
+ Object.defineProperty(exports, "AlarmStatusSchema", { enumerable: true, get: function () { return protocol_schemas_1.AlarmStatusSchema; } });
12
+ Object.defineProperty(exports, "NotificationSchema", { enumerable: true, get: function () { return protocol_schemas_1.NotificationSchema; } });
13
+ const shared_schemas_1 = require("./shared-schemas");
14
+ /**
15
+ * Alarm method array — wraps the AlarmMethod enum for OpenAPI.
16
+ */
17
+ exports.AlarmMethodArraySchema = typebox_1.Type.Array(protocol_schemas_1.AlarmMethodSchema, {
18
+ $id: 'AlarmMethodArray',
19
+ description: 'Methods to use to raise the alarm.',
20
+ uniqueItems: true,
21
+ examples: [['sound']]
22
+ });
23
+ /**
24
+ * Alarm object — state, method, message, and optional status.
25
+ * Used as the `value` field in a notification response.
26
+ */
27
+ exports.AlarmSchema = typebox_1.Type.Object({
28
+ state: protocol_schemas_1.AlarmStateSchema,
29
+ method: exports.AlarmMethodArraySchema,
30
+ message: typebox_1.Type.String({ description: 'Message to display or speak' }),
31
+ status: typebox_1.Type.Optional(protocol_schemas_1.AlarmStatusSchema)
32
+ }, {
33
+ $id: 'Alarm',
34
+ description: 'Alarm notification value'
35
+ });
36
+ /**
37
+ * Notification response wrapper — value containing an alarm.
38
+ */
39
+ exports.NotificationResponseSchema = typebox_1.Type.Object({
40
+ value: exports.AlarmSchema
41
+ }, {
42
+ $id: 'NotificationResponse',
43
+ description: 'Notification with alarm value'
44
+ });
45
+ /**
46
+ * Notification ID parameter — UUID v4 format.
47
+ */
48
+ exports.NotificationIdParamSchema = typebox_1.Type.String({
49
+ $id: 'NotificationIdParam',
50
+ pattern: `${shared_schemas_1.SignalKUuidPattern}$`,
51
+ description: 'Notification identifier',
52
+ examples: ['ac3a3b2d-07e8-4f25-92bc-98e7c92f7f1a']
53
+ });
@@ -0,0 +1,432 @@
1
+ /**
2
+ * TypeBox Schema Definitions for Signal K Protocol Types
3
+ *
4
+ * Core protocol schemas: Delta, Update, Source, Notification, Meta, Zone.
5
+ *
6
+ * Metadata sourced from:
7
+ * specification/schemas/definitions.json
8
+ * specification/schemas/groups/notifications.json
9
+ */
10
+ import { type Static } from '@sinclair/typebox';
11
+ /**
12
+ * Alarm state enum.
13
+ * @see specification/schemas/definitions.json#/definitions/alarmState
14
+ * @category Server API
15
+ */
16
+ export declare enum ALARM_STATE {
17
+ nominal = "nominal",
18
+ normal = "normal",
19
+ alert = "alert",
20
+ warn = "warn",
21
+ alarm = "alarm",
22
+ emergency = "emergency"
23
+ }
24
+ /**
25
+ * Alarm method enum.
26
+ * @see specification/schemas/definitions.json#/definitions/alarmMethodEnum
27
+ * @category Server API
28
+ */
29
+ export declare enum ALARM_METHOD {
30
+ visual = "visual",
31
+ sound = "sound"
32
+ }
33
+ /**
34
+ * TypeBox schema for alarm state values.
35
+ * Mirrors the ALARM_STATE enum for runtime validation and documentation.
36
+ */
37
+ export declare const AlarmStateSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
38
+ /**
39
+ * TypeBox schema for alarm method values.
40
+ * Mirrors the ALARM_METHOD enum for runtime validation and documentation.
41
+ */
42
+ export declare const AlarmMethodSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visual">, import("@sinclair/typebox").TLiteral<"sound">]>;
43
+ /**
44
+ * A zone defining display and alarm state for a value range.
45
+ * @see specification/schemas/definitions.json zones definition
46
+ */
47
+ export declare const ZoneSchema: import("@sinclair/typebox").TObject<{
48
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
49
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
50
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
51
+ message: import("@sinclair/typebox").TString;
52
+ }>;
53
+ export type Zone = Static<typeof ZoneSchema>;
54
+ /**
55
+ * Alarm status flags (silenced, acknowledged, etc.).
56
+ */
57
+ export declare const AlarmStatusSchema: import("@sinclair/typebox").TObject<{
58
+ silenced: import("@sinclair/typebox").TBoolean;
59
+ acknowledged: import("@sinclair/typebox").TBoolean;
60
+ canSilence: import("@sinclair/typebox").TBoolean;
61
+ canAcknowledge: import("@sinclair/typebox").TBoolean;
62
+ canClear: import("@sinclair/typebox").TBoolean;
63
+ }>;
64
+ export type AlarmStatus = Static<typeof AlarmStatusSchema>;
65
+ /**
66
+ * Stored display-units metadata — the minimal form persisted in path metadata.
67
+ * The server resolves this into EnhancedDisplayUnits before sending to clients.
68
+ */
69
+ export declare const DisplayUnitsMetadataSchema: import("@sinclair/typebox").TObject<{
70
+ category: import("@sinclair/typebox").TString;
71
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
72
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
73
+ }>;
74
+ export type DisplayUnitsMetadata = Static<typeof DisplayUnitsMetadataSchema>;
75
+ /**
76
+ * Enhanced display-units metadata — the resolved form returned to clients,
77
+ * containing the Math.js conversion formulas needed to convert from SI.
78
+ */
79
+ export declare const EnhancedDisplayUnitsSchema: import("@sinclair/typebox").TObject<{
80
+ category: import("@sinclair/typebox").TString;
81
+ targetUnit: import("@sinclair/typebox").TString;
82
+ formula: import("@sinclair/typebox").TString;
83
+ inverseFormula: import("@sinclair/typebox").TString;
84
+ symbol: import("@sinclair/typebox").TString;
85
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
86
+ }>;
87
+ export type EnhancedDisplayUnits = Static<typeof EnhancedDisplayUnitsSchema>;
88
+ /**
89
+ * Metadata payload for a Signal K path.
90
+ * Contains display hints, units, timeout, and alarm zones.
91
+ */
92
+ export declare const MetaValueSchema: import("@sinclair/typebox").TObject<{
93
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
94
+ units: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
95
+ example: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
96
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
97
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
98
+ displayScale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
99
+ lower: import("@sinclair/typebox").TNumber;
100
+ upper: import("@sinclair/typebox").TNumber;
101
+ }>>;
102
+ zones: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
103
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
104
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
105
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
106
+ message: import("@sinclair/typebox").TString;
107
+ }>>>;
108
+ supportsPut: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
109
+ displayUnits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
110
+ category: import("@sinclair/typebox").TString;
111
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
112
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
113
+ }>, import("@sinclair/typebox").TObject<{
114
+ category: import("@sinclair/typebox").TString;
115
+ targetUnit: import("@sinclair/typebox").TString;
116
+ formula: import("@sinclair/typebox").TString;
117
+ inverseFormula: import("@sinclair/typebox").TString;
118
+ symbol: import("@sinclair/typebox").TString;
119
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
120
+ }>]>>;
121
+ }>;
122
+ export type MetaValue = Static<typeof MetaValueSchema>;
123
+ /**
124
+ * Meta message — a path paired with its metadata.
125
+ */
126
+ export declare const MetaSchema: import("@sinclair/typebox").TObject<{
127
+ path: import("@sinclair/typebox").TString;
128
+ value: import("@sinclair/typebox").TObject<{
129
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
130
+ units: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
131
+ example: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
132
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
133
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
134
+ displayScale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
135
+ lower: import("@sinclair/typebox").TNumber;
136
+ upper: import("@sinclair/typebox").TNumber;
137
+ }>>;
138
+ zones: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
139
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
140
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
141
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
142
+ message: import("@sinclair/typebox").TString;
143
+ }>>>;
144
+ supportsPut: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
145
+ displayUnits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
146
+ category: import("@sinclair/typebox").TString;
147
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
148
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
149
+ }>, import("@sinclair/typebox").TObject<{
150
+ category: import("@sinclair/typebox").TString;
151
+ targetUnit: import("@sinclair/typebox").TString;
152
+ formula: import("@sinclair/typebox").TString;
153
+ inverseFormula: import("@sinclair/typebox").TString;
154
+ symbol: import("@sinclair/typebox").TString;
155
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
156
+ }>]>>;
157
+ }>;
158
+ }>;
159
+ export type Meta = Static<typeof MetaSchema>;
160
+ /**
161
+ * Source of data in delta format — a record of where the data was received from.
162
+ *
163
+ * Properties cover NMEA 0183 (talker, sentence), NMEA 2000 (src, pgn, canName,
164
+ * instance), and AIS (aisType 1-27) sources.
165
+ *
166
+ * @see specification/schemas/definitions.json#/definitions/source
167
+ */
168
+ export declare const SourceSchema: import("@sinclair/typebox").TObject<{
169
+ label: import("@sinclair/typebox").TString;
170
+ type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
171
+ src: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
172
+ canName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
173
+ pgn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
174
+ instance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
175
+ sentence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
176
+ talker: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
177
+ aisType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
178
+ }>;
179
+ export type Source = Static<typeof SourceSchema>;
180
+ /**
181
+ * Notification payload — state, method, message, and optional position/status.
182
+ */
183
+ export declare const NotificationSchema: import("@sinclair/typebox").TObject<{
184
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
185
+ method: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visual">, import("@sinclair/typebox").TLiteral<"sound">]>>;
186
+ message: import("@sinclair/typebox").TString;
187
+ status: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
188
+ silenced: import("@sinclair/typebox").TBoolean;
189
+ acknowledged: import("@sinclair/typebox").TBoolean;
190
+ canSilence: import("@sinclair/typebox").TBoolean;
191
+ canAcknowledge: import("@sinclair/typebox").TBoolean;
192
+ canClear: import("@sinclair/typebox").TBoolean;
193
+ }>>;
194
+ position: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRefUnsafe<import("@sinclair/typebox").TObject<{
195
+ latitude: import("@sinclair/typebox").TNumber;
196
+ longitude: import("@sinclair/typebox").TNumber;
197
+ altitude: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
198
+ }>>>;
199
+ createdAt: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
200
+ id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
201
+ }>;
202
+ export type Notification = Static<typeof NotificationSchema>;
203
+ /**
204
+ * A path-value pair in an update delta.
205
+ */
206
+ export declare const PathValueSchema: import("@sinclair/typebox").TObject<{
207
+ path: import("@sinclair/typebox").TString;
208
+ value: import("@sinclair/typebox").TUnknown;
209
+ }>;
210
+ export type PathValue = Static<typeof PathValueSchema>;
211
+ export declare const UpdateSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TIntersect<[import("@sinclair/typebox").TObject<{
212
+ timestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
213
+ source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
214
+ label: import("@sinclair/typebox").TString;
215
+ type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
216
+ src: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
217
+ canName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
218
+ pgn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
219
+ instance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
220
+ sentence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
221
+ talker: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
222
+ aisType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
223
+ }>>;
224
+ $source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
225
+ notificationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
226
+ }>, import("@sinclair/typebox").TObject<{
227
+ values: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
228
+ path: import("@sinclair/typebox").TString;
229
+ value: import("@sinclair/typebox").TUnknown;
230
+ }>>;
231
+ meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
232
+ path: import("@sinclair/typebox").TString;
233
+ value: import("@sinclair/typebox").TObject<{
234
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
235
+ units: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
236
+ example: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
237
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
238
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
239
+ displayScale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
240
+ lower: import("@sinclair/typebox").TNumber;
241
+ upper: import("@sinclair/typebox").TNumber;
242
+ }>>;
243
+ zones: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
244
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
245
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
246
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
247
+ message: import("@sinclair/typebox").TString;
248
+ }>>>;
249
+ supportsPut: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
250
+ displayUnits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
251
+ category: import("@sinclair/typebox").TString;
252
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
253
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
254
+ }>, import("@sinclair/typebox").TObject<{
255
+ category: import("@sinclair/typebox").TString;
256
+ targetUnit: import("@sinclair/typebox").TString;
257
+ formula: import("@sinclair/typebox").TString;
258
+ inverseFormula: import("@sinclair/typebox").TString;
259
+ symbol: import("@sinclair/typebox").TString;
260
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
261
+ }>]>>;
262
+ }>;
263
+ }>>>;
264
+ }>]>, import("@sinclair/typebox").TIntersect<[import("@sinclair/typebox").TObject<{
265
+ timestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
266
+ source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
267
+ label: import("@sinclair/typebox").TString;
268
+ type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
269
+ src: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
270
+ canName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
271
+ pgn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
272
+ instance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
273
+ sentence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
274
+ talker: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
275
+ aisType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
276
+ }>>;
277
+ $source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
278
+ notificationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
279
+ }>, import("@sinclair/typebox").TObject<{
280
+ meta: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
281
+ path: import("@sinclair/typebox").TString;
282
+ value: import("@sinclair/typebox").TObject<{
283
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
284
+ units: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
285
+ example: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
286
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
287
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
288
+ displayScale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
289
+ lower: import("@sinclair/typebox").TNumber;
290
+ upper: import("@sinclair/typebox").TNumber;
291
+ }>>;
292
+ zones: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
293
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
294
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
295
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
296
+ message: import("@sinclair/typebox").TString;
297
+ }>>>;
298
+ supportsPut: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
299
+ displayUnits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
300
+ category: import("@sinclair/typebox").TString;
301
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
302
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
303
+ }>, import("@sinclair/typebox").TObject<{
304
+ category: import("@sinclair/typebox").TString;
305
+ targetUnit: import("@sinclair/typebox").TString;
306
+ formula: import("@sinclair/typebox").TString;
307
+ inverseFormula: import("@sinclair/typebox").TString;
308
+ symbol: import("@sinclair/typebox").TString;
309
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
310
+ }>]>>;
311
+ }>;
312
+ }>>;
313
+ values: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
314
+ path: import("@sinclair/typebox").TString;
315
+ value: import("@sinclair/typebox").TUnknown;
316
+ }>>>;
317
+ }>]>]>;
318
+ /**
319
+ * A Signal K delta message — the fundamental unit of data exchange.
320
+ * Contains a context (vessel/aircraft/etc.) and one or more updates.
321
+ */
322
+ export declare const DeltaSchema: import("@sinclair/typebox").TObject<{
323
+ context: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
324
+ updates: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TIntersect<[import("@sinclair/typebox").TObject<{
325
+ timestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
326
+ source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
327
+ label: import("@sinclair/typebox").TString;
328
+ type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
329
+ src: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
330
+ canName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
331
+ pgn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
332
+ instance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
333
+ sentence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
334
+ talker: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
335
+ aisType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
336
+ }>>;
337
+ $source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
338
+ notificationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
339
+ }>, import("@sinclair/typebox").TObject<{
340
+ values: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
341
+ path: import("@sinclair/typebox").TString;
342
+ value: import("@sinclair/typebox").TUnknown;
343
+ }>>;
344
+ meta: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
345
+ path: import("@sinclair/typebox").TString;
346
+ value: import("@sinclair/typebox").TObject<{
347
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
348
+ units: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
349
+ example: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
350
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
351
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
352
+ displayScale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
353
+ lower: import("@sinclair/typebox").TNumber;
354
+ upper: import("@sinclair/typebox").TNumber;
355
+ }>>;
356
+ zones: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
357
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
358
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
359
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
360
+ message: import("@sinclair/typebox").TString;
361
+ }>>>;
362
+ supportsPut: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
363
+ displayUnits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
364
+ category: import("@sinclair/typebox").TString;
365
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
366
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
367
+ }>, import("@sinclair/typebox").TObject<{
368
+ category: import("@sinclair/typebox").TString;
369
+ targetUnit: import("@sinclair/typebox").TString;
370
+ formula: import("@sinclair/typebox").TString;
371
+ inverseFormula: import("@sinclair/typebox").TString;
372
+ symbol: import("@sinclair/typebox").TString;
373
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
374
+ }>]>>;
375
+ }>;
376
+ }>>>;
377
+ }>]>, import("@sinclair/typebox").TIntersect<[import("@sinclair/typebox").TObject<{
378
+ timestamp: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
379
+ source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
380
+ label: import("@sinclair/typebox").TString;
381
+ type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
382
+ src: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
383
+ canName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
384
+ pgn: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
385
+ instance: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
386
+ sentence: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
387
+ talker: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
388
+ aisType: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
389
+ }>>;
390
+ $source: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
391
+ notificationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
392
+ }>, import("@sinclair/typebox").TObject<{
393
+ meta: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
394
+ path: import("@sinclair/typebox").TString;
395
+ value: import("@sinclair/typebox").TObject<{
396
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
397
+ units: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
398
+ example: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
399
+ timeout: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
400
+ displayName: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
401
+ displayScale: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
402
+ lower: import("@sinclair/typebox").TNumber;
403
+ upper: import("@sinclair/typebox").TNumber;
404
+ }>>;
405
+ zones: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
406
+ lower: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
407
+ upper: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
408
+ state: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"nominal">, import("@sinclair/typebox").TLiteral<"normal">, import("@sinclair/typebox").TLiteral<"alert">, import("@sinclair/typebox").TLiteral<"warn">, import("@sinclair/typebox").TLiteral<"alarm">, import("@sinclair/typebox").TLiteral<"emergency">]>;
409
+ message: import("@sinclair/typebox").TString;
410
+ }>>>;
411
+ supportsPut: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
412
+ displayUnits: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
413
+ category: import("@sinclair/typebox").TString;
414
+ targetUnit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
415
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
416
+ }>, import("@sinclair/typebox").TObject<{
417
+ category: import("@sinclair/typebox").TString;
418
+ targetUnit: import("@sinclair/typebox").TString;
419
+ formula: import("@sinclair/typebox").TString;
420
+ inverseFormula: import("@sinclair/typebox").TString;
421
+ symbol: import("@sinclair/typebox").TString;
422
+ displayFormat: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
423
+ }>]>>;
424
+ }>;
425
+ }>>;
426
+ values: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
427
+ path: import("@sinclair/typebox").TString;
428
+ value: import("@sinclair/typebox").TUnknown;
429
+ }>>>;
430
+ }>]>]>>;
431
+ }>;
432
+ //# sourceMappingURL=protocol-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-schemas.d.ts","sourceRoot":"","sources":["../../src/typebox/protocol-schemas.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAUrD;;;;GAIG;AACH,oBAAY,WAAW;IACrB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;IACf,SAAS,cAAc;CACxB;AAED;;;;GAIG;AACH,oBAAY,YAAY;IACtB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,sUAc5B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,qIAM7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU;;;;;EAyBtB,CAAA;AACD,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAA;AAE5C;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;EAsB7B,CAAA;AACD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;EAoBtC,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,0BAA0B;;;;;;;EA8BtC,CAAA;AACD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE5E;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsD3B,CAAA;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAStB,CAAA;AACD,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAA;AAE5C;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;EAsExB,CAAA;AACD,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,YAAY,CAAC,CAAA;AAEhD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;EAkC9B,CAAA;AACD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE5D;;GAEG;AACH,eAAO,MAAM,eAAe;;;EAS3B,CAAA;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAA;AAsDtD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAUxB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoBvB,CAAA"}