footprintjs 10.3.0 → 10.5.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 (146) hide show
  1. package/README.md +63 -25
  2. package/dist/esm/index.d.ts +2 -0
  3. package/dist/esm/index.js +1 -1
  4. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  5. package/dist/esm/lib/capture/absentEntries.js +81 -0
  6. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  7. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  8. package/dist/esm/lib/capture/historyData.d.ts +13 -0
  9. package/dist/esm/lib/capture/historyData.js +96 -0
  10. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  11. package/dist/esm/lib/capture/historyNote.js +57 -0
  12. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  13. package/dist/esm/lib/capture/historyTarget.js +35 -0
  14. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  15. package/dist/esm/lib/capture/historyTypes.js +4 -0
  16. package/dist/esm/lib/capture/nativeCoverage.d.ts +20 -7
  17. package/dist/esm/lib/capture/nativeCoverage.js +50 -12
  18. package/dist/esm/lib/capture/nativeSourceAddress.d.ts +3 -0
  19. package/dist/esm/lib/capture/nativeSourceAddress.js +15 -0
  20. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  21. package/dist/esm/lib/capture/noteShape.js +93 -0
  22. package/dist/esm/lib/capture/readSources.d.ts +49 -0
  23. package/dist/esm/lib/capture/readSources.js +99 -0
  24. package/dist/esm/lib/capture/sinkSettlement.d.ts +6 -0
  25. package/dist/esm/lib/capture/sinkSettlement.js +10 -0
  26. package/dist/esm/lib/capture/sourceReadCounts.d.ts +18 -0
  27. package/dist/esm/lib/capture/sourceReadCounts.js +27 -0
  28. package/dist/esm/lib/capture/sourceReferenceBudget.d.ts +10 -0
  29. package/dist/esm/lib/capture/sourceReferenceBudget.js +21 -0
  30. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +3 -0
  31. package/dist/esm/lib/capture/storedReadSourceCounts.js +78 -0
  32. package/dist/esm/lib/capture/storedReadSources.d.ts +4 -0
  33. package/dist/esm/lib/capture/storedReadSources.js +104 -0
  34. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +14 -2
  35. package/dist/esm/lib/engine/handlers/servedSubflowResults.js +13 -2
  36. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  37. package/dist/esm/lib/engine/types.d.ts +4 -0
  38. package/dist/esm/lib/engine/types.js +1 -1
  39. package/dist/esm/lib/memory/StageContext.d.ts +9 -0
  40. package/dist/esm/lib/memory/StageContext.js +96 -9
  41. package/dist/esm/lib/memory/frameTypes.d.ts +3 -0
  42. package/dist/esm/lib/memory/frameTypes.js +1 -1
  43. package/dist/esm/lib/memory/logAddress.d.ts +3 -0
  44. package/dist/esm/lib/memory/logAddress.js +7 -0
  45. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  46. package/dist/esm/lib/memory/runPolicy.js +2 -1
  47. package/dist/esm/lib/pause/record.js +8 -2
  48. package/dist/esm/lib/pause/types.d.ts +2 -0
  49. package/dist/esm/lib/pause/types.js +1 -1
  50. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +19 -3
  51. package/dist/esm/lib/runner/ExecutionRuntime.js +92 -6
  52. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
  53. package/dist/esm/lib/runner/FlowChartExecutor.js +50 -10
  54. package/dist/esm/lib/runner/attach.js +3 -1
  55. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  56. package/dist/esm/lib/runner/captureHistory.js +112 -0
  57. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  58. package/dist/esm/lib/runner/checkpoint.js +3 -1
  59. package/dist/esm/lib/runner/index.d.ts +1 -0
  60. package/dist/esm/lib/runner/index.js +1 -1
  61. package/dist/esm/lib/runner/options.js +42 -3
  62. package/dist/esm/lib/runner/readStoredCapture.d.ts +41 -0
  63. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  64. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  65. package/dist/esm/lib/runner/recordSink.js +48 -13
  66. package/dist/esm/lib/runner/snapshot.js +2 -2
  67. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  68. package/dist/esm/lib/runner/storedCaptureAdmission.js +99 -0
  69. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  70. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  71. package/dist/esm/lib/sinks/fileSink.js +8 -2
  72. package/dist/esm/trace.d.ts +2 -0
  73. package/dist/esm/trace.js +2 -1
  74. package/dist/index.js +1 -1
  75. package/dist/lib/capture/absentEntries.js +86 -0
  76. package/dist/lib/capture/checkpointCapture.js +110 -0
  77. package/dist/lib/capture/historyData.js +104 -0
  78. package/dist/lib/capture/historyNote.js +61 -0
  79. package/dist/lib/capture/historyTarget.js +40 -0
  80. package/dist/lib/capture/historyTypes.js +7 -0
  81. package/dist/lib/capture/nativeCoverage.js +52 -13
  82. package/dist/lib/capture/nativeSourceAddress.js +19 -0
  83. package/dist/lib/capture/noteShape.js +103 -0
  84. package/dist/lib/capture/readSources.js +106 -0
  85. package/dist/lib/capture/sinkSettlement.js +14 -0
  86. package/dist/lib/capture/sourceReadCounts.js +31 -0
  87. package/dist/lib/capture/sourceReferenceBudget.js +25 -0
  88. package/dist/lib/capture/storedReadSourceCounts.js +82 -0
  89. package/dist/lib/capture/storedReadSources.js +108 -0
  90. package/dist/lib/engine/handlers/SubflowExecutor.js +14 -2
  91. package/dist/lib/engine/handlers/servedSubflowResults.js +13 -2
  92. package/dist/lib/engine/types.js +1 -1
  93. package/dist/lib/memory/StageContext.js +96 -9
  94. package/dist/lib/memory/frameTypes.js +1 -1
  95. package/dist/lib/memory/logAddress.js +11 -0
  96. package/dist/lib/memory/runPolicy.js +2 -1
  97. package/dist/lib/pause/record.js +8 -2
  98. package/dist/lib/pause/types.js +1 -1
  99. package/dist/lib/runner/ExecutionRuntime.js +91 -5
  100. package/dist/lib/runner/FlowChartExecutor.js +50 -10
  101. package/dist/lib/runner/attach.js +3 -1
  102. package/dist/lib/runner/captureHistory.js +116 -0
  103. package/dist/lib/runner/checkpoint.js +3 -1
  104. package/dist/lib/runner/index.js +1 -1
  105. package/dist/lib/runner/options.js +42 -3
  106. package/dist/lib/runner/readStoredCapture.js +40 -0
  107. package/dist/lib/runner/recordSink.js +50 -15
  108. package/dist/lib/runner/snapshot.js +2 -2
  109. package/dist/lib/runner/storedCaptureAdmission.js +103 -0
  110. package/dist/lib/scope/ScopeFacade.js +2 -2
  111. package/dist/lib/sinks/fileSink.js +8 -2
  112. package/dist/trace.js +4 -2
  113. package/dist/types/index.d.ts +2 -0
  114. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  115. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  116. package/dist/types/lib/capture/historyData.d.ts +13 -0
  117. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  118. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  119. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  120. package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
  121. package/dist/types/lib/capture/nativeSourceAddress.d.ts +3 -0
  122. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  123. package/dist/types/lib/capture/readSources.d.ts +49 -0
  124. package/dist/types/lib/capture/sinkSettlement.d.ts +6 -0
  125. package/dist/types/lib/capture/sourceReadCounts.d.ts +18 -0
  126. package/dist/types/lib/capture/sourceReferenceBudget.d.ts +10 -0
  127. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +3 -0
  128. package/dist/types/lib/capture/storedReadSources.d.ts +4 -0
  129. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  130. package/dist/types/lib/engine/types.d.ts +4 -0
  131. package/dist/types/lib/memory/StageContext.d.ts +9 -0
  132. package/dist/types/lib/memory/frameTypes.d.ts +3 -0
  133. package/dist/types/lib/memory/logAddress.d.ts +3 -0
  134. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  135. package/dist/types/lib/pause/types.d.ts +2 -0
  136. package/dist/types/lib/runner/ExecutionRuntime.d.ts +19 -3
  137. package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
  138. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  139. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  140. package/dist/types/lib/runner/index.d.ts +1 -0
  141. package/dist/types/lib/runner/readStoredCapture.d.ts +41 -0
  142. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  143. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  144. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  145. package/dist/types/trace.d.ts +2 -0
  146. package/package.json +2 -2
@@ -0,0 +1,96 @@
1
+ /** @internal Fixed diagnostic only; never carries source values, paths or adapter errors. */
2
+ export class HistoryDataError extends Error {
3
+ code;
4
+ constructor(code) {
5
+ super(code === 'too-large' ? 'Capture history data too large' : 'Capture history data refused');
6
+ this.code = code;
7
+ }
8
+ }
9
+ /** Fixed boundary reasons; no untrusted error text leaves the engine. */
10
+ export function historyFailureReason(error, boundary) {
11
+ if (error instanceof HistoryDataError) {
12
+ if (error.code === 'source-validation-limit')
13
+ return 'source-validation-limit';
14
+ if (error.code === 'too-large')
15
+ return `${boundary}-too-large`;
16
+ }
17
+ return `${boundary}-refused`;
18
+ }
19
+ /** @internal Copy bounded inert JSON data without invoking accessors, toJSON or application coercion. */
20
+ export function copyHistoryData(value, maxBytes, onOmitted) {
21
+ let bytes = 0;
22
+ let nodes = 0;
23
+ const ancestors = new Set();
24
+ const encoder = new TextEncoder();
25
+ const charge = (text) => {
26
+ if (text.length > maxBytes - bytes)
27
+ throw new HistoryDataError('too-large');
28
+ bytes += encoder.encode(text).length;
29
+ if (bytes > maxBytes)
30
+ throw new HistoryDataError('too-large');
31
+ };
32
+ const copy = (item, depth, path) => {
33
+ if (++nodes > 100_000 || depth > 256)
34
+ throw new HistoryDataError('invalid-data');
35
+ if (item === null || typeof item === 'string' || typeof item === 'boolean' || typeof item === 'number') {
36
+ if (typeof item === 'number' && (!Number.isFinite(item) || Object.is(item, -0)))
37
+ throw new HistoryDataError('invalid-data');
38
+ charge(JSON.stringify(item));
39
+ return item;
40
+ }
41
+ if (!item || typeof item !== 'object' || ancestors.has(item))
42
+ throw new HistoryDataError('invalid-data');
43
+ const array = Array.isArray(item);
44
+ if (Object.getPrototypeOf(item) !== (array ? Array.prototype : Object.prototype))
45
+ throw new HistoryDataError('invalid-data');
46
+ ancestors.add(item);
47
+ charge(array ? '[]' : '{}');
48
+ const output = array ? [] : {};
49
+ const keys = Object.keys(item);
50
+ if (keys.length > 100_000 - nodes)
51
+ throw new HistoryDataError('invalid-data');
52
+ // Arrays must be dense JSON arrays without extra properties. No silent dropping of holes or expandos.
53
+ if (array && Object.getOwnPropertyDescriptor(item, 'length')?.value !== keys.length)
54
+ throw new HistoryDataError('invalid-data');
55
+ let written = 0;
56
+ for (const key of keys) {
57
+ const property = Object.getOwnPropertyDescriptor(item, key);
58
+ if (!property || !Object.hasOwn(property, 'value'))
59
+ throw new HistoryDataError('invalid-data');
60
+ if (array && key !== String(written))
61
+ throw new HistoryDataError('invalid-data');
62
+ // Ordinary JSON object omission. Arrays/root undefined remain refused; no snapshot-field allow-list.
63
+ if (property.value === undefined && !array) {
64
+ onOmitted?.([...path, key]);
65
+ continue;
66
+ }
67
+ if (written++)
68
+ charge(',');
69
+ if (!array)
70
+ charge(JSON.stringify(key) + ':');
71
+ Object.defineProperty(output, key, {
72
+ value: copy(property.value, depth + 1, [...path, key]),
73
+ enumerable: true,
74
+ writable: true,
75
+ configurable: true,
76
+ });
77
+ }
78
+ ancestors.delete(item);
79
+ return Object.freeze(output);
80
+ };
81
+ return copy(value, 0, []);
82
+ }
83
+ /** @internal Integrity of this JSON representation, not a value fingerprint or an authenticity signature. */
84
+ export async function historyDigest(value) {
85
+ const bytes = new TextEncoder().encode(JSON.stringify(value));
86
+ const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes);
87
+ return Array.from(new Uint8Array(digest), (n) => n.toString(16).padStart(2, '0')).join('');
88
+ }
89
+ /** One field order for both sides of the evidence digest; optional source/absence fields cannot drift. */
90
+ export function historyEvidence(value) {
91
+ const fields = ['capture', 'executionTree', 'recorders', 'readSources', 'absent'];
92
+ if (Object.keys(value).some((key) => key !== 'target' && !fields.includes(key)))
93
+ throw new HistoryDataError('invalid-data');
94
+ return Object.fromEntries(fields.filter((key) => Object.hasOwn(value, key)).map((key) => [key, value[key]]));
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkZBQTZGO0FBQzdGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxLQUFLO0lBQ3BCO0lBQXJCLFlBQXFCLElBQThEO1FBQ2pGLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUQ3RSxTQUFJLEdBQUosSUFBSSxDQUEwRDtJQUVuRixDQUFDO0NBQ0Y7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxRQUFnQztJQUNuRixJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyx5QkFBeUI7WUFBRSxPQUFPLHlCQUF5QixDQUFDO1FBQy9FLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXO1lBQUUsT0FBTyxHQUFHLFFBQVEsWUFBWSxDQUFDO0lBQ2pFLENBQUM7SUFDRCxPQUFPLEdBQUcsUUFBUSxVQUFVLENBQUM7QUFDL0IsQ0FBQztBQUVELHlHQUF5RztBQUN6RyxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsU0FBNkM7SUFFN0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBWSxFQUFRLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxLQUFLO1lB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b25seTsgbmV2ZXIgY2FycmllcyBzb3VyY2UgdmFsdWVzLCBwYXRocyBvciBhZGFwdGVyIGVycm9ycy4gKi9cbmV4cG9ydCBjbGFzcyBIaXN0b3J5RGF0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb2RlOiAndG9vLWxhcmdlJyB8ICdpbnZhbGlkLWRhdGEnIHwgJ3NvdXJjZS12YWxpZGF0aW9uLWxpbWl0Jykge1xuICAgIHN1cGVyKGNvZGUgPT09ICd0b28tbGFyZ2UnID8gJ0NhcHR1cmUgaGlzdG9yeSBkYXRhIHRvbyBsYXJnZScgOiAnQ2FwdHVyZSBoaXN0b3J5IGRhdGEgcmVmdXNlZCcpO1xuICB9XG59XG5cbi8qKiBGaXhlZCBib3VuZGFyeSByZWFzb25zOyBubyB1bnRydXN0ZWQgZXJyb3IgdGV4dCBsZWF2ZXMgdGhlIGVuZ2luZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b3J5RmFpbHVyZVJlYXNvbihlcnJvcjogdW5rbm93biwgYm91bmRhcnk6ICdldmlkZW5jZScgfCAnaGlzdG9yeScpOiBzdHJpbmcge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIaXN0b3J5RGF0YUVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdzb3VyY2UtdmFsaWRhdGlvbi1saW1pdCcpIHJldHVybiAnc291cmNlLXZhbGlkYXRpb24tbGltaXQnO1xuICAgIGlmIChlcnJvci5jb2RlID09PSAndG9vLWxhcmdlJykgcmV0dXJuIGAke2JvdW5kYXJ5fS10b28tbGFyZ2VgO1xuICB9XG4gIHJldHVybiBgJHtib3VuZGFyeX0tcmVmdXNlZGA7XG59XG5cbi8qKiBAaW50ZXJuYWwgQ29weSBib3VuZGVkIGluZXJ0IEpTT04gZGF0YSB3aXRob3V0IGludm9raW5nIGFjY2Vzc29ycywgdG9KU09OIG9yIGFwcGxpY2F0aW9uIGNvZXJjaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlIaXN0b3J5RGF0YShcbiAgdmFsdWU6IHVua25vd24sXG4gIG1heEJ5dGVzOiBudW1iZXIsXG4gIG9uT21pdHRlZD86IChwYXRoOiByZWFkb25seSBzdHJpbmdbXSkgPT4gdm9pZCxcbik6IHVua25vd24ge1xuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgbm9kZXMgPSAwO1xuICBjb25zdCBhbmNlc3RvcnMgPSBuZXcgU2V0PG9iamVjdD4oKTtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBjaGFyZ2UgPSAodGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gbWF4Qnl0ZXMgLSBieXRlcykgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ3Rvby1sYXJnZScpO1xuICAgIGJ5dGVzICs9IGVuY29kZXIuZW5jb2RlKHRleHQpLmxlbmd0aDtcbiAgICBpZiAoYnl0ZXMgPiBtYXhCeXRlcykgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ3Rvby1sYXJnZScpO1xuICB9O1xuICBjb25zdCBjb3B5ID0gKGl0ZW06IHVua25vd24sIGRlcHRoOiBudW1iZXIsIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCsrbm9kZXMgPiAxMDBfMDAwIHx8IGRlcHRoID4gMjU2KSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpdGVtID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInICYmICghTnVtYmVyLmlzRmluaXRlKGl0ZW0pIHx8IE9iamVjdC5pcyhpdGVtLCAtMCkpKVxuICAgICAgICB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgICBjaGFyZ2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuICAgIGlmICghaXRlbSB8fCB0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcgfHwgYW5jZXN0b3JzLmhhcyhpdGVtKSkgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuaXNBcnJheShpdGVtKTtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pICE9PSAoYXJyYXkgPyBBcnJheS5wcm90b3R5cGUgOiBPYmplY3QucHJvdG90eXBlKSlcbiAgICAgIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICBhbmNlc3RvcnMuYWRkKGl0ZW0pO1xuICAgIGNoYXJnZShhcnJheSA/ICdbXScgOiAne30nKTtcbiAgICBjb25zdCBvdXRwdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bltdID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpdGVtKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAxMDBfMDAwIC0gbm9kZXMpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICAvLyBBcnJheXMgbXVzdCBiZSBkZW5zZSBKU09OIGFycmF5cyB3aXRob3V0IGV4dHJhIHByb3BlcnRpZXMuIE5vIHNpbGVudCBkcm9wcGluZyBvZiBob2xlcyBvciBleHBhbmRvcy5cbiAgICBpZiAoYXJyYXkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdGVtLCAnbGVuZ3RoJyk/LnZhbHVlICE9PSBrZXlzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICBsZXQgd3JpdHRlbiA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0ZW0sIGtleSk7XG4gICAgICBpZiAoIXByb3BlcnR5IHx8ICFPYmplY3QuaGFzT3duKHByb3BlcnR5LCAndmFsdWUnKSkgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgICAgaWYgKGFycmF5ICYmIGtleSAhPT0gU3RyaW5nKHdyaXR0ZW4pKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgICAvLyBPcmRpbmFyeSBKU09OIG9iamVjdCBvbWlzc2lvbi4gQXJyYXlzL3Jvb3QgdW5kZWZpbmVkIHJlbWFpbiByZWZ1c2VkOyBubyBzbmFwc2hvdC1maWVsZCBhbGxvdy1saXN0LlxuICAgICAgaWYgKHByb3BlcnR5LnZhbHVlID09PSB1bmRlZmluZWQgJiYgIWFycmF5KSB7XG4gICAgICAgIG9uT21pdHRlZD8uKFsuLi5wYXRoLCBrZXldKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAod3JpdHRlbisrKSBjaGFyZ2UoJywnKTtcbiAgICAgIGlmICghYXJyYXkpIGNoYXJnZShKU09OLnN0cmluZ2lmeShrZXkpICsgJzonKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvdXRwdXQsIGtleSwge1xuICAgICAgICB2YWx1ZTogY29weShwcm9wZXJ0eS52YWx1ZSwgZGVwdGggKyAxLCBbLi4ucGF0aCwga2V5XSksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgYW5jZXN0b3JzLmRlbGV0ZShpdGVtKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvdXRwdXQpO1xuICB9O1xuICByZXR1cm4gY29weSh2YWx1ZSwgMCwgW10pO1xufVxuXG4vKiogQGludGVybmFsIEludGVncml0eSBvZiB0aGlzIEpTT04gcmVwcmVzZW50YXRpb24sIG5vdCBhIHZhbHVlIGZpbmdlcnByaW50IG9yIGFuIGF1dGhlbnRpY2l0eSBzaWduYXR1cmUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGlzdG9yeURpZ2VzdCh2YWx1ZTogdW5rbm93bik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIGNvbnN0IGRpZ2VzdCA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBieXRlcyk7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGRpZ2VzdCksIChuKSA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbn1cblxuLyoqIE9uZSBmaWVsZCBvcmRlciBmb3IgYm90aCBzaWRlcyBvZiB0aGUgZXZpZGVuY2UgZGlnZXN0OyBvcHRpb25hbCBzb3VyY2UvYWJzZW5jZSBmaWVsZHMgY2Fubm90IGRyaWZ0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpc3RvcnlFdmlkZW5jZSh2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGZpZWxkcyA9IFsnY2FwdHVyZScsICdleGVjdXRpb25UcmVlJywgJ3JlY29yZGVycycsICdyZWFkU291cmNlcycsICdhYnNlbnQnXTtcbiAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5zb21lKChrZXkpID0+IGtleSAhPT0gJ3RhcmdldCcgJiYgIWZpZWxkcy5pbmNsdWRlcyhrZXkpKSlcbiAgICB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZmllbGRzLmZpbHRlcigoa2V5KSA9PiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKS5tYXAoKGtleSkgPT4gW2tleSwgdmFsdWVba2V5XV0pKTtcbn1cbiJdfQ==
@@ -0,0 +1,4 @@
1
+ import type { CaptureHistoryTarget } from './historyTypes.js';
2
+ import type { NativeCaptureObservation } from './readSources.js';
3
+ /** @internal Called only after the bounded inert-data copier. Retains native observations, not storage authority. */
4
+ export declare function historyNote(value: unknown, target: CaptureHistoryTarget): NativeCaptureObservation | undefined;
@@ -0,0 +1,57 @@
1
+ import { CAPTURE_BASE_LIMITATIONS, CAPTURE_CHANNEL_STATUSES, isCaptureValue } from './nativeCoverage.js';
2
+ import { copyChannels, copyIdentity, copyLimitations, copyModes, copyObservedChannels, ownData } from './noteShape.js';
3
+ /** @internal Called only after the bounded inert-data copier. Retains native observations, not storage authority. */
4
+ export function historyNote(value, target) {
5
+ if (!value || typeof value !== 'object')
6
+ return undefined;
7
+ const v = value;
8
+ const version = ownData(v, 'version') === 2 ? 2 : 1;
9
+ const identity = copyIdentity(v, true, version);
10
+ const limitations = copyLimitations(v.limitations);
11
+ if (!identity ||
12
+ JSON.stringify(identity) !== JSON.stringify(copyIdentity(target)) ||
13
+ v.scope !== 'root-log' ||
14
+ v.persistence !== 'memory-only' ||
15
+ !v.boundary ||
16
+ !['completed', 'failed', 'paused', 'cancelled'].includes(v.boundary.status) ||
17
+ !v.modes ||
18
+ !v.channels ||
19
+ !limitations ||
20
+ !CAPTURE_BASE_LIMITATIONS.filter((g) => version === 1 || g !== 'read-sources-not-collected').every((g) => limitations.includes(g)) ||
21
+ !copyModes(v.modes, true) ||
22
+ !(version === 1 ? copyChannels(v.channels, true) : copyObservedChannels(v.channels)) ||
23
+ (version === 2 &&
24
+ (!isCaptureValue(v.channels.readSources, CAPTURE_CHANNEL_STATUSES) ||
25
+ Object.keys(v.channels).length !== 5 ||
26
+ limitations.includes('read-sources-not-collected'))))
27
+ return undefined;
28
+ // Reject extra metadata rather than handing arbitrary stored fields out as native facts.
29
+ if (Object.keys(v).some((k) => ![
30
+ 'version',
31
+ 'runId',
32
+ 'scope',
33
+ 'logAddress',
34
+ 'commits',
35
+ 'boundary',
36
+ 'modes',
37
+ 'channels',
38
+ 'persistence',
39
+ 'limitations',
40
+ ].includes(k)))
41
+ return undefined;
42
+ const failure = v.boundary.failure;
43
+ if (Object.keys(v.boundary).some((k) => k !== 'status' && k !== 'failure'))
44
+ return undefined;
45
+ if (failure &&
46
+ (!['failed', 'cancelled'].includes(v.boundary.status) ||
47
+ !['timeout', 'rate-limited', 'server', 'network', 'auth', 'permanent', 'unknown'].includes(failure.category) ||
48
+ Object.keys(failure).some((k) => k !== 'category' && k !== 'stage') ||
49
+ (failure.stage &&
50
+ (Object.keys(failure.stage).some((k) => k !== 'runId' && k !== 'runtimeStageId') ||
51
+ failure.stage.runId !== v.runId ||
52
+ typeof failure.stage.runtimeStageId !== 'string' ||
53
+ failure.stage.runtimeStageId.length > 1024))))
54
+ return undefined;
55
+ return v;
56
+ }
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeU5vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeU5vdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkgscUhBQXFIO0FBQ3JILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYyxFQUFFLE1BQTRCO0lBQ3RFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxHQUFHLEtBQWlDLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsSUFDRSxDQUFDLFFBQVE7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxLQUFLLEtBQUssVUFBVTtRQUN0QixDQUFDLENBQUMsV0FBVyxLQUFLLGFBQWE7UUFDL0IsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUNYLENBQUMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxF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S0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5VGFyZ2V0IH0gZnJvbSAnLi9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgQ0FQVFVSRV9CQVNFX0xJTUlUQVRJT05TLCBDQVBUVVJFX0NIQU5ORUxfU1RBVFVTRVMsIGlzQ2FwdHVyZVZhbHVlIH0gZnJvbSAnLi9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5pbXBvcnQgeyBjb3B5Q2hhbm5lbHMsIGNvcHlJZGVudGl0eSwgY29weUxpbWl0YXRpb25zLCBjb3B5TW9kZXMsIGNvcHlPYnNlcnZlZENoYW5uZWxzLCBvd25EYXRhIH0gZnJvbSAnLi9ub3RlU2hhcGUuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24gfSBmcm9tICcuL3JlYWRTb3VyY2VzLmpzJztcblxuLyoqIEBpbnRlcm5hbCBDYWxsZWQgb25seSBhZnRlciB0aGUgYm91bmRlZCBpbmVydC1kYXRhIGNvcGllci4gUmV0YWlucyBuYXRpdmUgb2JzZXJ2YXRpb25zLCBub3Qgc3RvcmFnZSBhdXRob3JpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9yeU5vdGUodmFsdWU6IHVua25vd24sIHRhcmdldDogQ2FwdHVyZUhpc3RvcnlUYXJnZXQpOiBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb247XG4gIGNvbnN0IHZlcnNpb24gPSBvd25EYXRhKHYsICd2ZXJzaW9uJykgPT09IDIgPyAyIDogMTtcbiAgY29uc3QgaWRlbnRpdHkgPSBjb3B5SWRlbnRpdHkodiwgdHJ1ZSwgdmVyc2lvbik7XG4gIGNvbnN0IGxpbWl0YXRpb25zID0gY29weUxpbWl0YXRpb25zKHYubGltaXRhdGlvbnMpO1xuICBpZiAoXG4gICAgIWlkZW50aXR5IHx8XG4gICAgSlNPTi5zdHJpbmdpZnkoaWRlbnRpdHkpICE9PSBKU09OLnN0cmluZ2lmeShjb3B5SWRlbnRpdHkodGFyZ2V0KSkgfHxcbiAgICB2LnNjb3BlICE9PSAncm9vdC1sb2cnIHx8XG4gICAgdi5wZXJzaXN0ZW5jZSAhPT0gJ21lbW9yeS1vbmx5JyB8fFxuICAgICF2LmJvdW5kYXJ5IHx8XG4gICAgIVsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdwYXVzZWQnLCAnY2FuY2VsbGVkJ10uaW5jbHVkZXModi5ib3VuZGFyeS5zdGF0dXMpIHx8XG4gICAgIXYubW9kZXMgfHxcbiAgICAhdi5jaGFubmVscyB8fFxuICAgICFsaW1pdGF0aW9ucyB8fFxuICAgICFDQVBUVVJFX0JBU0VfTElNSVRBVElPTlMuZmlsdGVyKChnKSA9PiB2ZXJzaW9uID09PSAxIHx8IGcgIT09ICdyZWFkLXNvdXJjZXMtbm90LWNvbGxlY3RlZCcpLmV2ZXJ5KChnKSA9PlxuICAgICAgbGltaXRhdGlvbnMuaW5jbHVkZXMoZyksXG4gICAgKSB8fFxuICAgICFjb3B5TW9kZXModi5tb2RlcywgdHJ1ZSkgfHxcbiAgICAhKHZlcnNpb24gPT09IDEgPyBjb3B5Q2hhbm5lbHModi5jaGFubmVscywgdHJ1ZSkgOiBjb3B5T2JzZXJ2ZWRDaGFubmVscyh2LmNoYW5uZWxzKSkgfHxcbiAgICAodmVyc2lvbiA9PT0gMiAmJlxuICAgICAgKCFpc0NhcHR1cmVWYWx1ZSh2LmNoYW5uZWxzLnJlYWRTb3VyY2VzLCBDQVBUVVJFX0NIQU5ORUxfU1RBVFVTRVMpIHx8XG4gICAgICAgIE9iamVjdC5rZXlzKHYuY2hhbm5lbHMpLmxlbmd0aCAhPT0gNSB8fFxuICAgICAgICBsaW1pdGF0aW9ucy5pbmNsdWRlcygncmVhZC1zb3VyY2VzLW5vdC1jb2xsZWN0ZWQnKSkpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAvLyBSZWplY3QgZXh0cmEgbWV0YWRhdGEgcmF0aGVyIHRoYW4gaGFuZGluZyBhcmJpdHJhcnkgc3RvcmVkIGZpZWxkcyBvdXQgYXMgbmF0aXZlIGZhY3RzLlxuICBpZiAoXG4gICAgT2JqZWN0LmtleXModikuc29tZShcbiAgICAgIChrKSA9PlxuICAgICAgICAhW1xuICAgICAgICAgICd2ZXJzaW9uJyxcbiAgICAgICAgICAncnVuSWQnLFxuICAgICAgICAgICdzY29wZScsXG4gICAgICAgICAgJ2xvZ0FkZHJlc3MnLFxuICAgICAgICAgICdjb21taXRzJyxcbiAgICAgICAgICAnYm91bmRhcnknLFxuICAgICAgICAgICdtb2RlcycsXG4gICAgICAgICAgJ2NoYW5uZWxzJyxcbiAgICAgICAgICAncGVyc2lzdGVuY2UnLFxuICAgICAgICAgICdsaW1pdGF0aW9ucycsXG4gICAgICAgIF0uaW5jbHVkZXMoayksXG4gICAgKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbHVyZSA9IHYuYm91bmRhcnkuZmFpbHVyZTtcbiAgaWYgKE9iamVjdC5rZXlzKHYuYm91bmRhcnkpLnNvbWUoKGspID0+IGsgIT09ICdzdGF0dXMnICYmIGsgIT09ICdmYWlsdXJlJykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICBmYWlsdXJlICYmXG4gICAgKCFbJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXS5pbmNsdWRlcyh2LmJvdW5kYXJ5LnN0YXR1cykgfHxcbiAgICAgICFbJ3RpbWVvdXQnLCAncmF0ZS1saW1pdGVkJywgJ3NlcnZlcicsICduZXR3b3JrJywgJ2F1dGgnLCAncGVybWFuZW50JywgJ3Vua25vd24nXS5pbmNsdWRlcyhmYWlsdXJlLmNhdGVnb3J5KSB8fFxuICAgICAgT2JqZWN0LmtleXMoZmFpbHVyZSkuc29tZSgoaykgPT4gayAhPT0gJ2NhdGVnb3J5JyAmJiBrICE9PSAnc3RhZ2UnKSB8fFxuICAgICAgKGZhaWx1cmUuc3RhZ2UgJiZcbiAgICAgICAgKE9iamVjdC5rZXlzKGZhaWx1cmUuc3RhZ2UpLnNvbWUoKGspID0+IGsgIT09ICdydW5JZCcgJiYgayAhPT0gJ3J1bnRpbWVTdGFnZUlkJykgfHxcbiAgICAgICAgICBmYWlsdXJlLnN0YWdlLnJ1bklkICE9PSB2LnJ1bklkIHx8XG4gICAgICAgICAgdHlwZW9mIGZhaWx1cmUuc3RhZ2UucnVudGltZVN0YWdlSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgZmFpbHVyZS5zdGFnZS5ydW50aW1lU3RhZ2VJZC5sZW5ndGggPiAxMDI0KSkpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdjtcbn1cbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import type { CaptureHistoryReceipt, CaptureHistoryTarget } from './historyTypes.js';
2
+ /** @internal Bounded own-data root identity. Does not execute stored accessors. */
3
+ export declare function copyHistoryTarget(value: unknown): CaptureHistoryTarget | undefined;
4
+ /** @internal Fixed fields only; an adapter cannot leak its additional receipt data into saved metadata. */
5
+ export declare function copyHistoryReceipt(value: unknown, target: CaptureHistoryTarget): CaptureHistoryReceipt | undefined;
@@ -0,0 +1,35 @@
1
+ import { captureIdentifier, copyIdentity, ownData } from './noteShape.js';
2
+ /** @internal Bounded own-data root identity. Does not execute stored accessors. */
3
+ export function copyHistoryTarget(value) {
4
+ try {
5
+ const identity = copyIdentity(value);
6
+ const evidenceId = ownData(value, 'evidenceId');
7
+ const digest = ownData(value, 'digest');
8
+ if (!identity || !captureIdentifier(evidenceId) || typeof digest !== 'string' || !/^[a-f0-9]{64}$/.test(digest))
9
+ return undefined;
10
+ return Object.freeze({
11
+ version: 1,
12
+ evidenceId,
13
+ runId: identity.runId,
14
+ digest,
15
+ logAddress: identity.logAddress,
16
+ commits: identity.commits,
17
+ });
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ }
23
+ /** @internal Fixed fields only; an adapter cannot leak its additional receipt data into saved metadata. */
24
+ export function copyHistoryReceipt(value, target) {
25
+ try {
26
+ const copied = copyHistoryTarget(value);
27
+ if (!copied || ownData(value, 'durability') !== 'durable' || JSON.stringify(copied) !== JSON.stringify(target))
28
+ return undefined;
29
+ return Object.freeze({ ...copied, durability: 'durable' });
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVRhcmdldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9oaXN0b3J5VGFyZ2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsbUZBQW1GO0FBQ25GLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFjO0lBQzlDLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDN0csT0FBTyxTQUFTLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25CLE9BQU8sRUFBRSxDQUFDO1lBQ1YsVUFBVTtZQUNWLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixNQUFNO1lBQ04sVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFVO1lBQy9CLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRCwyR0FBMkc7QUFDM0csTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQWMsRUFBRSxNQUE0QjtJQUM3RSxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDNUcsT0FBTyxTQUFTLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYXB0dXJlSGlzdG9yeVJlY2VpcHQsIENhcHR1cmVIaXN0b3J5VGFyZ2V0IH0gZnJvbSAnLi9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgY2FwdHVyZUlkZW50aWZpZXIsIGNvcHlJZGVudGl0eSwgb3duRGF0YSB9IGZyb20gJy4vbm90ZVNoYXBlLmpzJztcblxuLyoqIEBpbnRlcm5hbCBCb3VuZGVkIG93bi1kYXRhIHJvb3QgaWRlbnRpdHkuIERvZXMgbm90IGV4ZWN1dGUgc3RvcmVkIGFjY2Vzc29ycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5SGlzdG9yeVRhcmdldCh2YWx1ZTogdW5rbm93bik6IENhcHR1cmVIaXN0b3J5VGFyZ2V0IHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpZGVudGl0eSA9IGNvcHlJZGVudGl0eSh2YWx1ZSk7XG4gICAgY29uc3QgZXZpZGVuY2VJZCA9IG93bkRhdGEodmFsdWUsICdldmlkZW5jZUlkJyk7XG4gICAgY29uc3QgZGlnZXN0ID0gb3duRGF0YSh2YWx1ZSwgJ2RpZ2VzdCcpO1xuICAgIGlmICghaWRlbnRpdHkgfHwgIWNhcHR1cmVJZGVudGlmaWVyKGV2aWRlbmNlSWQpIHx8IHR5cGVvZiBkaWdlc3QgIT09ICdzdHJpbmcnIHx8ICEvXlthLWYwLTldezY0fSQvLnRlc3QoZGlnZXN0KSlcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIGV2aWRlbmNlSWQsXG4gICAgICBydW5JZDogaWRlbnRpdHkucnVuSWQsXG4gICAgICBkaWdlc3QsXG4gICAgICBsb2dBZGRyZXNzOiBpZGVudGl0eS5sb2dBZGRyZXNzLFxuICAgICAgY29tbWl0czogaWRlbnRpdHkuY29tbWl0cyxcbiAgICB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogQGludGVybmFsIEZpeGVkIGZpZWxkcyBvbmx5OyBhbiBhZGFwdGVyIGNhbm5vdCBsZWFrIGl0cyBhZGRpdGlvbmFsIHJlY2VpcHQgZGF0YSBpbnRvIHNhdmVkIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlIaXN0b3J5UmVjZWlwdCh2YWx1ZTogdW5rbm93biwgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldCk6IENhcHR1cmVIaXN0b3J5UmVjZWlwdCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgY29waWVkID0gY29weUhpc3RvcnlUYXJnZXQodmFsdWUpO1xuICAgIGlmICghY29waWVkIHx8IG93bkRhdGEodmFsdWUsICdkdXJhYmlsaXR5JykgIT09ICdkdXJhYmxlJyB8fCBKU09OLnN0cmluZ2lmeShjb3BpZWQpICE9PSBKU09OLnN0cmluZ2lmeSh0YXJnZXQpKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLmNvcGllZCwgZHVyYWJpbGl0eTogJ2R1cmFibGUnIH0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,39 @@
1
+ import type { LogAddress } from 'foottrace';
2
+ /** Exact root segment and evidence entry acknowledged by a storage adapter. */
3
+ export interface CaptureHistoryTarget {
4
+ readonly version: 1;
5
+ readonly evidenceId: string;
6
+ readonly runId: string;
7
+ /** SHA-256 of the exact inert JSON evidence (including opted-in source metadata) plus canonical commit log and served starting state. */
8
+ readonly digest: string;
9
+ readonly logAddress: LogAddress;
10
+ readonly commits: {
11
+ readonly from: number;
12
+ readonly to: number;
13
+ };
14
+ }
15
+ /** Adapter assertion about the preceding evidence and end entry, not about this receipt's delivery. */
16
+ export interface CaptureHistoryReceipt extends CaptureHistoryTarget {
17
+ readonly durability: 'durable';
18
+ }
19
+ /** Explicit host-owned durability capability. A normal RecordSink.flush is not this promise. */
20
+ export interface CaptureHistoryOptions {
21
+ /** Resolve only after this target's evidence, commits and end entry are durably stored together. */
22
+ readonly acknowledge: (target: CaptureHistoryTarget, context: {
23
+ readonly signal: AbortSignal;
24
+ }) => Promise<CaptureHistoryReceipt>;
25
+ /** Maximum UTF-8 bytes of the evidence payload and target. Default 1 MiB, maximum 8 MiB. */
26
+ readonly maxBytes?: number;
27
+ /** Total time allowed for evidence delivery, acknowledgement and receipt delivery. Default 10s, maximum 30s. */
28
+ readonly timeoutMs?: number;
29
+ }
30
+ /** Persistence result only. An acknowledged failed/paused prefix is not a completed business workflow. */
31
+ export type CaptureHistoryStatus = {
32
+ readonly status: 'acknowledged';
33
+ } | {
34
+ readonly status: 'unknown';
35
+ readonly reason: string;
36
+ };
37
+ /** @internal Opaque note names; Foottrace keeps them without interpreting engine metadata. */
38
+ export declare const CAPTURE_HISTORY_NOTE = "capture-history";
39
+ export declare const CAPTURE_RECEIPT_NOTE = "capture-receipt";
@@ -0,0 +1,4 @@
1
+ /** @internal Opaque note names; Foottrace keeps them without interpreting engine metadata. */
2
+ export const CAPTURE_HISTORY_NOTE = 'capture-history';
3
+ export const CAPTURE_RECEIPT_NOTE = 'capture-receipt';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2hpc3RvcnlUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ0EsOEZBQThGO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIEV4YWN0IHJvb3Qgc2VnbWVudCBhbmQgZXZpZGVuY2UgZW50cnkgYWNrbm93bGVkZ2VkIGJ5IGEgc3RvcmFnZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeVRhcmdldCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGV2aWRlbmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqIFNIQS0yNTYgb2YgdGhlIGV4YWN0IGluZXJ0IEpTT04gZXZpZGVuY2UgKGluY2x1ZGluZyBvcHRlZC1pbiBzb3VyY2UgbWV0YWRhdGEpIHBsdXMgY2Fub25pY2FsIGNvbW1pdCBsb2cgYW5kIHNlcnZlZCBzdGFydGluZyBzdGF0ZS4gKi9cbiAgcmVhZG9ubHkgZGlnZXN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M6IExvZ0FkZHJlc3M7XG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG59XG5cbi8qKiBBZGFwdGVyIGFzc2VydGlvbiBhYm91dCB0aGUgcHJlY2VkaW5nIGV2aWRlbmNlIGFuZCBlbmQgZW50cnksIG5vdCBhYm91dCB0aGlzIHJlY2VpcHQncyBkZWxpdmVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0IGV4dGVuZHMgQ2FwdHVyZUhpc3RvcnlUYXJnZXQge1xuICByZWFkb25seSBkdXJhYmlsaXR5OiAnZHVyYWJsZSc7XG59XG5cbi8qKiBFeHBsaWNpdCBob3N0LW93bmVkIGR1cmFiaWxpdHkgY2FwYWJpbGl0eS4gQSBub3JtYWwgUmVjb3JkU2luay5mbHVzaCBpcyBub3QgdGhpcyBwcm9taXNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeU9wdGlvbnMge1xuICAvKiogUmVzb2x2ZSBvbmx5IGFmdGVyIHRoaXMgdGFyZ2V0J3MgZXZpZGVuY2UsIGNvbW1pdHMgYW5kIGVuZCBlbnRyeSBhcmUgZHVyYWJseSBzdG9yZWQgdG9nZXRoZXIuICovXG4gIHJlYWRvbmx5IGFja25vd2xlZGdlOiAoXG4gICAgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldCxcbiAgICBjb250ZXh0OiB7IHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWwgfSxcbiAgKSA9PiBQcm9taXNlPENhcHR1cmVIaXN0b3J5UmVjZWlwdD47XG4gIC8qKiBNYXhpbXVtIFVURi04IGJ5dGVzIG9mIHRoZSBldmlkZW5jZSBwYXlsb2FkIGFuZCB0YXJnZXQuIERlZmF1bHQgMSBNaUIsIG1heGltdW0gOCBNaUIuICovXG4gIHJlYWRvbmx5IG1heEJ5dGVzPzogbnVtYmVyO1xuICAvKiogVG90YWwgdGltZSBhbGxvd2VkIGZvciBldmlkZW5jZSBkZWxpdmVyeSwgYWNrbm93bGVkZ2VtZW50IGFuZCByZWNlaXB0IGRlbGl2ZXJ5LiBEZWZhdWx0IDEwcywgbWF4aW11bSAzMHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIFBlcnNpc3RlbmNlIHJlc3VsdCBvbmx5LiBBbiBhY2tub3dsZWRnZWQgZmFpbGVkL3BhdXNlZCBwcmVmaXggaXMgbm90IGEgY29tcGxldGVkIGJ1c2luZXNzIHdvcmtmbG93LiAqL1xuZXhwb3J0IHR5cGUgQ2FwdHVyZUhpc3RvcnlTdGF0dXMgPVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJyB9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICd1bmtub3duJzsgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmcgfTtcblxuLyoqIEBpbnRlcm5hbCBPcGFxdWUgbm90ZSBuYW1lczsgRm9vdHRyYWNlIGtlZXBzIHRoZW0gd2l0aG91dCBpbnRlcnByZXRpbmcgZW5naW5lIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfSElTVE9SWV9OT1RFID0gJ2NhcHR1cmUtaGlzdG9yeSc7XG5leHBvcnQgY29uc3QgQ0FQVFVSRV9SRUNFSVBUX05PVEUgPSAnY2FwdHVyZS1yZWNlaXB0JztcbiJdfQ==
@@ -1,12 +1,24 @@
1
1
  import type { LogAddress } from 'foottrace';
2
2
  import type { TerminalFailureContext } from '../errors/terminalFailure.js';
3
- export type CaptureChannelStatus = 'captured' | 'disabled' | 'partial' | 'failed' | 'unknown';
4
- export type CaptureLimitation = 'tracked-state-only' | 'final-attempt-views' | 'read-sources-not-collected' | 'child-scopes-not-attested' | 'storage-not-attested' | 'resumed-segment' | 'redacted-export' | 'redaction-active' | 'custom-scope' | 'read-retention-failed' | 'commit-retention-failed' | 'attention-omitted' | 'recorder-snapshot-failed' | 'identity-omitted' | 'execution-broken' | 'modes-unavailable';
3
+ /** @internal Shared observation vocabularies; producer, types and checkpoint reader use the same values. */
4
+ export declare const CAPTURE_RETENTION_MODES: readonly ["full", "summary", "off", "unknown"];
5
+ export declare const CAPTURE_COMMIT_VALUE_MODES: readonly ["full", "delta", "unknown"];
6
+ export declare const CAPTURE_PROVENANCE_MODES: readonly ["off", "reads-prefix", "unknown"];
7
+ export declare const CAPTURE_CHANNEL_STATUSES: readonly ["captured", "disabled", "partial", "failed", "unknown"];
8
+ declare const RECORDER_CONTROL_STATUSES: readonly ["captured", "partial", "unknown"];
9
+ export type CaptureChannelStatus = (typeof CAPTURE_CHANNEL_STATUSES)[number];
10
+ /** @internal Exact membership without coercing stored values. */
11
+ export declare function isCaptureValue<T extends string>(value: unknown, vocabulary: readonly T[]): value is T;
12
+ /** @internal Limitations inherent in every version-1 observation. */
13
+ export declare const CAPTURE_BASE_LIMITATIONS: readonly ["tracked-state-only", "final-attempt-views", "read-sources-not-collected", "child-scopes-not-attested", "storage-not-attested"];
14
+ /** @internal One vocabulary for native observation and its stored checkpoint codec. */
15
+ export declare const CAPTURE_LIMITATIONS: readonly ["tracked-state-only", "final-attempt-views", "read-sources-not-collected", "child-scopes-not-attested", "storage-not-attested", "resumed-segment", "redacted-export", "redaction-active", "custom-scope", "read-retention-failed", "commit-retention-failed", "attention-omitted", "recorder-snapshot-failed", "identity-omitted", "execution-broken", "modes-unavailable", "checkpoint-history-not-included", "source-history-not-included"];
16
+ export type CaptureLimitation = (typeof CAPTURE_LIMITATIONS)[number];
5
17
  /** A producer acknowledgement, not engine inspection of a recorder's implementation. */
6
18
  export interface RecorderCaptureAcknowledgement {
7
19
  readonly version: 1;
8
20
  readonly runId: string;
9
- readonly control: 'captured' | 'partial' | 'unknown';
21
+ readonly control: (typeof RECORDER_CONTROL_STATUSES)[number];
10
22
  }
11
23
  /** Engine observation of ONE root-log segment. Never a durable or whole-workflow completeness claim. */
12
24
  export interface NativeCaptureNote {
@@ -24,10 +36,10 @@ export interface NativeCaptureNote {
24
36
  readonly failure?: TerminalFailureContext;
25
37
  };
26
38
  readonly modes: {
27
- readonly readTracking: 'full' | 'summary' | 'off' | 'unknown';
28
- readonly writeTracking: 'full' | 'summary' | 'off' | 'unknown';
29
- readonly commitValues: 'full' | 'delta' | 'unknown';
30
- readonly writeProvenance: 'off' | 'reads-prefix' | 'unknown';
39
+ readonly readTracking: (typeof CAPTURE_RETENTION_MODES)[number];
40
+ readonly writeTracking: (typeof CAPTURE_RETENTION_MODES)[number];
41
+ readonly commitValues: (typeof CAPTURE_COMMIT_VALUE_MODES)[number];
42
+ readonly writeProvenance: (typeof CAPTURE_PROVENANCE_MODES)[number];
31
43
  };
32
44
  readonly channels: {
33
45
  readonly reads: CaptureChannelStatus;
@@ -54,3 +66,4 @@ export declare class NativeCapture {
54
66
  }
55
67
  /** Stored/recorder metadata is untrusted. Read data properties only, never getters or arbitrary strings. */
56
68
  export declare function copyCaptureAcknowledgement(value: unknown): RecorderCaptureAcknowledgement | undefined;
69
+ export {};
@@ -1,27 +1,65 @@
1
+ /** @internal Shared observation vocabularies; producer, types and checkpoint reader use the same values. */
2
+ export const CAPTURE_RETENTION_MODES = Object.freeze(['full', 'summary', 'off', 'unknown']);
3
+ export const CAPTURE_COMMIT_VALUE_MODES = Object.freeze(['full', 'delta', 'unknown']);
4
+ export const CAPTURE_PROVENANCE_MODES = Object.freeze(['off', 'reads-prefix', 'unknown']);
5
+ export const CAPTURE_CHANNEL_STATUSES = Object.freeze([
6
+ 'captured',
7
+ 'disabled',
8
+ 'partial',
9
+ 'failed',
10
+ 'unknown',
11
+ ]);
12
+ // Recorder acknowledgements are narrower than the native per-channel observation vocabulary.
13
+ const RECORDER_CONTROL_STATUSES = Object.freeze(['captured', 'partial', 'unknown']);
14
+ /** @internal Exact membership without coercing stored values. */
15
+ export function isCaptureValue(value, vocabulary) {
16
+ return typeof value === 'string' && vocabulary.includes(value);
17
+ }
18
+ /** @internal Limitations inherent in every version-1 observation. */
19
+ export const CAPTURE_BASE_LIMITATIONS = Object.freeze([
20
+ 'tracked-state-only',
21
+ 'final-attempt-views',
22
+ 'read-sources-not-collected',
23
+ 'child-scopes-not-attested',
24
+ 'storage-not-attested',
25
+ ]);
26
+ /** @internal One vocabulary for native observation and its stored checkpoint codec. */
27
+ export const CAPTURE_LIMITATIONS = Object.freeze([
28
+ ...CAPTURE_BASE_LIMITATIONS,
29
+ 'resumed-segment',
30
+ 'redacted-export',
31
+ 'redaction-active',
32
+ 'custom-scope',
33
+ 'read-retention-failed',
34
+ 'commit-retention-failed',
35
+ 'attention-omitted',
36
+ 'recorder-snapshot-failed',
37
+ 'identity-omitted',
38
+ 'execution-broken',
39
+ 'modes-unavailable',
40
+ 'checkpoint-history-not-included',
41
+ 'source-history-not-included',
42
+ ]);
1
43
  /** @internal Bounded facts collected at native funnels; no values, key names, recorder discovery or tree walk. */
2
44
  export class NativeCapture {
3
45
  runId;
4
46
  logAddress;
5
47
  from;
6
- gaps = new Set([
7
- 'tracked-state-only',
8
- 'final-attempt-views',
9
- 'read-sources-not-collected',
10
- 'child-scopes-not-attested',
11
- 'storage-not-attested',
12
- ]);
48
+ gaps = new Set(CAPTURE_BASE_LIMITATIONS);
13
49
  boundary = { status: 'running' };
14
50
  modes;
15
51
  constructor(runId, logAddress, from, modes) {
16
52
  this.runId = runId;
17
53
  this.logAddress = logAddress;
18
54
  this.from = from;
19
- const retention = (value) => value === 'full' || value === 'summary' || value === 'off' ? value : 'unknown';
55
+ const retention = (value) => (isCaptureValue(value, CAPTURE_RETENTION_MODES) ? value : 'unknown');
20
56
  this.modes = {
21
57
  readTracking: retention(modes.readTracking),
22
58
  writeTracking: retention(modes.writeTracking),
23
- commitValues: modes.commitValues === 'full' || modes.commitValues === 'delta' ? modes.commitValues : 'unknown',
24
- writeProvenance: modes.writeProvenance === 'off' || modes.writeProvenance === 'reads-prefix' ? modes.writeProvenance : 'unknown',
59
+ commitValues: isCaptureValue(modes.commitValues, CAPTURE_COMMIT_VALUE_MODES) ? modes.commitValues : 'unknown',
60
+ writeProvenance: isCaptureValue(modes.writeProvenance, CAPTURE_PROVENANCE_MODES)
61
+ ? modes.writeProvenance
62
+ : 'unknown',
25
63
  };
26
64
  if (Object.values(this.modes).includes('unknown'))
27
65
  this.limit('modes-unavailable');
@@ -91,7 +129,7 @@ export function copyCaptureAcknowledgement(value) {
91
129
  typeof runId !== 'string' ||
92
130
  runId.length === 0 ||
93
131
  runId.length > 2048 ||
94
- !['captured', 'partial', 'unknown'].includes(control))
132
+ !isCaptureValue(control, RECORDER_CONTROL_STATUSES))
95
133
  return undefined;
96
134
  return Object.freeze({ version, runId, control });
97
135
  }
@@ -99,4 +137,4 @@ export function copyCaptureAcknowledgement(value) {
99
137
  return undefined;
100
138
  }
101
139
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlQ292ZXJhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvbmF0aXZlQ292ZXJhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkRBLGtIQUFrSDtBQUNsSCxNQUFNLE9BQU8sYUFBYTtJQWFiO0lBQ0E7SUFDQTtJQWRNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBb0I7UUFDakQsb0JBQW9CO1FBQ3BCLHFCQUFxQjtRQUNyQiw0QkFBNEI7UUFDNUIsMkJBQTJCO1FBQzNCLHNCQUFzQjtLQUN2QixDQUFDLENBQUM7SUFFSyxRQUFRLEdBQWtDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3ZELEtBQUssQ0FBNkI7SUFFbkQsWUFDVyxLQUFhLEVBQ2IsVUFBc0IsRUFDdEIsSUFBWSxFQUNyQixLQUFpQztRQUh4QixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBR3JCLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FDbkMsS0FBSyxLQUFLLE1BQU0sSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxZQUFZLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDM0MsYUFBYSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO1lBQzdDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM5RyxlQUFlLEVBQ2IsS0FBSyxDQUFD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QUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQ0UsT0FBTyxLQUFLLENBQUM7WUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNsQixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUk7WUFDbkIsQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUVyRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBUZXJtaW5hbEZhaWx1cmVDb250ZXh0IH0gZnJvbSAnLi4vZXJyb3JzL3Rlcm1pbmFsRmFpbHVyZS5qcyc7XG5cbmV4cG9ydCB0eXBlIENhcHR1cmVDaGFubmVsU3RhdHVzID0gJ2NhcHR1cmVkJyB8ICdkaXNhYmxlZCcgfCAncGFydGlhbCcgfCAnZmFpbGVkJyB8ICd1bmtub3duJztcbmV4cG9ydCB0eXBlIENhcHR1cmVMaW1pdGF0aW9uID1cbiAgfCAndHJhY2tlZC1zdGF0ZS1vbmx5J1xuICB8ICdmaW5hbC1hdHRlbXB0LXZpZXdzJ1xuICB8ICdyZWFkLXNvdXJjZXMtbm90LWNvbGxlY3RlZCdcbiAgfCAnY2hpbGQtc2NvcGVzLW5vdC1hdHRlc3RlZCdcbiAgfCAnc3RvcmFnZS1ub3QtYXR0ZXN0ZWQnXG4gIHwgJ3Jlc3VtZWQtc2VnbWVudCdcbiAgfCAncmVkYWN0ZWQtZXhwb3J0J1xuICB8ICdyZWRhY3Rpb24tYWN0aXZlJ1xuICB8ICdjdXN0b20tc2NvcGUnXG4gIHwgJ3JlYWQtcmV0ZW50aW9uLWZhaWxlZCdcbiAgfCAnY29tbWl0LXJldGVudGlvbi1mYWlsZWQnXG4gIHwgJ2F0dGVudGlvbi1vbWl0dGVkJ1xuICB8ICdyZWNvcmRlci1zbmFwc2hvdC1mYWlsZWQnXG4gIHwgJ2lkZW50aXR5LW9taXR0ZWQnXG4gIHwgJ2V4ZWN1dGlvbi1icm9rZW4nXG4gIHwgJ21vZGVzLXVuYXZhaWxhYmxlJztcblxuLyoqIEEgcHJvZHVjZXIgYWNrbm93bGVkZ2VtZW50LCBub3QgZW5naW5lIGluc3BlY3Rpb24gb2YgYSByZWNvcmRlcidzIGltcGxlbWVudGF0aW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRlckNhcHR1cmVBY2tub3dsZWRnZW1lbnQge1xuICByZWFkb25seSB2ZXJzaW9uOiAxO1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBjb250cm9sOiAnY2FwdHVyZWQnIHwgJ3BhcnRpYWwnIHwgJ3Vua25vd24nO1xufVxuXG4vKiogRW5naW5lIG9ic2VydmF0aW9uIG9mIE9ORSByb290LWxvZyBzZWdtZW50LiBOZXZlciBhIGR1cmFibGUgb3Igd2hvbGUtd29ya2Zsb3cgY29tcGxldGVuZXNzIGNsYWltLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRpdmVDYXB0dXJlTm90ZSB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiAncm9vdC1sb2cnO1xuICByZWFkb25seSBsb2dBZGRyZXNzOiBMb2dBZGRyZXNzO1xuICAvKiogSGFsZi1vcGVuIG9mZnNldHMgaW4gdGhpcyBsb2cuIEEgc2FtZS1leGVjdXRvciByZXN1bWUgc3RhcnRzIGF0IHRoZSBwcmV2aW91cyBlbmQuICovXG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG4gIHJlYWRvbmx5IGJvdW5kYXJ5OiB7XG4gICAgcmVhZG9ubHkgc3RhdHVzOiAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdwYXVzZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJztcbiAgICByZWFkb25seSBmYWlsdXJlPzogVGVybWluYWxGYWlsdXJlQ29udGV4dDtcbiAgfTtcbiAgcmVhZG9ubHkgbW9kZXM6IHtcbiAgICByZWFkb25seSByZWFkVHJhY2tpbmc6ICdmdWxsJyB8ICdzdW1tYXJ5JyB8ICdvZmYnIHwgJ3Vua25vd24nO1xuICAgIHJlYWRvbmx5IHdyaXRlVHJhY2tpbmc6ICdmdWxsJyB8ICdzdW1tYXJ5JyB8ICdvZmYnIHwgJ3Vua25vd24nO1xuICAgIHJlYWRvbmx5IGNvbW1pdFZhbHVlczogJ2Z1bGwnIHwgJ2RlbHRhJyB8ICd1bmtub3duJztcbiAgICByZWFkb25seSB3cml0ZVByb3ZlbmFuY2U6ICdvZmYnIHwgJ3JlYWRzLXByZWZpeCcgfCAndW5rbm93bic7XG4gIH07XG4gIHJlYWRvbmx5IGNoYW5uZWxzOiB7XG4gICAgcmVhZG9ubHkgcmVhZHM6IENhcHR1cmVDaGFubmVsU3RhdHVzO1xuICAgIHJlYWRvbmx5IHdyaXRlczogQ2FwdHVyZUNoYW5uZWxTdGF0dXM7XG4gICAgcmVhZG9ubHkgYXR0ZW50aW9uOiBDYXB0dXJlQ2hhbm5lbFN0YXR1cztcbiAgICByZWFkb25seSBjb250cm9sOiBDYXB0dXJlQ2hhbm5lbFN0YXR1cztcbiAgICByZWFkb25seSByZWFkU291cmNlczogJ25vdC1jb2xsZWN0ZWQnO1xuICB9O1xuICByZWFkb25seSBwZXJzaXN0ZW5jZTogJ21lbW9yeS1vbmx5JztcbiAgcmVhZG9ubHkgbGltaXRhdGlvbnM6IHJlYWRvbmx5IENhcHR1cmVMaW1pdGF0aW9uW107XG59XG5cbi8qKiBAaW50ZXJuYWwgQm91bmRlZCBmYWN0cyBjb2xsZWN0ZWQgYXQgbmF0aXZlIGZ1bm5lbHM7IG5vIHZhbHVlcywga2V5IG5hbWVzLCByZWNvcmRlciBkaXNjb3Zlcnkgb3IgdHJlZSB3YWxrLiAqL1xuZXhwb3J0IGNsYXNzIE5hdGl2ZUNhcHR1cmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGdhcHMgPSBuZXcgU2V0PENhcHR1cmVMaW1pdGF0aW9uPihbXG4gICAgJ3RyYWNrZWQtc3RhdGUtb25seScsXG4gICAgJ2ZpbmFsLWF0dGVtcHQtdmlld3MnLFxuICAgICdyZWFkLXNvdXJjZXMtbm90LWNvbGxlY3RlZCcsXG4gICAgJ2NoaWxkLXNjb3Blcy1ub3QtYXR0ZXN0ZWQnLFxuICAgICdzdG9yYWdlLW5vdC1hdHRlc3RlZCcsXG4gIF0pO1xuXG4gIHByaXZhdGUgYm91bmRhcnk6IE5hdGl2ZUNhcHR1cmVOb3RlWydib3VuZGFyeSddID0geyBzdGF0dXM6ICdydW5uaW5nJyB9O1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZGVzOiBOYXRpdmVDYXB0dXJlTm90ZVsnbW9kZXMnXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBydW5JZDogc3RyaW5nLFxuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M6IExvZ0FkZHJlc3MsXG4gICAgcmVhZG9ubHkgZnJvbTogbnVtYmVyLFxuICAgIG1vZGVzOiBOYXRpdmVDYXB0dXJlTm90ZVsnbW9kZXMnXSxcbiAgKSB7XG4gICAgY29uc3QgcmV0ZW50aW9uID0gKHZhbHVlOiB1bmtub3duKSA9PlxuICAgICAgdmFsdWUgPT09ICdmdWxsJyB8fCB2YWx1ZSA9PT0gJ3N1bW1hcnknIHx8IHZhbHVlID09PSAnb2ZmJyA/IHZhbHVlIDogJ3Vua25vd24nO1xuICAgIHRoaXMubW9kZXMgPSB7XG4gICAgICByZWFkVHJhY2tpbmc6IHJldGVudGlvbihtb2Rlcy5yZWFkVHJhY2tpbmcpLFxuICAgICAgd3JpdGVUcmFja2luZzogcmV0ZW50aW9uKG1vZGVzLndyaXRlVHJhY2tpbmcpLFxuICAgICAgY29tbWl0VmFsdWVzOiBtb2Rlcy5jb21taXRWYWx1ZXMgPT09ICdmdWxsJyB8fCBtb2Rlcy5jb21taXRWYWx1ZXMgPT09ICdkZWx0YScgPyBtb2Rlcy5jb21taXRWYWx1ZXMgOiAndW5rbm93bicsXG4gICAgICB3cml0ZVByb3ZlbmFuY2U6XG4gICAgICAgIG1vZGVzLndyaXRlUHJvdmVuYW5jZSA9PT0gJ29mZicgfHwgbW9kZXMud3JpdGVQcm92ZW5hbmNlID09PSAncmVhZHMtcHJlZml4JyA/IG1vZGVzLndyaXRlUHJvdmVuYW5jZSA6ICd1bmtub3duJyxcbiAgICB9O1xuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMubW9kZXMpLmluY2x1ZGVzKCd1bmtub3duJykpIHRoaXMubGltaXQoJ21vZGVzLXVuYXZhaWxhYmxlJyk7XG4gIH1cblxuICBsaW1pdChnYXA6IENhcHR1cmVMaW1pdGF0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5nYXBzLmFkZChnYXApO1xuICB9XG5cbiAgZW5kKHN0YXR1czogTmF0aXZlQ2FwdHVyZU5vdGVbJ2JvdW5kYXJ5J11bJ3N0YXR1cyddLCBmYWlsdXJlPzogVGVybWluYWxGYWlsdXJlQ29udGV4dCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJvdW5kYXJ5LnN0YXR1cyAhPT0gJ3J1bm5pbmcnKSByZXR1cm47XG4gICAgaWYgKGZhaWx1cmU/LnN0YWdlICYmIGZhaWx1cmUuc3RhZ2UucnVudGltZVN0YWdlSWQubGVuZ3RoID4gMTAyNCkge1xuICAgICAgdGhpcy5saW1pdCgnaWRlbnRpdHktb21pdHRlZCcpO1xuICAgICAgZmFpbHVyZSA9IE9iamVjdC5mcmVlemUoeyBjYXRlZ29yeTogZmFpbHVyZS5jYXRlZ29yeSB9KTtcbiAgICB9XG4gICAgdGhpcy5ib3VuZGFyeSA9IHsgc3RhdHVzLCAuLi4oZmFpbHVyZSAmJiB7IGZhaWx1cmUgfSkgfTtcbiAgfVxuXG4gIHNuYXBzaG90KHRvOiBudW1iZXIsIGNvbnRyb2w6IENhcHR1cmVDaGFubmVsU3RhdHVzID0gJ3Vua25vd24nLCByZWRhY3RlZCA9IGZhbHNlKTogTmF0aXZlQ2FwdHVyZU5vdGUge1xuICAgIGNvbnN0IGdhcHMgPSBuZXcgU2V0KHRoaXMuZ2Fwcyk7XG4gICAgaWYgKHJlZGFjdGVkKSBnYXBzLmFkZCgncmVkYWN0ZWQtZXhwb3J0Jyk7XG4gICAgY29uc3QgZmFpbGVkID0gZ2Fwcy5oYXMoJ2NvbW1pdC1yZXRlbnRpb24tZmFpbGVkJyk7XG4gICAgY29uc3QgY3VzdG9tID0gZ2Fwcy5oYXMoJ2N1c3RvbS1zY29wZScpIHx8IGdhcHMuaGFzKCdtb2Rlcy11bmF2YWlsYWJsZScpO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgIHZlcnNpb246IDEsXG4gICAgICBydW5JZDogdGhpcy5ydW5JZCxcbiAgICAgIHNjb3BlOiAncm9vdC1sb2cnLFxuICAgICAgbG9nQWRkcmVzczogT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGxvZ1J1bklkOiB0aGlzLmxvZ0FkZHJlc3MubG9nUnVuSWQsXG4gICAgICAgIGRyaWxsUGF0aDogT2JqZWN0LmZyZWV6ZShbLi4udGhpcy5sb2dBZGRyZXNzLmRyaWxsUGF0aF0pLFxuICAgICAgfSksXG4gICAgICBjb21taXRzOiBPYmplY3QuZnJlZXplKHsgZnJvbTogdGhpcy5mcm9tLCB0byB9KSxcbiAgICAgIGJvdW5kYXJ5OiBPYmplY3QuZnJlZXplKHsgLi4udGhpcy5ib3VuZGFyeSB9KSxcbiAgICAgIG1vZGVzOiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgcmVhZFRyYWNraW5nOiB0aGlzLm1vZGVzLnJlYWRUcmFja2luZyxcbiAgICAgICAgd3JpdGVUcmFja2luZzogdGhpcy5tb2Rlcy53cml0ZVRyYWNraW5nLFxuICAgICAgICBjb21taXRWYWx1ZXM6IHRoaXMubW9kZXMuY29tbWl0VmFsdWVzLFxuICAgICAgICB3cml0ZVByb3ZlbmFuY2U6IHRoaXMubW9kZXMud3JpdGVQcm92ZW5hbmNlLFxuICAgICAgfSksXG4gICAgICBjaGFubmVsczogT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIHJlYWRzOlxuICAgICAgICAgIHRoaXMubW9kZXMucmVhZFRyYWNraW5nID09PSAnb2ZmJ1xuICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICA6IGdhcHMuaGFzKCdyZWFkLXJldGVudGlvbi1mYWlsZWQnKVxuICAgICAgICAgICAgPyAnZmFpbGVkJ1xuICAgICAgICAgICAgOiBjdXN0b21cbiAgICAgICAgICAgID8gJ3Vua25vd24nXG4gICAgICAgICAgICA6ICdjYXB0dXJlZCcsXG4gICAgICAgIHdyaXRlczogdGhpcy5tb2Rlcy53cml0ZVRyYWNraW5nID09PSAnb2ZmJyA/ICdkaXNhYmxlZCcgOiBmYWlsZWQgPyAnZmFpbGVkJyA6IGN1c3RvbSA/ICd1bmtub3duJyA6ICdjYXB0dXJlZCcsXG4gICAgICAgIGF0dGVudGlvbjogZmFpbGVkIHx8IGdhcHMuaGFzKCdhdHRlbnRpb24tb21pdHRlZCcpID8gJ3BhcnRpYWwnIDogY3VzdG9tID8gJ3Vua25vd24nIDogJ2NhcHR1cmVkJyxcbiAgICAgICAgY29udHJvbDogZ2Fwcy5oYXMoJ3JlY29yZGVyLXNuYXBzaG90LWZhaWxlZCcpID8gJ2ZhaWxlZCcgOiBjb250cm9sLFxuICAgICAgICByZWFkU291cmNlczogJ25vdC1jb2xsZWN0ZWQnLFxuICAgICAgfSksXG4gICAgICBwZXJzaXN0ZW5jZTogJ21lbW9yeS1vbmx5JyxcbiAgICAgIGxpbWl0YXRpb25zOiBPYmplY3QuZnJlZXplKFsuLi5nYXBzXSksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqIFN0b3JlZC9yZWNvcmRlciBtZXRhZGF0YSBpcyB1bnRydXN0ZWQuIFJlYWQgZGF0YSBwcm9wZXJ0aWVzIG9ubHksIG5ldmVyIGdldHRlcnMgb3IgYXJiaXRyYXJ5IHN0cmluZ3MuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUNhcHR1cmVBY2tub3dsZWRnZW1lbnQodmFsdWU6IHVua25vd24pOiBSZWNvcmRlckNhcHR1cmVBY2tub3dsZWRnZW1lbnQgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpICE9PSBPYmplY3QucHJvdG90eXBlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGRhdGEgPSAoa2V5OiBzdHJpbmcpID0+IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsIGtleSk/LnZhbHVlO1xuICAgIGNvbnN0IHZlcnNpb24gPSBkYXRhKCd2ZXJzaW9uJyk7XG4gICAgY29uc3QgcnVuSWQgPSBkYXRhKCdydW5JZCcpO1xuICAgIGNvbnN0IGNvbnRyb2wgPSBkYXRhKCdjb250cm9sJyk7XG4gICAgaWYgKFxuICAgICAgdmVyc2lvbiAhPT0gMSB8fFxuICAgICAgdHlwZW9mIHJ1bklkICE9PSAnc3RyaW5nJyB8fFxuICAgICAgcnVuSWQubGVuZ3RoID09PSAwIHx8XG4gICAgICBydW5JZC5sZW5ndGggPiAyMDQ4IHx8XG4gICAgICAhWydjYXB0dXJlZCcsICdwYXJ0aWFsJywgJ3Vua25vd24nXS5pbmNsdWRlcyhjb250cm9sKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyB2ZXJzaW9uLCBydW5JZCwgY29udHJvbCB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlQ292ZXJhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvbmF0aXZlQ292ZXJhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsNEdBQTRHO0FBQzVHLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQVUsQ0FBQyxDQUFDO0FBQ3JHLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBVSxDQUFDLENBQUM7QUFDL0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxDQUFVLENBQUMsQ0FBQztBQUNuRyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3BELFVBQVU7SUFDVixVQUFVO0lBQ1YsU0FBUztJQUNULFFBQVE7SUFDUixTQUFTO0NBQ0QsQ0FBQyxDQUFDO0FBQ1osNkZBQTZGO0FBQzdGLE1BQU0seUJBQXlCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFVLENBQUMsQ0FBQztBQUc3RixpRUFBaUU7QUFDakUsTUFBTSxVQUFVLGNBQWMsQ0FBbUIsS0FBYyxFQUFFLFVBQXdCO0lBQ3ZGLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFLLFVBQWdDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUFDRCxxRUFBcUU7QUFDckUsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNwRCxvQkFBb0I7SUFDcEIscUJB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LEtBQUssQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDL0csTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ2pGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQ0UsT0FBTyxLQUFLLENBQUM7WUFDYixPQUFPLEtBQUssS0FBSyxRQUFRO1lBQ3pCLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUNsQixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUk7WUFDbkIsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHlCQUF5QixDQUFDO1lBRW5ELE9BQU8sU0FBUyxDQUFDO1FBQ25CLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfSBmcm9tICcuLi9lcnJvcnMvdGVybWluYWxGYWlsdXJlLmpzJztcblxuLyoqIEBpbnRlcm5hbCBTaGFyZWQgb2JzZXJ2YXRpb24gdm9jYWJ1bGFyaWVzOyBwcm9kdWNlciwgdHlwZXMgYW5kIGNoZWNrcG9pbnQgcmVhZGVyIHVzZSB0aGUgc2FtZSB2YWx1ZXMuICovXG5leHBvcnQgY29uc3QgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMgPSBPYmplY3QuZnJlZXplKFsnZnVsbCcsICdzdW1tYXJ5JywgJ29mZicsICd1bmtub3duJ10gYXMgY29uc3QpO1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfQ09NTUlUX1ZBTFVFX01PREVTID0gT2JqZWN0LmZyZWV6ZShbJ2Z1bGwnLCAnZGVsdGEnLCAndW5rbm93biddIGFzIGNvbnN0KTtcbmV4cG9ydCBjb25zdCBDQVBUVVJFX1BST1ZFTkFOQ0VfTU9ERVMgPSBPYmplY3QuZnJlZXplKFsnb2ZmJywgJ3JlYWRzLXByZWZpeCcsICd1bmtub3duJ10gYXMgY29uc3QpO1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfQ0hBTk5FTF9TVEFUVVNFUyA9IE9iamVjdC5mcmVlemUoW1xuICAnY2FwdHVyZWQnLFxuICAnZGlzYWJsZWQnLFxuICAncGFydGlhbCcsXG4gICdmYWlsZWQnLFxuICAndW5rbm93bicsXG5dIGFzIGNvbnN0KTtcbi8vIFJlY29yZGVyIGFja25vd2xlZGdlbWVudHMgYXJlIG5hcnJvd2VyIHRoYW4gdGhlIG5hdGl2ZSBwZXItY2hhbm5lbCBvYnNlcnZhdGlvbiB2b2NhYnVsYXJ5LlxuY29uc3QgUkVDT1JERVJfQ09OVFJPTF9TVEFUVVNFUyA9IE9iamVjdC5mcmVlemUoWydjYXB0dXJlZCcsICdwYXJ0aWFsJywgJ3Vua25vd24nXSBhcyBjb25zdCk7XG5leHBvcnQgdHlwZSBDYXB0dXJlQ2hhbm5lbFN0YXR1cyA9ICh0eXBlb2YgQ0FQVFVSRV9DSEFOTkVMX1NUQVRVU0VTKVtudW1iZXJdO1xuXG4vKiogQGludGVybmFsIEV4YWN0IG1lbWJlcnNoaXAgd2l0aG91dCBjb2VyY2luZyBzdG9yZWQgdmFsdWVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FwdHVyZVZhbHVlPFQgZXh0ZW5kcyBzdHJpbmc+KHZhbHVlOiB1bmtub3duLCB2b2NhYnVsYXJ5OiByZWFkb25seSBUW10pOiB2YWx1ZSBpcyBUIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgKHZvY2FidWxhcnkgYXMgcmVhZG9ubHkgc3RyaW5nW10pLmluY2x1ZGVzKHZhbHVlKTtcbn1cbi8qKiBAaW50ZXJuYWwgTGltaXRhdGlvbnMgaW5oZXJlbnQgaW4gZXZlcnkgdmVyc2lvbi0xIG9ic2VydmF0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUyA9IE9iamVjdC5mcmVlemUoW1xuICAndHJhY2tlZC1zdGF0ZS1vbmx5JyxcbiAgJ2ZpbmFsLWF0dGVtcHQtdmlld3MnLFxuICAncmVhZC1zb3VyY2VzLW5vdC1jb2xsZWN0ZWQnLFxuICAnY2hpbGQtc2NvcGVzLW5vdC1hdHRlc3RlZCcsXG4gICdzdG9yYWdlLW5vdC1hdHRlc3RlZCcsXG5dIGFzIGNvbnN0KTtcblxuLyoqIEBpbnRlcm5hbCBPbmUgdm9jYWJ1bGFyeSBmb3IgbmF0aXZlIG9ic2VydmF0aW9uIGFuZCBpdHMgc3RvcmVkIGNoZWNrcG9pbnQgY29kZWMuICovXG5leHBvcnQgY29uc3QgQ0FQVFVSRV9MSU1JVEFUSU9OUyA9IE9iamVjdC5mcmVlemUoW1xuICAuLi5DQVBUVVJFX0JBU0VfTElNSVRBVElPTlMsXG4gICdyZXN1bWVkLXNlZ21lbnQnLFxuICAncmVkYWN0ZWQtZXhwb3J0JyxcbiAgJ3JlZGFjdGlvbi1hY3RpdmUnLFxuICAnY3VzdG9tLXNjb3BlJyxcbiAgJ3JlYWQtcmV0ZW50aW9uLWZhaWxlZCcsXG4gICdjb21taXQtcmV0ZW50aW9uLWZhaWxlZCcsXG4gICdhdHRlbnRpb24tb21pdHRlZCcsXG4gICdyZWNvcmRlci1zbmFwc2hvdC1mYWlsZWQnLFxuICAnaWRlbnRpdHktb21pdHRlZCcsXG4gICdleGVjdXRpb24tYnJva2VuJyxcbiAgJ21vZGVzLXVuYXZhaWxhYmxlJyxcbiAgJ2NoZWNrcG9pbnQtaGlzdG9yeS1ub3QtaW5jbHVkZWQnLFxuICAnc291cmNlLWhpc3Rvcnktbm90LWluY2x1ZGVkJyxcbl0gYXMgY29uc3QpO1xuZXhwb3J0IHR5cGUgQ2FwdHVyZUxpbWl0YXRpb24gPSAodHlwZW9mIENBUFRVUkVfTElNSVRBVElPTlMpW251bWJlcl07XG5cbi8qKiBBIHByb2R1Y2VyIGFja25vd2xlZGdlbWVudCwgbm90IGVuZ2luZSBpbnNwZWN0aW9uIG9mIGEgcmVjb3JkZXIncyBpbXBsZW1lbnRhdGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJDYXB0dXJlQWNrbm93bGVkZ2VtZW50IHtcbiAgcmVhZG9ubHkgdmVyc2lvbjogMTtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udHJvbDogKHR5cGVvZiBSRUNPUkRFUl9DT05UUk9MX1NUQVRVU0VTKVtudW1iZXJdO1xufVxuXG4vKiogRW5naW5lIG9ic2VydmF0aW9uIG9mIE9ORSByb290LWxvZyBzZWdtZW50LiBOZXZlciBhIGR1cmFibGUgb3Igd2hvbGUtd29ya2Zsb3cgY29tcGxldGVuZXNzIGNsYWltLiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYXRpdmVDYXB0dXJlTm90ZSB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNjb3BlOiAncm9vdC1sb2cnO1xuICByZWFkb25seSBsb2dBZGRyZXNzOiBMb2dBZGRyZXNzO1xuICAvKiogSGFsZi1vcGVuIG9mZnNldHMgaW4gdGhpcyBsb2cuIEEgc2FtZS1leGVjdXRvciByZXN1bWUgc3RhcnRzIGF0IHRoZSBwcmV2aW91cyBlbmQuICovXG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG4gIHJlYWRvbmx5IGJvdW5kYXJ5OiB7XG4gICAgcmVhZG9ubHkgc3RhdHVzOiAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdwYXVzZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJztcbiAgICByZWFkb25seSBmYWlsdXJlPzogVGVybWluYWxGYWlsdXJlQ29udGV4dDtcbiAgfTtcbiAgcmVhZG9ubHkgbW9kZXM6IHtcbiAgICByZWFkb25seSByZWFkVHJhY2tpbmc6ICh0eXBlb2YgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMpW251bWJlcl07XG4gICAgcmVhZG9ubHkgd3JpdGVUcmFja2luZzogKHR5cGVvZiBDQVBUVVJFX1JFVEVOVElPTl9NT0RFUylbbnVtYmVyXTtcbiAgICByZWFkb25seSBjb21taXRWYWx1ZXM6ICh0eXBlb2YgQ0FQVFVSRV9DT01NSVRfVkFMVUVfTU9ERVMpW251bWJlcl07XG4gICAgcmVhZG9ubHkgd3JpdGVQcm92ZW5hbmNlOiAodHlwZW9mIENBUFRVUkVfUFJPVkVOQU5DRV9NT0RFUylbbnVtYmVyXTtcbiAgfTtcbiAgcmVhZG9ubHkgY2hhbm5lbHM6IHtcbiAgICByZWFkb25seSByZWFkczogQ2FwdHVyZUNoYW5uZWxTdGF0dXM7XG4gICAgcmVhZG9ubHkgd3JpdGVzOiBDYXB0dXJlQ2hhbm5lbFN0YXR1cztcbiAgICByZWFkb25seSBhdHRlbnRpb246IENhcHR1cmVDaGFubmVsU3RhdHVzO1xuICAgIHJlYWRvbmx5IGNvbnRyb2w6IENhcHR1cmVDaGFubmVsU3RhdHVzO1xuICAgIHJlYWRvbmx5IHJlYWRTb3VyY2VzOiAnbm90LWNvbGxlY3RlZCc7XG4gIH07XG4gIHJlYWRvbmx5IHBlcnNpc3RlbmNlOiAnbWVtb3J5LW9ubHknO1xuICByZWFkb25seSBsaW1pdGF0aW9uczogcmVhZG9ubHkgQ2FwdHVyZUxpbWl0YXRpb25bXTtcbn1cblxuLyoqIEBpbnRlcm5hbCBCb3VuZGVkIGZhY3RzIGNvbGxlY3RlZCBhdCBuYXRpdmUgZnVubmVsczsgbm8gdmFsdWVzLCBrZXkgbmFtZXMsIHJlY29yZGVyIGRpc2NvdmVyeSBvciB0cmVlIHdhbGsuICovXG5leHBvcnQgY2xhc3MgTmF0aXZlQ2FwdHVyZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2FwcyA9IG5ldyBTZXQ8Q2FwdHVyZUxpbWl0YXRpb24+KENBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUyk7XG5cbiAgcHJpdmF0ZSBib3VuZGFyeTogTmF0aXZlQ2FwdHVyZU5vdGVbJ2JvdW5kYXJ5J10gPSB7IHN0YXR1czogJ3J1bm5pbmcnIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kZXM6IE5hdGl2ZUNhcHR1cmVOb3RlWydtb2RlcyddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmcsXG4gICAgcmVhZG9ubHkgbG9nQWRkcmVzczogTG9nQWRkcmVzcyxcbiAgICByZWFkb25seSBmcm9tOiBudW1iZXIsXG4gICAgbW9kZXM6IE5hdGl2ZUNhcHR1cmVOb3RlWydtb2RlcyddLFxuICApIHtcbiAgICBjb25zdCByZXRlbnRpb24gPSAodmFsdWU6IHVua25vd24pID0+IChpc0NhcHR1cmVWYWx1ZSh2YWx1ZSwgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMpID8gdmFsdWUgOiAndW5rbm93bicpO1xuICAgIHRoaXMubW9kZXMgPSB7XG4gICAgICByZWFkVHJhY2tpbmc6IHJldGVudGlvbihtb2Rlcy5yZWFkVHJhY2tpbmcpLFxuICAgICAgd3JpdGVUcmFja2luZzogcmV0ZW50aW9uKG1vZGVzLndyaXRlVHJhY2tpbmcpLFxuICAgICAgY29tbWl0VmFsdWVzOiBpc0NhcHR1cmVWYWx1ZShtb2Rlcy5jb21taXRWYWx1ZXMsIENBUFRVUkVfQ09NTUlUX1ZBTFVFX01PREVTKSA/IG1vZGVzLmNvbW1pdFZhbHVlcyA6ICd1bmtub3duJyxcbiAgICAgIHdyaXRlUHJvdmVuYW5jZTogaXNDYXB0dXJlVmFsdWUobW9kZXMud3JpdGVQcm92ZW5hbmNlLCBDQVBUVVJFX1BST1ZFTkFOQ0VfTU9ERVMpXG4gICAgICAgID8gbW9kZXMud3JpdGVQcm92ZW5hbmNlXG4gICAgICAgIDogJ3Vua25vd24nLFxuICAgIH07XG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5tb2RlcykuaW5jbHVkZXMoJ3Vua25vd24nKSkgdGhpcy5saW1pdCgnbW9kZXMtdW5hdmFpbGFibGUnKTtcbiAgfVxuXG4gIGxpbWl0KGdhcDogQ2FwdHVyZUxpbWl0YXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmdhcHMuYWRkKGdhcCk7XG4gIH1cblxuICBlbmQoc3RhdHVzOiBOYXRpdmVDYXB0dXJlTm90ZVsnYm91bmRhcnknXVsnc3RhdHVzJ10sIGZhaWx1cmU/OiBUZXJtaW5hbEZhaWx1cmVDb250ZXh0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYm91bmRhcnkuc3RhdHVzICE9PSAncnVubmluZycpIHJldHVybjtcbiAgICBpZiAoZmFpbHVyZT8uc3RhZ2UgJiYgZmFpbHVyZS5zdGFnZS5ydW50aW1lU3RhZ2VJZC5sZW5ndGggPiAxMDI0KSB7XG4gICAgICB0aGlzLmxpbWl0KCdpZGVudGl0eS1vbWl0dGVkJyk7XG4gICAgICBmYWlsdXJlID0gT2JqZWN0LmZyZWV6ZSh7IGNhdGVnb3J5OiBmYWlsdXJlLmNhdGVnb3J5IH0pO1xuICAgIH1cbiAgICB0aGlzLmJvdW5kYXJ5ID0geyBzdGF0dXMsIC4uLihmYWlsdXJlICYmIHsgZmFpbHVyZSB9KSB9O1xuICB9XG5cbiAgc25hcHNob3QodG86IG51bWJlciwgY29udHJvbDogQ2FwdHVyZUNoYW5uZWxTdGF0dXMgPSAndW5rbm93bicsIHJlZGFjdGVkID0gZmFsc2UpOiBOYXRpdmVDYXB0dXJlTm90ZSB7XG4gICAgY29uc3QgZ2FwcyA9IG5ldyBTZXQodGhpcy5nYXBzKTtcbiAgICBpZiAocmVkYWN0ZWQpIGdhcHMuYWRkKCdyZWRhY3RlZC1leHBvcnQnKTtcbiAgICBjb25zdCBmYWlsZWQgPSBnYXBzLmhhcygnY29tbWl0LXJldGVudGlvbi1mYWlsZWQnKTtcbiAgICBjb25zdCBjdXN0b20gPSBnYXBzLmhhcygnY3VzdG9tLXNjb3BlJykgfHwgZ2Fwcy5oYXMoJ21vZGVzLXVuYXZhaWxhYmxlJyk7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHJ1bklkOiB0aGlzLnJ1bklkLFxuICAgICAgc2NvcGU6ICdyb290LWxvZycsXG4gICAgICBsb2dBZGRyZXNzOiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgbG9nUnVuSWQ6IHRoaXMubG9nQWRkcmVzcy5sb2dSdW5JZCxcbiAgICAgICAgZHJpbGxQYXRoOiBPYmplY3QuZnJlZXplKFsuLi50aGlzLmxvZ0FkZHJlc3MuZHJpbGxQYXRoXSksXG4gICAgICB9KSxcbiAgICAgIGNvbW1pdHM6IE9iamVjdC5mcmVlemUoeyBmcm9tOiB0aGlzLmZyb20sIHRvIH0pLFxuICAgICAgYm91bmRhcnk6IE9iamVjdC5mcmVlemUoeyAuLi50aGlzLmJvdW5kYXJ5IH0pLFxuICAgICAgbW9kZXM6IE9iamVjdC5mcmVlemUoe1xuICAgICAgICByZWFkVHJhY2tpbmc6IHRoaXMubW9kZXMucmVhZFRyYWNraW5nLFxuICAgICAgICB3cml0ZVRyYWNraW5nOiB0aGlzLm1vZGVzLndyaXRlVHJhY2tpbmcsXG4gICAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5tb2Rlcy5jb21taXRWYWx1ZXMsXG4gICAgICAgIHdyaXRlUHJvdmVuYW5jZTogdGhpcy5tb2Rlcy53cml0ZVByb3ZlbmFuY2UsXG4gICAgICB9KSxcbiAgICAgIGNoYW5uZWxzOiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgcmVhZHM6XG4gICAgICAgICAgdGhpcy5tb2Rlcy5yZWFkVHJhY2tpbmcgPT09ICdvZmYnXG4gICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgIDogZ2Fwcy5oYXMoJ3JlYWQtcmV0ZW50aW9uLWZhaWxlZCcpXG4gICAgICAgICAgICA/ICdmYWlsZWQnXG4gICAgICAgICAgICA6IGN1c3RvbVxuICAgICAgICAgICAgPyAndW5rbm93bidcbiAgICAgICAgICAgIDogJ2NhcHR1cmVkJyxcbiAgICAgICAgd3JpdGVzOiB0aGlzLm1vZGVzLndyaXRlVHJhY2tpbmcgPT09ICdvZmYnID8gJ2Rpc2FibGVkJyA6IGZhaWxlZCA/ICdmYWlsZWQnIDogY3VzdG9tID8gJ3Vua25vd24nIDogJ2NhcHR1cmVkJyxcbiAgICAgICAgYXR0ZW50aW9uOiBmYWlsZWQgfHwgZ2Fwcy5oYXMoJ2F0dGVudGlvbi1vbWl0dGVkJykgPyAncGFydGlhbCcgOiBjdXN0b20gPyAndW5rbm93bicgOiAnY2FwdHVyZWQnLFxuICAgICAgICBjb250cm9sOiBnYXBzLmhhcygncmVjb3JkZXItc25hcHNob3QtZmFpbGVkJykgPyAnZmFpbGVkJyA6IGNvbnRyb2wsXG4gICAgICAgIHJlYWRTb3VyY2VzOiAnbm90LWNvbGxlY3RlZCcsXG4gICAgICB9KSxcbiAgICAgIHBlcnNpc3RlbmNlOiAnbWVtb3J5LW9ubHknLFxuICAgICAgbGltaXRhdGlvbnM6IE9iamVjdC5mcmVlemUoWy4uLmdhcHNdKSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogU3RvcmVkL3JlY29yZGVyIG1ldGFkYXRhIGlzIHVudHJ1c3RlZC4gUmVhZCBkYXRhIHByb3BlcnRpZXMgb25seSwgbmV2ZXIgZ2V0dGVycyBvciBhcmJpdHJhcnkgc3RyaW5ncy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5Q2FwdHVyZUFja25vd2xlZGdlbWVudCh2YWx1ZTogdW5rbm93bik6IFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudCB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgIT09IE9iamVjdC5wcm90b3R5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZGF0YSA9IChrZXk6IHN0cmluZykgPT4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwga2V5KT8udmFsdWU7XG4gICAgY29uc3QgdmVyc2lvbiA9IGRhdGEoJ3ZlcnNpb24nKTtcbiAgICBjb25zdCBydW5JZCA9IGRhdGEoJ3J1bklkJyk7XG4gICAgY29uc3QgY29udHJvbCA9IGRhdGEoJ2NvbnRyb2wnKTtcbiAgICBpZiAoXG4gICAgICB2ZXJzaW9uICE9PSAxIHx8XG4gICAgICB0eXBlb2YgcnVuSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgICBydW5JZC5sZW5ndGggPT09IDAgfHxcbiAgICAgIHJ1bklkLmxlbmd0aCA+IDIwNDggfHxcbiAgICAgICFpc0NhcHR1cmVWYWx1ZShjb250cm9sLCBSRUNPUkRFUl9DT05UUk9MX1NUQVRVU0VTKVxuICAgIClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyB2ZXJzaW9uLCBydW5JZCwgY29udHJvbCB9KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ import type { LogAddress } from 'foottrace';
2
+ /** Native structural admission only: no user heap, options, sink or source selection participates. */
3
+ export declare function supportsNativeSourceAddress(address: LogAddress): boolean;
@@ -0,0 +1,15 @@
1
+ import { createReadSourceRecord, decodeReadSourceSnapshot, SharedMemory } from 'foottrace/write';
2
+ let emptyNativeBook;
3
+ /** Native structural admission only: no user heap, options, sink or source selection participates. */
4
+ export function supportsNativeSourceAddress(address) {
5
+ if (!emptyNativeBook) {
6
+ // Let the published writer supply its own wire version, limits and empty envelope.
7
+ // Lazy: default-off executions never allocate this inert validation fixture.
8
+ const book = createReadSourceRecord(new SharedMemory(), { logRunId: 'source-address-admission', drillPath: [] });
9
+ emptyNativeBook = book.snapshot();
10
+ book.retire();
11
+ }
12
+ // The native codec owns all address bounds. This candidate is never served as observed evidence.
13
+ return decodeReadSourceSnapshot({ ...emptyNativeBook, address }) !== undefined;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlU291cmNlQWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9uYXRpdmVTb3VyY2VBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxJQUFJLGVBQStDLENBQUM7QUFFcEQsc0dBQXNHO0FBQ3RHLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxPQUFtQjtJQUM3RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsbUZBQW1GO1FBQ25GLDZFQUE2RTtRQUM3RSxNQUFNLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLFlBQVksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxpR0FBaUc7SUFDakcsT0FBTyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUcsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBSZWFkU291cmNlU25hcHNob3QgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFNvdXJjZVJlY29yZCwgZGVjb2RlUmVhZFNvdXJjZVNuYXBzaG90LCBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5sZXQgZW1wdHlOYXRpdmVCb29rOiBSZWFkU291cmNlU25hcHNob3QgfCB1bmRlZmluZWQ7XG5cbi8qKiBOYXRpdmUgc3RydWN0dXJhbCBhZG1pc3Npb24gb25seTogbm8gdXNlciBoZWFwLCBvcHRpb25zLCBzaW5rIG9yIHNvdXJjZSBzZWxlY3Rpb24gcGFydGljaXBhdGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzTmF0aXZlU291cmNlQWRkcmVzcyhhZGRyZXNzOiBMb2dBZGRyZXNzKTogYm9vbGVhbiB7XG4gIGlmICghZW1wdHlOYXRpdmVCb29rKSB7XG4gICAgLy8gTGV0IHRoZSBwdWJsaXNoZWQgd3JpdGVyIHN1cHBseSBpdHMgb3duIHdpcmUgdmVyc2lvbiwgbGltaXRzIGFuZCBlbXB0eSBlbnZlbG9wZS5cbiAgICAvLyBMYXp5OiBkZWZhdWx0LW9mZiBleGVjdXRpb25zIG5ldmVyIGFsbG9jYXRlIHRoaXMgaW5lcnQgdmFsaWRhdGlvbiBmaXh0dXJlLlxuICAgIGNvbnN0IGJvb2sgPSBjcmVhdGVSZWFkU291cmNlUmVjb3JkKG5ldyBTaGFyZWRNZW1vcnkoKSwgeyBsb2dSdW5JZDogJ3NvdXJjZS1hZGRyZXNzLWFkbWlzc2lvbicsIGRyaWxsUGF0aDogW10gfSk7XG4gICAgZW1wdHlOYXRpdmVCb29rID0gYm9vay5zbmFwc2hvdCgpO1xuICAgIGJvb2sucmV0aXJlKCk7XG4gIH1cbiAgLy8gVGhlIG5hdGl2ZSBjb2RlYyBvd25zIGFsbCBhZGRyZXNzIGJvdW5kcy4gVGhpcyBjYW5kaWRhdGUgaXMgbmV2ZXIgc2VydmVkIGFzIG9ic2VydmVkIGV2aWRlbmNlLlxuICByZXR1cm4gZGVjb2RlUmVhZFNvdXJjZVNuYXBzaG90KHsgLi4uZW1wdHlOYXRpdmVCb29rLCBhZGRyZXNzIH0pICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import type { CaptureLimitation, NativeCaptureNote } from './nativeCoverage.js';
2
+ /** @internal One inert-data boundary for checkpoint and history capture codecs. */
3
+ export declare function ownData(record: unknown, key: string): unknown;
4
+ export declare function captureIdentifier(value: unknown): value is string;
5
+ export declare function copyIdentity(value: unknown, exact?: boolean, version?: 1 | 2): Pick<NativeCaptureNote, 'runId' | 'logAddress' | 'commits'> | undefined;
6
+ export declare function copyModes(value: unknown, exact?: boolean): NativeCaptureNote['modes'] | undefined;
7
+ export declare function copyChannels(value: unknown, exact?: boolean): NativeCaptureNote['channels'] | undefined;
8
+ /** Shared native statuses; source version admission remains explicit at each codec boundary. */
9
+ export declare function copyObservedChannels(value: unknown): Omit<NativeCaptureNote['channels'], 'readSources'> | undefined;
10
+ export declare function copyLimitations(value: unknown): readonly CaptureLimitation[] | undefined;