@trillboards/edge-sdk 0.2.128 → 0.2.130
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/dist/AudienceAnalyzeClient.d.ts +27 -3
- package/dist/AudienceAnalyzeClient.d.ts.map +1 -1
- package/dist/AudienceAnalyzeClient.js +60 -6
- package/dist/AudienceAnalyzeClient.js.map +1 -1
- package/dist/CloudSensingManager.d.ts +8 -0
- package/dist/CloudSensingManager.d.ts.map +1 -1
- package/dist/CloudSensingManager.js +59 -14
- package/dist/CloudSensingManager.js.map +1 -1
- package/dist/DetectorFieldProducer.d.ts +36 -0
- package/dist/DetectorFieldProducer.d.ts.map +1 -1
- package/dist/DetectorFieldProducer.js +67 -3
- package/dist/DetectorFieldProducer.js.map +1 -1
- package/dist/EdgeAgent.js +1 -1
- package/dist/SenseTelemetryReporter.d.ts +83 -0
- package/dist/SenseTelemetryReporter.d.ts.map +1 -0
- package/dist/SenseTelemetryReporter.js +454 -0
- package/dist/SenseTelemetryReporter.js.map +1 -0
- package/dist/diagnose.d.ts +1 -1
- package/dist/diagnose.js +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/jpegFrameSize.d.ts +30 -0
- package/dist/jpegFrameSize.d.ts.map +1 -0
- package/dist/jpegFrameSize.js +94 -0
- package/dist/jpegFrameSize.js.map +1 -0
- package/dist/sensingRunMode.d.ts +3 -0
- package/dist/sensingRunMode.d.ts.map +1 -1
- package/dist/sensingRunMode.js +49 -2
- package/dist/sensingRunMode.js.map +1 -1
- package/dist/zoneContainment.d.ts +62 -0
- package/dist/zoneContainment.d.ts.map +1 -1
- package/dist/zoneContainment.js +108 -0
- package/dist/zoneContainment.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { type AudienceAnalyzeResponse, type SenseTelemetryEvent, type SenseTelemetryEventType } from './AudienceAnalyzeClient';
|
|
2
|
+
export interface SenseTelemetryTransport {
|
|
3
|
+
reportTelemetry(events: SenseTelemetryEvent[]): Promise<AudienceAnalyzeResponse>;
|
|
4
|
+
}
|
|
5
|
+
export interface SenseTelemetryTarget {
|
|
6
|
+
feedName: string;
|
|
7
|
+
client: SenseTelemetryTransport;
|
|
8
|
+
}
|
|
9
|
+
export interface SenseTelemetryReporterOptions {
|
|
10
|
+
targets: SenseTelemetryTarget[];
|
|
11
|
+
spoolDirectory: string;
|
|
12
|
+
flushIntervalMs?: number;
|
|
13
|
+
batchSize?: number;
|
|
14
|
+
maxQueueSize?: number;
|
|
15
|
+
maxCrashFiles?: number;
|
|
16
|
+
now?: () => number;
|
|
17
|
+
randomId?: () => string;
|
|
18
|
+
/** Tests can exercise queue/spool behavior without installing global hooks. */
|
|
19
|
+
installProcessHandlers?: boolean;
|
|
20
|
+
startTimer?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface SenseTelemetryCapture {
|
|
23
|
+
type: SenseTelemetryEventType;
|
|
24
|
+
feedName?: string;
|
|
25
|
+
error?: unknown;
|
|
26
|
+
errorClass?: string;
|
|
27
|
+
message?: string;
|
|
28
|
+
severity?: SenseTelemetryEvent['severity'];
|
|
29
|
+
metadata?: Record<string, unknown>;
|
|
30
|
+
occurredAt?: string | number | Date;
|
|
31
|
+
durable?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare function redactTelemetryText(value: unknown, maxLength?: number): string;
|
|
34
|
+
/**
|
|
35
|
+
* Bounded, retrying error transport for the Sense Anything connector.
|
|
36
|
+
*
|
|
37
|
+
* Ordinary camera/inference telemetry is coalesced in memory. Process crashes
|
|
38
|
+
* are also written synchronously to a small disk spool so the next launch can
|
|
39
|
+
* report them even when the current process cannot make another network call.
|
|
40
|
+
*/
|
|
41
|
+
export declare class SenseTelemetryReporter {
|
|
42
|
+
private readonly targets;
|
|
43
|
+
private readonly targetByFeed;
|
|
44
|
+
private readonly spoolDirectory;
|
|
45
|
+
private readonly flushIntervalMs;
|
|
46
|
+
private readonly batchSize;
|
|
47
|
+
private readonly maxQueueSize;
|
|
48
|
+
private readonly maxCrashFiles;
|
|
49
|
+
private readonly now;
|
|
50
|
+
private readonly randomId;
|
|
51
|
+
private readonly queue;
|
|
52
|
+
private timer;
|
|
53
|
+
private flushing;
|
|
54
|
+
private fatalSeen;
|
|
55
|
+
private droppedEvents;
|
|
56
|
+
private started;
|
|
57
|
+
private readonly onUncaughtExceptionMonitor;
|
|
58
|
+
private readonly onExit;
|
|
59
|
+
constructor(options: SenseTelemetryReporterOptions);
|
|
60
|
+
private start;
|
|
61
|
+
capture(input: SenseTelemetryCapture): void;
|
|
62
|
+
/** Send at most one bounded batch per screen; failed batches stay queued. */
|
|
63
|
+
flush(): Promise<void>;
|
|
64
|
+
getQueueSize(): number;
|
|
65
|
+
/** Test/embedding teardown; production normally lives until process exit. */
|
|
66
|
+
close(clean?: boolean): void;
|
|
67
|
+
private targetFor;
|
|
68
|
+
private selectUploadBatch;
|
|
69
|
+
private uploadEvent;
|
|
70
|
+
private compactUploadEvent;
|
|
71
|
+
private encodedBytes;
|
|
72
|
+
private enqueue;
|
|
73
|
+
private toIso;
|
|
74
|
+
private crashFiles;
|
|
75
|
+
private persistDurableEvent;
|
|
76
|
+
private loadCrashSpool;
|
|
77
|
+
private markerPath;
|
|
78
|
+
private detectPreviousAbnormalExit;
|
|
79
|
+
private writeRunMarker;
|
|
80
|
+
private removeRunMarker;
|
|
81
|
+
private unlinkQuietly;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=SenseTelemetryReporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SenseTelemetryReporter.d.ts","sourceRoot":"","sources":["../src/SenseTelemetryReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SenseTelemetryReporter = void 0;
|
|
37
|
+
exports.redactTelemetryText = redactTelemetryText;
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const os = __importStar(require("os"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const crypto_1 = require("crypto");
|
|
42
|
+
const AudienceAnalyzeClient_1 = require("./AudienceAnalyzeClient");
|
|
43
|
+
const DEFAULT_FLUSH_INTERVAL_MS = 10000;
|
|
44
|
+
const DEFAULT_BATCH_SIZE = 25;
|
|
45
|
+
const DEFAULT_QUEUE_SIZE = 500;
|
|
46
|
+
const DEFAULT_CRASH_FILES = 100;
|
|
47
|
+
const RUN_MARKER_FILE = 'connector-running.json';
|
|
48
|
+
function connectorVersion() {
|
|
49
|
+
try {
|
|
50
|
+
// dist/SenseTelemetryReporter.js sits beside dist/cli.js, so this is the
|
|
51
|
+
// same package.json source used by the CLI and auto-sense.
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
53
|
+
return String(require('../package.json').version || 'unknown');
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return 'unknown';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function redactTelemetryText(value, maxLength = 4000) {
|
|
60
|
+
return String(value == null ? '' : value)
|
|
61
|
+
.replace(/\brtsp:\/\/[^\s"'<>]+/gi, 'rtsp://[REDACTED]')
|
|
62
|
+
.replace(/\b(https?:\/\/)([^\s/@:]+):([^\s/@]+)@/gi, '$1[REDACTED]@')
|
|
63
|
+
.replace(/([?&](?:token|device_token|password|passwd|secret|api[_-]?key)=)[^&#\s]+/gi, '$1[REDACTED]')
|
|
64
|
+
.replace(/\bauthorization\s*[:=][^\r\n]*/gi, 'Authorization=[REDACTED]')
|
|
65
|
+
.replace(/\b(x-device-token|x-trillboard-device-token)\s*[:=]\s*[^\s,;]+/gi, '$1=[REDACTED]')
|
|
66
|
+
.replace(/\btrb_device_[A-Za-z0-9._~-]+/g, 'trb_device_[REDACTED]')
|
|
67
|
+
.slice(0, maxLength);
|
|
68
|
+
}
|
|
69
|
+
function sanitizeMetadata(value, depth = 0) {
|
|
70
|
+
if (value == null || typeof value === 'boolean')
|
|
71
|
+
return value;
|
|
72
|
+
if (typeof value === 'number')
|
|
73
|
+
return Number.isFinite(value) ? value : null;
|
|
74
|
+
if (typeof value === 'string')
|
|
75
|
+
return redactTelemetryText(value, 500);
|
|
76
|
+
if (depth >= 2)
|
|
77
|
+
return '[truncated]';
|
|
78
|
+
if (Array.isArray(value)) {
|
|
79
|
+
return value.slice(0, 20).map((entry) => sanitizeMetadata(entry, depth + 1));
|
|
80
|
+
}
|
|
81
|
+
if (typeof value === 'object') {
|
|
82
|
+
const out = {};
|
|
83
|
+
for (const [key, entry] of Object.entries(value).slice(0, 32)) {
|
|
84
|
+
out[redactTelemetryText(key, 64)] = sanitizeMetadata(entry, depth + 1);
|
|
85
|
+
}
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
return redactTelemetryText(String(value), 500);
|
|
89
|
+
}
|
|
90
|
+
function errorFrom(value) {
|
|
91
|
+
return value instanceof Error ? value : new Error(String(value == null ? 'Unknown error' : value));
|
|
92
|
+
}
|
|
93
|
+
function normalizedQueueMessage(message) {
|
|
94
|
+
return message
|
|
95
|
+
.replace(/[0-9a-f]{24}/gi, '<id>')
|
|
96
|
+
.replace(/\d{4}-\d{2}-\d{2}T[\d:.]+Z?/g, '<ts>')
|
|
97
|
+
.replace(/\d+/g, '<n>')
|
|
98
|
+
.slice(0, 200);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Bounded, retrying error transport for the Sense Anything connector.
|
|
102
|
+
*
|
|
103
|
+
* Ordinary camera/inference telemetry is coalesced in memory. Process crashes
|
|
104
|
+
* are also written synchronously to a small disk spool so the next launch can
|
|
105
|
+
* report them even when the current process cannot make another network call.
|
|
106
|
+
*/
|
|
107
|
+
class SenseTelemetryReporter {
|
|
108
|
+
constructor(options) {
|
|
109
|
+
this.queue = new Map();
|
|
110
|
+
this.timer = null;
|
|
111
|
+
this.flushing = false;
|
|
112
|
+
this.fatalSeen = false;
|
|
113
|
+
this.droppedEvents = 0;
|
|
114
|
+
this.started = false;
|
|
115
|
+
if (!Array.isArray(options.targets) || options.targets.length === 0) {
|
|
116
|
+
throw new Error('SenseTelemetryReporter requires at least one authenticated target');
|
|
117
|
+
}
|
|
118
|
+
this.targets = options.targets;
|
|
119
|
+
this.targetByFeed = new Map(options.targets.map((target) => [target.feedName, target]));
|
|
120
|
+
this.spoolDirectory = options.spoolDirectory;
|
|
121
|
+
this.flushIntervalMs = Math.max(250, options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS);
|
|
122
|
+
this.batchSize = Math.min(50, Math.max(1, options.batchSize ?? DEFAULT_BATCH_SIZE));
|
|
123
|
+
this.maxQueueSize = Math.max(this.batchSize, options.maxQueueSize ?? DEFAULT_QUEUE_SIZE);
|
|
124
|
+
this.maxCrashFiles = Math.max(1, options.maxCrashFiles ?? DEFAULT_CRASH_FILES);
|
|
125
|
+
this.now = options.now ?? Date.now;
|
|
126
|
+
this.randomId = options.randomId ?? crypto_1.randomUUID;
|
|
127
|
+
this.onUncaughtExceptionMonitor = (error, origin) => {
|
|
128
|
+
this.fatalSeen = true;
|
|
129
|
+
this.capture({
|
|
130
|
+
type: 'process_crash',
|
|
131
|
+
error,
|
|
132
|
+
errorClass: error?.name || 'UncaughtException',
|
|
133
|
+
severity: 'critical',
|
|
134
|
+
durable: true,
|
|
135
|
+
metadata: { origin },
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
this.onExit = () => {
|
|
139
|
+
if (!this.fatalSeen)
|
|
140
|
+
this.removeRunMarker();
|
|
141
|
+
};
|
|
142
|
+
this.start({
|
|
143
|
+
installProcessHandlers: options.installProcessHandlers ?? process.env.NODE_ENV !== 'test',
|
|
144
|
+
startTimer: options.startTimer ?? process.env.NODE_ENV !== 'test',
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
start(options) {
|
|
148
|
+
if (this.started)
|
|
149
|
+
return;
|
|
150
|
+
this.started = true;
|
|
151
|
+
try {
|
|
152
|
+
fs.mkdirSync(this.spoolDirectory, { recursive: true });
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// An unwritable state disk degrades crash durability, never sensing.
|
|
156
|
+
// Ordinary events can still use the bounded in-memory queue.
|
|
157
|
+
}
|
|
158
|
+
this.loadCrashSpool();
|
|
159
|
+
this.detectPreviousAbnormalExit();
|
|
160
|
+
this.writeRunMarker();
|
|
161
|
+
if (options.installProcessHandlers) {
|
|
162
|
+
// uncaughtExceptionMonitor observes without changing Node's crash
|
|
163
|
+
// semantics. An `uncaughtException` listener would keep a corrupted
|
|
164
|
+
// process alive, which crash reporting must never do.
|
|
165
|
+
process.on('uncaughtExceptionMonitor', this.onUncaughtExceptionMonitor);
|
|
166
|
+
process.on('exit', this.onExit);
|
|
167
|
+
}
|
|
168
|
+
if (options.startTimer) {
|
|
169
|
+
this.timer = setInterval(() => {
|
|
170
|
+
void this.flush();
|
|
171
|
+
}, this.flushIntervalMs);
|
|
172
|
+
this.timer.unref?.();
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
capture(input) {
|
|
176
|
+
const target = this.targetFor(input.feedName);
|
|
177
|
+
const error = input.error === undefined ? null : errorFrom(input.error);
|
|
178
|
+
const message = redactTelemetryText(input.message || error?.message || `${input.type} reported by Sense Anything`, 2000);
|
|
179
|
+
const errorClass = redactTelemetryText(input.errorClass || error?.name || input.type, 80).replace(/[^A-Za-z0-9_.:-]/g, '_');
|
|
180
|
+
const occurredAt = this.toIso(input.occurredAt);
|
|
181
|
+
const durable = input.durable === true
|
|
182
|
+
|| input.type === 'process_crash'
|
|
183
|
+
|| input.type === 'process_abnormal_exit';
|
|
184
|
+
const event = {
|
|
185
|
+
type: input.type,
|
|
186
|
+
eventId: this.randomId(),
|
|
187
|
+
occurredAt,
|
|
188
|
+
errorClass,
|
|
189
|
+
message,
|
|
190
|
+
...(error?.stack ? { stack: redactTelemetryText(error.stack, 4000) } : {}),
|
|
191
|
+
severity: input.severity || (durable ? 'critical' : 'error'),
|
|
192
|
+
...(input.feedName ? { feedName: redactTelemetryText(input.feedName, 100) } : {}),
|
|
193
|
+
metadata: {
|
|
194
|
+
connector_version: connectorVersion(),
|
|
195
|
+
platform: process.platform,
|
|
196
|
+
arch: process.arch,
|
|
197
|
+
...sanitizeMetadata(input.metadata || {}),
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
const spoolPath = durable ? this.persistDurableEvent(event) : undefined;
|
|
201
|
+
this.enqueue(target, event, durable, spoolPath);
|
|
202
|
+
}
|
|
203
|
+
/** Send at most one bounded batch per screen; failed batches stay queued. */
|
|
204
|
+
async flush() {
|
|
205
|
+
if (this.flushing || this.queue.size === 0)
|
|
206
|
+
return;
|
|
207
|
+
this.flushing = true;
|
|
208
|
+
try {
|
|
209
|
+
const groups = new Map();
|
|
210
|
+
for (const entry of this.queue.values()) {
|
|
211
|
+
const group = groups.get(entry.target) || [];
|
|
212
|
+
group.push(entry);
|
|
213
|
+
groups.set(entry.target, group);
|
|
214
|
+
}
|
|
215
|
+
await Promise.all([...groups.entries()].map(async ([target, entries]) => {
|
|
216
|
+
const snapshots = this.selectUploadBatch(entries);
|
|
217
|
+
const events = snapshots.map((snapshot) => snapshot.event);
|
|
218
|
+
try {
|
|
219
|
+
const response = await target.client.reportTelemetry(events);
|
|
220
|
+
const accepted = Number(response.body?.accepted);
|
|
221
|
+
const rejected = Number(response.body?.rejected);
|
|
222
|
+
// A partial 202 means the sink refused at least one event (for
|
|
223
|
+
// example because its bounded buffer is full). Retain the whole
|
|
224
|
+
// batch: successfully captured rows deduplicate server-side, while
|
|
225
|
+
// the refused row gets another chance instead of disappearing.
|
|
226
|
+
if (!response.ok || accepted !== events.length || rejected !== 0)
|
|
227
|
+
return;
|
|
228
|
+
for (const { entry, occurrences } of snapshots) {
|
|
229
|
+
if (entry.occurrences <= occurrences) {
|
|
230
|
+
this.queue.delete(entry.key);
|
|
231
|
+
if (entry.spoolPath)
|
|
232
|
+
this.unlinkQuietly(entry.spoolPath);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
entry.occurrences -= occurrences;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
this.droppedEvents = 0;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// Network and server failures are retried by the next bounded flush.
|
|
242
|
+
// Logging here would recursively create another telemetry event.
|
|
243
|
+
}
|
|
244
|
+
}));
|
|
245
|
+
}
|
|
246
|
+
finally {
|
|
247
|
+
this.flushing = false;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
getQueueSize() {
|
|
251
|
+
return this.queue.size;
|
|
252
|
+
}
|
|
253
|
+
/** Test/embedding teardown; production normally lives until process exit. */
|
|
254
|
+
close(clean = true) {
|
|
255
|
+
if (this.timer)
|
|
256
|
+
clearInterval(this.timer);
|
|
257
|
+
this.timer = null;
|
|
258
|
+
process.removeListener('uncaughtExceptionMonitor', this.onUncaughtExceptionMonitor);
|
|
259
|
+
process.removeListener('exit', this.onExit);
|
|
260
|
+
if (clean)
|
|
261
|
+
this.removeRunMarker();
|
|
262
|
+
}
|
|
263
|
+
targetFor(feedName) {
|
|
264
|
+
return (feedName && this.targetByFeed.get(feedName)) || this.targets[0];
|
|
265
|
+
}
|
|
266
|
+
selectUploadBatch(entries) {
|
|
267
|
+
const snapshots = [];
|
|
268
|
+
for (const entry of entries.slice(0, this.batchSize)) {
|
|
269
|
+
const occurrences = entry.occurrences;
|
|
270
|
+
let event = this.uploadEvent(entry, occurrences);
|
|
271
|
+
if (this.encodedBytes([event]) > AudienceAnalyzeClient_1.SENSE_TELEMETRY_BATCH_MAX_BYTES) {
|
|
272
|
+
event = this.compactUploadEvent(entry, occurrences);
|
|
273
|
+
}
|
|
274
|
+
const candidate = [...snapshots.map((snapshot) => snapshot.event), event];
|
|
275
|
+
if (this.encodedBytes(candidate) > AudienceAnalyzeClient_1.SENSE_TELEMETRY_BATCH_MAX_BYTES)
|
|
276
|
+
break;
|
|
277
|
+
snapshots.push({ entry, occurrences, event });
|
|
278
|
+
}
|
|
279
|
+
return snapshots;
|
|
280
|
+
}
|
|
281
|
+
uploadEvent(entry, occurrences) {
|
|
282
|
+
return {
|
|
283
|
+
...entry.event,
|
|
284
|
+
occurrences,
|
|
285
|
+
metadata: {
|
|
286
|
+
...(entry.event.metadata || {}),
|
|
287
|
+
...(this.droppedEvents > 0 ? { queue_dropped_before: this.droppedEvents } : {}),
|
|
288
|
+
},
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
compactUploadEvent(entry, occurrences) {
|
|
292
|
+
const metadata = entry.event.metadata || {};
|
|
293
|
+
return {
|
|
294
|
+
type: entry.event.type,
|
|
295
|
+
eventId: redactTelemetryText(entry.event.eventId, 100),
|
|
296
|
+
occurredAt: this.toIso(entry.event.occurredAt),
|
|
297
|
+
errorClass: redactTelemetryText(entry.event.errorClass, 80),
|
|
298
|
+
message: redactTelemetryText(entry.event.message, 1000),
|
|
299
|
+
...(entry.event.severity ? { severity: entry.event.severity } : {}),
|
|
300
|
+
...(entry.event.feedName
|
|
301
|
+
? { feedName: redactTelemetryText(entry.event.feedName, 100) }
|
|
302
|
+
: {}),
|
|
303
|
+
occurrences,
|
|
304
|
+
metadata: {
|
|
305
|
+
connector_version: redactTelemetryText(metadata.connector_version, 40),
|
|
306
|
+
platform: redactTelemetryText(metadata.platform, 40),
|
|
307
|
+
arch: redactTelemetryText(metadata.arch, 40),
|
|
308
|
+
telemetry_payload_truncated: true,
|
|
309
|
+
...(this.droppedEvents > 0 ? { queue_dropped_before: this.droppedEvents } : {}),
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
encodedBytes(events) {
|
|
314
|
+
return Buffer.byteLength(JSON.stringify(events), 'utf8');
|
|
315
|
+
}
|
|
316
|
+
enqueue(target, event, durable, spoolPath) {
|
|
317
|
+
const key = durable
|
|
318
|
+
? `${target.feedName}:${event.eventId}`
|
|
319
|
+
: `${target.feedName}:${event.type}:${event.errorClass}:${normalizedQueueMessage(event.message)}`;
|
|
320
|
+
const existing = this.queue.get(key);
|
|
321
|
+
if (existing) {
|
|
322
|
+
existing.occurrences += 1;
|
|
323
|
+
existing.event.occurredAt = event.occurredAt;
|
|
324
|
+
existing.event.metadata = {
|
|
325
|
+
...(existing.event.metadata || {}),
|
|
326
|
+
...(event.metadata || {}),
|
|
327
|
+
};
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (this.queue.size >= this.maxQueueSize) {
|
|
331
|
+
const disposable = [...this.queue.values()].find((entry) => !entry.durable);
|
|
332
|
+
if (!disposable) {
|
|
333
|
+
this.droppedEvents += 1;
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
this.queue.delete(disposable.key);
|
|
337
|
+
this.droppedEvents += disposable.occurrences;
|
|
338
|
+
}
|
|
339
|
+
this.queue.set(key, { key, target, event, occurrences: 1, durable, spoolPath });
|
|
340
|
+
if (this.queue.size >= this.batchSize)
|
|
341
|
+
void this.flush();
|
|
342
|
+
}
|
|
343
|
+
toIso(value) {
|
|
344
|
+
const parsed = value instanceof Date
|
|
345
|
+
? value.getTime()
|
|
346
|
+
: typeof value === 'number'
|
|
347
|
+
? value
|
|
348
|
+
: value
|
|
349
|
+
? Date.parse(value)
|
|
350
|
+
: this.now();
|
|
351
|
+
return new Date(Number.isFinite(parsed) ? parsed : this.now()).toISOString();
|
|
352
|
+
}
|
|
353
|
+
crashFiles() {
|
|
354
|
+
try {
|
|
355
|
+
return fs.readdirSync(this.spoolDirectory)
|
|
356
|
+
.filter((name) => name.startsWith('crash-') && name.endsWith('.json'))
|
|
357
|
+
.sort()
|
|
358
|
+
.map((name) => path.join(this.spoolDirectory, name));
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return [];
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
persistDurableEvent(event) {
|
|
365
|
+
try {
|
|
366
|
+
fs.mkdirSync(this.spoolDirectory, { recursive: true });
|
|
367
|
+
const files = this.crashFiles();
|
|
368
|
+
while (files.length >= this.maxCrashFiles) {
|
|
369
|
+
this.unlinkQuietly(files.shift());
|
|
370
|
+
}
|
|
371
|
+
const safeId = event.eventId.replace(/[^A-Za-z0-9_-]/g, '').slice(0, 80);
|
|
372
|
+
const finalPath = path.join(this.spoolDirectory, `crash-${String(this.now()).padStart(13, '0')}-${safeId}.json`);
|
|
373
|
+
const tempPath = `${finalPath}.tmp-${process.pid}`;
|
|
374
|
+
fs.writeFileSync(tempPath, JSON.stringify(event), { encoding: 'utf8', mode: 0o600 });
|
|
375
|
+
fs.renameSync(tempPath, finalPath);
|
|
376
|
+
return finalPath;
|
|
377
|
+
}
|
|
378
|
+
catch {
|
|
379
|
+
return undefined;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
loadCrashSpool() {
|
|
383
|
+
for (const spoolPath of this.crashFiles()) {
|
|
384
|
+
try {
|
|
385
|
+
const event = JSON.parse(fs.readFileSync(spoolPath, 'utf8'));
|
|
386
|
+
if (!event || typeof event !== 'object' || !event.eventId || !event.type) {
|
|
387
|
+
this.unlinkQuietly(spoolPath);
|
|
388
|
+
continue;
|
|
389
|
+
}
|
|
390
|
+
this.enqueue(this.targetFor(event.feedName), event, true, spoolPath);
|
|
391
|
+
}
|
|
392
|
+
catch {
|
|
393
|
+
// A torn crash file cannot become a poison retry. Remove it; the run
|
|
394
|
+
// marker still records that the process ended abnormally.
|
|
395
|
+
this.unlinkQuietly(spoolPath);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
markerPath() {
|
|
400
|
+
return path.join(this.spoolDirectory, RUN_MARKER_FILE);
|
|
401
|
+
}
|
|
402
|
+
detectPreviousAbnormalExit() {
|
|
403
|
+
const markerPath = this.markerPath();
|
|
404
|
+
if (!fs.existsSync(markerPath))
|
|
405
|
+
return;
|
|
406
|
+
let previous = {};
|
|
407
|
+
try {
|
|
408
|
+
previous = JSON.parse(fs.readFileSync(markerPath, 'utf8'));
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
previous = { marker: 'unreadable' };
|
|
412
|
+
}
|
|
413
|
+
this.capture({
|
|
414
|
+
type: 'process_abnormal_exit',
|
|
415
|
+
errorClass: 'PreviousRunDidNotExitCleanly',
|
|
416
|
+
message: 'The previous Sense Anything connector process did not exit cleanly',
|
|
417
|
+
severity: 'critical',
|
|
418
|
+
durable: true,
|
|
419
|
+
metadata: { previous_run: previous },
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
writeRunMarker() {
|
|
423
|
+
try {
|
|
424
|
+
const markerPath = this.markerPath();
|
|
425
|
+
const tempPath = `${markerPath}.tmp-${process.pid}`;
|
|
426
|
+
fs.writeFileSync(tempPath, JSON.stringify({
|
|
427
|
+
pid: process.pid,
|
|
428
|
+
started_at: new Date(this.now()).toISOString(),
|
|
429
|
+
connector_version: connectorVersion(),
|
|
430
|
+
platform: os.platform(),
|
|
431
|
+
arch: os.arch(),
|
|
432
|
+
}), { encoding: 'utf8', mode: 0o600 });
|
|
433
|
+
fs.renameSync(tempPath, markerPath);
|
|
434
|
+
}
|
|
435
|
+
catch {
|
|
436
|
+
// Telemetry must never prevent sensing from starting.
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
removeRunMarker() {
|
|
440
|
+
this.unlinkQuietly(this.markerPath());
|
|
441
|
+
}
|
|
442
|
+
unlinkQuietly(filePath) {
|
|
443
|
+
try {
|
|
444
|
+
fs.unlinkSync(filePath);
|
|
445
|
+
}
|
|
446
|
+
catch (error) {
|
|
447
|
+
if (error.code !== 'ENOENT') {
|
|
448
|
+
// Never recurse through connector logging/error telemetry here.
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
exports.SenseTelemetryReporter = SenseTelemetryReporter;
|
|
454
|
+
//# sourceMappingURL=SenseTelemetryReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SenseTelemetryReporter.js","sourceRoot":"","sources":["../src/SenseTelemetryReporter.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnose.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface DiagnosticReport {
|
|
|
31
31
|
skipped: number;
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
declare const SDK_VERSION = "0.2.
|
|
34
|
+
declare const SDK_VERSION = "0.2.130";
|
|
35
35
|
declare function checkNodeVersion(): CheckResult;
|
|
36
36
|
declare function checkPlatform(): CheckResult;
|
|
37
37
|
declare function checkMemory(): CheckResult;
|
package/dist/diagnose.js
CHANGED
|
@@ -63,7 +63,7 @@ const localNetworkAccess_1 = require("./localNetworkAccess");
|
|
|
63
63
|
// ---------------------------------------------------------------------------
|
|
64
64
|
// SDK version — mirrors package.json; kept in sync by CI
|
|
65
65
|
// ---------------------------------------------------------------------------
|
|
66
|
-
const SDK_VERSION = '0.2.
|
|
66
|
+
const SDK_VERSION = '0.2.130';
|
|
67
67
|
exports._SDK_VERSION = SDK_VERSION;
|
|
68
68
|
// ---------------------------------------------------------------------------
|
|
69
69
|
// ANSI helpers (no external deps)
|
package/dist/index.d.ts
CHANGED
|
@@ -16,8 +16,10 @@ export { resolveProxyForUrl, describeProxy } from './enterpriseProxy';
|
|
|
16
16
|
export type { ProxyResolution } from './enterpriseProxy';
|
|
17
17
|
export { probeLocalNetworkAccess, decideLocalNetworkVerdict, LOCAL_NETWORK_DENIED_SUGGESTION, LOCAL_NETWORK_DENIED_SUMMARY, } from './localNetworkAccess';
|
|
18
18
|
export type { LocalNetworkVerdict, LocalNetworkProbeResult, LocalNetworkProbeEvidence, LocalNetworkProbeOptions, } from './localNetworkAccess';
|
|
19
|
-
export { AudienceAnalyzeClient, defaultHttpPoster } from './AudienceAnalyzeClient';
|
|
20
|
-
export type { AudienceAnalyzeClientOptions, AudienceAnalyzeRequest, AudienceAnalyzeResponse, CameraHealthFailureClass, CameraHealthReport, CameraHealthState, FrameDimensions, HttpPoster, } from './AudienceAnalyzeClient';
|
|
19
|
+
export { AudienceAnalyzeClient, defaultHttpPoster, SENSE_TELEMETRY_BATCH_MAX_BYTES, } from './AudienceAnalyzeClient';
|
|
20
|
+
export type { AudienceAnalyzeClientOptions, AudienceAnalyzeRequest, AudienceAnalyzeResponse, CameraHealthFailureClass, CameraHealthReport, CameraHealthState, FrameDimensions, HttpPoster, SenseTelemetryEvent, SenseTelemetryEventType, } from './AudienceAnalyzeClient';
|
|
21
|
+
export { SenseTelemetryReporter, redactTelemetryText } from './SenseTelemetryReporter';
|
|
22
|
+
export type { SenseTelemetryCapture, SenseTelemetryReporterOptions, SenseTelemetryTarget, SenseTelemetryTransport, } from './SenseTelemetryReporter';
|
|
21
23
|
export { CloudSensingManager, buildSensingLoops, buildTiledCameras, classifyRtspFailureClass, resolveFeeds, } from './CloudSensingManager';
|
|
22
24
|
export { RecorderAddressRecovery, lookupMacAddress, normalizeMacAddress, rewriteStreamHost, shouldAttemptRecorderAddressRecovery, } from './RecorderAddressRecovery';
|
|
23
25
|
export type { RecorderAddressRecoveryOptions } from './RecorderAddressRecovery';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAKnD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,4BAA4B,EAC5B,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,sBAAsB,EACtB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACtE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,+BAA+B,EAC/B,4BAA4B,GAC7B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,mBAAmB,EACnB,uBAAuB,EACvB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|