footprintjs 10.2.1 → 10.4.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/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
- package/dist/esm/lib/capture/absentEntries.js +81 -0
- package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
- package/dist/esm/lib/capture/checkpointCapture.js +104 -0
- package/dist/esm/lib/capture/historyData.d.ts +9 -0
- package/dist/esm/lib/capture/historyData.js +79 -0
- package/dist/esm/lib/capture/historyNote.d.ts +4 -0
- package/dist/esm/lib/capture/historyNote.js +52 -0
- package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
- package/dist/esm/lib/capture/historyTarget.js +35 -0
- package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
- package/dist/esm/lib/capture/historyTypes.js +4 -0
- package/dist/esm/lib/capture/nativeCoverage.d.ts +69 -0
- package/dist/esm/lib/capture/nativeCoverage.js +140 -0
- package/dist/esm/lib/capture/noteShape.d.ts +10 -0
- package/dist/esm/lib/capture/noteShape.js +93 -0
- package/dist/esm/lib/capture/readSources.d.ts +43 -0
- package/dist/esm/lib/capture/readSources.js +78 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
- package/dist/esm/lib/engine/types.d.ts +3 -0
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/memory/StageContext.d.ts +13 -0
- package/dist/esm/lib/memory/StageContext.js +110 -14
- package/dist/esm/lib/memory/attention.d.ts +2 -0
- package/dist/esm/lib/memory/attention.js +12 -5
- package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
- package/dist/esm/lib/memory/runPolicy.js +2 -1
- package/dist/esm/lib/pause/record.js +8 -2
- package/dist/esm/lib/pause/types.d.ts +2 -0
- package/dist/esm/lib/pause/types.js +1 -1
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +12 -1
- package/dist/esm/lib/recorder/ControlDepRecorder.js +23 -1
- package/dist/esm/lib/recorder/snapshot.d.ts +1 -1
- package/dist/esm/lib/recorder/snapshot.js +7 -2
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +24 -1
- package/dist/esm/lib/runner/ExecutionRuntime.js +45 -4
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +5 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +74 -7
- package/dist/esm/lib/runner/attach.js +6 -2
- package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
- package/dist/esm/lib/runner/captureHistory.js +106 -0
- package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/index.d.ts +1 -0
- package/dist/esm/lib/runner/index.js +1 -1
- package/dist/esm/lib/runner/options.d.ts +3 -0
- package/dist/esm/lib/runner/options.js +46 -3
- package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
- package/dist/esm/lib/runner/readStoredCapture.js +36 -0
- package/dist/esm/lib/runner/recordSink.d.ts +11 -0
- package/dist/esm/lib/runner/recordSink.js +47 -4
- package/dist/esm/lib/runner/snapshot.d.ts +3 -1
- package/dist/esm/lib/runner/snapshot.js +35 -4
- package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
- package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
- package/dist/esm/lib/scope/ScopeFacade.js +4 -2
- package/dist/esm/lib/scope/runtime.d.ts +2 -0
- package/dist/esm/lib/scope/runtime.js +9 -1
- package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
- package/dist/esm/lib/sinks/fileSink.js +8 -2
- package/dist/esm/trace.d.ts +2 -0
- package/dist/esm/trace.js +2 -1
- package/dist/index.js +1 -1
- package/dist/lib/capture/absentEntries.js +86 -0
- package/dist/lib/capture/checkpointCapture.js +110 -0
- package/dist/lib/capture/historyData.js +85 -0
- package/dist/lib/capture/historyNote.js +56 -0
- package/dist/lib/capture/historyTarget.js +40 -0
- package/dist/lib/capture/historyTypes.js +7 -0
- package/dist/lib/capture/nativeCoverage.js +146 -0
- package/dist/lib/capture/noteShape.js +103 -0
- package/dist/lib/capture/readSources.js +83 -0
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/memory/StageContext.js +110 -14
- package/dist/lib/memory/attention.js +12 -5
- package/dist/lib/memory/runPolicy.js +2 -1
- package/dist/lib/pause/record.js +8 -2
- package/dist/lib/pause/types.js +1 -1
- package/dist/lib/recorder/ControlDepRecorder.js +23 -1
- package/dist/lib/recorder/snapshot.js +7 -2
- package/dist/lib/runner/ExecutionRuntime.js +44 -3
- package/dist/lib/runner/FlowChartExecutor.js +77 -10
- package/dist/lib/runner/attach.js +5 -1
- package/dist/lib/runner/captureHistory.js +110 -0
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/index.js +1 -1
- package/dist/lib/runner/options.js +46 -3
- package/dist/lib/runner/readStoredCapture.js +40 -0
- package/dist/lib/runner/recordSink.js +47 -4
- package/dist/lib/runner/snapshot.js +35 -4
- package/dist/lib/runner/storedCaptureAdmission.js +101 -0
- package/dist/lib/scope/ScopeFacade.js +3 -1
- package/dist/lib/scope/runtime.js +12 -2
- package/dist/lib/sinks/fileSink.js +8 -2
- package/dist/trace.js +4 -2
- package/dist/types/index.d.ts +3 -0
- package/dist/types/lib/capture/absentEntries.d.ts +7 -0
- package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
- package/dist/types/lib/capture/historyData.d.ts +9 -0
- package/dist/types/lib/capture/historyNote.d.ts +4 -0
- package/dist/types/lib/capture/historyTarget.d.ts +5 -0
- package/dist/types/lib/capture/historyTypes.d.ts +39 -0
- package/dist/types/lib/capture/nativeCoverage.d.ts +69 -0
- package/dist/types/lib/capture/noteShape.d.ts +10 -0
- package/dist/types/lib/capture/readSources.d.ts +43 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
- package/dist/types/lib/engine/types.d.ts +3 -0
- package/dist/types/lib/memory/StageContext.d.ts +13 -0
- package/dist/types/lib/memory/attention.d.ts +2 -0
- package/dist/types/lib/memory/runPolicy.d.ts +5 -1
- package/dist/types/lib/pause/types.d.ts +2 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +12 -1
- package/dist/types/lib/recorder/snapshot.d.ts +1 -1
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +24 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +5 -0
- package/dist/types/lib/runner/captureHistory.d.ts +8 -0
- package/dist/types/lib/runner/checkpoint.d.ts +2 -0
- package/dist/types/lib/runner/index.d.ts +1 -0
- package/dist/types/lib/runner/options.d.ts +3 -0
- package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
- package/dist/types/lib/runner/recordSink.d.ts +11 -0
- package/dist/types/lib/runner/snapshot.d.ts +3 -1
- package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
- package/dist/types/lib/scope/runtime.d.ts +2 -0
- package/dist/types/lib/sinks/fileSink.d.ts +2 -1
- package/dist/types/trace.d.ts +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withoutCheckpointCapture = exports.readCheckpointCapture = exports.copyCheckpointCapture = void 0;
|
|
4
|
+
const nativeCoverage_js_1 = require("./nativeCoverage.js");
|
|
5
|
+
const noteShape_js_1 = require("./noteShape.js");
|
|
6
|
+
function captureRefusal() {
|
|
7
|
+
return new Error('Invalid checkpoint: capture must be a bounded paused root-log observation.');
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* A checkpoint retains an observation ABOUT its paused root leg, not the log itself.
|
|
11
|
+
* Validates shape, not authenticity. Never promotes it to durable evidence or copies arbitrary fields.
|
|
12
|
+
* Returning undefined lets the checkpoint codec give one fixed refusal, without untrusted text.
|
|
13
|
+
*/
|
|
14
|
+
function copyCheckpointCapture(value) {
|
|
15
|
+
try {
|
|
16
|
+
if ((0, noteShape_js_1.ownData)(value, 'scope') !== 'root-log' ||
|
|
17
|
+
(0, noteShape_js_1.ownData)(value, 'persistence') !== 'memory-only' ||
|
|
18
|
+
(0, noteShape_js_1.ownData)((0, noteShape_js_1.ownData)(value, 'boundary'), 'status') !== 'paused')
|
|
19
|
+
return undefined;
|
|
20
|
+
const version = (0, noteShape_js_1.ownData)(value, 'version') === 2 ? 2 : 1;
|
|
21
|
+
const identity = (0, noteShape_js_1.copyIdentity)(value, false, version);
|
|
22
|
+
if (!identity)
|
|
23
|
+
return undefined;
|
|
24
|
+
const modes = (0, noteShape_js_1.copyModes)((0, noteShape_js_1.ownData)(value, 'modes'));
|
|
25
|
+
if (!modes)
|
|
26
|
+
return undefined;
|
|
27
|
+
const storedChannels = (0, noteShape_js_1.ownData)(value, 'channels');
|
|
28
|
+
const channels = version === 1 ? (0, noteShape_js_1.copyChannels)(storedChannels) : (0, noteShape_js_1.copyObservedChannels)(storedChannels);
|
|
29
|
+
if (!channels)
|
|
30
|
+
return undefined;
|
|
31
|
+
if (version === 2 && !(0, nativeCoverage_js_1.isCaptureValue)((0, noteShape_js_1.ownData)(storedChannels, 'readSources'), nativeCoverage_js_1.CAPTURE_CHANNEL_STATUSES))
|
|
32
|
+
return undefined;
|
|
33
|
+
const limitations = (0, noteShape_js_1.copyLimitations)((0, noteShape_js_1.ownData)(value, 'limitations'));
|
|
34
|
+
if (!limitations)
|
|
35
|
+
return undefined;
|
|
36
|
+
const common = {
|
|
37
|
+
runId: identity.runId,
|
|
38
|
+
scope: 'root-log',
|
|
39
|
+
logAddress: identity.logAddress,
|
|
40
|
+
commits: identity.commits,
|
|
41
|
+
boundary: Object.freeze({ status: 'paused' }),
|
|
42
|
+
modes,
|
|
43
|
+
channels: {
|
|
44
|
+
...channels,
|
|
45
|
+
// Recorder history is absent; reads/writes describe the paused segment's native funnels.
|
|
46
|
+
control: channels.control === 'failed' || channels.control === 'partial' || channels.control === 'disabled'
|
|
47
|
+
? channels.control
|
|
48
|
+
: 'unknown',
|
|
49
|
+
},
|
|
50
|
+
persistence: 'memory-only',
|
|
51
|
+
};
|
|
52
|
+
if (version === 2)
|
|
53
|
+
return Object.freeze({
|
|
54
|
+
...common,
|
|
55
|
+
version: 2,
|
|
56
|
+
scope: 'root-log',
|
|
57
|
+
channels: Object.freeze({ ...common.channels, readSources: 'unknown' }),
|
|
58
|
+
limitations: Object.freeze([
|
|
59
|
+
...new Set([...limitations, 'checkpoint-history-not-included', 'source-history-not-included']),
|
|
60
|
+
]),
|
|
61
|
+
});
|
|
62
|
+
return Object.freeze({
|
|
63
|
+
version: 1,
|
|
64
|
+
...common,
|
|
65
|
+
scope: 'root-log',
|
|
66
|
+
channels: Object.freeze({ ...common.channels, readSources: 'not-collected' }),
|
|
67
|
+
limitations: Object.freeze([
|
|
68
|
+
...new Set([...nativeCoverage_js_1.CAPTURE_BASE_LIMITATIONS, ...limitations, 'checkpoint-history-not-included']),
|
|
69
|
+
]),
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.copyCheckpointCapture = copyCheckpointCapture;
|
|
77
|
+
/** Read the optional field before the general checkpoint upcaster could evaluate a supplied getter. */
|
|
78
|
+
function readCheckpointCapture(stored) {
|
|
79
|
+
try {
|
|
80
|
+
const descriptor = Object.getOwnPropertyDescriptor(stored, 'capture');
|
|
81
|
+
if (!descriptor)
|
|
82
|
+
return undefined;
|
|
83
|
+
if (!Object.hasOwn(descriptor, 'value'))
|
|
84
|
+
throw captureRefusal();
|
|
85
|
+
if (descriptor.value === undefined)
|
|
86
|
+
return undefined;
|
|
87
|
+
const note = copyCheckpointCapture(descriptor.value);
|
|
88
|
+
if (!note)
|
|
89
|
+
throw captureRefusal();
|
|
90
|
+
return note;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
throw captureRefusal();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
exports.readCheckpointCapture = readCheckpointCapture;
|
|
97
|
+
/** Keep the general upcaster from re-reading capture through a getter or Proxy get trap. */
|
|
98
|
+
function withoutCheckpointCapture(stored) {
|
|
99
|
+
try {
|
|
100
|
+
const descriptors = Object.getOwnPropertyDescriptors(stored);
|
|
101
|
+
delete descriptors.capture;
|
|
102
|
+
// Preserve every other field's existing descriptor/prototype behavior. No Get(capture).
|
|
103
|
+
return Object.defineProperties(Object.create(Object.getPrototypeOf(stored)), descriptors);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
throw captureRefusal();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.withoutCheckpointCapture = withoutCheckpointCapture;
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludENhcHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvY2hlY2twb2ludENhcHR1cmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsMkRBQXlHO0FBQ3pHLGlEQUF1SDtBQUd2SCxTQUFTLGNBQWM7SUFDckIsT0FBTyxJQUFJLEtBQUssQ0FBQyw0RUFBNEUsQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsS0FBYztJQUNsRCxJQUFJLENBQUM7UUFDSCxJQUNFLElBQUEsc0JBQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssVUFBVTtZQUN0QyxJQUFBLHNCQUFPLEVBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxLQUFLLGFBQWE7WUFDL0MsSUFBQSxzQkFBTyxFQUFDLElBQUEsc0JBQU8sRUFBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssUUFBUTtZQUUxRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFBLHNCQUFPLEVBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxRQUFRLEdBQUcsSUFBQSwyQkFBWSxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFBLHdCQUFTLEVBQUMsSUFBQSxzQkFBTyxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDN0IsTUFBTSxjQUFjLEdBQUcsSUFBQSxzQkFBTyxFQUFDLEtBQUss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Q2xDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUM7WUFBRSxNQUFNLGNBQWMsRUFBRSxDQUFDO1FBQ2hFLElBQUksVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxJQUFJO1lBQUUsTUFBTSxjQUFjLEVBQUUsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxNQUFNLGNBQWMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7QUFDSCxDQUFDO0FBWkQsc0RBWUM7QUFFRCw0RkFBNEY7QUFDNUYsU0FBZ0Isd0JBQXdCLENBQUMsTUFBK0I7SUFDdEUsSUFBSSxDQUFDO1FBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUMzQix3RkFBd0Y7UUFDeEYsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sY0FBYyxFQUFFLENBQUM7SUFDekIsQ0FBQztBQUNILENBQUM7QUFURCw0REFTQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTmF0aXZlQ2FwdHVyZU5vdGUgfSBmcm9tICcuL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB7IENBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUywgQ0FQVFVSRV9DSEFOTkVMX1NUQVRVU0VTLCBpc0NhcHR1cmVWYWx1ZSB9IGZyb20gJy4vbmF0aXZlQ292ZXJhZ2UuanMnO1xuaW1wb3J0IHsgY29weUNoYW5uZWxzLCBjb3B5SWRlbnRpdHksIGNvcHlMaW1pdGF0aW9ucywgY29weU1vZGVzLCBjb3B5T2JzZXJ2ZWRDaGFubmVscywgb3duRGF0YSB9IGZyb20gJy4vbm90ZVNoYXBlLmpzJztcbmltcG9ydCB0eXBlIHsgTmF0aXZlQ2FwdHVyZU9ic2VydmF0aW9uIH0gZnJvbSAnLi9yZWFkU291cmNlcy5qcyc7XG5cbmZ1bmN0aW9uIGNhcHR1cmVSZWZ1c2FsKCk6IEVycm9yIHtcbiAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCBjaGVja3BvaW50OiBjYXB0dXJlIG11c3QgYmUgYSBib3VuZGVkIHBhdXNlZCByb290LWxvZyBvYnNlcnZhdGlvbi4nKTtcbn1cblxuLyoqXG4gKiBBIGNoZWNrcG9pbnQgcmV0YWlucyBhbiBvYnNlcnZhdGlvbiBBQk9VVCBpdHMgcGF1c2VkIHJvb3QgbGVnLCBub3QgdGhlIGxvZyBpdHNlbGYuXG4gKiBWYWxpZGF0ZXMgc2hhcGUsIG5vdCBhdXRoZW50aWNpdHkuIE5ldmVyIHByb21vdGVzIGl0IHRvIGR1cmFibGUgZXZpZGVuY2Ugb3IgY29waWVzIGFyYml0cmFyeSBmaWVsZHMuXG4gKiBSZXR1cm5pbmcgdW5kZWZpbmVkIGxldHMgdGhlIGNoZWNrcG9pbnQgY29kZWMgZ2l2ZSBvbmUgZml4ZWQgcmVmdXNhbCwgd2l0aG91dCB1bnRydXN0ZWQgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlDaGVja3BvaW50Q2FwdHVyZSh2YWx1ZTogdW5rbm93bik6IE5hdGl2ZUNhcHR1cmVPYnNlcnZhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb3duRGF0YSh2YWx1ZSwgJ3Njb3BlJykgIT09ICdyb290LWxvZycgfHxcbiAgICAgIG93bkRhdGEodmFsdWUsICdwZXJzaXN0ZW5jZScpICE9PSAnbWVtb3J5LW9ubHknIHx8XG4gICAgICBvd25EYXRhKG93bkRhdGEodmFsdWUsICdib3VuZGFyeScpLCAnc3RhdHVzJykgIT09ICdwYXVzZWQnXG4gICAgKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB2ZXJzaW9uID0gb3duRGF0YSh2YWx1ZSwgJ3ZlcnNpb24nKSA9PT0gMiA/IDIgOiAxO1xuICAgIGNvbnN0IGlkZW50aXR5ID0gY29weUlkZW50aXR5KHZhbHVlLCBmYWxzZSwgdmVyc2lvbik7XG4gICAgaWYgKCFpZGVudGl0eSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBtb2RlcyA9IGNvcHlNb2Rlcyhvd25EYXRhKHZhbHVlLCAnbW9kZXMnKSk7XG4gICAgaWYgKCFtb2RlcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdG9yZWRDaGFubmVscyA9IG93bkRhdGEodmFsdWUsICdjaGFubmVscycpO1xuICAgIGNvbnN0IGNoYW5uZWxzID0gdmVyc2lvbiA9PT0gMSA/IGNvcHlDaGFubmVscyhzdG9yZWRDaGFubmVscykgOiBjb3B5T2JzZXJ2ZWRDaGFubmVscyhzdG9yZWRDaGFubmVscyk7XG4gICAgaWYgKCFjaGFubmVscykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAodmVyc2lvbiA9PT0gMiAmJiAhaXNDYXB0dXJlVmFsdWUob3duRGF0YShzdG9yZWRDaGFubmVscywgJ3JlYWRTb3VyY2VzJyksIENBUFRVUkVfQ0hBTk5FTF9TVEFUVVNFUykpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGxpbWl0YXRpb25zID0gY29weUxpbWl0YXRpb25zKG93bkRhdGEodmFsdWUsICdsaW1pdGF0aW9ucycpKTtcbiAgICBpZiAoIWxpbWl0YXRpb25zKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbW1vbiA9IHtcbiAgICAgIHJ1bklkOiBpZGVudGl0eS5ydW5JZCxcbiAgICAgIHNjb3BlOiAncm9vdC1sb2cnLFxuICAgICAgbG9nQWRkcmVzczogaWRlbnRpdHkubG9nQWRkcmVzcyxcbiAgICAgIGNvbW1pdHM6IGlkZW50aXR5LmNvbW1pdHMsXG4gICAgICBib3VuZGFyeTogT2JqZWN0LmZyZWV6ZSh7IHN0YXR1czogJ3BhdXNlZCcgYXMgY29uc3QgfSksXG4gICAgICBtb2RlcyxcbiAgICAgIGNoYW5uZWxzOiB7XG4gICAgICAgIC4uLmNoYW5uZWxzLFxuICAgICAgICAvLyBSZWNvcmRlciBoaXN0b3J5IGlzIGFic2VudDsgcmVhZHMvd3JpdGVzIGRlc2NyaWJlIHRoZSBwYXVzZWQgc2VnbWVudCdzIG5hdGl2ZSBmdW5uZWxzLlxuICAgICAgICBjb250cm9sOlxuICAgICAgICAgIGNoYW5uZWxzLmNvbnRyb2wgPT09ICdmYWlsZWQnIHx8IGNoYW5uZWxzLmNvbnRyb2wgPT09ICdwYXJ0aWFsJyB8fCBjaGFubmVscy5jb250cm9sID09PSAnZGlzYWJsZWQnXG4gICAgICAgICAgICA/IGNoYW5uZWxzLmNvbnRyb2xcbiAgICAgICAgICAgIDogKCd1bmtub3duJyBhcyBjb25zdCksXG4gICAgICB9LFxuICAgICAgcGVyc2lzdGVuY2U6ICdtZW1vcnktb25seScgYXMgY29uc3QsXG4gICAgfTtcbiAgICBpZiAodmVyc2lvbiA9PT0gMilcbiAgICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgLi4uY29tbW9uLFxuICAgICAgICB2ZXJzaW9uOiAyLFxuICAgICAgICBzY29wZTogJ3Jvb3QtbG9nJyxcbiAgICAgICAgY2hhbm5lbHM6IE9iamVjdC5mcmVlemUoeyAuLi5jb21tb24uY2hhbm5lbHMsIHJlYWRTb3VyY2VzOiAndW5rbm93bicgfSksXG4gICAgICAgIGxpbWl0YXRpb25zOiBPYmplY3QuZnJlZXplKFtcbiAgICAgICAgICAuLi5uZXcgU2V0KFsuLi5saW1pdGF0aW9ucywgJ2NoZWNrcG9pbnQtaGlzdG9yeS1ub3QtaW5jbHVkZWQnLCAnc291cmNlLWhpc3Rvcnktbm90LWluY2x1ZGVkJ10gYXMgY29uc3QpLFxuICAgICAgICBdKSxcbiAgICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICAuLi5jb21tb24sXG4gICAgICBzY29wZTogJ3Jvb3QtbG9nJyxcbiAgICAgIGNoYW5uZWxzOiBPYmplY3QuZnJlZXplKHsgLi4uY29tbW9uLmNoYW5uZWxzLCByZWFkU291cmNlczogJ25vdC1jb2xsZWN0ZWQnIH0pLFxuICAgICAgbGltaXRhdGlvbnM6IE9iamVjdC5mcmVlemUoW1xuICAgICAgICAuLi5uZXcgU2V0KFsuLi5DQVBUVVJFX0JBU0VfTElNSVRBVElPTlMsIC4uLmxpbWl0YXRpb25zLCAnY2hlY2twb2ludC1oaXN0b3J5LW5vdC1pbmNsdWRlZCddIGFzIGNvbnN0KSxcbiAgICAgIF0pLFxuICAgIH0pIGFzIE5hdGl2ZUNhcHR1cmVOb3RlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBSZWFkIHRoZSBvcHRpb25hbCBmaWVsZCBiZWZvcmUgdGhlIGdlbmVyYWwgY2hlY2twb2ludCB1cGNhc3RlciBjb3VsZCBldmFsdWF0ZSBhIHN1cHBsaWVkIGdldHRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkQ2hlY2twb2ludENhcHR1cmUoc3RvcmVkOiBvYmplY3QpOiBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24gfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHN0b3JlZCwgJ2NhcHR1cmUnKTtcbiAgICBpZiAoIWRlc2NyaXB0b3IpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpKSB0aHJvdyBjYXB0dXJlUmVmdXNhbCgpO1xuICAgIGlmIChkZXNjcmlwdG9yLnZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgbm90ZSA9IGNvcHlDaGVja3BvaW50Q2FwdHVyZShkZXNjcmlwdG9yLnZhbHVlKTtcbiAgICBpZiAoIW5vdGUpIHRocm93IGNhcHR1cmVSZWZ1c2FsKCk7XG4gICAgcmV0dXJuIG5vdGU7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IGNhcHR1cmVSZWZ1c2FsKCk7XG4gIH1cbn1cblxuLyoqIEtlZXAgdGhlIGdlbmVyYWwgdXBjYXN0ZXIgZnJvbSByZS1yZWFkaW5nIGNhcHR1cmUgdGhyb3VnaCBhIGdldHRlciBvciBQcm94eSBnZXQgdHJhcC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0Q2hlY2twb2ludENhcHR1cmUoc3RvcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHN0b3JlZCk7XG4gICAgZGVsZXRlIGRlc2NyaXB0b3JzLmNhcHR1cmU7XG4gICAgLy8gUHJlc2VydmUgZXZlcnkgb3RoZXIgZmllbGQncyBleGlzdGluZyBkZXNjcmlwdG9yL3Byb3RvdHlwZSBiZWhhdmlvci4gTm8gR2V0KGNhcHR1cmUpLlxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdG9yZWQpKSwgZGVzY3JpcHRvcnMpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBjYXB0dXJlUmVmdXNhbCgpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.historyDigest = exports.copyHistoryData = exports.HistoryDataError = void 0;
|
|
4
|
+
/** @internal Fixed diagnostic only; never carries source values, paths or adapter errors. */
|
|
5
|
+
class HistoryDataError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
constructor(code) {
|
|
8
|
+
super(code === 'too-large' ? 'Capture history data too large' : 'Capture history data refused');
|
|
9
|
+
this.code = code;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.HistoryDataError = HistoryDataError;
|
|
13
|
+
/** @internal Copy bounded inert JSON data without invoking accessors, toJSON or application coercion. */
|
|
14
|
+
function copyHistoryData(value, maxBytes, onOmitted) {
|
|
15
|
+
let bytes = 0;
|
|
16
|
+
let nodes = 0;
|
|
17
|
+
const ancestors = new Set();
|
|
18
|
+
const encoder = new TextEncoder();
|
|
19
|
+
const charge = (text) => {
|
|
20
|
+
if (text.length > maxBytes - bytes)
|
|
21
|
+
throw new HistoryDataError('too-large');
|
|
22
|
+
bytes += encoder.encode(text).length;
|
|
23
|
+
if (bytes > maxBytes)
|
|
24
|
+
throw new HistoryDataError('too-large');
|
|
25
|
+
};
|
|
26
|
+
const copy = (item, depth, path) => {
|
|
27
|
+
if (++nodes > 100_000 || depth > 256)
|
|
28
|
+
throw new HistoryDataError('invalid-data');
|
|
29
|
+
if (item === null || typeof item === 'string' || typeof item === 'boolean' || typeof item === 'number') {
|
|
30
|
+
if (typeof item === 'number' && (!Number.isFinite(item) || Object.is(item, -0)))
|
|
31
|
+
throw new HistoryDataError('invalid-data');
|
|
32
|
+
charge(JSON.stringify(item));
|
|
33
|
+
return item;
|
|
34
|
+
}
|
|
35
|
+
if (!item || typeof item !== 'object' || ancestors.has(item))
|
|
36
|
+
throw new HistoryDataError('invalid-data');
|
|
37
|
+
const array = Array.isArray(item);
|
|
38
|
+
if (Object.getPrototypeOf(item) !== (array ? Array.prototype : Object.prototype))
|
|
39
|
+
throw new HistoryDataError('invalid-data');
|
|
40
|
+
ancestors.add(item);
|
|
41
|
+
charge(array ? '[]' : '{}');
|
|
42
|
+
const output = array ? [] : {};
|
|
43
|
+
const keys = Object.keys(item);
|
|
44
|
+
if (keys.length > 100_000 - nodes)
|
|
45
|
+
throw new HistoryDataError('invalid-data');
|
|
46
|
+
// Arrays must be dense JSON arrays without extra properties. No silent dropping of holes or expandos.
|
|
47
|
+
if (array && Object.getOwnPropertyDescriptor(item, 'length')?.value !== keys.length)
|
|
48
|
+
throw new HistoryDataError('invalid-data');
|
|
49
|
+
let written = 0;
|
|
50
|
+
for (const key of keys) {
|
|
51
|
+
const property = Object.getOwnPropertyDescriptor(item, key);
|
|
52
|
+
if (!property || !Object.hasOwn(property, 'value'))
|
|
53
|
+
throw new HistoryDataError('invalid-data');
|
|
54
|
+
if (array && key !== String(written))
|
|
55
|
+
throw new HistoryDataError('invalid-data');
|
|
56
|
+
// Ordinary JSON object omission. Arrays/root undefined remain refused; no snapshot-field allow-list.
|
|
57
|
+
if (property.value === undefined && !array) {
|
|
58
|
+
onOmitted?.([...path, key]);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (written++)
|
|
62
|
+
charge(',');
|
|
63
|
+
if (!array)
|
|
64
|
+
charge(JSON.stringify(key) + ':');
|
|
65
|
+
Object.defineProperty(output, key, {
|
|
66
|
+
value: copy(property.value, depth + 1, [...path, key]),
|
|
67
|
+
enumerable: true,
|
|
68
|
+
writable: true,
|
|
69
|
+
configurable: true,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
ancestors.delete(item);
|
|
73
|
+
return Object.freeze(output);
|
|
74
|
+
};
|
|
75
|
+
return copy(value, 0, []);
|
|
76
|
+
}
|
|
77
|
+
exports.copyHistoryData = copyHistoryData;
|
|
78
|
+
/** @internal Integrity of this JSON representation, not a value fingerprint or an authenticity signature. */
|
|
79
|
+
async function historyDigest(value) {
|
|
80
|
+
const bytes = new TextEncoder().encode(JSON.stringify(value));
|
|
81
|
+
const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes);
|
|
82
|
+
return Array.from(new Uint8Array(digest), (n) => n.toString(16).padStart(2, '0')).join('');
|
|
83
|
+
}
|
|
84
|
+
exports.historyDigest = historyDigest;
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkZBQTZGO0FBQzdGLE1BQWEsZ0JBQWlCLFNBQVEsS0FBSztJQUNwQjtJQUFyQixZQUFxQixJQUFrQztRQUNyRCxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUM7UUFEN0UsU0FBSSxHQUFKLElBQUksQ0FBOEI7SUFFdkQsQ0FBQztDQUNGO0FBSkQsNENBSUM7QUFFRCx5R0FBeUc7QUFDekcsU0FBZ0IsZUFBZSxDQUM3QixLQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsU0FBNkM7SUFFN0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBWSxFQUFRLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxLQUFLO1lBQUUsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzVFLEtBQUssSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxJQUFJLEtBQUssR0FBRyxRQUFRO1lBQUUsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUNGLE1BQU0sSUFBSSxHQUFHLENBQUMsSUFBYSxFQUFFLEtBQWEsRUFBRSxJQUFjLEVBQVcsRUFBRTtRQUNyRSxJQUFJLEVBQUUsS0FBSyxHQUFH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Q0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBSkQsc0NBSUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGludGVybmFsIEZpeGVkIGRpYWdub3N0aWMgb25seTsgbmV2ZXIgY2FycmllcyBzb3VyY2UgdmFsdWVzLCBwYXRocyBvciBhZGFwdGVyIGVycm9ycy4gKi9cbmV4cG9ydCBjbGFzcyBIaXN0b3J5RGF0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb2RlOiAndG9vLWxhcmdlJyB8ICdpbnZhbGlkLWRhdGEnKSB7XG4gICAgc3VwZXIoY29kZSA9PT0gJ3Rvby1sYXJnZScgPyAnQ2FwdHVyZSBoaXN0b3J5IGRhdGEgdG9vIGxhcmdlJyA6ICdDYXB0dXJlIGhpc3RvcnkgZGF0YSByZWZ1c2VkJyk7XG4gIH1cbn1cblxuLyoqIEBpbnRlcm5hbCBDb3B5IGJvdW5kZWQgaW5lcnQgSlNPTiBkYXRhIHdpdGhvdXQgaW52b2tpbmcgYWNjZXNzb3JzLCB0b0pTT04gb3IgYXBwbGljYXRpb24gY29lcmNpb24uICovXG5leHBvcnQgZnVuY3Rpb24gY29weUhpc3RvcnlEYXRhKFxuICB2YWx1ZTogdW5rbm93bixcbiAgbWF4Qnl0ZXM6IG51bWJlcixcbiAgb25PbWl0dGVkPzogKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKSA9PiB2b2lkLFxuKTogdW5rbm93biB7XG4gIGxldCBieXRlcyA9IDA7XG4gIGxldCBub2RlcyA9IDA7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IG5ldyBTZXQ8b2JqZWN0PigpO1xuICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gIGNvbnN0IGNoYXJnZSA9ICh0ZXh0OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBpZiAodGV4dC5sZW5ndGggPiBtYXhCeXRlcyAtIGJ5dGVzKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcigndG9vLWxhcmdlJyk7XG4gICAgYnl0ZXMgKz0gZW5jb2Rlci5lbmNvZGUodGV4dCkubGVuZ3RoO1xuICAgIGlmIChieXRlcyA+IG1heEJ5dGVzKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcigndG9vLWxhcmdlJyk7XG4gIH07XG4gIGNvbnN0IGNvcHkgPSAoaXRlbTogdW5rbm93biwgZGVwdGg6IG51bWJlciwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoKytub2RlcyA+IDEwMF8wMDAgfHwgZGVwdGggPiAyNTYpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICBpZiAoaXRlbSA9PT0gbnVsbCB8fCB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGl0ZW0gPT09ICdib29sZWFuJyB8fCB0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgJiYgKCFOdW1iZXIuaXNGaW5pdGUoaXRlbSkgfHwgT2JqZWN0LmlzKGl0ZW0sIC0wKSkpXG4gICAgICAgIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICAgIGNoYXJnZShKU09OLnN0cmluZ2lmeShpdGVtKSk7XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gICAgaWYgKCFpdGVtIHx8IHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCBhbmNlc3RvcnMuaGFzKGl0ZW0pKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgY29uc3QgYXJyYXkgPSBBcnJheS5pc0FycmF5KGl0ZW0pO1xuICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaXRlbSkgIT09IChhcnJheSA/IEFycmF5LnByb3RvdHlwZSA6IE9iamVjdC5wcm90b3R5cGUpKVxuICAgICAgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgIGFuY2VzdG9ycy5hZGQoaXRlbSk7XG4gICAgY2hhcmdlKGFycmF5ID8gJ1tdJyA6ICd7fScpO1xuICAgIGNvbnN0IG91dHB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmtub3duW10gPSBhcnJheSA/IFtdIDoge307XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xuICAgIGlmIChrZXlzLmxlbmd0aCA+IDEwMF8wMDAgLSBub2RlcykgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgIC8vIEFycmF5cyBtdXN0IGJlIGRlbnNlIEpTT04gYXJyYXlzIHdpdGhvdXQgZXh0cmEgcHJvcGVydGllcy4gTm8gc2lsZW50IGRyb3BwaW5nIG9mIGhvbGVzIG9yIGV4cGFuZG9zLlxuICAgIGlmIChhcnJheSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0ZW0sICdsZW5ndGgnKT8udmFsdWUgIT09IGtleXMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgIGxldCB3cml0dGVuID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXRlbSwga2V5KTtcbiAgICAgIGlmICghcHJvcGVydHkgfHwgIU9iamVjdC5oYXNPd24ocHJvcGVydHksICd2YWx1ZScpKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgICBpZiAoYXJyYXkgJiYga2V5ICE9PSBTdHJpbmcod3JpdHRlbikpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICAgIC8vIE9yZGluYXJ5IEpTT04gb2JqZWN0IG9taXNzaW9uLiBBcnJheXMvcm9vdCB1bmRlZmluZWQgcmVtYWluIHJlZnVzZWQ7IG5vIHNuYXBzaG90LWZpZWxkIGFsbG93LWxpc3QuXG4gICAgICBpZiAocHJvcGVydHkudmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhYXJyYXkpIHtcbiAgICAgICAgb25PbWl0dGVkPy4oWy4uLnBhdGgsIGtleV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICh3cml0dGVuKyspIGNoYXJnZSgnLCcpO1xuICAgICAgaWYgKCFhcnJheSkgY2hhcmdlKEpTT04uc3RyaW5naWZ5KGtleSkgKyAnOicpO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG91dHB1dCwga2V5LCB7XG4gICAgICAgIHZhbHVlOiBjb3B5KHByb3BlcnR5LnZhbHVlLCBkZXB0aCArIDEsIFsuLi5wYXRoLCBrZXldKSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhbmNlc3RvcnMuZGVsZXRlKGl0ZW0pO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKG91dHB1dCk7XG4gIH07XG4gIHJldHVybiBjb3B5KHZhbHVlLCAwLCBbXSk7XG59XG5cbi8qKiBAaW50ZXJuYWwgSW50ZWdyaXR5IG9mIHRoaXMgSlNPTiByZXByZXNlbnRhdGlvbiwgbm90IGEgdmFsdWUgZmluZ2VycHJpbnQgb3IgYW4gYXV0aGVudGljaXR5IHNpZ25hdHVyZS4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoaXN0b3J5RGlnZXN0KHZhbHVlOiB1bmtub3duKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgY29uc3QgZGlnZXN0ID0gYXdhaXQgZ2xvYmFsVGhpcy5jcnlwdG8uc3VidGxlLmRpZ2VzdCgnU0hBLTI1NicsIGJ5dGVzKTtcbiAgcmV0dXJuIEFycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZGlnZXN0KSwgKG4pID0+IG4udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xufVxuIl19
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.historyNote = void 0;
|
|
4
|
+
const nativeCoverage_js_1 = require("./nativeCoverage.js");
|
|
5
|
+
const noteShape_js_1 = require("./noteShape.js");
|
|
6
|
+
/** @internal Called only after the bounded inert-data copier. Retains native observations, not storage authority. */
|
|
7
|
+
function historyNote(value, target) {
|
|
8
|
+
if (!value || typeof value !== 'object')
|
|
9
|
+
return undefined;
|
|
10
|
+
const v = value;
|
|
11
|
+
const identity = (0, noteShape_js_1.copyIdentity)(v, true);
|
|
12
|
+
const limitations = (0, noteShape_js_1.copyLimitations)(v.limitations);
|
|
13
|
+
if (!identity ||
|
|
14
|
+
JSON.stringify(identity) !== JSON.stringify((0, noteShape_js_1.copyIdentity)(target)) ||
|
|
15
|
+
v.scope !== 'root-log' ||
|
|
16
|
+
v.persistence !== 'memory-only' ||
|
|
17
|
+
!v.boundary ||
|
|
18
|
+
!['completed', 'failed', 'paused', 'cancelled'].includes(v.boundary.status) ||
|
|
19
|
+
!v.modes ||
|
|
20
|
+
!v.channels ||
|
|
21
|
+
!limitations ||
|
|
22
|
+
!nativeCoverage_js_1.CAPTURE_BASE_LIMITATIONS.every((g) => limitations.includes(g)) ||
|
|
23
|
+
!(0, noteShape_js_1.copyModes)(v.modes, true) ||
|
|
24
|
+
!(0, noteShape_js_1.copyChannels)(v.channels, true))
|
|
25
|
+
return undefined;
|
|
26
|
+
// Reject extra metadata rather than handing arbitrary stored fields out as native facts.
|
|
27
|
+
if (Object.keys(v).some((k) => ![
|
|
28
|
+
'version',
|
|
29
|
+
'runId',
|
|
30
|
+
'scope',
|
|
31
|
+
'logAddress',
|
|
32
|
+
'commits',
|
|
33
|
+
'boundary',
|
|
34
|
+
'modes',
|
|
35
|
+
'channels',
|
|
36
|
+
'persistence',
|
|
37
|
+
'limitations',
|
|
38
|
+
].includes(k)))
|
|
39
|
+
return undefined;
|
|
40
|
+
const failure = v.boundary.failure;
|
|
41
|
+
if (Object.keys(v.boundary).some((k) => k !== 'status' && k !== 'failure'))
|
|
42
|
+
return undefined;
|
|
43
|
+
if (failure &&
|
|
44
|
+
(!['failed', 'cancelled'].includes(v.boundary.status) ||
|
|
45
|
+
!['timeout', 'rate-limited', 'server', 'network', 'auth', 'permanent', 'unknown'].includes(failure.category) ||
|
|
46
|
+
Object.keys(failure).some((k) => k !== 'category' && k !== 'stage') ||
|
|
47
|
+
(failure.stage &&
|
|
48
|
+
(Object.keys(failure.stage).some((k) => k !== 'runId' && k !== 'runtimeStageId') ||
|
|
49
|
+
failure.stage.runId !== v.runId ||
|
|
50
|
+
typeof failure.stage.runtimeStageId !== 'string' ||
|
|
51
|
+
failure.stage.runtimeStageId.length > 1024))))
|
|
52
|
+
return undefined;
|
|
53
|
+
return v;
|
|
54
|
+
}
|
|
55
|
+
exports.historyNote = historyNote;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeU5vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeU5vdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsMkRBQStEO0FBQy9ELGlEQUF3RjtBQUV4RixxSEFBcUg7QUFDckgsU0FBZ0IsV0FBVyxDQUFDLEtBQWMsRUFBRSxNQUE0QjtJQUN0RSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxRCxNQUFNLENBQUMsR0FBRyxLQUEwQixDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLElBQUEsMkJBQVksRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBQSw4QkFBZSxFQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxJQUNFLENBQUMsUUFBUTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLDJCQUFZLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVO1FBQ3RCLENBQUMsQ0FBQyxXQUFXLEtBQUssYUFBYTtRQUMvQixDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ1gsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ1IsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUNYLENBQUMsV0FBVztRQUNaLENBQUMsNENBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsSUFBQSx3QkFBUyxFQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ3pCLENBQUMsSUFBQSwyQkFBWSxFQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1FBRS9CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLHlGQUF5RjtJQUN6RixJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQztRQUNDLFNBQVM7UUFDVCxPQUFPO1FBQ1AsT0FBTztRQUNQLFlBQVk7UUFDWixTQUFTO1FBQ1QsVUFBVTtRQUNWLE9BQU87UUFDUCxVQUFVO1FBQ1YsYUFBYTtRQUNiLGFBQWE7S0FDZCxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDaEI7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0YsSUFDRSxPQUFPO1FBQ1AsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDNUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQztZQUNuRSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUNaLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQztvQkFDOUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUs7b0JBQy9CLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssUUFBUTtvQkFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFbkQsT0FBTyxTQUFTLENBQUM7SUFDbkIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBdERELGtDQXNEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2FwdHVyZUhpc3RvcnlUYXJnZXQgfSBmcm9tICcuL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUNhcHR1cmVOb3RlIH0gZnJvbSAnLi9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5pbXBvcnQgeyBDQVBUVVJFX0JBU0VfTElNSVRBVElPTlMgfSBmcm9tICcuL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB7IGNvcHlDaGFubmVscywgY29weUlkZW50aXR5LCBjb3B5TGltaXRhdGlvbnMsIGNvcHlNb2RlcyB9IGZyb20gJy4vbm90ZVNoYXBlLmpzJztcblxuLyoqIEBpbnRlcm5hbCBDYWxsZWQgb25seSBhZnRlciB0aGUgYm91bmRlZCBpbmVydC1kYXRhIGNvcGllci4gUmV0YWlucyBuYXRpdmUgb2JzZXJ2YXRpb25zLCBub3Qgc3RvcmFnZSBhdXRob3JpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9yeU5vdGUodmFsdWU6IHVua25vd24sIHRhcmdldDogQ2FwdHVyZUhpc3RvcnlUYXJnZXQpOiBOYXRpdmVDYXB0dXJlTm90ZSB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdiA9IHZhbHVlIGFzIE5hdGl2ZUNhcHR1cmVOb3RlO1xuICBjb25zdCBpZGVudGl0eSA9IGNvcHlJZGVudGl0eSh2LCB0cnVlKTtcbiAgY29uc3QgbGltaXRhdGlvbnMgPSBjb3B5TGltaXRhdGlvbnModi5saW1pdGF0aW9ucyk7XG4gIGlmIChcbiAgICAhaWRlbnRpdHkgfHxcbiAgICBKU09OLnN0cmluZ2lmeShpZGVudGl0eSkgIT09IEpTT04uc3RyaW5naWZ5KGNvcHlJZGVudGl0eSh0YXJnZXQpKSB8fFxuICAgIHYuc2NvcGUgIT09ICdyb290LWxvZycgfHxcbiAgICB2LnBlcnNpc3RlbmNlICE9PSAnbWVtb3J5LW9ubHknIHx8XG4gICAgIXYuYm91bmRhcnkgfHxcbiAgICAhWydjb21wbGV0ZWQnLCAnZmFpbGVkJywgJ3BhdXNlZCcsICdjYW5jZWxsZWQnXS5pbmNsdWRlcyh2LmJvdW5kYXJ5LnN0YXR1cykgfHxcbiAgICAhdi5tb2RlcyB8fFxuICAgICF2LmNoYW5uZWxzIHx8XG4gICAgIWxpbWl0YXRpb25zIHx8XG4gICAgIUNBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUy5ldmVyeSgoZykgPT4gbGltaXRhdGlvbnMuaW5jbHVkZXMoZykpIHx8XG4gICAgIWNvcHlNb2Rlcyh2Lm1vZGVzLCB0cnVlKSB8fFxuICAgICFjb3B5Q2hhbm5lbHModi5jaGFubmVscywgdHJ1ZSlcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIC8vIFJlamVjdCBleHRyYSBtZXRhZGF0YSByYXRoZXIgdGhhbiBoYW5kaW5nIGFyYml0cmFyeSBzdG9yZWQgZmllbGRzIG91dCBhcyBuYXRpdmUgZmFjdHMuXG4gIGlmIChcbiAgICBPYmplY3Qua2V5cyh2KS5zb21lKFxuICAgICAgKGspID0+XG4gICAgICAgICFbXG4gICAgICAgICAgJ3ZlcnNpb24nLFxuICAgICAgICAgICdydW5JZCcsXG4gICAgICAgICAgJ3Njb3BlJyxcbiAgICAgICAgICAnbG9nQWRkcmVzcycsXG4gICAgICAgICAgJ2NvbW1pdHMnLFxuICAgICAgICAgICdib3VuZGFyeScsXG4gICAgICAgICAgJ21vZGVzJyxcbiAgICAgICAgICAnY2hhbm5lbHMnLFxuICAgICAgICAgICdwZXJzaXN0ZW5jZScsXG4gICAgICAgICAgJ2xpbWl0YXRpb25zJyxcbiAgICAgICAgXS5pbmNsdWRlcyhrKSxcbiAgICApXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsdXJlID0gdi5ib3VuZGFyeS5mYWlsdXJlO1xuICBpZiAoT2JqZWN0LmtleXModi5ib3VuZGFyeSkuc29tZSgoaykgPT4gayAhPT0gJ3N0YXR1cycgJiYgayAhPT0gJ2ZhaWx1cmUnKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIGZhaWx1cmUgJiZcbiAgICAoIVsnZmFpbGVkJywgJ2NhbmNlbGxlZCddLmluY2x1ZGVzKHYuYm91bmRhcnkuc3RhdHVzKSB8fFxuICAgICAgIVsndGltZW91dCcsICdyYXRlLWxpbWl0ZWQnLCAnc2VydmVyJywgJ25ldHdvcmsnLCAnYXV0aCcsICdwZXJtYW5lbnQnLCAndW5rbm93biddLmluY2x1ZGVzKGZhaWx1cmUuY2F0ZWdvcnkpIHx8XG4gICAgICBPYmplY3Qua2V5cyhmYWlsdXJlKS5zb21lKChrKSA9PiBrICE9PSAnY2F0ZWdvcnknICYmIGsgIT09ICdzdGFnZScpIHx8XG4gICAgICAoZmFpbHVyZS5zdGFnZSAmJlxuICAgICAgICAoT2JqZWN0LmtleXMoZmFpbHVyZS5zdGFnZSkuc29tZSgoaykgPT4gayAhPT0gJ3J1bklkJyAmJiBrICE9PSAncnVudGltZVN0YWdlSWQnKSB8fFxuICAgICAgICAgIGZhaWx1cmUuc3RhZ2UucnVuSWQgIT09IHYucnVuSWQgfHxcbiAgICAgICAgICB0eXBlb2YgZmFpbHVyZS5zdGFnZS5ydW50aW1lU3RhZ2VJZCAhPT0gJ3N0cmluZycgfHxcbiAgICAgICAgICBmYWlsdXJlLnN0YWdlLnJ1bnRpbWVTdGFnZUlkLmxlbmd0aCA+IDEwMjQpKSlcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB2O1xufVxuIl19
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyHistoryReceipt = exports.copyHistoryTarget = void 0;
|
|
4
|
+
const noteShape_js_1 = require("./noteShape.js");
|
|
5
|
+
/** @internal Bounded own-data root identity. Does not execute stored accessors. */
|
|
6
|
+
function copyHistoryTarget(value) {
|
|
7
|
+
try {
|
|
8
|
+
const identity = (0, noteShape_js_1.copyIdentity)(value);
|
|
9
|
+
const evidenceId = (0, noteShape_js_1.ownData)(value, 'evidenceId');
|
|
10
|
+
const digest = (0, noteShape_js_1.ownData)(value, 'digest');
|
|
11
|
+
if (!identity || !(0, noteShape_js_1.captureIdentifier)(evidenceId) || typeof digest !== 'string' || !/^[a-f0-9]{64}$/.test(digest))
|
|
12
|
+
return undefined;
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
version: 1,
|
|
15
|
+
evidenceId,
|
|
16
|
+
runId: identity.runId,
|
|
17
|
+
digest,
|
|
18
|
+
logAddress: identity.logAddress,
|
|
19
|
+
commits: identity.commits,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.copyHistoryTarget = copyHistoryTarget;
|
|
27
|
+
/** @internal Fixed fields only; an adapter cannot leak its additional receipt data into saved metadata. */
|
|
28
|
+
function copyHistoryReceipt(value, target) {
|
|
29
|
+
try {
|
|
30
|
+
const copied = copyHistoryTarget(value);
|
|
31
|
+
if (!copied || (0, noteShape_js_1.ownData)(value, 'durability') !== 'durable' || JSON.stringify(copied) !== JSON.stringify(target))
|
|
32
|
+
return undefined;
|
|
33
|
+
return Object.freeze({ ...copied, durability: 'durable' });
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.copyHistoryReceipt = copyHistoryReceipt;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9oaXN0b3J5VGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLGlEQUEwRTtBQUUxRSxtRkFBbUY7QUFDbkYsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxJQUFJLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxJQUFBLDJCQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBQSxzQkFBTyxFQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFBLHNCQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFBLGdDQUFpQixFQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDN0csT0FBTyxTQUFTLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxDQUFDO1lBQ1YsVUFBVTtZQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixNQUFNO1lBQ04sVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFsQkQsOENBa0JDO0FBRUQsMkdBQTJHO0FBQzNHLFNBQWdCLGtCQUFrQixDQUFDLEtBQWMsRUFBRSxNQUE0QjtJQUM3RSxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUEsc0JBQU8sRUFBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDNUcsT0FBTyxTQUFTLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDO0FBVEQsZ0RBU0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5UmVjZWlwdCwgQ2FwdHVyZUhpc3RvcnlUYXJnZXQgfSBmcm9tICcuL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgeyBjYXB0dXJlSWRlbnRpZmllciwgY29weUlkZW50aXR5LCBvd25EYXRhIH0gZnJvbSAnLi9ub3RlU2hhcGUuanMnO1xuXG4vKiogQGludGVybmFsIEJvdW5kZWQgb3duLWRhdGEgcm9vdCBpZGVudGl0eS4gRG9lcyBub3QgZXhlY3V0ZSBzdG9yZWQgYWNjZXNzb3JzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlIaXN0b3J5VGFyZ2V0KHZhbHVlOiB1bmtub3duKTogQ2FwdHVyZUhpc3RvcnlUYXJnZXQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGlkZW50aXR5ID0gY29weUlkZW50aXR5KHZhbHVlKTtcbiAgICBjb25zdCBldmlkZW5jZUlkID0gb3duRGF0YSh2YWx1ZSwgJ2V2aWRlbmNlSWQnKTtcbiAgICBjb25zdCBkaWdlc3QgPSBvd25EYXRhKHZhbHVlLCAnZGlnZXN0Jyk7XG4gICAgaWYgKCFpZGVudGl0eSB8fCAhY2FwdHVyZUlkZW50aWZpZXIoZXZpZGVuY2VJZCkgfHwgdHlwZW9mIGRpZ2VzdCAhPT0gJ3N0cmluZycgfHwgIS9eW2EtZjAtOV17NjR9JC8udGVzdChkaWdlc3QpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgZXZpZGVuY2VJZCxcbiAgICAgIHJ1bklkOiBpZGVudGl0eS5ydW5JZCxcbiAgICAgIGRpZ2VzdCxcbiAgICAgIGxvZ0FkZHJlc3M6IGlkZW50aXR5LmxvZ0FkZHJlc3MsXG4gICAgICBjb21taXRzOiBpZGVudGl0eS5jb21taXRzLFxuICAgIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBAaW50ZXJuYWwgRml4ZWQgZmllbGRzIG9ubHk7IGFuIGFkYXB0ZXIgY2Fubm90IGxlYWsgaXRzIGFkZGl0aW9uYWwgcmVjZWlwdCBkYXRhIGludG8gc2F2ZWQgbWV0YWRhdGEuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUhpc3RvcnlSZWNlaXB0KHZhbHVlOiB1bmtub3duLCB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0KTogQ2FwdHVyZUhpc3RvcnlSZWNlaXB0IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb3BpZWQgPSBjb3B5SGlzdG9yeVRhcmdldCh2YWx1ZSk7XG4gICAgaWYgKCFjb3BpZWQgfHwgb3duRGF0YSh2YWx1ZSwgJ2R1cmFiaWxpdHknKSAhPT0gJ2R1cmFibGUnIHx8IEpTT04uc3RyaW5naWZ5KGNvcGllZCkgIT09IEpTT04uc3RyaW5naWZ5KHRhcmdldCkpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4uY29waWVkLCBkdXJhYmlsaXR5OiAnZHVyYWJsZScgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CAPTURE_RECEIPT_NOTE = exports.CAPTURE_HISTORY_NOTE = void 0;
|
|
4
|
+
/** @internal Opaque note names; Foottrace keeps them without interpreting engine metadata. */
|
|
5
|
+
exports.CAPTURE_HISTORY_NOTE = 'capture-history';
|
|
6
|
+
exports.CAPTURE_RECEIPT_NOTE = 'capture-receipt';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2hpc3RvcnlUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQ0EsOEZBQThGO0FBQ2pGLFFBQUEsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUM7QUFDekMsUUFBQSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTG9nQWRkcmVzcyB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbi8qKiBFeGFjdCByb290IHNlZ21lbnQgYW5kIGV2aWRlbmNlIGVudHJ5IGFja25vd2xlZGdlZCBieSBhIHN0b3JhZ2UgYWRhcHRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUhpc3RvcnlUYXJnZXQge1xuICByZWFkb25seSB2ZXJzaW9uOiAxO1xuICByZWFkb25seSBldmlkZW5jZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIC8qKiBTSEEtMjU2IG9mIHRoZSBleGFjdCBpbmVydCBKU09OIGV2aWRlbmNlIHBsdXMgY2Fub25pY2FsIGNvbW1pdCBsb2cgYW5kIHNlcnZlZCBzdGFydGluZyBzdGF0ZS4gKi9cbiAgcmVhZG9ubHkgZGlnZXN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M6IExvZ0FkZHJlc3M7XG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG59XG5cbi8qKiBBZGFwdGVyIGFzc2VydGlvbiBhYm91dCB0aGUgcHJlY2VkaW5nIGV2aWRlbmNlIGFuZCBlbmQgZW50cnksIG5vdCBhYm91dCB0aGlzIHJlY2VpcHQncyBkZWxpdmVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0IGV4dGVuZHMgQ2FwdHVyZUhpc3RvcnlUYXJnZXQge1xuICByZWFkb25seSBkdXJhYmlsaXR5OiAnZHVyYWJsZSc7XG59XG5cbi8qKiBFeHBsaWNpdCBob3N0LW93bmVkIGR1cmFiaWxpdHkgY2FwYWJpbGl0eS4gQSBub3JtYWwgUmVjb3JkU2luay5mbHVzaCBpcyBub3QgdGhpcyBwcm9taXNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeU9wdGlvbnMge1xuICAvKiogUmVzb2x2ZSBvbmx5IGFmdGVyIHRoaXMgdGFyZ2V0J3MgZXZpZGVuY2UsIGNvbW1pdHMgYW5kIGVuZCBlbnRyeSBhcmUgZHVyYWJseSBzdG9yZWQgdG9nZXRoZXIuICovXG4gIHJlYWRvbmx5IGFja25vd2xlZGdlOiAoXG4gICAgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldCxcbiAgICBjb250ZXh0OiB7IHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWwgfSxcbiAgKSA9PiBQcm9taXNlPENhcHR1cmVIaXN0b3J5UmVjZWlwdD47XG4gIC8qKiBNYXhpbXVtIFVURi04IGJ5dGVzIG9mIHRoZSBldmlkZW5jZSBwYXlsb2FkIGFuZCB0YXJnZXQuIERlZmF1bHQgMSBNaUIsIG1heGltdW0gOCBNaUIuICovXG4gIHJlYWRvbmx5IG1heEJ5dGVzPzogbnVtYmVyO1xuICAvKiogVG90YWwgdGltZSBhbGxvd2VkIGZvciBldmlkZW5jZSBkZWxpdmVyeSwgYWNrbm93bGVkZ2VtZW50IGFuZCByZWNlaXB0IGRlbGl2ZXJ5LiBEZWZhdWx0IDEwcywgbWF4aW11bSAzMHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIFBlcnNpc3RlbmNlIHJlc3VsdCBvbmx5LiBBbiBhY2tub3dsZWRnZWQgZmFpbGVkL3BhdXNlZCBwcmVmaXggaXMgbm90IGEgY29tcGxldGVkIGJ1c2luZXNzIHdvcmtmbG93LiAqL1xuZXhwb3J0IHR5cGUgQ2FwdHVyZUhpc3RvcnlTdGF0dXMgPVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJyB9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICd1bmtub3duJzsgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmcgfTtcblxuLyoqIEBpbnRlcm5hbCBPcGFxdWUgbm90ZSBuYW1lczsgRm9vdHRyYWNlIGtlZXBzIHRoZW0gd2l0aG91dCBpbnRlcnByZXRpbmcgZW5naW5lIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfSElTVE9SWV9OT1RFID0gJ2NhcHR1cmUtaGlzdG9yeSc7XG5leHBvcnQgY29uc3QgQ0FQVFVSRV9SRUNFSVBUX05PVEUgPSAnY2FwdHVyZS1yZWNlaXB0JztcbiJdfQ==
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyCaptureAcknowledgement = exports.NativeCapture = exports.CAPTURE_LIMITATIONS = exports.CAPTURE_BASE_LIMITATIONS = exports.isCaptureValue = exports.CAPTURE_CHANNEL_STATUSES = exports.CAPTURE_PROVENANCE_MODES = exports.CAPTURE_COMMIT_VALUE_MODES = exports.CAPTURE_RETENTION_MODES = void 0;
|
|
4
|
+
/** @internal Shared observation vocabularies; producer, types and checkpoint reader use the same values. */
|
|
5
|
+
exports.CAPTURE_RETENTION_MODES = Object.freeze(['full', 'summary', 'off', 'unknown']);
|
|
6
|
+
exports.CAPTURE_COMMIT_VALUE_MODES = Object.freeze(['full', 'delta', 'unknown']);
|
|
7
|
+
exports.CAPTURE_PROVENANCE_MODES = Object.freeze(['off', 'reads-prefix', 'unknown']);
|
|
8
|
+
exports.CAPTURE_CHANNEL_STATUSES = Object.freeze([
|
|
9
|
+
'captured',
|
|
10
|
+
'disabled',
|
|
11
|
+
'partial',
|
|
12
|
+
'failed',
|
|
13
|
+
'unknown',
|
|
14
|
+
]);
|
|
15
|
+
// Recorder acknowledgements are narrower than the native per-channel observation vocabulary.
|
|
16
|
+
const RECORDER_CONTROL_STATUSES = Object.freeze(['captured', 'partial', 'unknown']);
|
|
17
|
+
/** @internal Exact membership without coercing stored values. */
|
|
18
|
+
function isCaptureValue(value, vocabulary) {
|
|
19
|
+
return typeof value === 'string' && vocabulary.includes(value);
|
|
20
|
+
}
|
|
21
|
+
exports.isCaptureValue = isCaptureValue;
|
|
22
|
+
/** @internal Limitations inherent in every version-1 observation. */
|
|
23
|
+
exports.CAPTURE_BASE_LIMITATIONS = Object.freeze([
|
|
24
|
+
'tracked-state-only',
|
|
25
|
+
'final-attempt-views',
|
|
26
|
+
'read-sources-not-collected',
|
|
27
|
+
'child-scopes-not-attested',
|
|
28
|
+
'storage-not-attested',
|
|
29
|
+
]);
|
|
30
|
+
/** @internal One vocabulary for native observation and its stored checkpoint codec. */
|
|
31
|
+
exports.CAPTURE_LIMITATIONS = Object.freeze([
|
|
32
|
+
...exports.CAPTURE_BASE_LIMITATIONS,
|
|
33
|
+
'resumed-segment',
|
|
34
|
+
'redacted-export',
|
|
35
|
+
'redaction-active',
|
|
36
|
+
'custom-scope',
|
|
37
|
+
'read-retention-failed',
|
|
38
|
+
'commit-retention-failed',
|
|
39
|
+
'attention-omitted',
|
|
40
|
+
'recorder-snapshot-failed',
|
|
41
|
+
'identity-omitted',
|
|
42
|
+
'execution-broken',
|
|
43
|
+
'modes-unavailable',
|
|
44
|
+
'checkpoint-history-not-included',
|
|
45
|
+
'source-history-not-included',
|
|
46
|
+
]);
|
|
47
|
+
/** @internal Bounded facts collected at native funnels; no values, key names, recorder discovery or tree walk. */
|
|
48
|
+
class NativeCapture {
|
|
49
|
+
runId;
|
|
50
|
+
logAddress;
|
|
51
|
+
from;
|
|
52
|
+
gaps = new Set(exports.CAPTURE_BASE_LIMITATIONS);
|
|
53
|
+
boundary = { status: 'running' };
|
|
54
|
+
modes;
|
|
55
|
+
constructor(runId, logAddress, from, modes) {
|
|
56
|
+
this.runId = runId;
|
|
57
|
+
this.logAddress = logAddress;
|
|
58
|
+
this.from = from;
|
|
59
|
+
const retention = (value) => (isCaptureValue(value, exports.CAPTURE_RETENTION_MODES) ? value : 'unknown');
|
|
60
|
+
this.modes = {
|
|
61
|
+
readTracking: retention(modes.readTracking),
|
|
62
|
+
writeTracking: retention(modes.writeTracking),
|
|
63
|
+
commitValues: isCaptureValue(modes.commitValues, exports.CAPTURE_COMMIT_VALUE_MODES) ? modes.commitValues : 'unknown',
|
|
64
|
+
writeProvenance: isCaptureValue(modes.writeProvenance, exports.CAPTURE_PROVENANCE_MODES)
|
|
65
|
+
? modes.writeProvenance
|
|
66
|
+
: 'unknown',
|
|
67
|
+
};
|
|
68
|
+
if (Object.values(this.modes).includes('unknown'))
|
|
69
|
+
this.limit('modes-unavailable');
|
|
70
|
+
}
|
|
71
|
+
limit(gap) {
|
|
72
|
+
this.gaps.add(gap);
|
|
73
|
+
}
|
|
74
|
+
end(status, failure) {
|
|
75
|
+
if (this.boundary.status !== 'running')
|
|
76
|
+
return;
|
|
77
|
+
if (failure?.stage && failure.stage.runtimeStageId.length > 1024) {
|
|
78
|
+
this.limit('identity-omitted');
|
|
79
|
+
failure = Object.freeze({ category: failure.category });
|
|
80
|
+
}
|
|
81
|
+
this.boundary = { status, ...(failure && { failure }) };
|
|
82
|
+
}
|
|
83
|
+
snapshot(to, control = 'unknown', redacted = false) {
|
|
84
|
+
const gaps = new Set(this.gaps);
|
|
85
|
+
if (redacted)
|
|
86
|
+
gaps.add('redacted-export');
|
|
87
|
+
const failed = gaps.has('commit-retention-failed');
|
|
88
|
+
const custom = gaps.has('custom-scope') || gaps.has('modes-unavailable');
|
|
89
|
+
return Object.freeze({
|
|
90
|
+
version: 1,
|
|
91
|
+
runId: this.runId,
|
|
92
|
+
scope: 'root-log',
|
|
93
|
+
logAddress: Object.freeze({
|
|
94
|
+
logRunId: this.logAddress.logRunId,
|
|
95
|
+
drillPath: Object.freeze([...this.logAddress.drillPath]),
|
|
96
|
+
}),
|
|
97
|
+
commits: Object.freeze({ from: this.from, to }),
|
|
98
|
+
boundary: Object.freeze({ ...this.boundary }),
|
|
99
|
+
modes: Object.freeze({
|
|
100
|
+
readTracking: this.modes.readTracking,
|
|
101
|
+
writeTracking: this.modes.writeTracking,
|
|
102
|
+
commitValues: this.modes.commitValues,
|
|
103
|
+
writeProvenance: this.modes.writeProvenance,
|
|
104
|
+
}),
|
|
105
|
+
channels: Object.freeze({
|
|
106
|
+
reads: this.modes.readTracking === 'off'
|
|
107
|
+
? 'disabled'
|
|
108
|
+
: gaps.has('read-retention-failed')
|
|
109
|
+
? 'failed'
|
|
110
|
+
: custom
|
|
111
|
+
? 'unknown'
|
|
112
|
+
: 'captured',
|
|
113
|
+
writes: this.modes.writeTracking === 'off' ? 'disabled' : failed ? 'failed' : custom ? 'unknown' : 'captured',
|
|
114
|
+
attention: failed || gaps.has('attention-omitted') ? 'partial' : custom ? 'unknown' : 'captured',
|
|
115
|
+
control: gaps.has('recorder-snapshot-failed') ? 'failed' : control,
|
|
116
|
+
readSources: 'not-collected',
|
|
117
|
+
}),
|
|
118
|
+
persistence: 'memory-only',
|
|
119
|
+
limitations: Object.freeze([...gaps]),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
exports.NativeCapture = NativeCapture;
|
|
124
|
+
/** Stored/recorder metadata is untrusted. Read data properties only, never getters or arbitrary strings. */
|
|
125
|
+
function copyCaptureAcknowledgement(value) {
|
|
126
|
+
try {
|
|
127
|
+
if (!value || typeof value !== 'object' || Object.getPrototypeOf(value) !== Object.prototype)
|
|
128
|
+
return undefined;
|
|
129
|
+
const data = (key) => Object.getOwnPropertyDescriptor(value, key)?.value;
|
|
130
|
+
const version = data('version');
|
|
131
|
+
const runId = data('runId');
|
|
132
|
+
const control = data('control');
|
|
133
|
+
if (version !== 1 ||
|
|
134
|
+
typeof runId !== 'string' ||
|
|
135
|
+
runId.length === 0 ||
|
|
136
|
+
runId.length > 2048 ||
|
|
137
|
+
!isCaptureValue(control, RECORDER_CONTROL_STATUSES))
|
|
138
|
+
return undefined;
|
|
139
|
+
return Object.freeze({ version, runId, control });
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.copyCaptureAcknowledgement = copyCaptureAcknowledgement;
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlQ292ZXJhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvbmF0aXZlQ292ZXJhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsNEdBQTRHO0FBQy9GLFFBQUEsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBVSxDQUFDLENBQUM7QUFDeEYsUUFBQSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQVUsQ0FBQyxDQUFDO0FBQ2xGLFFBQUEsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFVLENBQUMsQ0FBQztBQUN0RixRQUFBLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDcEQsVUFBVTtJQUNWLFVBQVU7SUFDVixTQUFTO0lBQ1QsUUFBUTtJQUNSLFNBQVM7Q0FDRCxDQUFDLENBQUM7QUFDWiw2RkFBNkY7QUFDN0YsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQVUsQ0FBQyxDQUFDO0FBRzdGLGlFQUFpRTtBQUNqRSxTQUFnQixjQUFjLENBQW1CLEtBQWMsRUFBRSxVQUF3QjtJQUN2RixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSyxVQUFnQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRkQsd0NBRUM7QUFDRCxxRUFBcUU7QUFDeEQsUUFBQSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3BELG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsNEJBQTRCO0lBQzVCLDJCQUEyQjtJQUMzQixzQkFBc0I7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QztRQUMvRyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDakYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFDRSxPQUFPLEtBQUssQ0FBQztZQUNiLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFDekIsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSTtZQUNuQixDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUM7WUFFbkQsT0FBTyxTQUFTLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0FBQ0gsQ0FBQztBQW5CRCxnRUFtQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfSBmcm9tICcuLi9lcnJvcnMvdGVybWluYWxGYWlsdXJlLmpzJztcblxuLyoqIEBpbnRlcm5hbCBTaGFyZWQgb2JzZXJ2YXRpb24gdm9jYWJ1bGFyaWVzOyBwcm9kdWNlciwgdHlwZXMgYW5kIGNoZWNrcG9pbnQgcmVhZGVyIHVzZSB0aGUgc2FtZSB2YWx1ZXMuICovXG5leHBvcnQgY29uc3QgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMgPSBPYmplY3QuZnJlZXplKFsnZnVsbCcsICdzdW1tYXJ5JywgJ29mZicsICd1bmtub3duJ10gYXMgY29uc3QpO1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfQ09NTUlUX1ZBTFVFX01PREVTID0gT2JqZWN0LmZyZWV6ZShbJ2Z1bGwnLCAnZGVsdGEnLCAndW5rbm93biddIGFzIGNvbnN0KTtcbmV4cG9ydCBjb25zdCBDQVBUVVJFX1BST1ZFTkFOQ0VfTU9ERVMgPSBPYmplY3QuZnJlZXplKFsnb2ZmJywgJ3JlYWRzLXByZWZpeCcsICd1bmtub3duJ10gYXMgY29uc3QpO1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfQ0hBTk5FTF9TVEFUVVNFUyA9IE9iamVjdC5mcmVlemUoW1xuICAnY2FwdHVyZWQnLFxuICAnZGlzYWJsZWQnLFxuICAncGFydGlhbCcsXG4gICdmYWlsZWQnLFxuICAndW5rbm93bicsXG5dIGFzIGNvbnN0KTtcbi8vIFJlY29yZGVyIGFja25vd2xlZGdlbWVudHMgYXJlIG5hcnJvd2VyIHRoYW4gdGhlIG5hdGl2ZSBwZXItY2hhbm5lbCBvYnNlcnZhdGlvbiB2b2NhYnVsYXJ5LlxuY29uc3QgUkVDT1JERVJfQ09OVFJPTF9TVEFUVVNFUyA9IE9iamVjdC5mcmVlemUoWydjYXB0dXJlZCcsICdwYXJ0aWFsJywgJ3Vua25vd24nXSBhcyBjb25zdCk7XG5leHBvcnQgdHlwZSBDYXB0dXJlQ2hhbm5lbFN0YXR1cyA9ICh0eXBlb2YgQ0FQVFVSRV9DSEFOTkVMX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogQGludGVybmFsIEV4YWN0IG1lbWJlcnNoaXAgd2l0aG91dCBjb2VyY2luZyBzdG9yZWQgdmFsdWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FwdHVyZVZhbHVlPFQgZXh0ZW5kcyBzdHJpbmc+KHZhbHVlOiB1bmtub3duLCB2b2NhYnVsYXJ5OiByZWFkb25seSBUW10pOiB2YWx1ZSBpcyBUIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgKHZvY2FidWxhcnkgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cbi8qKiBAaW50ZXJuYWwgTGltaXRhdGlvbnMgaW5oZXJlbnQgaW4gZXZlcnkgdmVyc2lvbi0xIG9ic2VydmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUyA9IE9iamVjdC5mcmVlemUoW1xuICAndHJhY2tlZC1zdGF0ZS1vbmx5JyxcbiAgJ2ZpbmFsLWF0dGVtcHQtdmlld3MnLFxuICAncmVhZC1zb3VyY2VzLW5vdC1jb2xsZWN0ZWQnLFxuICAnY2hpbGQtc2NvcGVzLW5vdC1hdHRlc3RlZCcsXG4gICdzdG9yYWdlLW5vdC1hdHRlc3RlZCcsXG5dIGFzIGNvbnN0KTtcblxuLyoqIEBpbnRlcm5hbCBPbmUgdm9jYWJ1bGFyeSBmb3IgbmF0aXZlIG9ic2VydmF0aW9uIGFuZCBpdHMgc3RvcmVkIGNoZWNrcG9pbnQgY29kZWMuICovXG5leHBvcnQgY29uc3QgQ0FQVFVSRV9MSU1JVEFUSU9OUyA9IE9iamVjdC5mcmVlemUoW1xuICAuLi5DQVBUVVJFX0JBU0VfTElNSVRBVElPTlMsXG4gICdyZXN1bWVkLXNlZ21lbnQnLFxuICAncmVkYWN0ZWQtZXhwb3J0JyxcbiAgJ3JlZGFjdGlvbi1hY3RpdmUnLFxuICAnY3VzdG9tLXNjb3BlJyxcbiAgJ3JlYWQtcmV0ZW50aW9uLWZhaWxlZCcsXG4gICdjb21taXQtcmV0ZW50aW9uLWZhaWxlZCcsXG4gICdhdHRlbnRpb24tb21pdHRlZCcsXG4gICdyZWNvcmRlci1zbmFwc2hvdC1mYWlsZWQnLFxuICAnaWRlbnRpdHktb21pdHRlZCcsXG4gICdleGVjdXRpb24tYnJva2VuJyxcbiAgJ21vZGVzLXVuYXZhaWxhYmxlJyxcbiAgJ2NoZWNrcG9pbnQtaGlzdG9yeS1ub3QtaW5jbHVkZWQnLFxuICAnc291cmNlLWhpc3Rvcnktbm90LWluY2x1ZGVkJyxcbl0gYXMgY29uc3QpO1xuZXhwb3J0IHR5cGUgQ2FwdHVyZUxpbWl0YXRpb24gPSAodHlwZW9mIENBUFRVUkVfTElNSVRBVElPTlMpW251bWJlcl07XG5cbi8qKiBBIHByb2R1Y2VyIGFja25vd2xlZGdlbWVudCwgbm90IGVuZ2luZSBpbnNwZWN0aW9uIG9mIGEgcmVjb3JkZXIncyBpbXBsZW1lbnRhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50IHtcbiAgcmVhZG9ubHkgdmVyc2lvbjogMTtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udHJvbDogKHR5cGVvZiBSRUNPUkRFUl9DT05UUk9MX1NUQVRVU0VTKVtudW1iZXJdO1xufVxuXG4vKiogRW5naW5lIG9ic2VydmF0aW9uIG9mIE9ORSByb290LWxvZyBzZWdtZW50LiBOZXZlciBhIGR1cmFibGUgb3Igd2hvbGUtd29ya2Zsb3cgY29tcGxldGVuZXNzIGNsYWltLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRpdmVDYXB0dXJlTm90ZSB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiAncm9vdC1sb2cnO1xuICByZWFkb25seSBsb2dBZGRyZXNzOiBMb2dBZGRyZXNzO1xuICAvKiogSGFsZi1vcGVuIG9mZnNldHMgaW4gdGhpcyBsb2cuIEEgc2FtZS1leGVjdXRvciByZXN1bWUgc3RhcnRzIGF0IHRoZSBwcmV2aW91cyBlbmQuICovXG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG4gIHJlYWRvbmx5IGJvdW5kYXJ5OiB7XG4gICAgcmVhZG9ubHkgc3RhdHVzOiAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdwYXVzZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJztcbiAgICByZWFkb25seSBmYWlsdXJlPzogVGVybWluYWxGYWlsdXJlQ29udGV4dDtcbiAgfTtcbiAgcmVhZG9ubHkgbW9kZXM6IHtcbiAgICByZWFkb25seSByZWFkVHJhY2tpbmc6ICh0eXBlb2YgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMpW251bWJlcl07XG4gICAgcmVhZG9ubHkgd3JpdGVUcmFja2luZzogKHR5cGVvZiBDQVBUVVJFX1JFVEVOVElPTl9NT0RFUylbbnVtYmVyXTtcbiAgICByZWFkb25seSBjb21taXRWYWx1ZXM6ICh0eXBlb2YgQ0FQVFVSRV9DT01NSVRfVkFMVUVfTU9ERVMpW251bWJlcl07XG4gICAgcmVhZG9ubHkgd3JpdGVQcm92ZW5hbmNlOiAodHlwZW9mIENBUFRVUkVfUFJPVkVOQU5DRV9NT0RFUylbbnVtYmVyXTtcbiAgfTtcbiAgcmVhZG9ubHkgY2hhbm5lbHM6IHtcbiAgICByZWFkb25seSByZWFkczogQ2FwdHVyZUNoYW5uZWxTdGF0dXM7XG4gICAgcmVhZG9ubHkgd3JpdGVzOiBDYXB0dXJlQ2hhbm5lbFN0YXR1cztcbiAgICByZWFkb25seSBhdHRlbnRpb246IENhcHR1cmVDaGFubmVsU3RhdHVzO1xuICAgIHJlYWRvbmx5IGNvbnRyb2w6IENhcHR1cmVDaGFubmVsU3RhdHVzO1xuICAgIHJlYWRvbmx5IHJlYWRTb3VyY2VzOiAnbm90LWNvbGxlY3RlZCc7XG4gIH07XG4gIHJlYWRvbmx5IHBlcnNpc3RlbmNlOiAnbWVtb3J5LW9ubHknO1xuICByZWFkb25seSBsaW1pdGF0aW9uczogcmVhZG9ubHkgQ2FwdHVyZUxpbWl0YXRpb25bXTtcbn1cblxuLyoqIEBpbnRlcm5hbCBCb3VuZGVkIGZhY3RzIGNvbGxlY3RlZCBhdCBuYXRpdmUgZnVubmVsczsgbm8gdmFsdWVzLCBrZXkgbmFtZXMsIHJlY29yZGVyIGRpc2NvdmVyeSBvciB0cmVlIHdhbGsuICovXG5leHBvcnQgY2xhc3MgTmF0aXZlQ2FwdHVyZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2FwcyA9IG5ldyBTZXQ8Q2FwdHVyZUxpbWl0YXRpb24+KENBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUyk7XG5cbiAgcHJpdmF0ZSBib3VuZGFyeTogTmF0aXZlQ2FwdHVyZU5vdGVbJ2JvdW5kYXJ5J10gPSB7IHN0YXR1czogJ3J1bm5pbmcnIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kZXM6IE5hdGl2ZUNhcHR1cmVOb3RlWydtb2RlcyddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgbG9nQWRkcmVzczogTG9nQWRkcmVzcyxcbiAgICByZWFkb25seSBmcm9tOiBudW1iZXIsXG4gICAgbW9kZXM6IE5hdGl2ZUNhcHR1cmVOb3RlWydtb2RlcyddLFxuICApIHtcbiAgICBjb25zdCByZXRlbnRpb24gPSAodmFsdWU6IHVua25vd24pID0+IChpc0NhcHR1cmVWYWx1ZSh2YWx1ZSwgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMpID8gdmFsdWUgOiAndW5rbm93bicpO1xuICAgIHRoaXMubW9kZXMgPSB7XG4gICAgICByZWFkVHJhY2tpbmc6IHJldGVudGlvbihtb2Rlcy5yZWFkVHJhY2tpbmcpLFxuICAgICAgd3JpdGVUcmFja2luZzogcmV0ZW50aW9uKG1vZGVzLndyaXRlVHJhY2tpbmcpLFxuICAgICAgY29tbWl0VmFsdWVzOiBpc0NhcHR1cmVWYWx1ZShtb2Rlcy5jb21taXRWYWx1ZXMsIENBUFRVUkVfQ09NTUlUX1ZBTFVFX01PREVTKSA/IG1vZGVzLmNvbW1pdFZhbHVlcyA6ICd1bmtub3duJyxcbiAgICAgIHdyaXRlUHJvdmVuYW5jZTogaXNDYXB0dXJlVmFsdWUobW9kZXMud3JpdGVQcm92ZW5hbmNlLCBDQVBUVVJFX1BST1ZFTkFOQ0VfTU9ERVMpXG4gICAgICAgID8gbW9kZXMud3JpdGVQcm92ZW5hbmNlXG4gICAgICAgIDogJ3Vua25vd24nLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5tb2RlcykuaW5jbHVkZXMoJ3Vua25vd24nKSkgdGhpcy5saW1pdCgnbW9kZXMtdW5hdmFpbGFibGUnKTtcbiAgfVxuXG4gIGxpbWl0KGdhcDogQ2FwdHVyZUxpbWl0YXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmdhcHMuYWRkKGdhcCk7XG4gIH1cblxuICBlbmQoc3RhdHVzOiBOYXRpdmVDYXB0dXJlTm90ZVsnYm91bmRhcnknXVsnc3RhdHVzJ10sIGZhaWx1cmU/OiBUZXJtaW5hbEZhaWx1cmVDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYm91bmRhcnkuc3RhdHVzICE9PSAncnVubmluZycpIHJldHVybjtcbiAgICBpZiAoZmFpbHVyZT8uc3RhZ2UgJiYgZmFpbHVyZS5zdGFnZS5ydW50aW1lU3RhZ2VJZC5sZW5ndGggPiAxMDI0KSB7XG4gICAgICB0aGlzLmxpbWl0KCdpZGVudGl0eS1vbWl0dGVkJyk7XG4gICAgICBmYWlsdXJlID0gT2JqZWN0LmZyZWV6ZSh7IGNhdGVnb3J5OiBmYWlsdXJlLmNhdGVnb3J5IH0pO1xuICAgIH1cbiAgICB0aGlzLmJvdW5kYXJ5ID0geyBzdGF0dXMsIC4uLihmYWlsdXJlICYmIHsgZmFpbHVyZSB9KSB9O1xuICB9XG5cbiAgc25hcHNob3QodG86IG51bWJlciwgY29udHJvbDogQ2FwdHVyZUNoYW5uZWxTdGF0dXMgPSAndW5rbm93bicsIHJlZGFjdGVkID0gZmFsc2UpOiBOYXRpdmVDYXB0dXJlTm90ZSB7XG4gICAgY29uc3QgZ2FwcyA9IG5ldyBTZXQodGhpcy5nYXBzKTtcbiAgICBpZiAocmVkYWN0ZWQpIGdhcHMuYWRkKCdyZWRhY3RlZC1leHBvcnQnKTtcbiAgICBjb25zdCBmYWlsZWQgPSBnYXBzLmhhcygnY29tbWl0LXJldGVudGlvbi1mYWlsZWQnKTtcbiAgICBjb25zdCBjdXN0b20gPSBnYXBzLmhhcygnY3VzdG9tLXNjb3BlJykgfHwgZ2Fwcy5oYXMoJ21vZGVzLXVuYXZhaWxhYmxlJyk7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHJ1bklkOiB0aGlzLnJ1bklkLFxuICAgICAgc2NvcGU6ICdyb290LWxvZycsXG4gICAgICBsb2dBZGRyZXNzOiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgbG9nUnVuSWQ6IHRoaXMubG9nQWRkcmVzcy5sb2dSdW5JZCxcbiAgICAgICAgZHJpbGxQYXRoOiBPYmplY3QuZnJlZXplKFsuLi50aGlzLmxvZ0FkZHJlc3MuZHJpbGxQYXRoXSksXG4gICAgICB9KSxcbiAgICAgIGNvbW1pdHM6IE9iamVjdC5mcmVlemUoeyBmcm9tOiB0aGlzLmZyb20sIHRvIH0pLFxuICAgICAgYm91bmRhcnk6IE9iamVjdC5mcmVlemUoeyAuLi50aGlzLmJvdW5kYXJ5IH0pLFxuICAgICAgbW9kZXM6IE9iamVjdC5mcmVlemUoe1xuICAgICAgICByZWFkVHJhY2tpbmc6IHRoaXMubW9kZXMucmVhZFRyYWNraW5nLFxuICAgICAgICB3cml0ZVRyYWNraW5nOiB0aGlzLm1vZGVzLndyaXRlVHJhY2tpbmcsXG4gICAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5tb2Rlcy5jb21taXRWYWx1ZXMsXG4gICAgICAgIHdyaXRlUHJvdmVuYW5jZTogdGhpcy5tb2Rlcy53cml0ZVByb3ZlbmFuY2UsXG4gICAgICB9KSxcbiAgICAgIGNoYW5uZWxzOiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgcmVhZHM6XG4gICAgICAgICAgdGhpcy5tb2Rlcy5yZWFkVHJhY2tpbmcgPT09ICdvZmYnXG4gICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgIDogZ2Fwcy5oYXMoJ3JlYWQtcmV0ZW50aW9uLWZhaWxlZCcpXG4gICAgICAgICAgICA/ICdmYWlsZWQnXG4gICAgICAgICAgICA6IGN1c3RvbVxuICAgICAgICAgICAgPyAndW5rbm93bidcbiAgICAgICAgICAgIDogJ2NhcHR1cmVkJyxcbiAgICAgICAgd3JpdGVzOiB0aGlzLm1vZGVzLndyaXRlVHJhY2tpbmcgPT09ICdvZmYnID8gJ2Rpc2FibGVkJyA6IGZhaWxlZCA/ICdmYWlsZWQnIDogY3VzdG9tID8gJ3Vua25vd24nIDogJ2NhcHR1cmVkJyxcbiAgICAgICAgYXR0ZW50aW9uOiBmYWlsZWQgfHwgZ2Fwcy5oYXMoJ2F0dGVudGlvbi1vbWl0dGVkJykgPyAncGFydGlhbCcgOiBjdXN0b20gPyAndW5rbm93bicgOiAnY2FwdHVyZWQnLFxuICAgICAgICBjb250cm9sOiBnYXBzLmhhcygncmVjb3JkZXItc25hcHNob3QtZmFpbGVkJykgPyAnZmFpbGVkJyA6IGNvbnRyb2wsXG4gICAgICAgIHJlYWRTb3VyY2VzOiAnbm90LWNvbGxlY3RlZCcsXG4gICAgICB9KSxcbiAgICAgIHBlcnNpc3RlbmNlOiAnbWVtb3J5LW9ubHknLFxuICAgICAgbGltaXRhdGlvbnM6IE9iamVjdC5mcmVlemUoWy4uLmdhcHNdKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogU3RvcmVkL3JlY29yZGVyIG1ldGFkYXRhIGlzIHVudHJ1c3RlZC4gUmVhZCBkYXRhIHByb3BlcnRpZXMgb25seSwgbmV2ZXIgZ2V0dGVycyBvciBhcmJpdHJhcnkgc3RyaW5ncy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5Q2FwdHVyZUFja25vd2xlZGdlbWVudCh2YWx1ZTogdW5rbm93bik6IFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgIT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YSA9IChrZXk6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KT8udmFsdWU7XG4gICAgY29uc3QgdmVyc2lvbiA9IGRhdGEoJ3ZlcnNpb24nKTtcbiAgICBjb25zdCBydW5JZCA9IGRhdGEoJ3J1bklkJyk7XG4gICAgY29uc3QgY29udHJvbCA9IGRhdGEoJ2NvbnRyb2wnKTtcbiAgICBpZiAoXG4gICAgICB2ZXJzaW9uICE9PSAxIHx8XG4gICAgICB0eXBlb2YgcnVuSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgICBydW5JZC5sZW5ndGggPT09IDAgfHxcbiAgICAgIHJ1bklkLmxlbmd0aCA+IDIwNDggfHxcbiAgICAgICFpc0NhcHR1cmVWYWx1ZShjb250cm9sLCBSRUNPUkRFUl9DT05UUk9MX1NUQVRVU0VTKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyB2ZXJzaW9uLCBydW5JZCwgY29udHJvbCB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|