footprintjs 10.5.0 → 10.7.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 (108) hide show
  1. package/CLAUDE.md +2 -1
  2. package/dist/esm/index.d.ts +13 -2
  3. package/dist/esm/index.js +5 -3
  4. package/dist/esm/lib/attempt/backoff.d.ts +96 -0
  5. package/dist/esm/lib/attempt/backoff.js +173 -0
  6. package/dist/esm/lib/attempt/deadline.d.ts +0 -5
  7. package/dist/esm/lib/attempt/deadline.js +2 -27
  8. package/dist/esm/lib/attempt/index.d.ts +6 -4
  9. package/dist/esm/lib/attempt/index.js +6 -5
  10. package/dist/esm/lib/attempt/runner.js +3 -2
  11. package/dist/esm/lib/capture/readSources.d.ts +13 -2
  12. package/dist/esm/lib/capture/readSources.js +11 -3
  13. package/dist/esm/lib/capture/sourceOwnership.d.ts +21 -0
  14. package/dist/esm/lib/capture/sourceOwnership.js +133 -0
  15. package/dist/esm/lib/capture/sourceOwnershipFormat.d.ts +35 -0
  16. package/dist/esm/lib/capture/sourceOwnershipFormat.js +31 -0
  17. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +5 -1
  18. package/dist/esm/lib/capture/storedReadSourceCounts.js +15 -11
  19. package/dist/esm/lib/capture/storedReadSources.js +21 -5
  20. package/dist/esm/lib/capture/storedSourceOwnership.d.ts +8 -0
  21. package/dist/esm/lib/capture/storedSourceOwnership.js +100 -0
  22. package/dist/esm/lib/detach/drivers/setTimeout.d.ts +4 -2
  23. package/dist/esm/lib/detach/drivers/setTimeout.js +12 -2
  24. package/dist/esm/lib/detach/flush.d.ts +6 -1
  25. package/dist/esm/lib/detach/flush.js +8 -6
  26. package/dist/esm/lib/engine/handlers/StageRunner.js +2 -1
  27. package/dist/esm/lib/memory/StageContext.d.ts +3 -0
  28. package/dist/esm/lib/memory/StageContext.js +29 -8
  29. package/dist/esm/lib/memory/frameTypes.d.ts +2 -0
  30. package/dist/esm/lib/memory/frameTypes.js +1 -1
  31. package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +8 -1
  32. package/dist/esm/lib/observer-queue/deferredDispatcher.js +13 -6
  33. package/dist/esm/lib/recorder/AttemptRecorder.js +8 -9
  34. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +7 -2
  35. package/dist/esm/lib/runner/FlowChartExecutor.js +8 -3
  36. package/dist/esm/lib/runner/captureHistory.js +6 -4
  37. package/dist/esm/lib/runner/deadline.js +3 -2
  38. package/dist/esm/lib/runner/recordSink.d.ts +2 -1
  39. package/dist/esm/lib/runner/recordSink.js +12 -7
  40. package/dist/esm/lib/sinks/fileSink.js +7 -6
  41. package/dist/esm/lib/sinks/indexedAdmission.d.ts +14 -0
  42. package/dist/esm/lib/sinks/indexedAdmission.js +77 -0
  43. package/dist/esm/lib/sinks/indexedIO.d.ts +14 -0
  44. package/dist/esm/lib/sinks/indexedIO.js +98 -0
  45. package/dist/esm/lib/sinks/indexedRecordFile.d.ts +3 -0
  46. package/dist/esm/lib/sinks/indexedRecordFile.js +120 -0
  47. package/dist/esm/lib/sinks/indexedScan.d.ts +6 -0
  48. package/dist/esm/lib/sinks/indexedScan.js +73 -0
  49. package/dist/esm/lib/sinks/indexedTypes.d.ts +60 -0
  50. package/dist/esm/lib/sinks/indexedTypes.js +2 -0
  51. package/dist/esm/lib/timers/longTimeout.d.ts +37 -0
  52. package/dist/esm/lib/timers/longTimeout.js +56 -0
  53. package/dist/esm/sinks.d.ts +2 -0
  54. package/dist/esm/sinks.js +2 -1
  55. package/dist/index.js +8 -3
  56. package/dist/lib/attempt/backoff.js +178 -0
  57. package/dist/lib/attempt/deadline.js +4 -30
  58. package/dist/lib/attempt/index.js +9 -6
  59. package/dist/lib/attempt/runner.js +4 -3
  60. package/dist/lib/capture/readSources.js +11 -3
  61. package/dist/lib/capture/sourceOwnership.js +138 -0
  62. package/dist/lib/capture/sourceOwnershipFormat.js +35 -0
  63. package/dist/lib/capture/storedReadSourceCounts.js +15 -11
  64. package/dist/lib/capture/storedReadSources.js +21 -5
  65. package/dist/lib/capture/storedSourceOwnership.js +104 -0
  66. package/dist/lib/detach/drivers/setTimeout.js +12 -2
  67. package/dist/lib/detach/flush.js +8 -6
  68. package/dist/lib/engine/handlers/StageRunner.js +2 -1
  69. package/dist/lib/memory/StageContext.js +29 -8
  70. package/dist/lib/memory/frameTypes.js +1 -1
  71. package/dist/lib/observer-queue/deferredDispatcher.js +13 -6
  72. package/dist/lib/recorder/AttemptRecorder.js +8 -9
  73. package/dist/lib/runner/FlowChartExecutor.js +8 -3
  74. package/dist/lib/runner/captureHistory.js +6 -4
  75. package/dist/lib/runner/deadline.js +3 -2
  76. package/dist/lib/runner/recordSink.js +12 -7
  77. package/dist/lib/sinks/fileSink.js +7 -6
  78. package/dist/lib/sinks/indexedAdmission.js +85 -0
  79. package/dist/lib/sinks/indexedIO.js +108 -0
  80. package/dist/lib/sinks/indexedRecordFile.js +124 -0
  81. package/dist/lib/sinks/indexedScan.js +77 -0
  82. package/dist/lib/sinks/indexedTypes.js +3 -0
  83. package/dist/lib/timers/longTimeout.js +60 -0
  84. package/dist/sinks.js +4 -2
  85. package/dist/types/index.d.ts +13 -2
  86. package/dist/types/lib/attempt/backoff.d.ts +96 -0
  87. package/dist/types/lib/attempt/deadline.d.ts +0 -5
  88. package/dist/types/lib/attempt/index.d.ts +6 -4
  89. package/dist/types/lib/capture/readSources.d.ts +13 -2
  90. package/dist/types/lib/capture/sourceOwnership.d.ts +21 -0
  91. package/dist/types/lib/capture/sourceOwnershipFormat.d.ts +35 -0
  92. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +5 -1
  93. package/dist/types/lib/capture/storedSourceOwnership.d.ts +8 -0
  94. package/dist/types/lib/detach/drivers/setTimeout.d.ts +4 -2
  95. package/dist/types/lib/detach/flush.d.ts +6 -1
  96. package/dist/types/lib/memory/StageContext.d.ts +3 -0
  97. package/dist/types/lib/memory/frameTypes.d.ts +2 -0
  98. package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +8 -1
  99. package/dist/types/lib/runner/FlowChartExecutor.d.ts +7 -2
  100. package/dist/types/lib/runner/recordSink.d.ts +2 -1
  101. package/dist/types/lib/sinks/indexedAdmission.d.ts +14 -0
  102. package/dist/types/lib/sinks/indexedIO.d.ts +14 -0
  103. package/dist/types/lib/sinks/indexedRecordFile.d.ts +3 -0
  104. package/dist/types/lib/sinks/indexedScan.d.ts +6 -0
  105. package/dist/types/lib/sinks/indexedTypes.d.ts +60 -0
  106. package/dist/types/lib/timers/longTimeout.d.ts +37 -0
  107. package/dist/types/sinks.d.ts +2 -0
  108. package/package.json +2 -2
@@ -0,0 +1,21 @@
1
+ import type { LogAddress } from 'foottrace';
2
+ import type { SourceOwnershipGap, SourceOwnershipWitness } from './sourceOwnershipFormat.js';
3
+ /** Collect at the existing native funnels, independently of source rows and retained read values. */
4
+ export declare class SourceOwnershipCollector {
5
+ private readonly runId;
6
+ private readonly logAddress;
7
+ private readonly from;
8
+ private readonly executions;
9
+ private readonly gaps;
10
+ private attempts;
11
+ private bytes;
12
+ constructor(runId: string, logAddress: LogAddress, from: number);
13
+ limit(gap: SourceOwnershipGap): void;
14
+ begin(runId: string, runtimeStageId: string, stateAddress: readonly string[]): void;
15
+ attempt(runtimeStageId: string, attempt: number): string | undefined;
16
+ commit(runtimeStageId: string, index: number): void;
17
+ checkSelectedAddress(runtimeStageId: string, selected: readonly string[]): void;
18
+ snapshot(to: number, segment: number): SourceOwnershipWitness;
19
+ private charge;
20
+ }
21
+ export declare function redactSourceOwnership(witness: SourceOwnershipWitness): SourceOwnershipWitness;
@@ -0,0 +1,133 @@
1
+ import { buildAttemptId } from 'foottrace';
2
+ import { isNativeSourceExecution, SOURCE_OWNERSHIP_GAPS, SOURCE_OWNERSHIP_V1_LIMITS } from './sourceOwnershipFormat.js';
3
+ /** Collect at the existing native funnels, independently of source rows and retained read values. */
4
+ export class SourceOwnershipCollector {
5
+ runId;
6
+ logAddress;
7
+ from;
8
+ executions = new Map();
9
+ gaps = new Set();
10
+ attempts = 0;
11
+ bytes = 0;
12
+ constructor(runId, logAddress, from) {
13
+ this.runId = runId;
14
+ this.logAddress = logAddress;
15
+ this.from = from;
16
+ // Reserve the largest header before entries. Native identifiers may need JSON escapes.
17
+ this.bytes = encodedBytes({
18
+ version: 1,
19
+ runId,
20
+ logAddress,
21
+ segment: Number.MAX_SAFE_INTEGER,
22
+ commits: { from, to: Number.MAX_SAFE_INTEGER },
23
+ status: 'captured',
24
+ limitations: SOURCE_OWNERSHIP_GAPS,
25
+ executions: [],
26
+ });
27
+ if (this.bytes > SOURCE_OWNERSHIP_V1_LIMITS.bytes)
28
+ this.limit('bytes-limit');
29
+ }
30
+ limit(gap) {
31
+ this.gaps.add(gap);
32
+ }
33
+ begin(runId, runtimeStageId, stateAddress) {
34
+ if (runId !== this.runId ||
35
+ runtimeStageId.length > SOURCE_OWNERSHIP_V1_LIMITS.name ||
36
+ !isNativeSourceExecution(runtimeStageId)) {
37
+ this.limit('identity-unavailable');
38
+ return;
39
+ }
40
+ if (this.executions.has(runtimeStageId)) {
41
+ this.limit('identity-unavailable');
42
+ return;
43
+ }
44
+ if (this.executions.size >= SOURCE_OWNERSHIP_V1_LIMITS.executions) {
45
+ this.limit('execution-limit');
46
+ return;
47
+ }
48
+ if (stateAddress.length > SOURCE_OWNERSHIP_V1_LIMITS.depth ||
49
+ stateAddress.some((part) => typeof part !== 'string' || part.length > SOURCE_OWNERSHIP_V1_LIMITS.name)) {
50
+ this.limit('identity-unavailable');
51
+ return;
52
+ }
53
+ if (!this.charge(encodedBytes({ runtimeStageId, stateAddress, firstCommit: Number.MAX_SAFE_INTEGER, attemptIds: [] }) + 1))
54
+ return;
55
+ this.executions.set(runtimeStageId, {
56
+ runtimeStageId,
57
+ stateAddress: Object.freeze([...stateAddress]),
58
+ attemptIds: [],
59
+ });
60
+ }
61
+ attempt(runtimeStageId, attempt) {
62
+ const owner = this.executions.get(runtimeStageId);
63
+ if (!owner || !Number.isSafeInteger(attempt) || attempt < 1 || attempt !== owner.attemptIds.length + 1) {
64
+ this.limit('attempt-unavailable');
65
+ return undefined;
66
+ }
67
+ if (this.attempts >= SOURCE_OWNERSHIP_V1_LIMITS.attempts) {
68
+ this.limit('attempt-limit');
69
+ return undefined;
70
+ }
71
+ const id = buildAttemptId(runtimeStageId, attempt);
72
+ if (id.length > SOURCE_OWNERSHIP_V1_LIMITS.name) {
73
+ this.limit('attempt-unavailable');
74
+ return undefined;
75
+ }
76
+ if (!this.charge(encodedBytes(id) + 1))
77
+ return undefined;
78
+ owner.attemptIds.push(id);
79
+ this.attempts++;
80
+ return id;
81
+ }
82
+ commit(runtimeStageId, index) {
83
+ const owner = this.executions.get(runtimeStageId);
84
+ if (!owner || !Number.isSafeInteger(index) || index < this.from) {
85
+ this.limit('commit-unavailable');
86
+ return;
87
+ }
88
+ owner.firstCommit ??= index;
89
+ }
90
+ checkSelectedAddress(runtimeStageId, selected) {
91
+ const address = this.executions.get(runtimeStageId)?.stateAddress;
92
+ // A native fallback is real evidence, but it cannot authorize its own address.
93
+ if (address && (address.length !== selected.length || address.some((part, index) => part !== selected[index])))
94
+ this.limit('source-address-unproven');
95
+ }
96
+ snapshot(to, segment) {
97
+ return Object.freeze({
98
+ version: 1,
99
+ runId: this.runId,
100
+ logAddress: this.logAddress,
101
+ segment,
102
+ commits: Object.freeze({ from: this.from, to }),
103
+ status: this.gaps.size ? 'unknown' : 'captured',
104
+ limitations: Object.freeze([...this.gaps]),
105
+ executions: Object.freeze([...this.executions.values()].map((owner) => Object.freeze({
106
+ runtimeStageId: owner.runtimeStageId,
107
+ stateAddress: owner.stateAddress,
108
+ ...(owner.firstCommit !== undefined && { firstCommit: owner.firstCommit }),
109
+ attemptIds: Object.freeze([...owner.attemptIds]),
110
+ }))),
111
+ });
112
+ }
113
+ charge(bytes) {
114
+ if (bytes > SOURCE_OWNERSHIP_V1_LIMITS.bytes - this.bytes) {
115
+ this.limit('bytes-limit');
116
+ return false;
117
+ }
118
+ this.bytes += bytes;
119
+ return true;
120
+ }
121
+ }
122
+ function encodedBytes(value) {
123
+ return new TextEncoder().encode(JSON.stringify(value)).length;
124
+ }
125
+ export function redactSourceOwnership(witness) {
126
+ return Object.freeze({
127
+ ...witness,
128
+ status: 'unknown',
129
+ executions: Object.freeze([]),
130
+ limitations: Object.freeze(['redacted-export']),
131
+ });
132
+ }
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlT3duZXJzaGlwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL3NvdXJjZU93bmVyc2hpcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBU3hILHFHQUFxRztBQUNyRyxNQUFNLE9BQU8sd0JBQXdCO0lBTU47SUFBZ0M7SUFBeUM7SUFMckYsVUFBVSxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQzdDLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBc0IsQ0FBQztJQUM5QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVsQixZQUE2QixLQUFhLEVBQW1CLFVBQXNCLEVBQW1CLElBQVk7UUFBckYsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFtQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQW1CLFNBQUksR0FBSixJQUFJLENBQVE7UUFDaEgsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsS0FBSztZQUNMLFVBQVU7WUFDVixPQUFPLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtZQUNoQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUM5QyxNQUFNLEVBQUUsVUFBVTtZQUNsQixXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLDBCQUEwQixDQUFDLEtBQUs7WUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lB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LENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFjO0lBQ2xDLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE9BQStCO0lBQ25FLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQixHQUFHLE9BQU87UUFDVixNQUFNLEVBQUUsU0FBUztRQUNqQixVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDN0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxpQkFBMEIsQ0FBQyxDQUFDO0tBQ3pELENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgYnVpbGRBdHRlbXB0SWQgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZU93bmVyc2hpcEdhcCwgU291cmNlT3duZXJzaGlwV2l0bmVzcyB9IGZyb20gJy4vc291cmNlT3duZXJzaGlwRm9ybWF0LmpzJztcbmltcG9ydCB7IGlzTmF0aXZlU291cmNlRXhlY3V0aW9uLCBTT1VSQ0VfT1dORVJTSElQX0dBUFMsIFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTIH0gZnJvbSAnLi9zb3VyY2VPd25lcnNoaXBGb3JtYXQuanMnO1xuXG50eXBlIE11dGFibGVPd25lciA9IHtcbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgc3RhdGVBZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgZmlyc3RDb21taXQ/OiBudW1iZXI7XG4gIGF0dGVtcHRJZHM6IHN0cmluZ1tdO1xufTtcblxuLyoqIENvbGxlY3QgYXQgdGhlIGV4aXN0aW5nIG5hdGl2ZSBmdW5uZWxzLCBpbmRlcGVuZGVudGx5IG9mIHNvdXJjZSByb3dzIGFuZCByZXRhaW5lZCByZWFkIHZhbHVlcy4gKi9cbmV4cG9ydCBjbGFzcyBTb3VyY2VPd25lcnNoaXBDb2xsZWN0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGV4ZWN1dGlvbnMgPSBuZXcgTWFwPHN0cmluZywgTXV0YWJsZU93bmVyPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGdhcHMgPSBuZXcgU2V0PFNvdXJjZU93bmVyc2hpcEdhcD4oKTtcbiAgcHJpdmF0ZSBhdHRlbXB0cyA9IDA7XG4gIHByaXZhdGUgYnl0ZXMgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBsb2dBZGRyZXNzOiBMb2dBZGRyZXNzLCBwcml2YXRlIHJlYWRvbmx5IGZyb206IG51bWJlcikge1xuICAgIC8vIFJlc2VydmUgdGhlIGxhcmdlc3QgaGVhZGVyIGJlZm9yZSBlbnRyaWVzLiBOYXRpdmUgaWRlbnRpZmllcnMgbWF5IG5lZWQgSlNPTiBlc2NhcGVzLlxuICAgIHRoaXMuYnl0ZXMgPSBlbmNvZGVkQnl0ZXMoe1xuICAgICAgdmVyc2lvbjogMSxcbiAgICAgIHJ1bklkLFxuICAgICAgbG9nQWRkcmVzcyxcbiAgICAgIHNlZ21lbnQ6IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLFxuICAgICAgY29tbWl0czogeyBmcm9tLCB0bzogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfSxcbiAgICAgIHN0YXR1czogJ2NhcHR1cmVkJyxcbiAgICAgIGxpbWl0YXRpb25zOiBTT1VSQ0VfT1dORVJTSElQX0dBUFMsXG4gICAgICBleGVjdXRpb25zOiBbXSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5ieXRlcyA+IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLmJ5dGVzKSB0aGlzLmxpbWl0KCdieXRlcy1saW1pdCcpO1xuICB9XG5cbiAgbGltaXQoZ2FwOiBTb3VyY2VPd25lcnNoaXBHYXApOiB2b2lkIHtcbiAgICB0aGlzLmdhcHMuYWRkKGdhcCk7XG4gIH1cblxuICBiZWdpbihydW5JZDogc3RyaW5nLCBydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBzdGF0ZUFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgcnVuSWQgIT09IHRoaXMucnVuSWQgfHxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkLmxlbmd0aCA+IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLm5hbWUgfHxcbiAgICAgICFpc05hdGl2ZVNvdXJjZUV4ZWN1dGlvbihydW50aW1lU3RhZ2VJZClcbiAgICApIHtcbiAgICAgIHRoaXMubGltaXQoJ2lkZW50aXR5LXVuYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmV4ZWN1dGlvbnMuaGFzKHJ1bnRpbWVTdGFnZUlkKSkge1xuICAgICAgdGhpcy5saW1pdCgnaWRlbnRpdHktdW5hdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXhlY3V0aW9ucy5zaXplID49IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLmV4ZWN1dGlvbnMpIHtcbiAgICAgIHRoaXMubGltaXQoJ2V4ZWN1dGlvbi1saW1pdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBzdGF0ZUFkZHJlc3MubGVuZ3RoID4gU09VUkNFX09XTkVSU0hJUF9WMV9MSU1JVFMuZGVwdGggfHxcbiAgICAgIHN0YXRlQWRkcmVzcy5zb21lKChwYXJ0KSA9PiB0eXBlb2YgcGFydCAhPT0gJ3N0cmluZycgfHwgcGFydC5sZW5ndGggPiBTT1VSQ0VfT1dORVJTSElQX1YxX0xJTUlUUy5uYW1lKVxuICAgICkge1xuICAgICAgdGhpcy5saW1pdCgnaWRlbnRpdHktdW5hdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXRoaXMuY2hhcmdlKFxuICAgICAgICBlbmNvZGVkQnl0ZXMoeyBydW50aW1lU3RhZ2VJZCwgc3RhdGVBZGRyZXNzLCBmaXJzdENvbW1pdDogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsIGF0dGVtcHRJZHM6IFtdIH0pICsgMSxcbiAgICAgIClcbiAgICApXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5leGVjdXRpb25zLnNldChydW50aW1lU3RhZ2VJZCwge1xuICAgICAgcnVudGltZVN0YWdlSWQsXG4gICAgICBzdGF0ZUFkZHJlc3M6IE9iamVjdC5mcmVlemUoWy4uLnN0YXRlQWRkcmVzc10pLFxuICAgICAgYXR0ZW1wdElkczogW10sXG4gICAgfSk7XG4gIH1cblxuICBhdHRlbXB0KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIGF0dGVtcHQ6IG51bWJlcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgb3duZXIgPSB0aGlzLmV4ZWN1dGlvbnMuZ2V0KHJ1bnRpbWVTdGFnZUlkKTtcbiAgICBpZiAoIW93bmVyIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihhdHRlbXB0KSB8fCBhdHRlbXB0IDwgMSB8fCBhdHRlbXB0ICE9PSBvd25lci5hdHRlbXB0SWRzLmxlbmd0aCArIDEpIHtcbiAgICAgIHRoaXMubGltaXQoJ2F0dGVtcHQtdW5hdmFpbGFibGUnKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLmF0dGVtcHRzID49IFNPVVJDRV9PV05FUlNISVBfVjFfTElNSVRTLmF0dGVtcHRzKSB7XG4gICAgICB0aGlzLmxpbWl0KCdhdHRlbXB0LWxpbWl0Jyk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IGJ1aWxkQXR0ZW1wdElkKHJ1bnRpbWVTdGFnZUlkLCBhdHRlbXB0KTtcbiAgICBpZiAoaWQubGVuZ3RoID4gU09VUkNFX09XTkVSU0hJUF9WMV9MSU1JVFMubmFtZSkge1xuICAgICAgdGhpcy5saW1pdCgnYXR0ZW1wdC11bmF2YWlsYWJsZScpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoYXJnZShlbmNvZGVkQnl0ZXMoaWQpICsgMSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgb3duZXIuYXR0ZW1wdElkcy5wdXNoKGlkKTtcbiAgICB0aGlzLmF0dGVtcHRzKys7XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgY29tbWl0KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBvd25lciA9IHRoaXMuZXhlY3V0aW9ucy5nZXQocnVudGltZVN0YWdlSWQpO1xuICAgIGlmICghb3duZXIgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGluZGV4KSB8fCBpbmRleCA8IHRoaXMuZnJvbSkge1xuICAgICAgdGhpcy5saW1pdCgnY29tbWl0LXVuYXZhaWxhYmxlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG93bmVyLmZpcnN0Q29tbWl0ID8/PSBpbmRleDtcbiAgfVxuXG4gIGNoZWNrU2VsZWN0ZWRBZGRyZXNzKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHNlbGVjdGVkOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLmV4ZWN1dGlvbnMuZ2V0KHJ1bnRpbWVTdGFnZUlkKT8uc3RhdGVBZGRyZXNzO1xuICAgIC8vIEEgbmF0aXZlIGZhbGxiYWNrIGlzIHJlYWwgZXZpZGVuY2UsIGJ1dCBpdCBjYW5ub3QgYXV0aG9yaXplIGl0cyBvd24gYWRkcmVzcy5cbiAgICBpZiAoYWRkcmVzcyAmJiAoYWRkcmVzcy5sZW5ndGggIT09IHNlbGVjdGVkLmxlbmd0aCB8fCBhZGRyZXNzLnNvbWUoKHBhcnQsIGluZGV4KSA9PiBwYXJ0ICE9PSBzZWxlY3RlZFtpbmRleF0pKSlcbiAgICAgIHRoaXMubGltaXQoJ3NvdXJjZS1hZGRyZXNzLXVucHJvdmVuJyk7XG4gIH1cblxuICBzbmFwc2hvdCh0bzogbnVtYmVyLCBzZWdtZW50OiBudW1iZXIpOiBTb3VyY2VPd25lcnNoaXBXaXRuZXNzIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICB2ZXJzaW9uOiAxLFxuICAgICAgcnVuSWQ6IHRoaXMucnVuSWQsXG4gICAgICBsb2dBZGRyZXNzOiB0aGlzLmxvZ0FkZHJlc3MsXG4gICAgICBzZWdtZW50LFxuICAgICAgY29tbWl0czogT2JqZWN0LmZyZWV6ZSh7IGZyb206IHRoaXMuZnJvbSwgdG8gfSksXG4gICAgICBzdGF0dXM6IHRoaXMuZ2Fwcy5zaXplID8gJ3Vua25vd24nIDogJ2NhcHR1cmVkJyxcbiAgICAgIGxpbWl0YXRpb25zOiBPYmplY3QuZnJlZXplKFsuLi50aGlzLmdhcHNdKSxcbiAgICAgIGV4ZWN1dGlvbnM6IE9iamVjdC5mcmVlemUoXG4gICAgICAgIFsuLi50aGlzLmV4ZWN1dGlvbnMudmFsdWVzKCldLm1hcCgob3duZXIpID0+XG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgICAgICBydW50aW1lU3RhZ2VJZDogb3duZXIucnVudGltZVN0YWdlSWQsXG4gICAgICAgICAgICBzdGF0ZUFkZHJlc3M6IG93bmVyLnN0YXRlQWRkcmVzcyxcbiAgICAgICAgICAgIC4uLihvd25lci5maXJzdENvbW1pdCAhPT0gdW5kZWZpbmVkICYmIHsgZmlyc3RDb21taXQ6IG93bmVyLmZpcnN0Q29tbWl0IH0pLFxuICAgICAgICAgICAgYXR0ZW1wdElkczogT2JqZWN0LmZyZWV6ZShbLi4ub3duZXIuYXR0ZW1wdElkc10pLFxuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhcmdlKGJ5dGVzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAoYnl0ZXMgPiBTT1VSQ0VfT1dORVJTSElQX1YxX0xJTUlUUy5ieXRlcyAtIHRoaXMuYnl0ZXMpIHtcbiAgICAgIHRoaXMubGltaXQoJ2J5dGVzLWxpbWl0Jyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYnl0ZXMgKz0gYnl0ZXM7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlZEJ5dGVzKHZhbHVlOiB1bmtub3duKTogbnVtYmVyIHtcbiAgcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpLmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZGFjdFNvdXJjZU93bmVyc2hpcCh3aXRuZXNzOiBTb3VyY2VPd25lcnNoaXBXaXRuZXNzKTogU291cmNlT3duZXJzaGlwV2l0bmVzcyB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAuLi53aXRuZXNzLFxuICAgIHN0YXR1czogJ3Vua25vd24nLFxuICAgIGV4ZWN1dGlvbnM6IE9iamVjdC5mcmVlemUoW10pLFxuICAgIGxpbWl0YXRpb25zOiBPYmplY3QuZnJlZXplKFsncmVkYWN0ZWQtZXhwb3J0JyBhcyBjb25zdF0pLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,35 @@
1
+ import type { LogAddress } from 'foottrace';
2
+ /** Immutable format-v1 ceilings, not writer tuning. Changing these requires another wire version. */
3
+ export declare const SOURCE_OWNERSHIP_V1_LIMITS: Readonly<{
4
+ executions: 4096;
5
+ attempts: 16384;
6
+ bytes: 524288;
7
+ depth: 64;
8
+ name: 2048;
9
+ }>;
10
+ export declare const SOURCE_OWNERSHIP_GAPS: readonly ["identity-unavailable", "namespace-changed", "execution-limit", "attempt-limit", "bytes-limit", "attempt-unavailable", "commit-unavailable", "source-address-unproven", "redacted-export"];
11
+ export type SourceOwnershipGap = (typeof SOURCE_OWNERSHIP_GAPS)[number];
12
+ /** Native execution identity and actual stage-function invocations. No values, timings or outcomes. */
13
+ export interface SourceExecutionOwnership {
14
+ readonly runtimeStageId: string;
15
+ readonly stateAddress: readonly string[];
16
+ /** First real commit of this execution; absent while it has not committed. */
17
+ readonly firstCommit?: number;
18
+ readonly attemptIds: readonly string[];
19
+ }
20
+ /** One native source-book segment. A storage receipt does not authenticate this observation. */
21
+ export interface SourceOwnershipWitness {
22
+ readonly version: 1;
23
+ readonly runId: string;
24
+ readonly logAddress: LogAddress;
25
+ readonly segment: number;
26
+ readonly commits: {
27
+ readonly from: number;
28
+ readonly to: number;
29
+ };
30
+ readonly status: 'captured' | 'unknown';
31
+ readonly limitations: readonly SourceOwnershipGap[];
32
+ readonly executions: readonly SourceExecutionOwnership[];
33
+ }
34
+ /** Compose the public codec; its permissive legacy parse alone does not prove a native execution. */
35
+ export declare function isNativeSourceExecution(id: string): boolean;
@@ -0,0 +1,31 @@
1
+ import { buildRuntimeStageId, isExecutionKey, parseRuntimeStageId } from 'foottrace';
2
+ /** Immutable format-v1 ceilings, not writer tuning. Changing these requires another wire version. */
3
+ export const SOURCE_OWNERSHIP_V1_LIMITS = Object.freeze({
4
+ executions: 4096,
5
+ attempts: 16384,
6
+ bytes: 524288,
7
+ depth: 64,
8
+ name: 2048,
9
+ });
10
+ export const SOURCE_OWNERSHIP_GAPS = Object.freeze([
11
+ 'identity-unavailable',
12
+ 'namespace-changed',
13
+ 'execution-limit',
14
+ 'attempt-limit',
15
+ 'bytes-limit',
16
+ 'attempt-unavailable',
17
+ 'commit-unavailable',
18
+ 'source-address-unproven',
19
+ 'redacted-export',
20
+ ]);
21
+ /** Compose the public codec; its permissive legacy parse alone does not prove a native execution. */
22
+ export function isNativeSourceExecution(id) {
23
+ if (!isExecutionKey(id))
24
+ return false;
25
+ const parsed = parseRuntimeStageId(id);
26
+ return (!!parsed.stageId &&
27
+ Number.isSafeInteger(parsed.executionIndex) &&
28
+ parsed.executionIndex >= 0 &&
29
+ buildRuntimeStageId(parsed.stageId, parsed.executionIndex, parsed.subflowPath) === id);
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlT3duZXJzaGlwRm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL3NvdXJjZU93bmVyc2hpcEZvcm1hdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXJGLHFHQUFxRztBQUNyRyxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3RELFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsS0FBSyxFQUFFLE1BQU07SUFDYixLQUFLLEVBQUUsRUFBRTtJQUNULElBQUksRUFBRSxJQUFJO0NBQ1gsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqRCxzQkFBc0I7SUFDdEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2YsYUFBYTtJQUNiLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIseUJBQXlCO0lBQ3pCLGlCQUFpQjtDQUNULENBQUMsQ0FBQztBQXdCWixxR0FBcUc7QUFDckcsTUFBTSxVQUFVLHVCQUF1QixDQUFDLEVBQVU7SUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2QyxPQUFPLENBQ0wsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPO1FBQ2hCLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztRQUMzQyxNQUFNLENBQUMsY0FBYyxJQUFJLENBQUM7UUFDMUIsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQ3RGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IGJ1aWxkUnVudGltZVN0YWdlSWQsIGlzRXhlY3V0aW9uS2V5LCBwYXJzZVJ1bnRpbWVTdGFnZUlkIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIEltbXV0YWJsZSBmb3JtYXQtdjEgY2VpbGluZ3MsIG5vdCB3cml0ZXIgdHVuaW5nLiBDaGFuZ2luZyB0aGVzZSByZXF1aXJlcyBhbm90aGVyIHdpcmUgdmVyc2lvbi4gKi9cbmV4cG9ydCBjb25zdCBTT1VSQ0VfT1dORVJTSElQX1YxX0xJTUlUUyA9IE9iamVjdC5mcmVlemUoe1xuICBleGVjdXRpb25zOiA0MDk2LFxuICBhdHRlbXB0czogMTYzODQsXG4gIGJ5dGVzOiA1MjQyODgsXG4gIGRlcHRoOiA2NCxcbiAgbmFtZTogMjA0OCxcbn0pO1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9PV05FUlNISVBfR0FQUyA9IE9iamVjdC5mcmVlemUoW1xuICAnaWRlbnRpdHktdW5hdmFpbGFibGUnLFxuICAnbmFtZXNwYWNlLWNoYW5nZWQnLFxuICAnZXhlY3V0aW9uLWxpbWl0JyxcbiAgJ2F0dGVtcHQtbGltaXQnLFxuICAnYnl0ZXMtbGltaXQnLFxuICAnYXR0ZW1wdC11bmF2YWlsYWJsZScsXG4gICdjb21taXQtdW5hdmFpbGFibGUnLFxuICAnc291cmNlLWFkZHJlc3MtdW5wcm92ZW4nLFxuICAncmVkYWN0ZWQtZXhwb3J0Jyxcbl0gYXMgY29uc3QpO1xuZXhwb3J0IHR5cGUgU291cmNlT3duZXJzaGlwR2FwID0gKHR5cGVvZiBTT1VSQ0VfT1dORVJTSElQX0dBUFMpW251bWJlcl07XG5cbi8qKiBOYXRpdmUgZXhlY3V0aW9uIGlkZW50aXR5IGFuZCBhY3R1YWwgc3RhZ2UtZnVuY3Rpb24gaW52b2NhdGlvbnMuIE5vIHZhbHVlcywgdGltaW5ncyBvciBvdXRjb21lcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU291cmNlRXhlY3V0aW9uT3duZXJzaGlwIHtcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhdGVBZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIEZpcnN0IHJlYWwgY29tbWl0IG9mIHRoaXMgZXhlY3V0aW9uOyBhYnNlbnQgd2hpbGUgaXQgaGFzIG5vdCBjb21taXR0ZWQuICovXG4gIHJlYWRvbmx5IGZpcnN0Q29tbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBhdHRlbXB0SWRzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIE9uZSBuYXRpdmUgc291cmNlLWJvb2sgc2VnbWVudC4gQSBzdG9yYWdlIHJlY2VpcHQgZG9lcyBub3QgYXV0aGVudGljYXRlIHRoaXMgb2JzZXJ2YXRpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFNvdXJjZU93bmVyc2hpcFdpdG5lc3Mge1xuICByZWFkb25seSB2ZXJzaW9uOiAxO1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBsb2dBZGRyZXNzOiBMb2dBZGRyZXNzO1xuICByZWFkb25seSBzZWdtZW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG4gIHJlYWRvbmx5IHN0YXR1czogJ2NhcHR1cmVkJyB8ICd1bmtub3duJztcbiAgcmVhZG9ubHkgbGltaXRhdGlvbnM6IHJlYWRvbmx5IFNvdXJjZU93bmVyc2hpcEdhcFtdO1xuICByZWFkb25seSBleGVjdXRpb25zOiByZWFkb25seSBTb3VyY2VFeGVjdXRpb25Pd25lcnNoaXBbXTtcbn1cblxuLyoqIENvbXBvc2UgdGhlIHB1YmxpYyBjb2RlYzsgaXRzIHBlcm1pc3NpdmUgbGVnYWN5IHBhcnNlIGFsb25lIGRvZXMgbm90IHByb3ZlIGEgbmF0aXZlIGV4ZWN1dGlvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hdGl2ZVNvdXJjZUV4ZWN1dGlvbihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghaXNFeGVjdXRpb25LZXkoaWQpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUnVudGltZVN0YWdlSWQoaWQpO1xuICByZXR1cm4gKFxuICAgICEhcGFyc2VkLnN0YWdlSWQgJiZcbiAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZWQuZXhlY3V0aW9uSW5kZXgpICYmXG4gICAgcGFyc2VkLmV4ZWN1dGlvbkluZGV4ID49IDAgJiZcbiAgICBidWlsZFJ1bnRpbWVTdGFnZUlkKHBhcnNlZC5zdGFnZUlkLCBwYXJzZWQuZXhlY3V0aW9uSW5kZXgsIHBhcnNlZC5zdWJmbG93UGF0aCkgPT09IGlkXG4gICk7XG59XG4iXX0=
@@ -1,3 +1,7 @@
1
1
  import type { ReadSourceSnapshot } from 'foottrace/write';
2
+ import type { SourceReadCounts } from './sourceReadCounts.js';
3
+ export type StoredSourceCounts = SourceReadCounts & {
4
+ readonly invocations?: number;
5
+ };
2
6
  /** Already inert, byte-bounded evidence. Check native counts; never reconstruct read occurrences. */
3
- export declare function storedReadSourceCounts(record: ReadSourceSnapshot, executionTree: unknown, committedOwners: ReadonlyMap<string, number>): boolean;
7
+ export declare function storedReadSourceCounts(record: ReadSourceSnapshot, executionTree: unknown, committedOwners: ReadonlyMap<string, number>): ReadonlyMap<string, StoredSourceCounts> | undefined;
@@ -35,33 +35,37 @@ export function storedReadSourceCounts(record, executionTree, committedOwners) {
35
35
  let visited = 0;
36
36
  while (pending.length) {
37
37
  if (++visited > 100_000)
38
- return false;
38
+ return undefined;
39
39
  const value = pending.pop();
40
40
  if (!value || typeof value !== 'object' || Array.isArray(value))
41
- return false;
41
+ return undefined;
42
42
  const node = value;
43
43
  const id = node.runtimeStageId;
44
44
  if (Object.hasOwn(node, 'readSourceCounts')) {
45
45
  const counts = countsOf(node.readSourceCounts);
46
46
  if (!counts || (record.status === 'captured' && counts.observed !== counts.retained))
47
- return false;
47
+ return undefined;
48
48
  if (typeof id !== 'string' || !id) {
49
49
  if (counts.observed || counts.retained)
50
- return false;
50
+ return undefined;
51
51
  }
52
52
  else {
53
53
  if (owners.has(id))
54
- return false;
55
- owners.set(id, counts);
54
+ return undefined;
55
+ const invocations = node.readSourceInvocations;
56
+ if (Object.hasOwn(node, 'readSourceInvocations') &&
57
+ (!Number.isSafeInteger(invocations) || invocations < 0))
58
+ return undefined;
59
+ owners.set(id, { ...counts, ...(invocations !== undefined && { invocations: invocations }) });
56
60
  }
57
61
  }
58
62
  else if (typeof id === 'string' && committedOwners.has(id))
59
- return false;
63
+ return undefined;
60
64
  if (Object.hasOwn(node, 'next'))
61
65
  pending.push(node.next);
62
66
  if (Object.hasOwn(node, 'children')) {
63
67
  if (!Array.isArray(node.children) || node.children.length > 100_000 - visited - pending.length)
64
- return false;
68
+ return undefined;
65
69
  for (const child of node.children)
66
70
  pending.push(child);
67
71
  }
@@ -70,9 +74,9 @@ export function storedReadSourceCounts(record, executionTree, committedOwners) {
70
74
  for (const row of record.occurrences) {
71
75
  const counts = remaining.get(row.runtimeStageId);
72
76
  if (!counts || counts[row.source.kind] === 0)
73
- return false;
77
+ return undefined;
74
78
  counts[row.source.kind]--;
75
79
  }
76
- return [...remaining.values()].every((counts) => KINDS.every((kind) => counts[kind] === 0));
80
+ return [...remaining.values()].every((counts) => KINDS.every((kind) => counts[kind] === 0)) ? owners : undefined;
77
81
  }
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkUmVhZFNvdXJjZUNvdW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9zdG9yZWRSZWFkU291cmNlQ291bnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUF3QyxDQUFDO0FBRWpHLFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNsRixNQUFNLE1BQU0sR0FBRyxLQUF5QixDQUFDO0lBQ3pDLElBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUMvQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUM7UUFDbkIsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVE7UUFFakMsT0FBTyxTQUFTLENBQUM7SUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN2RyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFD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RyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDN0csS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVhZFNvdXJjZVNuYXBzaG90IH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBTb3VyY2VSZWFkQ291bnRzIH0gZnJvbSAnLi9zb3VyY2VSZWFkQ291bnRzLmpzJztcbmltcG9ydCB7IEVNUFRZX1NPVVJDRV9SRUFEX0NPVU5UUyB9IGZyb20gJy4vc291cmNlUmVhZENvdW50cy5qcyc7XG5cbmNvbnN0IEtJTkRTID0gT2JqZWN0LmtleXMoRU1QVFlfU09VUkNFX1JFQURfQ09VTlRTLmtpbmRzKSBhcyAoa2V5b2YgU291cmNlUmVhZENvdW50c1sna2luZHMnXSlbXTtcblxuZnVuY3Rpb24gY291bnRzT2YodmFsdWU6IHVua25vd24pOiBTb3VyY2VSZWFkQ291bnRzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjb3VudHMgPSB2YWx1ZSBhcyBTb3VyY2VSZWFkQ291bnRzO1xuICBpZiAoXG4gICAgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCAhPT0gMyB8fFxuICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb3VudHMub2JzZXJ2ZWQpIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50cy5yZXRhaW5lZCkgfHxcbiAgICBjb3VudHMub2JzZXJ2ZWQgPCAwIHx8XG4gICAgY291bnRzLnJldGFpbmVkIDwgMCB8fFxuICAgIGNvdW50cy5yZXRhaW5lZCA+IGNvdW50cy5vYnNlcnZlZFxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFjb3VudHMua2luZHMgfHwgdHlwZW9mIGNvdW50cy5raW5kcyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShjb3VudHMua2luZHMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoT2JqZWN0LmtleXMoY291bnRzLmtpbmRzKS5sZW5ndGggIT09IEtJTkRTLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAoY29uc3Qga2luZCBvZiBLSU5EUykge1xuICAgIGNvbnN0IGNvdW50ID0gY291bnRzLmtpbmRzW2tpbmRdO1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpIHx8IGNvdW50IDwgMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdW0gKz0gY291bnQ7XG4gICAgaWYgKHN1bSA+IGNvdW50cy5yZXRhaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc3VtICE9PSBjb3VudHMucmV0YWluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBjb3VudHM7XG59XG5cbi8qKiBBbHJlYWR5IGluZXJ0LCBieXRlLWJvdW5kZWQgZXZpZGVuY2UuIENoZWNrIG5hdGl2ZSBjb3VudHM7IG5ldmVyIHJlY29uc3RydWN0IHJlYWQgb2NjdXJyZW5jZXMuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVkUmVhZFNvdXJjZUNvdW50cyhcbiAgcmVjb3JkOiBSZWFkU291cmNlU25hcHNob3QsXG4gIGV4ZWN1dGlvblRyZWU6IHVua25vd24sXG4gIGNvbW1pdHRlZE93bmVyczogUmVhZG9ubHlNYXA8c3RyaW5nLCBudW1iZXI+LFxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IG93bmVycyA9IG5ldyBNYXA8c3RyaW5nLCBTb3VyY2VSZWFkQ291bnRzPigpO1xuICBjb25zdCBwZW5kaW5nID0gW2V4ZWN1dGlvblRyZWVdO1xuICBsZXQgdmlzaXRlZCA9IDA7XG4gIHdoaWxlIChwZW5kaW5nLmxlbmd0aCkge1xuICAgIGlmICgrK3Zpc2l0ZWQgPiAxMDBfMDAwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdmFsdWUgPSBwZW5kaW5nLnBvcCgpO1xuICAgIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IG5vZGUgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBpZCA9IG5vZGUucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKE9iamVjdC5oYXNPd24obm9kZSwgJ3JlYWRTb3VyY2VDb3VudHMnKSkge1xuICAgICAgY29uc3QgY291bnRzID0gY291bnRzT2Yobm9kZS5yZWFkU291cmNlQ291bnRzKTtcbiAgICAgIGlmICghY291bnRzIHx8IChyZWNvcmQuc3RhdHVzID09PSAnY2FwdHVyZWQnICYmIGNvdW50cy5vYnNlcnZlZCAhPT0gY291bnRzLnJldGFpbmVkKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycgfHwgIWlkKSB7XG4gICAgICAgIGlmIChjb3VudHMub2JzZXJ2ZWQgfHwgY291bnRzLnJldGFpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3duZXJzLmhhcyhpZCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgb3duZXJzLnNldChpZCwgY291bnRzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgY29tbWl0dGVkT3duZXJzLmhhcyhpZCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoT2JqZWN0Lmhhc093bihub2RlLCAnbmV4dCcpKSBwZW5kaW5nLnB1c2gobm9kZS5uZXh0KTtcbiAgICBpZiAoT2JqZWN0Lmhhc093bihub2RlLCAnY2hpbGRyZW4nKSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUuY2hpbGRyZW4pIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMTAwXzAwMCAtIHZpc2l0ZWQgLSBwZW5kaW5nLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSBwZW5kaW5nLnB1c2goY2hpbGQpO1xuICAgIH1cbiAgfVxuICBjb25zdCByZW1haW5pbmcgPSBuZXcgTWFwKFsuLi5vd25lcnNdLm1hcCgoW2lkLCBjb3VudHNdKSA9PiBbaWQsIHsgLi4uY291bnRzLmtpbmRzIH1dKSk7XG4gIGZvciAoY29uc3Qgcm93IG9mIHJlY29yZC5vY2N1cnJlbmNlcykge1xuICAgIGNvbnN0IGNvdW50cyA9IHJlbWFpbmluZy5nZXQocm93LnJ1bnRpbWVTdGFnZUlkKTtcbiAgICBpZiAoIWNvdW50cyB8fCBjb3VudHNbcm93LnNvdXJjZS5raW5kXSA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvdW50c1tyb3cuc291cmNlLmtpbmRdLS07XG4gIH1cbiAgcmV0dXJuIFsuLi5yZW1haW5pbmcudmFsdWVzKCldLmV2ZXJ5KChjb3VudHMpID0+IEtJTkRTLmV2ZXJ5KChraW5kKSA9PiBjb3VudHNba2luZF0gPT09IDApKTtcbn1cbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkUmVhZFNvdXJjZUNvdW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9zdG9yZWRSZWFkU291cmNlQ291bnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRWpFLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUF3QyxDQUFDO0FBR2pHLFNBQVMsUUFBUSxDQUFDLEtBQWM7SUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNsRixNQUFNLE1BQU0sR0FBRyxLQUF5QixDQUFDO0lBQ3pDLElBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUMvQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUM7UUFDbkIsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVE7UUFFakMsT0FBTyxTQUFTLENBQUM7SUFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksT0FBTyxNQUFNLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN2RyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFD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R0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNuSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBSZWFkU291cmNlU25hcHNob3QgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IFNvdXJjZVJlYWRDb3VudHMgfSBmcm9tICcuL3NvdXJjZVJlYWRDb3VudHMuanMnO1xuaW1wb3J0IHsgRU1QVFlfU09VUkNFX1JFQURfQ09VTlRTIH0gZnJvbSAnLi9zb3VyY2VSZWFkQ291bnRzLmpzJztcblxuY29uc3QgS0lORFMgPSBPYmplY3Qua2V5cyhFTVBUWV9TT1VSQ0VfUkVBRF9DT1VOVFMua2luZHMpIGFzIChrZXlvZiBTb3VyY2VSZWFkQ291bnRzWydraW5kcyddKVtdO1xuZXhwb3J0IHR5cGUgU3RvcmVkU291cmNlQ291bnRzID0gU291cmNlUmVhZENvdW50cyAmIHsgcmVhZG9ubHkgaW52b2NhdGlvbnM/OiBudW1iZXIgfTtcblxuZnVuY3Rpb24gY291bnRzT2YodmFsdWU6IHVua25vd24pOiBTb3VyY2VSZWFkQ291bnRzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBjb3VudHMgPSB2YWx1ZSBhcyBTb3VyY2VSZWFkQ291bnRzO1xuICBpZiAoXG4gICAgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCAhPT0gMyB8fFxuICAgICFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb3VudHMub2JzZXJ2ZWQpIHx8XG4gICAgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50cy5yZXRhaW5lZCkgfHxcbiAgICBjb3VudHMub2JzZXJ2ZWQgPCAwIHx8XG4gICAgY291bnRzLnJldGFpbmVkIDwgMCB8fFxuICAgIGNvdW50cy5yZXRhaW5lZCA+IGNvdW50cy5vYnNlcnZlZFxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKCFjb3VudHMua2luZHMgfHwgdHlwZW9mIGNvdW50cy5raW5kcyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShjb3VudHMua2luZHMpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoT2JqZWN0LmtleXMoY291bnRzLmtpbmRzKS5sZW5ndGggIT09IEtJTkRTLmxlbmd0aCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IHN1bSA9IDA7XG4gIGZvciAoY29uc3Qga2luZCBvZiBLSU5EUykge1xuICAgIGNvbnN0IGNvdW50ID0gY291bnRzLmtpbmRzW2tpbmRdO1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpIHx8IGNvdW50IDwgMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdW0gKz0gY291bnQ7XG4gICAgaWYgKHN1bSA+IGNvdW50cy5yZXRhaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoc3VtICE9PSBjb3VudHMucmV0YWluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBjb3VudHM7XG59XG5cbi8qKiBBbHJlYWR5IGluZXJ0LCBieXRlLWJvdW5kZWQgZXZpZGVuY2UuIENoZWNrIG5hdGl2ZSBjb3VudHM7IG5ldmVyIHJlY29uc3RydWN0IHJlYWQgb2NjdXJyZW5jZXMuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVkUmVhZFNvdXJjZUNvdW50cyhcbiAgcmVjb3JkOiBSZWFkU291cmNlU25hcHNob3QsXG4gIGV4ZWN1dGlvblRyZWU6IHVua25vd24sXG4gIGNvbW1pdHRlZE93bmVyczogUmVhZG9ubHlNYXA8c3RyaW5nLCBudW1iZXI+LFxuKTogUmVhZG9ubHlNYXA8c3RyaW5nLCBTdG9yZWRTb3VyY2VDb3VudHM+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgb3duZXJzID0gbmV3IE1hcDxzdHJpbmcsIFN0b3JlZFNvdXJjZUNvdW50cz4oKTtcbiAgY29uc3QgcGVuZGluZyA9IFtleGVjdXRpb25UcmVlXTtcbiAgbGV0IHZpc2l0ZWQgPSAwO1xuICB3aGlsZSAocGVuZGluZy5sZW5ndGgpIHtcbiAgICBpZiAoKyt2aXNpdGVkID4gMTAwXzAwMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB2YWx1ZSA9IHBlbmRpbmcucG9wKCk7XG4gICAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG5vZGUgPSB2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBpZCA9IG5vZGUucnVudGltZVN0YWdlSWQ7XG4gICAgaWYgKE9iamVjdC5oYXNPd24obm9kZSwgJ3JlYWRTb3VyY2VDb3VudHMnKSkge1xuICAgICAgY29uc3QgY291bnRzID0gY291bnRzT2Yobm9kZS5yZWFkU291cmNlQ291bnRzKTtcbiAgICAgIGlmICghY291bnRzIHx8IChyZWNvcmQuc3RhdHVzID09PSAnY2FwdHVyZWQnICYmIGNvdW50cy5vYnNlcnZlZCAhPT0gY291bnRzLnJldGFpbmVkKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlb2YgaWQgIT09ICdzdHJpbmcnIHx8ICFpZCkge1xuICAgICAgICBpZiAoY291bnRzLm9ic2VydmVkIHx8IGNvdW50cy5yZXRhaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvd25lcnMuaGFzKGlkKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgaW52b2NhdGlvbnMgPSBub2RlLnJlYWRTb3VyY2VJbnZvY2F0aW9ucztcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5oYXNPd24obm9kZSwgJ3JlYWRTb3VyY2VJbnZvY2F0aW9ucycpICYmXG4gICAgICAgICAgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnZvY2F0aW9ucykgfHwgKGludm9jYXRpb25zIGFzIG51bWJlcikgPCAwKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgb3duZXJzLnNldChpZCwgeyAuLi5jb3VudHMsIC4uLihpbnZvY2F0aW9ucyAhPT0gdW5kZWZpbmVkICYmIHsgaW52b2NhdGlvbnM6IGludm9jYXRpb25zIGFzIG51bWJlciB9KSB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgJiYgY29tbWl0dGVkT3duZXJzLmhhcyhpZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKE9iamVjdC5oYXNPd24obm9kZSwgJ25leHQnKSkgcGVuZGluZy5wdXNoKG5vZGUubmV4dCk7XG4gICAgaWYgKE9iamVjdC5oYXNPd24obm9kZSwgJ2NoaWxkcmVuJykpIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShub2RlLmNoaWxkcmVuKSB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDEwMF8wMDAgLSB2aXNpdGVkIC0gcGVuZGluZy5sZW5ndGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHBlbmRpbmcucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlbWFpbmluZyA9IG5ldyBNYXAoWy4uLm93bmVyc10ubWFwKChbaWQsIGNvdW50c10pID0+IFtpZCwgeyAuLi5jb3VudHMua2luZHMgfV0pKTtcbiAgZm9yIChjb25zdCByb3cgb2YgcmVjb3JkLm9jY3VycmVuY2VzKSB7XG4gICAgY29uc3QgY291bnRzID0gcmVtYWluaW5nLmdldChyb3cucnVudGltZVN0YWdlSWQpO1xuICAgIGlmICghY291bnRzIHx8IGNvdW50c1tyb3cuc291cmNlLmtpbmRdID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvdW50c1tyb3cuc291cmNlLmtpbmRdLS07XG4gIH1cbiAgcmV0dXJuIFsuLi5yZW1haW5pbmcudmFsdWVzKCldLmV2ZXJ5KChjb3VudHMpID0+IEtJTkRTLmV2ZXJ5KChraW5kKSA9PiBjb3VudHNba2luZF0gPT09IDApKSA/IG93bmVycyA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -4,6 +4,7 @@ import { decodeReadSourceSnapshot } from 'foottrace/write';
4
4
  import { readSourceStatus, SOURCE_LIMITATIONS } from './readSources.js';
5
5
  import { SourceReferenceBudget } from './sourceReferenceBudget.js';
6
6
  import { storedReadSourceCounts } from './storedReadSourceCounts.js';
7
+ import { storedSourceOwnership } from './storedSourceOwnership.js';
7
8
  function scalar(value) {
8
9
  return value === null || typeof value === 'string' || typeof value === 'boolean' || typeof value === 'number';
9
10
  }
@@ -65,7 +66,7 @@ export function storedReadSources(value, capture, commitLog, initialState, execu
65
66
  if (!value || typeof value !== 'object')
66
67
  return undefined;
67
68
  const source = value;
68
- if (source.version !== 1 ||
69
+ if ((source.version !== 1 && source.version !== 2) ||
69
70
  source.runId !== capture.runId ||
70
71
  source.persistence !== 'memory-only' ||
71
72
  !sameData(source.commits, capture.commits) ||
@@ -73,7 +74,16 @@ export function storedReadSources(value, capture, commitLog, initialState, execu
73
74
  source.limitations.length > SOURCE_LIMITATIONS.length ||
74
75
  new Set(source.limitations).size !== source.limitations.length ||
75
76
  !source.limitations.every((gap) => SOURCE_LIMITATIONS.includes(gap)) ||
76
- Object.keys(source).some((key) => !['version', 'runId', 'persistence', 'commits', 'status', 'limitations', 'record'].includes(key)))
77
+ Object.keys(source).some((key) => ![
78
+ 'version',
79
+ 'runId',
80
+ 'persistence',
81
+ 'commits',
82
+ 'status',
83
+ 'limitations',
84
+ 'record',
85
+ ...(source.version === 2 ? ['ownership'] : []),
86
+ ].includes(key)))
77
87
  return undefined;
78
88
  const record = source.record === undefined ? undefined : decodeReadSourceSnapshot(source.record);
79
89
  if (source.record !== undefined && (!record || !sameData(source.record, record)))
@@ -83,16 +93,22 @@ export function storedReadSources(value, capture, commitLog, initialState, execu
83
93
  if (!firstCommits.has(bundle.runtimeStageId))
84
94
  firstCommits.set(bundle.runtimeStageId, index);
85
95
  });
96
+ const counts = record && storedReadSourceCounts(record, executionTree, firstCommits);
86
97
  if (record &&
87
98
  (!sameData(record.address, capture.logAddress) ||
88
- !storedReadSourceCounts(record, executionTree, firstCommits) ||
99
+ !counts ||
89
100
  !referencesMatch(record, commitLog, firstCommits, initialState)))
90
101
  return undefined;
102
+ const ownership = source.version === 2 && record && counts
103
+ ? storedSourceOwnership(source.ownership, record, source.runId, capture.commits, firstCommits, counts)
104
+ : undefined;
105
+ if (source.version === 2 && !ownership)
106
+ return undefined;
91
107
  if (source.status !== readSourceStatus(record, source.limitations.length) ||
92
108
  capture.channels.readSources !== source.status)
93
109
  return undefined;
94
110
  return Object.freeze({
95
- version: 1,
111
+ ...(ownership ? { version: 2, ownership } : { version: 1 }),
96
112
  runId: source.runId,
97
113
  persistence: 'memory-only',
98
114
  commits: capture.commits,
@@ -101,4 +117,4 @@ export function storedReadSources(value, capture, commitLog, initialState, execu
101
117
  ...(record && { record }),
102
118
  });
103
119
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkUmVhZFNvdXJjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvc3RvcmVkUmVhZFNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFckUsU0FBUyxNQUFNLENBQUMsS0FBYztJQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDaEgsQ0FBQztBQUVELHVHQUF1RztBQUN2RyxTQUFTLFFBQVEsQ0FBQyxLQUFjLEVBQUUsT0FBZ0I7SUFDaEQsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDakcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQ0wsSUFBSSxDQUFDLE1BQU0s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QUFhLEVBQUUsWUFBWSxDQUFDO1lBQzVELENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRWxFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLElBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDckUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUFDLE1BQU07UUFFOUMsT0FBTyxTQUFTLENBQUM7SUFDbkIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25CLE9BQU8sRUFBRSxDQUFDO1FBQ1YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLFdBQVcsRUFBRSxhQUFhO1FBQzFCLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztRQUN4QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxHQUFHLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDMUIsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHsgbmF0aXZlR2V0LCBuYXRpdmVIYXMsIG5vcm1hbGlzZVN0YXRlS2V5IH0gZnJvbSAnZm9vdHRyYWNlL3BhdGhzJztcbmltcG9ydCB0eXBlIHsgUmVhZFNvdXJjZVNuYXBzaG90IH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcbmltcG9ydCB7IGRlY29kZVJlYWRTb3VyY2VTbmFwc2hvdCB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5cbmltcG9ydCB0eXBlIHsgRW5naW5lUmVhZFNvdXJjZXMsIE5hdGl2ZVJlYWRDYXB0dXJlTm90ZSwgU291cmNlTGltaXRhdGlvbiB9IGZyb20gJy4vcmVhZFNvdXJjZXMuanMnO1xuaW1wb3J0IHsgcmVhZFNvdXJjZVN0YXR1cywgU09VUkNFX0xJTUlUQVRJT05TIH0gZnJvbSAnLi9yZWFkU291cmNlcy5qcyc7XG5pbXBvcnQgeyBTb3VyY2VSZWZlcmVuY2VCdWRnZXQgfSBmcm9tICcuL3NvdXJjZVJlZmVyZW5jZUJ1ZGdldC5qcyc7XG5pbXBvcnQgeyBzdG9yZWRSZWFkU291cmNlQ291bnRzIH0gZnJvbSAnLi9zdG9yZWRSZWFkU291cmNlQ291bnRzLmpzJztcblxuZnVuY3Rpb24gc2NhbGFyKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG59XG5cbi8qKiBSZWZ1c2UgdW5yZWNvZ25pemVkIHN0b3JlZCBmaWVsZHMgcmF0aGVyIHRoYW4gc2lsZW50bHkgZHJvcHBpbmcgdGhlbSB0aHJvdWdoIGEgcHJvamVjdGluZyBjb2RlYy4gKi9cbmZ1bmN0aW9uIHNhbWVEYXRhKGlucHV0OiB1bmtub3duLCBkZWNvZGVkOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGlmIChPYmplY3QuaXMoaW5wdXQsIGRlY29kZWQpKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKCFpbnB1dCB8fCAhZGVjb2RlZCB8fCB0eXBlb2YgaW5wdXQgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBkZWNvZGVkICE9PSAnb2JqZWN0JykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5wdXQpO1xuICByZXR1cm4gKFxuICAgIGtleXMubGVuZ3RoID09PSBPYmplY3Qua2V5cyhkZWNvZGVkKS5sZW5ndGggJiZcbiAgICBrZXlzLmV2ZXJ5KFxuICAgICAgKGtleSkgPT5cbiAgICAgICAgT2JqZWN0Lmhhc093bihkZWNvZGVkLCBrZXkpICYmXG4gICAgICAgIHNhbWVEYXRhKFxuICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5wdXQsIGtleSk/LnZhbHVlLFxuICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZGVjb2RlZCwga2V5KT8udmFsdWUsXG4gICAgICAgICksXG4gICAgKVxuICApO1xufVxuXG4vKiogQm91bmRlZCByb3cgcmVmZXJlbmNlcywgbm90IGNhdXNhbCByZWNvbnN0cnVjdGlvbiBvciB2YWxpZGF0aW9uIG9mIGFwcGxpY2F0aW9uIGNvbXB1dGF0aW9uLiAqL1xuZnVuY3Rpb24gcmVmZXJlbmNlc01hdGNoKFxuICByZWNvcmQ6IFJlYWRTb3VyY2VTbmFwc2hvdCxcbiAgY29tbWl0czogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW10sXG4gIGZpcnN0Q29tbWl0czogUmVhZG9ubHlNYXA8c3RyaW5nLCBudW1iZXI+LFxuICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IGJvb2xlYW4ge1xuICBjb25zdCBwYXRocyA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8c3RyaW5nPj4oKTtcbiAgY29uc3Qgc2NhbGFyU291cmNlcyA9IG5ldyBNYXA8bnVtYmVyLCBNYXA8c3RyaW5nLCBib29sZWFuPj4oKTtcbiAgY29uc3QgYnVkZ2V0ID0gbmV3IFNvdXJjZVJlZmVyZW5jZUJ1ZGdldChjb21taXRzLCBpbml0aWFsU3RhdGUpO1xuICBmb3IgKGNvbnN0IHJvdyBvZiByZWNvcmQub2NjdXJyZW5jZXMpIHtcbiAgICBjb25zdCBwYXRoID0gWy4uLnJvdy5zdGF0ZUFkZHJlc3MsIHJvdy5rZXldO1xuICAgIGlmIChcbiAgICAgIHJvdy5zb3VyY2Uua2luZCA9PT0gJ2Jhc2UnICYmXG4gICAgICAoIWluaXRpYWxTdGF0ZSB8fCAhbmF0aXZlSGFzKGluaXRpYWxTdGF0ZSwgcGF0aCkgfHwgIXNjYWxhcihuYXRpdmVHZXQoaW5pdGlhbFN0YXRlLCBwYXRoKSkpXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChyb3cuc291cmNlLmtpbmQgIT09ICdjb21taXR0ZWQnKSBjb250aW51ZTtcbiAgICBjb25zdCBpbmRleCA9IHJvdy5zb3VyY2UuY29tbWl0SWR4O1xuICAgIGNvbnN0IGJ1bmRsZSA9IGNvbW1pdHNbaW5kZXhdO1xuICAgIGNvbnN0IHJlYWRlckNvbW1pdCA9IGZpcnN0Q29tbWl0cy5nZXQocm93LnJ1bnRpbWVTdGFnZUlkKTtcbiAgICAvLyBBIGxhdGVyIGNvbnRpbnVhdGlvbiBtdXN0IG5vdCBsb29zZW4gdGhlIGJvdW5kYXJ5IGZvciBlYXJsaWVyIHJlYWRzLiBSZXVzZWQgcmF3IGNvbnRleHRzIHN0YXkgdW5rbm93bi5cbiAgICBpZiAoIWJ1bmRsZSB8fCByZWFkZXJDb21taXQgPT09IHVuZGVmaW5lZCB8fCBpbmRleCA+PSByZWFkZXJDb21taXQpIHJldHVybiBmYWxzZTtcbiAgICBsZXQgd3JpdHRlbiA9IHBhdGhzLmdldChpbmRleCk7XG4gICAgaWYgKCF3cml0dGVuKSB7XG4gICAgICB3cml0dGVuID0gbmV3IFNldChidW5kbGUudHJhY2UubWFwKChlbnRyeSkgPT4gZW50cnkucGF0aCkpO1xuICAgICAgcGF0aHMuc2V0KGluZGV4LCB3cml0dGVuKTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gbm9ybWFsaXNlU3RhdGVLZXkocGF0aCk7XG4gICAgaWYgKCF3cml0dGVuLmhhcyhrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHZhbHVlcyA9IHNjYWxhclNvdXJjZXMuZ2V0KGluZGV4KTtcbiAgICBpZiAoIXZhbHVlcykgc2NhbGFyU291cmNlcy5zZXQoaW5kZXgsICh2YWx1ZXMgPSBuZXcgTWFwKCkpKTtcbiAgICBsZXQgY29uZmlybWVkID0gdmFsdWVzLmdldChrZXkpO1xuICAgIGlmIChjb25maXJtZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYnVkZ2V0LnNwZW5kKCk7XG4gICAgICAvLyBUaGUgcHVibGljIHJlY29yZCByZWFkZXIgb3ducyBzZXQvbWVyZ2UvZGVsdGEgdmFsdWUgc2VtYW50aWNzOyBubyBzZWNvbmQgcmVwbGF5L3ZhbHVlIHJ1bGUgaGVyZS5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMoY29tbWl0cyBhcyBDb21taXRCdW5kbGVbXSwgaW5kZXgsIGtleSwgeyBpbml0aWFsU3RhdGUgfSk7XG4gICAgICBjb25maXJtZWQgPSBzY2FsYXIocmVzdWx0LnZhbHVlKSAmJiAhcmVzdWx0LmJhc2lzLmluY2x1ZGVzKCdyZWRhY3RlZCcpO1xuICAgICAgdmFsdWVzLnNldChrZXksIGNvbmZpcm1lZCk7XG4gICAgfVxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBBZnRlciBpbmVydCBKU09OIGFkbWlzc2lvbjogdGhlIHJlY29yZCdzIGNvZGVjIG93bnMgZGVzY3JpcHRvcnM7IHRoZSBlbmdpbmUgYmluZHMgaXRzIHJvb3Qgb2JzZXJ2YXRpb24uICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVkUmVhZFNvdXJjZXMoXG4gIHZhbHVlOiB1bmtub3duLFxuICBjYXB0dXJlOiBOYXRpdmVSZWFkQ2FwdHVyZU5vdGUsXG4gIGNvbW1pdExvZzogcmVhZG9ubHkgQ29tbWl0QnVuZGxlW10sXG4gIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBleGVjdXRpb25UcmVlPzogdW5rbm93bixcbik6IEVuZ2luZVJlYWRTb3VyY2VzIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBzb3VyY2UgPSB2YWx1ZSBhcyBFbmdpbmVSZWFkU291cmNlcztcbiAgaWYgKFxuICAgIHNvdXJjZS52ZXJzaW9uICE9PSAxIHx8XG4gICAgc291cmNlLnJ1bklkICE9PSBjYXB0dXJlLnJ1bklkIHx8XG4gICAgc291cmNlLnBlcnNpc3RlbmNlICE9PSAnbWVtb3J5LW9ubHknIHx8XG4gICAgIXNhbWVEYXRhKHNvdXJjZS5jb21taXRzLCBjYXB0dXJlLmNvbW1pdHMpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoc291cmNlLmxpbWl0YXRpb25zKSB8fFxuICAgIHNvdXJjZS5saW1pdGF0aW9ucy5sZW5ndGggPiBTT1VSQ0VfTElNSVRBVElPTlMubGVuZ3RoIHx8XG4gICAgbmV3IFNldChzb3VyY2UubGltaXRhdGlvbnMpLnNpemUgIT09IHNvdXJjZS5saW1pdGF0aW9ucy5sZW5ndGggfHxcbiAgICAhc291cmNlLmxpbWl0YXRpb25zLmV2ZXJ5KChnYXApID0+IFNPVVJDRV9MSU1JVEFUSU9OUy5pbmNsdWRlcyhnYXAgYXMgU291cmNlTGltaXRhdGlvbikpIHx8XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5zb21lKFxuICAgICAgKGtleSkgPT4gIVsndmVyc2lvbicsICdydW5JZCcsICdwZXJzaXN0ZW5jZScsICdjb21taXRzJywgJ3N0YXR1cycsICdsaW1pdGF0aW9ucycsICdyZWNvcmQnXS5pbmNsdWRlcyhrZXkpLFxuICAgIClcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlY29yZCA9IHNvdXJjZS5yZWNvcmQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IGRlY29kZVJlYWRTb3VyY2VTbmFwc2hvdChzb3VyY2UucmVjb3JkKTtcbiAgaWYgKHNvdXJjZS5yZWNvcmQgIT09IHVuZGVmaW5lZCAmJiAoIXJlY29yZCB8fCAhc2FtZURhdGEoc291cmNlLnJlY29yZCwgcmVjb3JkKSkpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZpcnN0Q29tbWl0cyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGNvbW1pdExvZy5mb3JFYWNoKChidW5kbGUsIGluZGV4KSA9PiB7XG4gICAgaWYgKCFmaXJzdENvbW1pdHMuaGFzKGJ1bmRsZS5ydW50aW1lU3RhZ2VJZCkpIGZpcnN0Q29tbWl0cy5zZXQoYnVuZGxlLnJ1bnRpbWVTdGFnZUlkLCBpbmRleCk7XG4gIH0pO1xuICBpZiAoXG4gICAgcmVjb3JkICYmXG4gICAgKCFzYW1lRGF0YShyZWNvcmQuYWRkcmVzcywgY2FwdHVyZS5sb2dBZGRyZXNzKSB8fFxuICAgICAgIXN0b3JlZFJlYWRTb3VyY2VDb3VudHMocmVjb3JkLCBleGVjdXRpb25UcmVlLCBmaXJzdENvbW1pdHMpIHx8XG4gICAgICAhcmVmZXJlbmNlc01hdGNoKHJlY29yZCwgY29tbWl0TG9nLCBmaXJzdENvbW1pdHMsIGluaXRpYWxTdGF0ZSkpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgc291cmNlLnN0YXR1cyAhPT0gcmVhZFNvdXJjZVN0YXR1cyhyZWNvcmQsIHNvdXJjZS5saW1pdGF0aW9ucy5sZW5ndGgpIHx8XG4gICAgY2FwdHVyZS5jaGFubmVscy5yZWFkU291cmNlcyAhPT0gc291cmNlLnN0YXR1c1xuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoe1xuICAgIHZlcnNpb246IDEsXG4gICAgcnVuSWQ6IHNvdXJjZS5ydW5JZCxcbiAgICBwZXJzaXN0ZW5jZTogJ21lbW9yeS1vbmx5JyxcbiAgICBjb21taXRzOiBjYXB0dXJlLmNvbW1pdHMsXG4gICAgc3RhdHVzOiBzb3VyY2Uuc3RhdHVzLFxuICAgIGxpbWl0YXRpb25zOiBPYmplY3QuZnJlZXplKFsuLi5zb3VyY2UubGltaXRhdGlvbnNdKSxcbiAgICAuLi4ocmVjb3JkICYmIHsgcmVjb3JkIH0pLFxuICB9KTtcbn1cbiJdfQ==
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkUmVhZFNvdXJjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvc3RvcmVkUmVhZFNvdXJjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFbkUsU0FBUyxNQUFNLENBQUMsS0FBYztJQUM1QixPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDaEgsQ0FBQztBQUVELHVHQUF1RztBQUN2RyxTQUFTLFFBQVEsQ0FBQyxLQUFjLEVBQUUsT0FBZ0I7SUFDaEQsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUMzQyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDakcsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxL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RUFBRSxDQUFDO1FBQzdFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixXQUFXLEVBQUUsYUFBYTtRQUMxQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLFdBQVcsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0tBQzFCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgeyBjb21taXRWYWx1ZUF0V2l0aEJhc2lzIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IG5hdGl2ZUdldCwgbmF0aXZlSGFzLCBub3JtYWxpc2VTdGF0ZUtleSB9IGZyb20gJ2Zvb3R0cmFjZS9wYXRocyc7XG5pbXBvcnQgdHlwZSB7IFJlYWRTb3VyY2VTbmFwc2hvdCB9IGZyb20gJ2Zvb3R0cmFjZS93cml0ZSc7XG5pbXBvcnQgeyBkZWNvZGVSZWFkU291cmNlU25hcHNob3QgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IEVuZ2luZVJlYWRTb3VyY2VzLCBOYXRpdmVSZWFkQ2FwdHVyZU5vdGUsIFNvdXJjZUxpbWl0YXRpb24gfSBmcm9tICcuL3JlYWRTb3VyY2VzLmpzJztcbmltcG9ydCB7IHJlYWRTb3VyY2VTdGF0dXMsIFNPVVJDRV9MSU1JVEFUSU9OUyB9IGZyb20gJy4vcmVhZFNvdXJjZXMuanMnO1xuaW1wb3J0IHsgU291cmNlUmVmZXJlbmNlQnVkZ2V0IH0gZnJvbSAnLi9zb3VyY2VSZWZlcmVuY2VCdWRnZXQuanMnO1xuaW1wb3J0IHsgc3RvcmVkUmVhZFNvdXJjZUNvdW50cyB9IGZyb20gJy4vc3RvcmVkUmVhZFNvdXJjZUNvdW50cy5qcyc7XG5pbXBvcnQgeyBzdG9yZWRTb3VyY2VPd25lcnNoaXAgfSBmcm9tICcuL3N0b3JlZFNvdXJjZU93bmVyc2hpcC5qcyc7XG5cbmZ1bmN0aW9uIHNjYWxhcih2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xufVxuXG4vKiogUmVmdXNlIHVucmVjb2duaXplZCBzdG9yZWQgZmllbGRzIHJhdGhlciB0aGFuIHNpbGVudGx5IGRyb3BwaW5nIHRoZW0gdGhyb3VnaCBhIHByb2plY3RpbmcgY29kZWMuICovXG5mdW5jdGlvbiBzYW1lRGF0YShpbnB1dDogdW5rbm93biwgZGVjb2RlZDogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoT2JqZWN0LmlzKGlucHV0LCBkZWNvZGVkKSkgcmV0dXJuIHRydWU7XG4gIGlmICghaW5wdXQgfHwgIWRlY29kZWQgfHwgdHlwZW9mIGlucHV0ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgZGVjb2RlZCAhPT0gJ29iamVjdCcpIHJldHVybiBmYWxzZTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGlucHV0KTtcbiAgcmV0dXJuIChcbiAgICBrZXlzLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMoZGVjb2RlZCkubGVuZ3RoICYmXG4gICAga2V5cy5ldmVyeShcbiAgICAgIChrZXkpID0+XG4gICAgICAgIE9iamVjdC5oYXNPd24oZGVjb2RlZCwga2V5KSAmJlxuICAgICAgICBzYW1lRGF0YShcbiAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGlucHV0LCBrZXkpPy52YWx1ZSxcbiAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlY29kZWQsIGtleSk/LnZhbHVlLFxuICAgICAgICApLFxuICAgIClcbiAgKTtcbn1cblxuLyoqIEJvdW5kZWQgcm93IHJlZmVyZW5jZXMsIG5vdCBjYXVzYWwgcmVjb25zdHJ1Y3Rpb24gb3IgdmFsaWRhdGlvbiBvZiBhcHBsaWNhdGlvbiBjb21wdXRhdGlvbi4gKi9cbmZ1bmN0aW9uIHJlZmVyZW5jZXNNYXRjaChcbiAgcmVjb3JkOiBSZWFkU291cmNlU25hcHNob3QsXG4gIGNvbW1pdHM6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdLFxuICBmaXJzdENvbW1pdHM6IFJlYWRvbmx5TWFwPHN0cmluZywgbnVtYmVyPixcbiAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBib29sZWFuIHtcbiAgY29uc3QgcGF0aHMgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gIGNvbnN0IHNjYWxhclNvdXJjZXMgPSBuZXcgTWFwPG51bWJlciwgTWFwPHN0cmluZywgYm9vbGVhbj4+KCk7XG4gIGNvbnN0IGJ1ZGdldCA9IG5ldyBTb3VyY2VSZWZlcmVuY2VCdWRnZXQoY29tbWl0cywgaW5pdGlhbFN0YXRlKTtcbiAgZm9yIChjb25zdCByb3cgb2YgcmVjb3JkLm9jY3VycmVuY2VzKSB7XG4gICAgY29uc3QgcGF0aCA9IFsuLi5yb3cuc3RhdGVBZGRyZXNzLCByb3cua2V5XTtcbiAgICBpZiAoXG4gICAgICByb3cuc291cmNlLmtpbmQgPT09ICdiYXNlJyAmJlxuICAgICAgKCFpbml0aWFsU3RhdGUgfHwgIW5hdGl2ZUhhcyhpbml0aWFsU3RhdGUsIHBhdGgpIHx8ICFzY2FsYXIobmF0aXZlR2V0KGluaXRpYWxTdGF0ZSwgcGF0aCkpKVxuICAgIClcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAocm93LnNvdXJjZS5raW5kICE9PSAnY29tbWl0dGVkJykgY29udGludWU7XG4gICAgY29uc3QgaW5kZXggPSByb3cuc291cmNlLmNvbW1pdElkeDtcbiAgICBjb25zdCBidW5kbGUgPSBjb21taXRzW2luZGV4XTtcbiAgICBjb25zdCByZWFkZXJDb21taXQgPSBmaXJzdENvbW1pdHMuZ2V0KHJvdy5ydW50aW1lU3RhZ2VJZCk7XG4gICAgLy8gQSBsYXRlciBjb250aW51YXRpb24gbXVzdCBub3QgbG9vc2VuIHRoZSBib3VuZGFyeSBmb3IgZWFybGllciByZWFkcy4gUmV1c2VkIHJhdyBjb250ZXh0cyBzdGF5IHVua25vd24uXG4gICAgaWYgKCFidW5kbGUgfHwgcmVhZGVyQ29tbWl0ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPj0gcmVhZGVyQ29tbWl0KSByZXR1cm4gZmFsc2U7XG4gICAgbGV0IHdyaXR0ZW4gPSBwYXRocy5nZXQoaW5kZXgpO1xuICAgIGlmICghd3JpdHRlbikge1xuICAgICAgd3JpdHRlbiA9IG5ldyBTZXQoYnVuZGxlLnRyYWNlLm1hcCgoZW50cnkpID0+IGVudHJ5LnBhdGgpKTtcbiAgICAgIHBhdGhzLnNldChpbmRleCwgd3JpdHRlbik7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IG5vcm1hbGlzZVN0YXRlS2V5KHBhdGgpO1xuICAgIGlmICghd3JpdHRlbi5oYXMoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCB2YWx1ZXMgPSBzY2FsYXJTb3VyY2VzLmdldChpbmRleCk7XG4gICAgaWYgKCF2YWx1ZXMpIHNjYWxhclNvdXJjZXMuc2V0KGluZGV4LCAodmFsdWVzID0gbmV3IE1hcCgpKSk7XG4gICAgbGV0IGNvbmZpcm1lZCA9IHZhbHVlcy5nZXQoa2V5KTtcbiAgICBpZiAoY29uZmlybWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGJ1ZGdldC5zcGVuZCgpO1xuICAgICAgLy8gVGhlIHB1YmxpYyByZWNvcmQgcmVhZGVyIG93bnMgc2V0L21lcmdlL2RlbHRhIHZhbHVlIHNlbWFudGljczsgbm8gc2Vjb25kIHJlcGxheS92YWx1ZSBydWxlIGhlcmUuXG4gICAgICBjb25zdCByZXN1bHQgPSBjb21taXRWYWx1ZUF0V2l0aEJhc2lzKGNvbW1pdHMgYXMgQ29tbWl0QnVuZGxlW10sIGluZGV4LCBrZXksIHsgaW5pdGlhbFN0YXRlIH0pO1xuICAgICAgY29uZmlybWVkID0gc2NhbGFyKHJlc3VsdC52YWx1ZSkgJiYgIXJlc3VsdC5iYXNpcy5pbmNsdWRlcygncmVkYWN0ZWQnKTtcbiAgICAgIHZhbHVlcy5zZXQoa2V5LCBjb25maXJtZWQpO1xuICAgIH1cbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogQWZ0ZXIgaW5lcnQgSlNPTiBhZG1pc3Npb246IHRoZSByZWNvcmQncyBjb2RlYyBvd25zIGRlc2NyaXB0b3JzOyB0aGUgZW5naW5lIGJpbmRzIGl0cyByb290IG9ic2VydmF0aW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0b3JlZFJlYWRTb3VyY2VzKFxuICB2YWx1ZTogdW5rbm93bixcbiAgY2FwdHVyZTogTmF0aXZlUmVhZENhcHR1cmVOb3RlLFxuICBjb21taXRMb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdLFxuICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZXhlY3V0aW9uVHJlZT86IHVua25vd24sXG4pOiBFbmdpbmVSZWFkU291cmNlcyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc291cmNlID0gdmFsdWUgYXMgRW5naW5lUmVhZFNvdXJjZXM7XG4gIGlmIChcbiAgICAoc291cmNlLnZlcnNpb24gIT09IDEgJiYgc291cmNlLnZlcnNpb24gIT09IDIpIHx8XG4gICAgc291cmNlLnJ1bklkICE9PSBjYXB0dXJlLnJ1bklkIHx8XG4gICAgc291cmNlLnBlcnNpc3RlbmNlICE9PSAnbWVtb3J5LW9ubHknIHx8XG4gICAgIXNhbWVEYXRhKHNvdXJjZS5jb21taXRzLCBjYXB0dXJlLmNvbW1pdHMpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoc291cmNlLmxpbWl0YXRpb25zKSB8fFxuICAgIHNvdXJjZS5saW1pdGF0aW9ucy5sZW5ndGggPiBTT1VSQ0VfTElNSVRBVElPTlMubGVuZ3RoIHx8XG4gICAgbmV3IFNldChzb3VyY2UubGltaXRhdGlvbnMpLnNpemUgIT09IHNvdXJjZS5saW1pdGF0aW9ucy5sZW5ndGggfHxcbiAgICAhc291cmNlLmxpbWl0YXRpb25zLmV2ZXJ5KChnYXApID0+IFNPVVJDRV9MSU1JVEFUSU9OUy5pbmNsdWRlcyhnYXAgYXMgU291cmNlTGltaXRhdGlvbikpIHx8XG4gICAgT2JqZWN0LmtleXMoc291cmNlKS5zb21lKFxuICAgICAgKGtleSkgPT5cbiAgICAgICAgIVtcbiAgICAgICAgICAndmVyc2lvbicsXG4gICAgICAgICAgJ3J1bklkJyxcbiAgICAgICAgICAncGVyc2lzdGVuY2UnLFxuICAgICAgICAgICdjb21taXRzJyxcbiAgICAgICAgICAnc3RhdHVzJyxcbiAgICAgICAgICAnbGltaXRhdGlvbnMnLFxuICAgICAgICAgICdyZWNvcmQnLFxuICAgICAgICAgIC4uLihzb3VyY2UudmVyc2lvbiA9PT0gMiA/IFsnb3duZXJzaGlwJ10gOiBbXSksXG4gICAgICAgIF0uaW5jbHVkZXMoa2V5KSxcbiAgICApXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCByZWNvcmQgPSBzb3VyY2UucmVjb3JkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBkZWNvZGVSZWFkU291cmNlU25hcHNob3Qoc291cmNlLnJlY29yZCk7XG4gIGlmIChzb3VyY2UucmVjb3JkICE9PSB1bmRlZmluZWQgJiYgKCFyZWNvcmQgfHwgIXNhbWVEYXRhKHNvdXJjZS5yZWNvcmQsIHJlY29yZCkpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBmaXJzdENvbW1pdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjb21taXRMb2cuZm9yRWFjaCgoYnVuZGxlLCBpbmRleCkgPT4ge1xuICAgIGlmICghZmlyc3RDb21taXRzLmhhcyhidW5kbGUucnVudGltZVN0YWdlSWQpKSBmaXJzdENvbW1pdHMuc2V0KGJ1bmRsZS5ydW50aW1lU3RhZ2VJZCwgaW5kZXgpO1xuICB9KTtcbiAgY29uc3QgY291bnRzID0gcmVjb3JkICYmIHN0b3JlZFJlYWRTb3VyY2VDb3VudHMocmVjb3JkLCBleGVjdXRpb25UcmVlLCBmaXJzdENvbW1pdHMpO1xuICBpZiAoXG4gICAgcmVjb3JkICYmXG4gICAgKCFzYW1lRGF0YShyZWNvcmQuYWRkcmVzcywgY2FwdHVyZS5sb2dBZGRyZXNzKSB8fFxuICAgICAgIWNvdW50cyB8fFxuICAgICAgIXJlZmVyZW5jZXNNYXRjaChyZWNvcmQsIGNvbW1pdExvZywgZmlyc3RDb21taXRzLCBpbml0aWFsU3RhdGUpKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgb3duZXJzaGlwID1cbiAgICBzb3VyY2UudmVyc2lvbiA9PT0gMiAmJiByZWNvcmQgJiYgY291bnRzXG4gICAgICA/IHN0b3JlZFNvdXJjZU93bmVyc2hpcChzb3VyY2Uub3duZXJzaGlwLCByZWNvcmQsIHNvdXJjZS5ydW5JZCwgY2FwdHVyZS5jb21taXRzLCBmaXJzdENvbW1pdHMsIGNvdW50cylcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoc291cmNlLnZlcnNpb24gPT09IDIgJiYgIW93bmVyc2hpcCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHNvdXJjZS5zdGF0dXMgIT09IHJlYWRTb3VyY2VTdGF0dXMocmVjb3JkLCBzb3VyY2UubGltaXRhdGlvbnMubGVuZ3RoKSB8fFxuICAgIGNhcHR1cmUuY2hhbm5lbHMucmVhZFNvdXJjZXMgIT09IHNvdXJjZS5zdGF0dXNcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAuLi4ob3duZXJzaGlwID8geyB2ZXJzaW9uOiAyIGFzIGNvbnN0LCBvd25lcnNoaXAgfSA6IHsgdmVyc2lvbjogMSBhcyBjb25zdCB9KSxcbiAgICBydW5JZDogc291cmNlLnJ1bklkLFxuICAgIHBlcnNpc3RlbmNlOiAnbWVtb3J5LW9ubHknLFxuICAgIGNvbW1pdHM6IGNhcHR1cmUuY29tbWl0cyxcbiAgICBzdGF0dXM6IHNvdXJjZS5zdGF0dXMsXG4gICAgbGltaXRhdGlvbnM6IE9iamVjdC5mcmVlemUoWy4uLnNvdXJjZS5saW1pdGF0aW9uc10pLFxuICAgIC4uLihyZWNvcmQgJiYgeyByZWNvcmQgfSksXG4gIH0pO1xufVxuIl19
@@ -0,0 +1,8 @@
1
+ import type { ReadSourceSnapshot } from 'foottrace/write';
2
+ import type { SourceOwnershipWitness } from './sourceOwnershipFormat.js';
3
+ import type { StoredSourceCounts } from './storedReadSourceCounts.js';
4
+ /** Inert byte-bounded producer metadata only; this validates consistency, not authenticity. */
5
+ export declare function storedSourceOwnership(value: unknown, record: ReadSourceSnapshot, runId: string, commits: {
6
+ readonly from: number;
7
+ readonly to: number;
8
+ }, firstCommits: ReadonlyMap<string, number>, counts: ReadonlyMap<string, StoredSourceCounts>): SourceOwnershipWitness | undefined;