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.
Files changed (131) hide show
  1. package/dist/esm/index.d.ts +3 -0
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  4. package/dist/esm/lib/capture/absentEntries.js +81 -0
  5. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  6. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  7. package/dist/esm/lib/capture/historyData.d.ts +9 -0
  8. package/dist/esm/lib/capture/historyData.js +79 -0
  9. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  10. package/dist/esm/lib/capture/historyNote.js +52 -0
  11. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  12. package/dist/esm/lib/capture/historyTarget.js +35 -0
  13. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  14. package/dist/esm/lib/capture/historyTypes.js +4 -0
  15. package/dist/esm/lib/capture/nativeCoverage.d.ts +69 -0
  16. package/dist/esm/lib/capture/nativeCoverage.js +140 -0
  17. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  18. package/dist/esm/lib/capture/noteShape.js +93 -0
  19. package/dist/esm/lib/capture/readSources.d.ts +43 -0
  20. package/dist/esm/lib/capture/readSources.js +78 -0
  21. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
  22. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  23. package/dist/esm/lib/engine/types.d.ts +3 -0
  24. package/dist/esm/lib/engine/types.js +1 -1
  25. package/dist/esm/lib/memory/StageContext.d.ts +13 -0
  26. package/dist/esm/lib/memory/StageContext.js +110 -14
  27. package/dist/esm/lib/memory/attention.d.ts +2 -0
  28. package/dist/esm/lib/memory/attention.js +12 -5
  29. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  30. package/dist/esm/lib/memory/runPolicy.js +2 -1
  31. package/dist/esm/lib/pause/record.js +8 -2
  32. package/dist/esm/lib/pause/types.d.ts +2 -0
  33. package/dist/esm/lib/pause/types.js +1 -1
  34. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +12 -1
  35. package/dist/esm/lib/recorder/ControlDepRecorder.js +23 -1
  36. package/dist/esm/lib/recorder/snapshot.d.ts +1 -1
  37. package/dist/esm/lib/recorder/snapshot.js +7 -2
  38. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +24 -1
  39. package/dist/esm/lib/runner/ExecutionRuntime.js +45 -4
  40. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +5 -0
  41. package/dist/esm/lib/runner/FlowChartExecutor.js +74 -7
  42. package/dist/esm/lib/runner/attach.js +6 -2
  43. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  44. package/dist/esm/lib/runner/captureHistory.js +106 -0
  45. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  46. package/dist/esm/lib/runner/checkpoint.js +3 -1
  47. package/dist/esm/lib/runner/index.d.ts +1 -0
  48. package/dist/esm/lib/runner/index.js +1 -1
  49. package/dist/esm/lib/runner/options.d.ts +3 -0
  50. package/dist/esm/lib/runner/options.js +46 -3
  51. package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
  52. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  53. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  54. package/dist/esm/lib/runner/recordSink.js +47 -4
  55. package/dist/esm/lib/runner/snapshot.d.ts +3 -1
  56. package/dist/esm/lib/runner/snapshot.js +35 -4
  57. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  58. package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
  59. package/dist/esm/lib/scope/ScopeFacade.js +4 -2
  60. package/dist/esm/lib/scope/runtime.d.ts +2 -0
  61. package/dist/esm/lib/scope/runtime.js +9 -1
  62. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  63. package/dist/esm/lib/sinks/fileSink.js +8 -2
  64. package/dist/esm/trace.d.ts +2 -0
  65. package/dist/esm/trace.js +2 -1
  66. package/dist/index.js +1 -1
  67. package/dist/lib/capture/absentEntries.js +86 -0
  68. package/dist/lib/capture/checkpointCapture.js +110 -0
  69. package/dist/lib/capture/historyData.js +85 -0
  70. package/dist/lib/capture/historyNote.js +56 -0
  71. package/dist/lib/capture/historyTarget.js +40 -0
  72. package/dist/lib/capture/historyTypes.js +7 -0
  73. package/dist/lib/capture/nativeCoverage.js +146 -0
  74. package/dist/lib/capture/noteShape.js +103 -0
  75. package/dist/lib/capture/readSources.js +83 -0
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
  77. package/dist/lib/engine/types.js +1 -1
  78. package/dist/lib/memory/StageContext.js +110 -14
  79. package/dist/lib/memory/attention.js +12 -5
  80. package/dist/lib/memory/runPolicy.js +2 -1
  81. package/dist/lib/pause/record.js +8 -2
  82. package/dist/lib/pause/types.js +1 -1
  83. package/dist/lib/recorder/ControlDepRecorder.js +23 -1
  84. package/dist/lib/recorder/snapshot.js +7 -2
  85. package/dist/lib/runner/ExecutionRuntime.js +44 -3
  86. package/dist/lib/runner/FlowChartExecutor.js +77 -10
  87. package/dist/lib/runner/attach.js +5 -1
  88. package/dist/lib/runner/captureHistory.js +110 -0
  89. package/dist/lib/runner/checkpoint.js +3 -1
  90. package/dist/lib/runner/index.js +1 -1
  91. package/dist/lib/runner/options.js +46 -3
  92. package/dist/lib/runner/readStoredCapture.js +40 -0
  93. package/dist/lib/runner/recordSink.js +47 -4
  94. package/dist/lib/runner/snapshot.js +35 -4
  95. package/dist/lib/runner/storedCaptureAdmission.js +101 -0
  96. package/dist/lib/scope/ScopeFacade.js +3 -1
  97. package/dist/lib/scope/runtime.js +12 -2
  98. package/dist/lib/sinks/fileSink.js +8 -2
  99. package/dist/trace.js +4 -2
  100. package/dist/types/index.d.ts +3 -0
  101. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  102. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  103. package/dist/types/lib/capture/historyData.d.ts +9 -0
  104. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  105. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  106. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  107. package/dist/types/lib/capture/nativeCoverage.d.ts +69 -0
  108. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  109. package/dist/types/lib/capture/readSources.d.ts +43 -0
  110. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  111. package/dist/types/lib/engine/types.d.ts +3 -0
  112. package/dist/types/lib/memory/StageContext.d.ts +13 -0
  113. package/dist/types/lib/memory/attention.d.ts +2 -0
  114. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  115. package/dist/types/lib/pause/types.d.ts +2 -0
  116. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +12 -1
  117. package/dist/types/lib/recorder/snapshot.d.ts +1 -1
  118. package/dist/types/lib/runner/ExecutionRuntime.d.ts +24 -1
  119. package/dist/types/lib/runner/FlowChartExecutor.d.ts +5 -0
  120. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  121. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  122. package/dist/types/lib/runner/index.d.ts +1 -0
  123. package/dist/types/lib/runner/options.d.ts +3 -0
  124. package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
  125. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  126. package/dist/types/lib/runner/snapshot.d.ts +3 -1
  127. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  128. package/dist/types/lib/scope/runtime.d.ts +2 -0
  129. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  130. package/dist/types/trace.d.ts +2 -0
  131. 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