footprintjs 10.3.0 → 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 (109) hide show
  1. package/dist/esm/index.d.ts +2 -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 +20 -7
  16. package/dist/esm/lib/capture/nativeCoverage.js +50 -12
  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 +8 -0
  26. package/dist/esm/lib/memory/StageContext.js +84 -9
  27. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  28. package/dist/esm/lib/memory/runPolicy.js +2 -1
  29. package/dist/esm/lib/pause/record.js +8 -2
  30. package/dist/esm/lib/pause/types.d.ts +2 -0
  31. package/dist/esm/lib/pause/types.js +1 -1
  32. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +17 -3
  33. package/dist/esm/lib/runner/ExecutionRuntime.js +33 -4
  34. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
  35. package/dist/esm/lib/runner/FlowChartExecutor.js +48 -10
  36. package/dist/esm/lib/runner/attach.js +3 -1
  37. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  38. package/dist/esm/lib/runner/captureHistory.js +106 -0
  39. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  40. package/dist/esm/lib/runner/checkpoint.js +3 -1
  41. package/dist/esm/lib/runner/index.d.ts +1 -0
  42. package/dist/esm/lib/runner/index.js +1 -1
  43. package/dist/esm/lib/runner/options.js +42 -3
  44. package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
  45. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  46. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  47. package/dist/esm/lib/runner/recordSink.js +47 -4
  48. package/dist/esm/lib/runner/snapshot.js +2 -2
  49. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  50. package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
  51. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  52. package/dist/esm/lib/sinks/fileSink.js +8 -2
  53. package/dist/esm/trace.d.ts +2 -0
  54. package/dist/esm/trace.js +2 -1
  55. package/dist/index.js +1 -1
  56. package/dist/lib/capture/absentEntries.js +86 -0
  57. package/dist/lib/capture/checkpointCapture.js +110 -0
  58. package/dist/lib/capture/historyData.js +85 -0
  59. package/dist/lib/capture/historyNote.js +56 -0
  60. package/dist/lib/capture/historyTarget.js +40 -0
  61. package/dist/lib/capture/historyTypes.js +7 -0
  62. package/dist/lib/capture/nativeCoverage.js +52 -13
  63. package/dist/lib/capture/noteShape.js +103 -0
  64. package/dist/lib/capture/readSources.js +83 -0
  65. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
  66. package/dist/lib/engine/types.js +1 -1
  67. package/dist/lib/memory/StageContext.js +84 -9
  68. package/dist/lib/memory/runPolicy.js +2 -1
  69. package/dist/lib/pause/record.js +8 -2
  70. package/dist/lib/pause/types.js +1 -1
  71. package/dist/lib/runner/ExecutionRuntime.js +32 -3
  72. package/dist/lib/runner/FlowChartExecutor.js +48 -10
  73. package/dist/lib/runner/attach.js +3 -1
  74. package/dist/lib/runner/captureHistory.js +110 -0
  75. package/dist/lib/runner/checkpoint.js +3 -1
  76. package/dist/lib/runner/index.js +1 -1
  77. package/dist/lib/runner/options.js +42 -3
  78. package/dist/lib/runner/readStoredCapture.js +40 -0
  79. package/dist/lib/runner/recordSink.js +47 -4
  80. package/dist/lib/runner/snapshot.js +2 -2
  81. package/dist/lib/runner/storedCaptureAdmission.js +101 -0
  82. package/dist/lib/sinks/fileSink.js +8 -2
  83. package/dist/trace.js +4 -2
  84. package/dist/types/index.d.ts +2 -0
  85. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  86. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  87. package/dist/types/lib/capture/historyData.d.ts +9 -0
  88. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  89. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  90. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  91. package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
  92. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  93. package/dist/types/lib/capture/readSources.d.ts +43 -0
  94. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  95. package/dist/types/lib/engine/types.d.ts +3 -0
  96. package/dist/types/lib/memory/StageContext.d.ts +8 -0
  97. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  98. package/dist/types/lib/pause/types.d.ts +2 -0
  99. package/dist/types/lib/runner/ExecutionRuntime.d.ts +17 -3
  100. package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
  101. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  102. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  103. package/dist/types/lib/runner/index.d.ts +1 -0
  104. package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
  105. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  106. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  107. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  108. package/dist/types/trace.d.ts +2 -0
  109. package/package.json +2 -2
@@ -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 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2hpc3RvcnlUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ0EsOEZBQThGO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIEV4YWN0IHJvb3Qgc2VnbWVudCBhbmQgZXZpZGVuY2UgZW50cnkgYWNrbm93bGVkZ2VkIGJ5IGEgc3RvcmFnZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeVRhcmdldCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGV2aWRlbmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqIFNIQS0yNTYgb2YgdGhlIGV4YWN0IGluZXJ0IEpTT04gZXZpZGVuY2UgcGx1cyBjYW5vbmljYWwgY29tbWl0IGxvZyBhbmQgc2VydmVkIHN0YXJ0aW5nIHN0YXRlLiAqL1xuICByZWFkb25seSBkaWdlc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nQWRkcmVzczogTG9nQWRkcmVzcztcbiAgcmVhZG9ubHkgY29tbWl0czogeyByZWFkb25seSBmcm9tOiBudW1iZXI7IHJlYWRvbmx5IHRvOiBudW1iZXIgfTtcbn1cblxuLyoqIEFkYXB0ZXIgYXNzZXJ0aW9uIGFib3V0IHRoZSBwcmVjZWRpbmcgZXZpZGVuY2UgYW5kIGVuZCBlbnRyeSwgbm90IGFib3V0IHRoaXMgcmVjZWlwdCdzIGRlbGl2ZXJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeVJlY2VpcHQgZXh0ZW5kcyBDYXB0dXJlSGlzdG9yeVRhcmdldCB7XG4gIHJlYWRvbmx5IGR1cmFiaWxpdHk6ICdkdXJhYmxlJztcbn1cblxuLyoqIEV4cGxpY2l0IGhvc3Qtb3duZWQgZHVyYWJpbGl0eSBjYXBhYmlsaXR5LiBBIG5vcm1hbCBSZWNvcmRTaW5rLmZsdXNoIGlzIG5vdCB0aGlzIHByb21pc2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVIaXN0b3J5T3B0aW9ucyB7XG4gIC8qKiBSZXNvbHZlIG9ubHkgYWZ0ZXIgdGhpcyB0YXJnZXQncyBldmlkZW5jZSwgY29tbWl0cyBhbmQgZW5kIGVudHJ5IGFyZSBkdXJhYmx5IHN0b3JlZCB0b2dldGhlci4gKi9cbiAgcmVhZG9ubHkgYWNrbm93bGVkZ2U6IChcbiAgICB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0LFxuICAgIGNvbnRleHQ6IHsgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbCB9LFxuICApID0+IFByb21pc2U8Q2FwdHVyZUhpc3RvcnlSZWNlaXB0PjtcbiAgLyoqIE1heGltdW0gVVRGLTggYnl0ZXMgb2YgdGhlIGV2aWRlbmNlIHBheWxvYWQgYW5kIHRhcmdldC4gRGVmYXVsdCAxIE1pQiwgbWF4aW11bSA4IE1pQi4gKi9cbiAgcmVhZG9ubHkgbWF4Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKiBUb3RhbCB0aW1lIGFsbG93ZWQgZm9yIGV2aWRlbmNlIGRlbGl2ZXJ5LCBhY2tub3dsZWRnZW1lbnQgYW5kIHJlY2VpcHQgZGVsaXZlcnkuIERlZmF1bHQgMTBzLCBtYXhpbXVtIDMwcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKiogUGVyc2lzdGVuY2UgcmVzdWx0IG9ubHkuIEFuIGFja25vd2xlZGdlZCBmYWlsZWQvcGF1c2VkIHByZWZpeCBpcyBub3QgYSBjb21wbGV0ZWQgYnVzaW5lc3Mgd29ya2Zsb3cuICovXG5leHBvcnQgdHlwZSBDYXB0dXJlSGlzdG9yeVN0YXR1cyA9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICdhY2tub3dsZWRnZWQnIH1cbiAgfCB7IHJlYWRvbmx5IHN0YXR1czogJ3Vua25vd24nOyByZWFkb25seSByZWFzb246IHN0cmluZyB9O1xuXG4vKiogQGludGVybmFsIE9wYXF1ZSBub3RlIG5hbWVzOyBGb290dHJhY2Uga2VlcHMgdGhlbSB3aXRob3V0IGludGVycHJldGluZyBlbmdpbmUgbWV0YWRhdGEuICovXG5leHBvcnQgY29uc3QgQ0FQVFVSRV9ISVNUT1JZX05PVEUgPSAnY2FwdHVyZS1oaXN0b3J5JztcbmV4cG9ydCBjb25zdCBDQVBUVVJFX1JFQ0VJUFRfTk9URSA9ICdjYXB0dXJlLXJlY2VpcHQnO1xuIl19
@@ -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,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;
@@ -0,0 +1,93 @@
1
+ import { CAPTURE_CHANNEL_STATUSES, CAPTURE_COMMIT_VALUE_MODES, CAPTURE_LIMITATIONS, CAPTURE_PROVENANCE_MODES, CAPTURE_RETENTION_MODES, isCaptureValue, } from './nativeCoverage.js';
2
+ /** @internal One inert-data boundary for checkpoint and history capture codecs. */
3
+ export function ownData(record, key) {
4
+ if (!record || typeof record !== 'object' || Object.getPrototypeOf(record) !== Object.prototype)
5
+ return undefined;
6
+ return Object.getOwnPropertyDescriptor(record, key)?.value;
7
+ }
8
+ export function captureIdentifier(value) {
9
+ return typeof value === 'string' && value.length > 0 && value.length <= 2048;
10
+ }
11
+ function count(value) {
12
+ return Number.isSafeInteger(value) && value >= 0;
13
+ }
14
+ /** Exact history shapes refuse extras; checkpoints deliberately project known fields. */
15
+ function shapeKeys(value, fields, exact) {
16
+ return !exact || (!!value && typeof value === 'object' && Object.keys(value).length === fields.length);
17
+ }
18
+ export function copyIdentity(value, exact = false, version = 1) {
19
+ const runId = ownData(value, 'runId');
20
+ const address = ownData(value, 'logAddress');
21
+ const logRunId = ownData(address, 'logRunId');
22
+ const drill = ownData(address, 'drillPath');
23
+ const commits = ownData(value, 'commits');
24
+ const from = ownData(commits, 'from');
25
+ const to = ownData(commits, 'to');
26
+ if (ownData(value, 'version') !== version ||
27
+ !captureIdentifier(runId) ||
28
+ !captureIdentifier(logRunId) ||
29
+ !Array.isArray(drill) ||
30
+ Object.getPrototypeOf(drill) !== Array.prototype ||
31
+ Object.getOwnPropertyDescriptor(drill, 'length')?.value !== 0 ||
32
+ !count(from) ||
33
+ !count(to) ||
34
+ from > to ||
35
+ !shapeKeys(address, ['logRunId', 'drillPath'], exact) ||
36
+ !shapeKeys(commits, ['from', 'to'], exact))
37
+ return undefined;
38
+ return {
39
+ runId,
40
+ logAddress: Object.freeze({ logRunId, drillPath: Object.freeze([]) }),
41
+ commits: Object.freeze({ from, to }),
42
+ };
43
+ }
44
+ export function copyModes(value, exact = false) {
45
+ const readTracking = ownData(value, 'readTracking');
46
+ const writeTracking = ownData(value, 'writeTracking');
47
+ const commitValues = ownData(value, 'commitValues');
48
+ const writeProvenance = ownData(value, 'writeProvenance');
49
+ if (!isCaptureValue(readTracking, CAPTURE_RETENTION_MODES) ||
50
+ !isCaptureValue(writeTracking, CAPTURE_RETENTION_MODES) ||
51
+ !isCaptureValue(commitValues, CAPTURE_COMMIT_VALUE_MODES) ||
52
+ !isCaptureValue(writeProvenance, CAPTURE_PROVENANCE_MODES) ||
53
+ !shapeKeys(value, ['readTracking', 'writeTracking', 'commitValues', 'writeProvenance'], exact))
54
+ return undefined;
55
+ return Object.freeze({ readTracking, writeTracking, commitValues, writeProvenance });
56
+ }
57
+ export function copyChannels(value, exact = false) {
58
+ const observed = copyObservedChannels(value);
59
+ if (!observed ||
60
+ ownData(value, 'readSources') !== 'not-collected' ||
61
+ !shapeKeys(value, ['reads', 'writes', 'attention', 'control', 'readSources'], exact))
62
+ return undefined;
63
+ return Object.freeze({ ...observed, readSources: 'not-collected' });
64
+ }
65
+ /** Shared native statuses; source version admission remains explicit at each codec boundary. */
66
+ export function copyObservedChannels(value) {
67
+ const reads = ownData(value, 'reads');
68
+ const writes = ownData(value, 'writes');
69
+ const attention = ownData(value, 'attention');
70
+ const control = ownData(value, 'control');
71
+ if (!isCaptureValue(reads, CAPTURE_CHANNEL_STATUSES) ||
72
+ !isCaptureValue(writes, CAPTURE_CHANNEL_STATUSES) ||
73
+ !isCaptureValue(attention, CAPTURE_CHANNEL_STATUSES) ||
74
+ !isCaptureValue(control, CAPTURE_CHANNEL_STATUSES))
75
+ return undefined;
76
+ return Object.freeze({ reads, writes, attention, control });
77
+ }
78
+ export function copyLimitations(value) {
79
+ if (!Array.isArray(value) || Object.getPrototypeOf(value) !== Array.prototype)
80
+ return undefined;
81
+ const length = Object.getOwnPropertyDescriptor(value, 'length')?.value;
82
+ if (!count(length) || length > 32)
83
+ return undefined;
84
+ const limitations = [];
85
+ for (let index = 0; index < length; index++) {
86
+ const entry = Object.getOwnPropertyDescriptor(value, String(index))?.value;
87
+ if (!isCaptureValue(entry, CAPTURE_LIMITATIONS))
88
+ return undefined;
89
+ limitations.push(entry);
90
+ }
91
+ return Object.freeze(limitations);
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZVNoYXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL25vdGVTaGFwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLDBCQUEwQixFQUMxQixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2QixjQUFjLEdBQ2YsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixtRkFBbUY7QUFDbkYsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUFlLEVBQUUsR0FBVztJQUNsRCxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDbEgsT0FBTyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQztBQUM3RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWM7SUFDOUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEtBQWM7SUFDM0IsT0FBTyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFLLEtBQWdCLElBQUksQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCx5RkFBeUY7QUFDekYsU0FBUyxTQUFTLENBQUMsS0FBYyxFQUFFLE1BQXlCLEVBQUUsS0FBYztJQUMxRSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pHLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixLQUFjLEVBQ2QsS0FBSyxHQUFHLEtBQUssRUFDYixVQUFpQixDQUFDO0lBRWxCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEMsSUFDRSxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLLE9BQU87UUFDckMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDekIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNyQixNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxTQUFTO1FBQ2hELE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUM7UUFDN0QsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ1osQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ1YsSUFBSSxHQUFHLEVBQUU7UUFDVCxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ3JELENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUM7UUFFMUMsT0FBTyxTQUFTLENBQUM7SUFDbkIsT0FBTztRQUNMLEtBQUs7UUFDTCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0tBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFjLEVBQUUsS0FBSyxHQUFHLEtBQUs7SUFDckQsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNwRCxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDcEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQzFELElBQ0UsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLHVCQUF1QixDQUFDO1FBQ3RELENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSx1QkFBdUIsQ0FBQztRQUN2RCxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsMEJBQTBCLENBQUM7UUFDekQsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLHdCQUF3QixDQUFDO1FBQzFELENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBRTlGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBYyxFQUFFLEtBQUssR0FBRyxLQUFLO0lBQ3hELE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLElBQ0UsQ0FBQyxRQUFRO1FBQ1QsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxlQUFlO1FBQ2pELENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsRUFBRSxLQUFLLENBQUM7UUFFcEYsT0FBTyxTQUFTLENBQUM7SUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUVELGdHQUFnRztBQUNoRyxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYztJQUNqRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzFDLElBQ0UsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLHdCQUF3QixDQUFDO1FBQ2hELENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQztRQUNqRCxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsd0JBQXdCLENBQUM7UUFDcEQsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDO1FBRWxELE9BQU8sU0FBUyxDQUFDO0lBQ25CLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsS0FBYztJQUM1QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDaEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsRUFBRTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3BELE1BQU0sV0FBVyxHQUF3QixFQUFFLENBQUM7SUFDNUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDbEUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhcHR1cmVMaW1pdGF0aW9uLCBOYXRpdmVDYXB0dXJlTm90ZSB9IGZyb20gJy4vbmF0aXZlQ292ZXJhZ2UuanMnO1xuaW1wb3J0IHtcbiAgQ0FQVFVSRV9DSEFOTkVMX1NUQVRVU0VTLFxuICBDQVBUVVJFX0NPTU1JVF9WQUxVRV9NT0RFUyxcbiAgQ0FQVFVSRV9MSU1JVEFUSU9OUyxcbiAgQ0FQVFVSRV9QUk9WRU5BTkNFX01PREVTLFxuICBDQVBUVVJFX1JFVEVOVElPTl9NT0RFUyxcbiAgaXNDYXB0dXJlVmFsdWUsXG59IGZyb20gJy4vbmF0aXZlQ292ZXJhZ2UuanMnO1xuXG4vKiogQGludGVybmFsIE9uZSBpbmVydC1kYXRhIGJvdW5kYXJ5IGZvciBjaGVja3BvaW50IGFuZCBoaXN0b3J5IGNhcHR1cmUgY29kZWNzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG93bkRhdGEocmVjb3JkOiB1bmtub3duLCBrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9PSAnb2JqZWN0JyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YocmVjb3JkKSAhPT0gT2JqZWN0LnByb3RvdHlwZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocmVjb3JkLCBrZXkpPy52YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVJZGVudGlmaWVyKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5sZW5ndGggPD0gMjA0ODtcbn1cblxuZnVuY3Rpb24gY291bnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudW1iZXIge1xuICByZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUpICYmICh2YWx1ZSBhcyBudW1iZXIpID49IDA7XG59XG5cbi8qKiBFeGFjdCBoaXN0b3J5IHNoYXBlcyByZWZ1c2UgZXh0cmFzOyBjaGVja3BvaW50cyBkZWxpYmVyYXRlbHkgcHJvamVjdCBrbm93biBmaWVsZHMuICovXG5mdW5jdGlvbiBzaGFwZUtleXModmFsdWU6IHVua25vd24sIGZpZWxkczogcmVhZG9ubHkgc3RyaW5nW10sIGV4YWN0OiBib29sZWFuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhZXhhY3QgfHwgKCEhdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSBmaWVsZHMubGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlJZGVudGl0eShcbiAgdmFsdWU6IHVua25vd24sXG4gIGV4YWN0ID0gZmFsc2UsXG4gIHZlcnNpb246IDEgfCAyID0gMSxcbik6IFBpY2s8TmF0aXZlQ2FwdHVyZU5vdGUsICdydW5JZCcgfCAnbG9nQWRkcmVzcycgfCAnY29tbWl0cyc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcnVuSWQgPSBvd25EYXRhKHZhbHVlLCAncnVuSWQnKTtcbiAgY29uc3QgYWRkcmVzcyA9IG93bkRhdGEodmFsdWUsICdsb2dBZGRyZXNzJyk7XG4gIGNvbnN0IGxvZ1J1bklkID0gb3duRGF0YShhZGRyZXNzLCAnbG9nUnVuSWQnKTtcbiAgY29uc3QgZHJpbGwgPSBvd25EYXRhKGFkZHJlc3MsICdkcmlsbFBhdGgnKTtcbiAgY29uc3QgY29tbWl0cyA9IG93bkRhdGEodmFsdWUsICdjb21taXRzJyk7XG4gIGNvbnN0IGZyb20gPSBvd25EYXRhKGNvbW1pdHMsICdmcm9tJyk7XG4gIGNvbnN0IHRvID0gb3duRGF0YShjb21taXRzLCAndG8nKTtcbiAgaWYgKFxuICAgIG93bkRhdGEodmFsdWUsICd2ZXJzaW9uJykgIT09IHZlcnNpb24gfHxcbiAgICAhY2FwdHVyZUlkZW50aWZpZXIocnVuSWQpIHx8XG4gICAgIWNhcHR1cmVJZGVudGlmaWVyKGxvZ1J1bklkKSB8fFxuICAgICFBcnJheS5pc0FycmF5KGRyaWxsKSB8fFxuICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihkcmlsbCkgIT09IEFycmF5LnByb3RvdHlwZSB8fFxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZHJpbGwsICdsZW5ndGgnKT8udmFsdWUgIT09IDAgfHxcbiAgICAhY291bnQoZnJvbSkgfHxcbiAgICAhY291bnQodG8pIHx8XG4gICAgZnJvbSA+IHRvIHx8XG4gICAgIXNoYXBlS2V5cyhhZGRyZXNzLCBbJ2xvZ1J1bklkJywgJ2RyaWxsUGF0aCddLCBleGFjdCkgfHxcbiAgICAhc2hhcGVLZXlzKGNvbW1pdHMsIFsnZnJvbScsICd0byddLCBleGFjdClcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiB7XG4gICAgcnVuSWQsXG4gICAgbG9nQWRkcmVzczogT2JqZWN0LmZyZWV6ZSh7IGxvZ1J1bklkLCBkcmlsbFBhdGg6IE9iamVjdC5mcmVlemUoW10pIH0pLFxuICAgIGNvbW1pdHM6IE9iamVjdC5mcmVlemUoeyBmcm9tLCB0byB9KSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlNb2Rlcyh2YWx1ZTogdW5rbm93biwgZXhhY3QgPSBmYWxzZSk6IE5hdGl2ZUNhcHR1cmVOb3RlWydtb2RlcyddIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVhZFRyYWNraW5nID0gb3duRGF0YSh2YWx1ZSwgJ3JlYWRUcmFja2luZycpO1xuICBjb25zdCB3cml0ZVRyYWNraW5nID0gb3duRGF0YSh2YWx1ZSwgJ3dyaXRlVHJhY2tpbmcnKTtcbiAgY29uc3QgY29tbWl0VmFsdWVzID0gb3duRGF0YSh2YWx1ZSwgJ2NvbW1pdFZhbHVlcycpO1xuICBjb25zdCB3cml0ZVByb3ZlbmFuY2UgPSBvd25EYXRhKHZhbHVlLCAnd3JpdGVQcm92ZW5hbmNlJyk7XG4gIGlmIChcbiAgICAhaXNDYXB0dXJlVmFsdWUocmVhZFRyYWNraW5nLCBDQVBUVVJFX1JFVEVOVElPTl9NT0RFUykgfHxcbiAgICAhaXNDYXB0dXJlVmFsdWUod3JpdGVUcmFja2luZywgQ0FQVFVSRV9SRVRFTlRJT05fTU9ERVMpIHx8XG4gICAgIWlzQ2FwdHVyZVZhbHVlKGNvbW1pdFZhbHVlcywgQ0FQVFVSRV9DT01NSVRfVkFMVUVfTU9ERVMpIHx8XG4gICAgIWlzQ2FwdHVyZVZhbHVlKHdyaXRlUHJvdmVuYW5jZSwgQ0FQVFVSRV9QUk9WRU5BTkNFX01PREVTKSB8fFxuICAgICFzaGFwZUtleXModmFsdWUsIFsncmVhZFRyYWNraW5nJywgJ3dyaXRlVHJhY2tpbmcnLCAnY29tbWl0VmFsdWVzJywgJ3dyaXRlUHJvdmVuYW5jZSddLCBleGFjdClcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgcmVhZFRyYWNraW5nLCB3cml0ZVRyYWNraW5nLCBjb21taXRWYWx1ZXMsIHdyaXRlUHJvdmVuYW5jZSB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHlDaGFubmVscyh2YWx1ZTogdW5rbm93biwgZXhhY3QgPSBmYWxzZSk6IE5hdGl2ZUNhcHR1cmVOb3RlWydjaGFubmVscyddIHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgb2JzZXJ2ZWQgPSBjb3B5T2JzZXJ2ZWRDaGFubmVscyh2YWx1ZSk7XG4gIGlmIChcbiAgICAhb2JzZXJ2ZWQgfHxcbiAgICBvd25EYXRhKHZhbHVlLCAncmVhZFNvdXJjZXMnKSAhPT0gJ25vdC1jb2xsZWN0ZWQnIHx8XG4gICAgIXNoYXBlS2V5cyh2YWx1ZSwgWydyZWFkcycsICd3cml0ZXMnLCAnYXR0ZW50aW9uJywgJ2NvbnRyb2wnLCAncmVhZFNvdXJjZXMnXSwgZXhhY3QpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IC4uLm9ic2VydmVkLCByZWFkU291cmNlczogJ25vdC1jb2xsZWN0ZWQnIH0pO1xufVxuXG4vKiogU2hhcmVkIG5hdGl2ZSBzdGF0dXNlczsgc291cmNlIHZlcnNpb24gYWRtaXNzaW9uIHJlbWFpbnMgZXhwbGljaXQgYXQgZWFjaCBjb2RlYyBib3VuZGFyeS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5T2JzZXJ2ZWRDaGFubmVscyh2YWx1ZTogdW5rbm93bik6IE9taXQ8TmF0aXZlQ2FwdHVyZU5vdGVbJ2NoYW5uZWxzJ10sICdyZWFkU291cmNlcyc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVhZHMgPSBvd25EYXRhKHZhbHVlLCAncmVhZHMnKTtcbiAgY29uc3Qgd3JpdGVzID0gb3duRGF0YSh2YWx1ZSwgJ3dyaXRlcycpO1xuICBjb25zdCBhdHRlbnRpb24gPSBvd25EYXRhKHZhbHVlLCAnYXR0ZW50aW9uJyk7XG4gIGNvbnN0IGNvbnRyb2wgPSBvd25EYXRhKHZhbHVlLCAnY29udHJvbCcpO1xuICBpZiAoXG4gICAgIWlzQ2FwdHVyZVZhbHVlKHJlYWRzLCBDQVBUVVJFX0NIQU5ORUxfU1RBVFVTRVMpIHx8XG4gICAgIWlzQ2FwdHVyZVZhbHVlKHdyaXRlcywgQ0FQVFVSRV9DSEFOTkVMX1NUQVRVU0VTKSB8fFxuICAgICFpc0NhcHR1cmVWYWx1ZShhdHRlbnRpb24sIENBUFRVUkVfQ0hBTk5FTF9TVEFUVVNFUykgfHxcbiAgICAhaXNDYXB0dXJlVmFsdWUoY29udHJvbCwgQ0FQVFVSRV9DSEFOTkVMX1NUQVRVU0VTKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyByZWFkcywgd3JpdGVzLCBhdHRlbnRpb24sIGNvbnRyb2wgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5TGltaXRhdGlvbnModmFsdWU6IHVua25vd24pOiByZWFkb25seSBDYXB0dXJlTGltaXRhdGlvbltdIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpICE9PSBBcnJheS5wcm90b3R5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxlbmd0aCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodmFsdWUsICdsZW5ndGgnKT8udmFsdWU7XG4gIGlmICghY291bnQobGVuZ3RoKSB8fCBsZW5ndGggPiAzMikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgbGltaXRhdGlvbnM6IENhcHR1cmVMaW1pdGF0aW9uW10gPSBbXTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih2YWx1ZSwgU3RyaW5nKGluZGV4KSk/LnZhbHVlO1xuICAgIGlmICghaXNDYXB0dXJlVmFsdWUoZW50cnksIENBUFRVUkVfTElNSVRBVElPTlMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGxpbWl0YXRpb25zLnB1c2goZW50cnkpO1xuICB9XG4gIHJldHVybiBPYmplY3QuZnJlZXplKGxpbWl0YXRpb25zKTtcbn1cbiJdfQ==
@@ -0,0 +1,43 @@
1
+ import type { ReadSourceRecord, ReadSourceSnapshot } from 'foottrace/write';
2
+ import type { CaptureChannelStatus, NativeCaptureNote } from './nativeCoverage.js';
3
+ /** Engine coverage only. Source descriptors and their codec belong to foottrace/write. */
4
+ export declare const SOURCE_LIMITATIONS: readonly ["privacy-active", "identity-unavailable", "untracked-read", "custom-scope", "child-source-ownership", "resumed-source-ownership", "sink-source-unsupported", "source-history-not-included", "source-capture-failed", "redacted-source-export"];
5
+ export type SourceLimitation = (typeof SOURCE_LIMITATIONS)[number];
6
+ /** Packet 3 is an in-memory observation, not a stored-history acknowledgement. */
7
+ export interface EngineReadSources {
8
+ readonly version: 1;
9
+ readonly runId: string;
10
+ readonly persistence: 'memory-only';
11
+ readonly commits: {
12
+ readonly from: number;
13
+ readonly to: number;
14
+ };
15
+ readonly status: CaptureChannelStatus;
16
+ readonly limitations: readonly SourceLimitation[];
17
+ /** Absent means unknown ownership, never an observed-empty book. */
18
+ readonly record?: ReadSourceSnapshot;
19
+ }
20
+ /** A new discriminant prevents strict v1 readers from accepting new completeness claims. */
21
+ export interface NativeReadCaptureNote extends Omit<NativeCaptureNote, 'version' | 'channels'> {
22
+ readonly version: 2;
23
+ readonly channels: Omit<NativeCaptureNote['channels'], 'readSources'> & {
24
+ readonly readSources: CaptureChannelStatus;
25
+ };
26
+ }
27
+ export type NativeCaptureObservation = NativeCaptureNote | NativeReadCaptureNote;
28
+ /** One owner per runtime/leg; propagated only to frames in that log. Never reads values or scans commits. */
29
+ export declare class EngineReadSourceCapture {
30
+ readonly runId: string;
31
+ private readonly book?;
32
+ readonly from: number;
33
+ private readonly gaps;
34
+ private sealed?;
35
+ get observing(): boolean;
36
+ constructor(runId: string, book?: ReadSourceRecord | undefined, gap?: SourceLimitation, from?: number);
37
+ limit(gap: SourceLimitation): void;
38
+ retire(): void;
39
+ seal(to: number): void;
40
+ snapshot(to: number, redact?: boolean): EngineReadSources;
41
+ }
42
+ /** Keep the v1 producer unchanged. Only explicitly enabled source observations acquire v2. */
43
+ export declare function withReadSources(note: NativeCaptureNote, sources: EngineReadSources): NativeReadCaptureNote;
@@ -0,0 +1,78 @@
1
+ /** Engine coverage only. Source descriptors and their codec belong to foottrace/write. */
2
+ export const SOURCE_LIMITATIONS = Object.freeze([
3
+ 'privacy-active',
4
+ 'identity-unavailable',
5
+ 'untracked-read',
6
+ 'custom-scope',
7
+ 'child-source-ownership',
8
+ 'resumed-source-ownership',
9
+ 'sink-source-unsupported',
10
+ 'source-history-not-included',
11
+ 'source-capture-failed',
12
+ 'redacted-source-export',
13
+ ]);
14
+ /** One owner per runtime/leg; propagated only to frames in that log. Never reads values or scans commits. */
15
+ export class EngineReadSourceCapture {
16
+ runId;
17
+ book;
18
+ from;
19
+ gaps = new Set();
20
+ sealed;
21
+ get observing() {
22
+ return this.book !== undefined;
23
+ }
24
+ constructor(runId, book, gap, from = 0) {
25
+ this.runId = runId;
26
+ this.book = book;
27
+ this.from = from;
28
+ if (gap)
29
+ this.gaps.add(gap);
30
+ }
31
+ limit(gap) {
32
+ if (!this.sealed)
33
+ this.gaps.add(gap);
34
+ }
35
+ retire() {
36
+ this.book?.retire();
37
+ }
38
+ seal(to) {
39
+ if (this.sealed)
40
+ return;
41
+ this.sealed = this.snapshot(to);
42
+ this.retire();
43
+ }
44
+ snapshot(to, redact = false) {
45
+ if (this.sealed && !redact)
46
+ return this.sealed;
47
+ const gaps = new Set(this.gaps);
48
+ if (redact)
49
+ gaps.add('redacted-source-export');
50
+ const record = redact ? undefined : this.book?.snapshot();
51
+ const status = !record
52
+ ? 'unknown'
53
+ : record.status === 'failed'
54
+ ? 'failed'
55
+ : record.status !== 'captured' || gaps.size > 0
56
+ ? 'partial'
57
+ : 'captured';
58
+ return Object.freeze({
59
+ version: 1,
60
+ runId: this.runId,
61
+ persistence: 'memory-only',
62
+ commits: Object.freeze({ from: this.from, to }),
63
+ status,
64
+ limitations: Object.freeze([...gaps]),
65
+ ...(record && { record }),
66
+ });
67
+ }
68
+ }
69
+ /** Keep the v1 producer unchanged. Only explicitly enabled source observations acquire v2. */
70
+ export function withReadSources(note, sources) {
71
+ return Object.freeze({
72
+ ...note,
73
+ version: 2,
74
+ channels: Object.freeze({ ...note.channels, readSources: sources.status }),
75
+ limitations: Object.freeze(note.limitations.filter((gap) => gap !== 'read-sources-not-collected')),
76
+ });
77
+ }
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFNvdXJjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvcmVhZFNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsMEZBQTBGO0FBQzFGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDOUMsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLHdCQUF3QjtJQUN4QiwwQkFBMEI7SUFDMUIseUJBQXlCO0lBQ3pCLDZCQUE2QjtJQUM3Qix1QkFBdUI7SUFDdkIsd0JBQXdCO0NBQ2hCLENBQUMsQ0FBQztBQXdCWiw2R0FBNkc7QUFDN0csTUFBTSxPQUFPLHVCQUF1QjtJQVF2QjtJQUNRO0lBRVI7SUFWTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQW9CLENBQUM7SUFDNUMsTUFBTSxDQUFxQjtJQUNuQyxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxZQUNXLEtBQWEsRUFDTCxJQUF1QixFQUN4QyxHQUFzQixFQUNiLE9BQU8sQ0FBQztRQUhSLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDTCxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUUvQixTQUFJLEdBQUosSUFBSSxDQUFJO1FBRWpCLElBQUksR0FBRztZQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBcUI7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFJLENBQUMsRUFBVTtRQUNiLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFVLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDakMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMvQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxNQUFNO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTTtZQUNwQixDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVE7Z0JBQzVCLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7b0JBQy9DLENBQUMsQ0FBQyxTQUFTO29CQUNYLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDZixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbkIsT0FBTyxFQUFFLENBQUM7WUFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsV0FBVyxFQUFFLGFBQWE7WUFDMUIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMvQyxNQUFNO1lBQ04sV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCw4RkFBOEY7QUFDOUYsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUF1QixFQUFFLE9BQTBCO0lBQ2pGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQixHQUFHLElBQUk7UUFDUCxPQUFPLEVBQUUsQ0FBQztRQUNWLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyw0QkFBNEIsQ0FBQyxDQUFDO0tBQ25HLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlYWRTb3VyY2VSZWNvcmQsIFJlYWRTb3VyY2VTbmFwc2hvdCB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB0eXBlIHsgQ2FwdHVyZUNoYW5uZWxTdGF0dXMsIE5hdGl2ZUNhcHR1cmVOb3RlIH0gZnJvbSAnLi9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5cbi8qKiBFbmdpbmUgY292ZXJhZ2Ugb25seS4gU291cmNlIGRlc2NyaXB0b3JzIGFuZCB0aGVpciBjb2RlYyBiZWxvbmcgdG8gZm9vdHRyYWNlL3dyaXRlLiAqL1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9MSU1JVEFUSU9OUyA9IE9iamVjdC5mcmVlemUoW1xuICAncHJpdmFjeS1hY3RpdmUnLFxuICAnaWRlbnRpdHktdW5hdmFpbGFibGUnLFxuICAndW50cmFja2VkLXJlYWQnLFxuICAnY3VzdG9tLXNjb3BlJyxcbiAgJ2NoaWxkLXNvdXJjZS1vd25lcnNoaXAnLFxuICAncmVzdW1lZC1zb3VyY2Utb3duZXJzaGlwJyxcbiAgJ3Npbmstc291cmNlLXVuc3VwcG9ydGVkJyxcbiAgJ3NvdXJjZS1oaXN0b3J5LW5vdC1pbmNsdWRlZCcsXG4gICdzb3VyY2UtY2FwdHVyZS1mYWlsZWQnLFxuICAncmVkYWN0ZWQtc291cmNlLWV4cG9ydCcsXG5dIGFzIGNvbnN0KTtcbmV4cG9ydCB0eXBlIFNvdXJjZUxpbWl0YXRpb24gPSAodHlwZW9mIFNPVVJDRV9MSU1JVEFUSU9OUylbbnVtYmVyXTtcblxuLyoqIFBhY2tldCAzIGlzIGFuIGluLW1lbW9yeSBvYnNlcnZhdGlvbiwgbm90IGEgc3RvcmVkLWhpc3RvcnkgYWNrbm93bGVkZ2VtZW50LiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVSZWFkU291cmNlcyB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcnNpc3RlbmNlOiAnbWVtb3J5LW9ubHknO1xuICByZWFkb25seSBjb21taXRzOiB7IHJlYWRvbmx5IGZyb206IG51bWJlcjsgcmVhZG9ubHkgdG86IG51bWJlciB9O1xuICByZWFkb25seSBzdGF0dXM6IENhcHR1cmVDaGFubmVsU3RhdHVzO1xuICByZWFkb25seSBsaW1pdGF0aW9uczogcmVhZG9ubHkgU291cmNlTGltaXRhdGlvbltdO1xuICAvKiogQWJzZW50IG1lYW5zIHVua25vd24gb3duZXJzaGlwLCBuZXZlciBhbiBvYnNlcnZlZC1lbXB0eSBib29rLiAqL1xuICByZWFkb25seSByZWNvcmQ/OiBSZWFkU291cmNlU25hcHNob3Q7XG59XG5cbi8qKiBBIG5ldyBkaXNjcmltaW5hbnQgcHJldmVudHMgc3RyaWN0IHYxIHJlYWRlcnMgZnJvbSBhY2NlcHRpbmcgbmV3IGNvbXBsZXRlbmVzcyBjbGFpbXMuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdGl2ZVJlYWRDYXB0dXJlTm90ZSBleHRlbmRzIE9taXQ8TmF0aXZlQ2FwdHVyZU5vdGUsICd2ZXJzaW9uJyB8ICdjaGFubmVscyc+IHtcbiAgcmVhZG9ubHkgdmVyc2lvbjogMjtcbiAgcmVhZG9ubHkgY2hhbm5lbHM6IE9taXQ8TmF0aXZlQ2FwdHVyZU5vdGVbJ2NoYW5uZWxzJ10sICdyZWFkU291cmNlcyc+ICYge1xuICAgIHJlYWRvbmx5IHJlYWRTb3VyY2VzOiBDYXB0dXJlQ2hhbm5lbFN0YXR1cztcbiAgfTtcbn1cbmV4cG9ydCB0eXBlIE5hdGl2ZUNhcHR1cmVPYnNlcnZhdGlvbiA9IE5hdGl2ZUNhcHR1cmVOb3RlIHwgTmF0aXZlUmVhZENhcHR1cmVOb3RlO1xuXG4vKiogT25lIG93bmVyIHBlciBydW50aW1lL2xlZzsgcHJvcGFnYXRlZCBvbmx5IHRvIGZyYW1lcyBpbiB0aGF0IGxvZy4gTmV2ZXIgcmVhZHMgdmFsdWVzIG9yIHNjYW5zIGNvbW1pdHMuICovXG5leHBvcnQgY2xhc3MgRW5naW5lUmVhZFNvdXJjZUNhcHR1cmUge1xuICBwcml2YXRlIHJlYWRvbmx5IGdhcHMgPSBuZXcgU2V0PFNvdXJjZUxpbWl0YXRpb24+KCk7XG4gIHByaXZhdGUgc2VhbGVkPzogRW5naW5lUmVhZFNvdXJjZXM7XG4gIGdldCBvYnNlcnZpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYm9vayAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJvb2s/OiBSZWFkU291cmNlUmVjb3JkLFxuICAgIGdhcD86IFNvdXJjZUxpbWl0YXRpb24sXG4gICAgcmVhZG9ubHkgZnJvbSA9IDAsXG4gICkge1xuICAgIGlmIChnYXApIHRoaXMuZ2Fwcy5hZGQoZ2FwKTtcbiAgfVxuXG4gIGxpbWl0KGdhcDogU291cmNlTGltaXRhdGlvbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWFsZWQpIHRoaXMuZ2Fwcy5hZGQoZ2FwKTtcbiAgfVxuXG4gIHJldGlyZSgpOiB2b2lkIHtcbiAgICB0aGlzLmJvb2s/LnJldGlyZSgpO1xuICB9XG5cbiAgc2VhbCh0bzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhbGVkKSByZXR1cm47XG4gICAgdGhpcy5zZWFsZWQgPSB0aGlzLnNuYXBzaG90KHRvKTtcbiAgICB0aGlzLnJldGlyZSgpO1xuICB9XG5cbiAgc25hcHNob3QodG86IG51bWJlciwgcmVkYWN0ID0gZmFsc2UpOiBFbmdpbmVSZWFkU291cmNlcyB7XG4gICAgaWYgKHRoaXMuc2VhbGVkICYmICFyZWRhY3QpIHJldHVybiB0aGlzLnNlYWxlZDtcbiAgICBjb25zdCBnYXBzID0gbmV3IFNldCh0aGlzLmdhcHMpO1xuICAgIGlmIChyZWRhY3QpIGdhcHMuYWRkKCdyZWRhY3RlZC1zb3VyY2UtZXhwb3J0Jyk7XG4gICAgY29uc3QgcmVjb3JkID0gcmVkYWN0ID8gdW5kZWZpbmVkIDogdGhpcy5ib29rPy5zbmFwc2hvdCgpO1xuICAgIGNvbnN0IHN0YXR1cyA9ICFyZWNvcmRcbiAgICAgID8gJ3Vua25vd24nXG4gICAgICA6IHJlY29yZC5zdGF0dXMgPT09ICdmYWlsZWQnXG4gICAgICA/ICdmYWlsZWQnXG4gICAgICA6IHJlY29yZC5zdGF0dXMgIT09ICdjYXB0dXJlZCcgfHwgZ2Fwcy5zaXplID4gMFxuICAgICAgPyAncGFydGlhbCdcbiAgICAgIDogJ2NhcHR1cmVkJztcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcnVuSWQ6IHRoaXMucnVuSWQsXG4gICAgICBwZXJzaXN0ZW5jZTogJ21lbW9yeS1vbmx5JyxcbiAgICAgIGNvbW1pdHM6IE9iamVjdC5mcmVlemUoeyBmcm9tOiB0aGlzLmZyb20sIHRvIH0pLFxuICAgICAgc3RhdHVzLFxuICAgICAgbGltaXRhdGlvbnM6IE9iamVjdC5mcmVlemUoWy4uLmdhcHNdKSxcbiAgICAgIC4uLihyZWNvcmQgJiYgeyByZWNvcmQgfSksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqIEtlZXAgdGhlIHYxIHByb2R1Y2VyIHVuY2hhbmdlZC4gT25seSBleHBsaWNpdGx5IGVuYWJsZWQgc291cmNlIG9ic2VydmF0aW9ucyBhY3F1aXJlIHYyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWFkU291cmNlcyhub3RlOiBOYXRpdmVDYXB0dXJlTm90ZSwgc291cmNlczogRW5naW5lUmVhZFNvdXJjZXMpOiBOYXRpdmVSZWFkQ2FwdHVyZU5vdGUge1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgLi4ubm90ZSxcbiAgICB2ZXJzaW9uOiAyLFxuICAgIGNoYW5uZWxzOiBPYmplY3QuZnJlZXplKHsgLi4ubm90ZS5jaGFubmVscywgcmVhZFNvdXJjZXM6IHNvdXJjZXMuc3RhdHVzIH0pLFxuICAgIGxpbWl0YXRpb25zOiBPYmplY3QuZnJlZXplKG5vdGUubGltaXRhdGlvbnMuZmlsdGVyKChnYXApID0+IGdhcCAhPT0gJ3JlYWQtc291cmNlcy1ub3QtY29sbGVjdGVkJykpLFxuICB9KTtcbn1cbiJdfQ==