footprintjs 9.45.0 → 9.46.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +10 -10
- package/dist/esm/lib/decide/evaluator.js +2 -2
- package/dist/esm/lib/decide/evidence.js +2 -2
- package/dist/esm/lib/engine/handlers/servedPause.js +2 -2
- package/dist/esm/lib/memory/RecordFrame.d.ts +232 -0
- package/dist/esm/lib/memory/RecordFrame.js +296 -0
- package/dist/esm/lib/memory/SharedMemory.d.ts +1 -1
- package/dist/esm/lib/memory/SharedMemory.js +2 -2
- package/dist/esm/lib/memory/StageContext.d.ts +71 -155
- package/dist/esm/lib/memory/StageContext.js +130 -285
- package/dist/esm/lib/memory/TransactionBuffer.d.ts +2 -2
- package/dist/esm/lib/memory/TransactionBuffer.js +3 -3
- package/dist/esm/lib/memory/borrowedMutation.d.ts +1 -1
- package/dist/esm/lib/memory/borrowedMutation.js +2 -2
- package/dist/esm/lib/memory/honesty.d.ts +4 -3
- package/dist/esm/lib/memory/honesty.js +5 -4
- package/dist/esm/lib/memory/index.d.ts +4 -2
- package/dist/esm/lib/memory/index.js +6 -4
- package/dist/esm/lib/memory/placeholders.d.ts +23 -28
- package/dist/esm/lib/memory/placeholders.js +24 -29
- package/dist/esm/lib/memory/recordCommit.d.ts +5 -3
- package/dist/esm/lib/memory/recordCommit.js +7 -5
- package/dist/esm/lib/memory/redaction.d.ts +78 -40
- package/dist/esm/lib/memory/redaction.js +130 -64
- package/dist/esm/lib/memory/runAddress.d.ts +20 -0
- package/dist/esm/lib/memory/runAddress.js +25 -0
- package/dist/esm/lib/memory/scrub.d.ts +51 -0
- package/dist/esm/lib/memory/scrub.js +72 -0
- package/dist/esm/lib/memory/utils.d.ts +3 -3
- package/dist/esm/lib/memory/utils.js +4 -4
- package/dist/esm/lib/reactive/structuralWrite.d.ts +1 -1
- package/dist/esm/lib/reactive/structuralWrite.js +2 -2
- package/dist/lib/decide/evaluator.js +3 -3
- package/dist/lib/decide/evidence.js +3 -3
- package/dist/lib/engine/handlers/servedPause.js +3 -3
- package/dist/lib/memory/RecordFrame.js +300 -0
- package/dist/lib/memory/SharedMemory.js +2 -2
- package/dist/lib/memory/StageContext.js +134 -289
- package/dist/lib/memory/TransactionBuffer.js +3 -3
- package/dist/lib/memory/borrowedMutation.js +2 -2
- package/dist/lib/memory/honesty.js +5 -4
- package/dist/lib/memory/index.js +6 -4
- package/dist/lib/memory/placeholders.js +25 -30
- package/dist/lib/memory/recordCommit.js +9 -7
- package/dist/lib/memory/redaction.js +144 -75
- package/dist/lib/memory/runAddress.js +29 -0
- package/dist/lib/memory/scrub.js +77 -0
- package/dist/lib/memory/utils.js +4 -4
- package/dist/lib/reactive/structuralWrite.js +2 -2
- package/dist/types/lib/memory/RecordFrame.d.ts +232 -0
- package/dist/types/lib/memory/SharedMemory.d.ts +1 -1
- package/dist/types/lib/memory/StageContext.d.ts +71 -155
- package/dist/types/lib/memory/TransactionBuffer.d.ts +2 -2
- package/dist/types/lib/memory/borrowedMutation.d.ts +1 -1
- package/dist/types/lib/memory/honesty.d.ts +4 -3
- package/dist/types/lib/memory/index.d.ts +4 -2
- package/dist/types/lib/memory/placeholders.d.ts +23 -28
- package/dist/types/lib/memory/recordCommit.d.ts +5 -3
- package/dist/types/lib/memory/redaction.d.ts +78 -40
- package/dist/types/lib/memory/runAddress.d.ts +20 -0
- package/dist/types/lib/memory/scrub.d.ts +51 -0
- package/dist/types/lib/memory/utils.d.ts +3 -3
- package/dist/types/lib/reactive/structuralWrite.d.ts +1 -1
- package/package.json +1 -1
|
@@ -29,9 +29,10 @@
|
|
|
29
29
|
* field means `'truncated'`; they are registered so a reader explains them from the same place.
|
|
30
30
|
*
|
|
31
31
|
* NOT HERE: the two strings a redaction leaves where a value was. The engine writes those on every
|
|
32
|
-
* redacted run;
|
|
33
|
-
*
|
|
34
|
-
* so a bundler drops it wherever
|
|
32
|
+
* redacted run; the log's lives in its own leaf, `memory/placeholders.ts` (the scope channel's with
|
|
33
|
+
* the verdict, `memory/redaction.ts`), so that an app which only runs charts does not carry these
|
|
34
|
+
* sentences in its bundle (`HONESTY_CODES` is a pure expression, so a bundler drops it wherever
|
|
35
|
+
* nothing reads it).
|
|
35
36
|
*
|
|
36
37
|
* WHY L0. This file imports NOTHING, and `slice/` and `time-travel/` (L3) type their codes through
|
|
37
38
|
* it, so it sits below them — the layer table is `scripts/layering.config.cjs`.
|
|
@@ -88,4 +89,4 @@ export const HONESTY_CODES = /* @__PURE__ */ Object.freeze({
|
|
|
88
89
|
deleted: "The key's last write in the range asked about left it absent (a delete of the key or of a container around it, or a set of a container that no longer holds it), so the answer is undefined because the record says the key was gone at that point, not because nothing was recorded.",
|
|
89
90
|
'from-initial-state': "No set or delete of the key, or of a container around it, is in the range asked about, so the answer rests on the value the key had before the run: folded from the initialState passed in when there was one, and otherwise only what the log's merges, appends and nested writes added to it (or nothing), which is partial for a key seeded before the run.",
|
|
90
91
|
});
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uZXN0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2hvbmVzdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7QUFFSDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pELDZFQUE2RTtJQUM3RSx3QkFBd0IsRUFDdEIsK0xBQStMO0lBQ2pNLGFBQWEsRUFDWCxpVUFBaVU7SUFDblUsZ0JBQWdCLEVBQ2QsNkxBQTZMO0lBQy9MLG9CQUFvQixFQUNsQiwwSUFBMEk7SUFDNUksYUFBYSxFQUNYLG1KQUFtSjtJQUNySixTQUFTLEVBQ1AsOEdBQThHO0lBQ2hILG1HQUFtRztJQUNuRyxXQUFXLEVBQ1QscUlBQXFJO0lBQ3ZJLGVBQWUsRUFDYix1WUFBdVk7SUFDelksY0FBYyxFQUNaLDBOQUEwTjtJQUM1Tiw4RUFBOEU7SUFDOUUsV0FBVyxFQUNULG9PQUFvTztJQUN0TyxLQUFLLEVBQ0gseVFBQXlRO0lBQzNRLCtGQUErRjtJQUMvRixhQUFhLEVBQ1gsNEtBQTRLO0lBQzlLLGtCQUFrQixFQUNoQix1T0FBdU87SUFDek8sYUFBYSxFQUNYLGdMQUFnTDtJQUNsTCw2RUFBNkU7SUFDN0UsYUFBYSxFQUNYLHVOQUF1TjtJQUN6TixVQUFVLEVBQ1IsNlVBQTZVO0lBQy9VLDZFQUE2RTtJQUM3RSxTQUFTLEVBQ1AsZ0xBQWdMO0lBQ2xMLDhFQUE4RTtJQUM5RSxvQkFBb0IsRUFDbEIsc01BQXNNO0lBQ3hNLCtGQUErRjtJQUMvRixRQUFRLEVBQ04sNFdBQTRXO0lBQzlXLHdGQUF3RjtJQUN4RixPQUFPLEVBQ0wsdVJBQXVSO0lBQ3pSLG9CQUFvQixFQUNsQixnV0FBZ1c7Q0FDbFUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBob25lc3R5LnRzIOKAlCB0aGUgT05FIHZvY2FidWxhcnkgZm9yIHdoYXQgYSByZWFkZXIgY2Fubm90IHNlZS5cbiAqXG4gKiBXSFkgVEhJUyBGSUxFIEVYSVNUUy4gQSByZWNvcmRpbmcgY2Fubm90IGFsd2F5cyBhbnN3ZXIgd2hhdCBpdCBpcyBhc2tlZCwgYW5kIHRoZSBsaWJyYXJ5IHNheXNcbiAqIHNvIGluIHNldmVyYWwgcGxhY2VzLCBlYWNoIGluIGl0cyBvd24gd29yZHM6IGEgc2xpY2UgY2FycmllcyBgSG9uZXN0eU5vdGVgcyBhbmQsIHdoZW4gaXQgaGFzIG5vXG4gKiBhbnN3ZXIsIGEgYG1pc3NpbmdgIHJlYXNvbjsgYSBmZWQgZWRnZSBhbmQgYW4gZWxlbWVudCBiaXJ0aCBjYXJyeSBhIGBiYXNpc2A7IGEgZm9sZCBjYXJyaWVzIGFcbiAqIGBiYXNpc2AgYW5kIGl0cyBgcmVkYWN0ZWRgIHBhdGhzOyBhIHN0b3JlZCBsb2cgcmVwb3J0cyBgTG9nR2FwYHM7IGEgY2F1c2FsIG5vZGUgY2Fycmllc1xuICogYGluY29tcGxldGVTb3VyY2VzYCBhbmQgYHRydW5jYXRlZGAuIEEgcmVhZGVyIHRoYXQgd2FudHMgdG8gRVhQTEFJTiBhbnkgb2YgdGhlbSB0byBhIHBlcnNvbiAoYVxuICogd2h5LXBhbmVsLCBhbiBhZ2VudCB0b29sKSBrZXB0IGl0cyBvd24gdGFibGUgb2YgY29kZSDihpIgc2VudGVuY2UsIGFuZCB0YWJsZXMga2VwdCBhcGFydCBkcmlmdC5cbiAqIFRoaXMgZmlsZSBpcyB0aGF0IHRhYmxlLCBvbmNlLlxuICpcbiAqIFdIQVQgSVQgSE9MRFMuXG4gKiAgIC0gYEhPTkVTVFlfQ09ERVNgIOKAlCBhIGZyb3plbiwgY2xvc2VkIHJlZ2lzdHJ5OiBjb2RlIOKGkiB0aGUgT05FIHNlbnRlbmNlIHRoYXQgc2F5cyB3aGF0IHRoZSBjb2RlXG4gKiAgICAgbWVhbnMuIFRoZSBzaGFwZSBvZiBydXN0YydzIGAtLWV4cGxhaW5gIGFuZCBMU1AncyBgRGlhZ25vc3RpYy5jb2RlYDogdGhlIGNvZGUgaXMgdGhlIHN0YWJsZVxuICogICAgIGtleSBhIGNvbnN1bWVyIEJSQU5DSEVTIG9uOyB0aGUgc2VudGVuY2UgaXMgZm9yIHdob2V2ZXIgcmVhZHMgdGhlIHNjcmVlbi4gSXQgaXMgbm90IHRoZVxuICogICAgIHBlci1pbnN0YW5jZSBgZGV0YWlsYCBhIG5vdGUgY2FycmllcyAodGhhdCBuYW1lcyB0aGUga2V5LCB0aGUgYnVkZ2V0LCB0aGUgcm93cykuXG4gKiAgIC0gYEhvbmVzdHlDb2RlYCAvIGBSZWdpc3RlcmVkQ29kZWAg4oCUIHdoYXQgbWFrZXMgdGhlIHJlZ2lzdHJ5IHRoZSBvd25lciBhbmQgbm90IGEgc3VnZ2VzdGlvbjpcbiAqICAgICBlYWNoIHB1YmxpYyB1bmlvbiBvZiB0aGVzZSBjb2RlcyAoYEhvbmVzdHlOb3RlQ29kZWAsIGBNaXNzaW5nU2xpY2VSZWFzb25gLFxuICogICAgIGBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbmAsIGBGZWRCYXNpc2AsIGBBdHRyaWJ1dGlvbkJhc2lzYCwgYEZvbGRCYXNpc2AsIGFuZCBzaW5jZSA5LjMzLjAgYFZhbHVlQmFzaXNgIC9cbiAqICAgICBgV3JpdGVyQmFzaXNgIOKAlCB0aGUgYmFzaXMgdHdpbnMgb2YgYGNvbW1pdFZhbHVlQXRgIC8gYGZpbmRMYXN0V3JpdGVyYCkgZGVjbGFyZXMgaXRzIG1lbWJlcnNcbiAqICAgICB0aHJvdWdoIGBSZWdpc3RlcmVkQ29kZWAsIHNvIGEgbWVtYmVyIHRoZSByZWdpc3RyeSBkb2VzIG5vdCBob2xkIGZhaWxzIHRvIENPTVBJTEUuIEFuZFxuICogICAgIGB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50c2AgYXNrcyB0aGUgdHlwZSBjaGVja2VyIGZvciBldmVyeSBleHBvcnRlZCB0eXBlXG4gKiAgICAgYWxpYXMgb2YgYGZvb3RwcmludGpzL3RyYWNlYCB0aGF0IGlzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWxzOiBlYWNoIG9uZSBpcyBpbnNpZGUgdGhlXG4gKiAgICAgcmVnaXN0cnkgb3IgaXMgbmFtZWQsIHdpdGggaXRzIHJlYXNvbiwgYXMgbm90IGFuIGhvbmVzdHkgdm9jYWJ1bGFyeS5cbiAqXG4gKiBOTyBPQkpFQ1QgR0FJTlMgQSBGSUVMRCBmcm9tIGJlaW5nIHJlZ2lzdGVyZWQuIFRocmVlIHNpZ25hbHMgY2Fycnkgbm8gY29kZSBvZiB0aGVpciBvd24g4oCUIGFcbiAqIGBMb2dHYXBgIChgJ2xvZy1nYXAnYCksIGBDYXVzYWxOb2RlLmluY29tcGxldGVTb3VyY2VzYCAoYCdpbmNvbXBsZXRlLXNvdXJjZXMnYCkgYW5kXG4gKiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRgIC8gYHJlZGFjdGVkUGF0aHNgIChgJ3JlZGFjdGVkJ2ApIOKAlCBhbmQgYSBgdHJ1bmNhdGVkOiB7IGJ5RGVwdGgsIGJ5Tm9kZXMgfWBcbiAqIGZpZWxkIG1lYW5zIGAndHJ1bmNhdGVkJ2A7IHRoZXkgYXJlIHJlZ2lzdGVyZWQgc28gYSByZWFkZXIgZXhwbGFpbnMgdGhlbSBmcm9tIHRoZSBzYW1lIHBsYWNlLlxuICpcbiAqIE5PVCBIRVJFOiB0aGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLiBUaGUgZW5naW5lIHdyaXRlcyB0aG9zZSBvbiBldmVyeVxuICogcmVkYWN0ZWQgcnVuOyB0aGV5IGxpdmUgaW4gdGhlaXIgb3duIGxlYWYsIGBtZW1vcnkvcGxhY2Vob2xkZXJzLnRzYCwgc28gdGhhdCBhbiBhcHAgd2hpY2ggb25seVxuICogcnVucyBjaGFydHMgZG9lcyBub3QgY2FycnkgdGhlc2Ugc2VudGVuY2VzIGluIGl0cyBidW5kbGUgKGBIT05FU1RZX0NPREVTYCBpcyBhIHB1cmUgZXhwcmVzc2lvbixcbiAqIHNvIGEgYnVuZGxlciBkcm9wcyBpdCB3aGVyZXZlciBub3RoaW5nIHJlYWRzIGl0KS5cbiAqXG4gKiBXSFkgTDAuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIGFuZCBgc2xpY2UvYCBhbmQgYHRpbWUtdHJhdmVsL2AgKEwzKSB0eXBlIHRoZWlyIGNvZGVzIHRocm91Z2hcbiAqIGl0LCBzbyBpdCBzaXRzIGJlbG93IHRoZW0g4oCUIHRoZSBsYXllciB0YWJsZSBpcyBgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgSE9ORVNUWV9DT0RFUyB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBmb3IgKGNvbnN0IHsgY29kZSB9IG9mIGZvcndhcmRTbGljZS5ub3RlcykgY29uc29sZS5sb2coY29kZSwgJ+KGkicsIEhPTkVTVFlfQ09ERVNbY29kZV0pO1xuICogLy8gcmVhZHMtbm90LXJlY29yZGVkIOKGkiBUaGlzIGxvZyBjYXJyaWVzIG5vIHJlY29yZGVkIHJlYWQgYXQgYWxsICh0aGUgcmVhZFRyYWNraW5nOiAnb2ZmJyBzaWduYXR1cmUpLCDigKZcbiAqIEhPTkVTVFlfQ09ERVNbZm9sZGVkU3RhdGUuYmFzaXNdOyAvLyAnbG9nLW9ubHknIOKGkiBObyBpbml0aWFsU3RhdGUgdHJhdmVsbGVkIHdpdGggdGhpcyBsb2cgKOKApiksIOKAplxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBFdmVyeSBob25lc3R5IGNvZGUgdGhlIHRyYWNlIHJlYWRlcnMgKGBmb290cHJpbnRqcy90cmFjZWApIHNwZWFrLCB3aXRoIHRoZSBvbmUgc2VudGVuY2UgdGhhdCBzYXlzXG4gKiB3aGF0IGl0IG1lYW5zLlxuICpcbiAqIEZyb3plbiBhbmQgY2xvc2VkOiB0aGUga2V5cyBhcmUgZXhhY3RseSB0aGUgY29kZXMgYmVsb3csIGFuZCB7QGxpbmsgSG9uZXN0eUNvZGV9IGlzIGRlcml2ZWQgZnJvbVxuICogdGhlbS4gQSBuZXcgY29kZSBpcyBvbmUgbmV3IGxpbmUgaGVyZTogYSB1bmlvbiBkZWNsYXJlZCB0aHJvdWdoIHtAbGluayBSZWdpc3RlcmVkQ29kZX0gY2Fubm90IGhvbGRcbiAqIGEgY29kZSB0aGF0IGlzIG5vdCBvbiBpdCwgYW5kIGB0ZXN0L2FyY2hpdGVjdHVyZS9ob25lc3R5LXZvY2FidWxhcnkudGVzdC50c2AgZmFpbHMgb24gYW4gZXhwb3J0ZWRcbiAqIHR5cGUgYWxpYXMgb2YgYGZvb3RwcmludGpzL3RyYWNlYCB0aGF0IGlzIGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWxzIG5laXRoZXIgaW5zaWRlIHRoZSByZWdpc3RyeVxuICogbm9yIG5hbWVkIHRoZXJlIGFzIG5vdCBhbiBob25lc3R5IHZvY2FidWxhcnkuIFRoZSB2YWx1ZXMgYXJlIHR5cGVkIGBzdHJpbmdgLCBub3QgbGl0ZXJhbCB0eXBlcyxcbiAqIG9uIHB1cnBvc2U6IHRoZSBzZW50ZW5jZXMgYXJlIGZvciBhIHNjcmVlbiBhbmQgbWF5IGJlIHJld29yZGVkOyBhIGNvbnN1bWVyIGJyYW5jaGVzIG9uIHRoZSBLRVkuXG4gKi9cbmV4cG9ydCBjb25zdCBIT05FU1RZX0NPREVTID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5mcmVlemUoe1xuICAvLyDilIDilIAgYSBzbGljZSdzIG5vdGVzIOKAlCBgSG9uZXN0eU5vdGUuY29kZWAgKHNsaWNlLykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICdjb25zZXJ2YXRpdmUtZmVkLWVkZ2VzJzpcbiAgICBcIkF0IGxlYXN0IG9uZSAnZmVkJyBlZGdlIGlzIHN0YWdlLWxldmVsIChjb25zZXJ2YXRpdmUpOiBpdHMgd3JpdGUgY2FycmllcyBubyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlLCBzbyB0aGUgZWRnZSBtYXkgbm90IGJlIHJlYWwg4oCUIHR1cm4gb24gd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JyBmb3IgZXhhY3QgZWRnZXMuXCIsXG4gICduZXN0ZWQtcm93cyc6XG4gICAgXCJBIHdyaXRlIHRoaXMgYW5zd2VyIHJlc3RzIG9uIHJlYWNoZWQgdGhlIGtleSBvbmx5IHRocm91Z2ggcGF0aHMgaW5zaWRlIGl0IChhIHN1YmZsb3cncyBpbnB1dCBzZWVkLCBhbiBvdXRwdXRNYXBwZXIgbWVyZ2UtYmFjaywgYSBmb3JrIGNoaWxkJ3MgbmFtZXNwYWNlKSwgc28gaXQgY2hhbmdlZCBwYXJ0IG9mIHRoZSBrZXkncyB2YWx1ZSwgbm90IHRoZSB3aG9sZTogZWFybGllciB3cml0ZXMgbWF5IGFjY291bnQgZm9yIHRoZSByZXN0LCBhbmQgYSByZWFkZXIgb2YgdGhlIGtleSBtYXkgbm90IGhhdmUgcmVhZCB0aGUgcGFydCB0aGF0IHdyaXRlIGNoYW5nZWQuXCIsXG4gICdwcmUtcnVuLW9yaWdpbic6XG4gICAgJ1RoZSB2YWx1ZSBiZWluZyBmb2xsb3dlZCB3YXMgYWJzZW50IG9yIGFscmVhZHkgdGhlcmUgYmVmb3JlIHRoZSBmaXJzdCB3cml0ZSB0aGlzIGxvZyBjYW4gc2VlIChpbml0aWFsIHN0YXRlLCBmcm96ZW4gcnVuIGlucHV0IG9yIGEgY2xvc3VyZSksIHNvIHdobyBwdXQgaXQgdGhlcmUgaXMgb3V0c2lkZSB0aGUgY29tbWl0IGxvZy4nLFxuICAncmVhZHMtbm90LXJlY29yZGVkJzpcbiAgICBcIlRoaXMgbG9nIGNhcnJpZXMgbm8gcmVjb3JkZWQgcmVhZCBhdCBhbGwgKHRoZSByZWFkVHJhY2tpbmc6ICdvZmYnIHNpZ25hdHVyZSksIHNvICdub3RoaW5nIHJlYWQgdGhpcyB2YWx1ZScgaXMgdW5rbm93YWJsZSBoZXJlLCBub3QgdHJ1ZS5cIixcbiAgJ3Vua25vd24ta2V5JzpcbiAgICBcIlRoaXMgbG9nIGhhcyBubyB3cml0ZSBhbmQgbm8gcmVjb3JkZWQgcmVhZCBvZiB0aGUga2V5LCB3aGljaCBpcyBtb3N0IGxpa2VseSBhIHR5cG8gb3IgdGhlIHdyb25nIHJ1bidzIGxvZyByYXRoZXIgdGhhbiBhIHZhcmlhYmxlIHdpdGggbm8gaGlzdG9yeS5cIixcbiAgdHJ1bmNhdGVkOlxuICAgICdBIGJ1ZGdldCAobWF4RGVwdGggb3IgbWF4Tm9kZXMpIGN1dCB0aGUgd2Fsaywgc28gbW9yZSBvZiB0aGUgYW5zd2VyIGV4aXN0cyBiZXlvbmQgdGhlIGhvcml6b24gaXQgc3RvcHBlZCBhdC4nLFxuICAvLyDilIDilIAgd2h5IGEgc2xpY2UgaGFzIG5vIGFuc3dlciDigJQgYG1pc3NpbmdgIChzbGljZS86IE1pc3NpbmdTbGljZVJlYXNvbiwgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb24pIOKUgFxuICAnZW1wdHktbG9nJzpcbiAgICAnVGhlIGNvbW1pdCBsb2cgaG9sZHMgbm8gY29tbWl0IGF0IGFsbCAobm90aGluZyBoYXMgZXhlY3V0ZWQsIG9yIHRoZSBsb2cgaGFuZGVkIGluIGlzIGVtcHR5KSwgc28gdGhlcmUgaXMgbm8gaGlzdG9yeSB0byBhbnN3ZXIgZnJvbS4nLFxuICAnbmV2ZXItd3JpdHRlbic6XG4gICAgJ05vIGNvbW1pdCBpbiB0aGUgcmFuZ2UgYXNrZWQgYWJvdXQgd3JvdGUgdGhlIGtleSDigJQgbm90IGl0cyB3aG9sZSB2YWx1ZSwgbm90IGEgcGF0aCBpbnNpZGUgaXQsIGFuZCBub3QgYSBjb250YWluZXIgYXJvdW5kIGl0IGluIGEgd2F5IHRoYXQgY2hhbmdlZCBpdCAoYSBmb3J3YXJkIHNsaWNlIG9yIGEgdGltZWxpbmUgYWxzbyBmb3VuZCBubyByZWNvcmRlZCByZWFkIG9uLCBpbnNpZGUgb3IgYXJvdW5kIGl0KSDigJQgc28gdGhlcmUgaXMgbm8gd3JpdGUgdG8gc3RhcnQgZnJvbTogYW55IHZhbHVlIGl0IGhhcyBjYW1lIGZyb20gdGhlIGluaXRpYWwgc3RhdGUsIHRoZSBmcm96ZW4gcnVuIGlucHV0IG9yIGEgY2xvc3VyZSwgbm9uZSBvZiB3aGljaCB0aGUgY29tbWl0IGxvZyBjYW4gc2VlLicsXG4gICdub3QtYW4tYXJyYXknOlxuICAgICdUaGUga2V5IHdhcyB3cml0dGVuLCBidXQgaXRzIHZhbHVlIGF0IHRoZSBwb2ludCBhc2tlZCBhYm91dCBpcyBub3QgYW4gYXJyYXkgKGEgc2NhbGFyIG9yIG9iamVjdCBrZXksIGEgZGVsZXRlZCBrZXksIG9yIGEgbWVyZ2UgdGhhdCBkZWdyYWRlZCBpdCksIHNvIGVsZW1lbnQgcHJvdmVuYW5jZSBkb2VzIG5vdCBhcHBseTogc2xpY2VGb3JLZXkgaXMgdGhlIHF1ZXJ5IGZvciBpdC4nLFxuICAvLyDilIDilIAgaG93IGEgZmVkIGVkZ2Ugd2FzIGF0dHJpYnV0ZWQg4oCUIGBGb3J3YXJkRWRnZS5iYXNpc2AgKHNsaWNlLzogRmVkQmFzaXMpIOKUgFxuICAncGVyLXdyaXRlJzpcbiAgICBcIlRoaXMgZmVkIGVkZ2UgaXMgZXhhY3Q6IHRoZSBkb3duc3RyZWFtIHdyaXRlIGNhcnJpZXMgcGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoVHJhY2VFbnRyeS5yZWFkS2V5cywgcmVjb3JkZWQgdW5kZXIgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4JykgYW5kIHRoYXQgbGlzdCBuYW1lcyB0aGUga2V5LCBzbyB0aGUgdmFsdWUgd2FzIHJlYWQgYmVmb3JlIHRoZSB3cml0ZSBpdCBmZWVkcy5cIixcbiAgc3RhZ2U6XG4gICAgJ1RoaXMgZmVkIGVkZ2UgaXMgY29uc2VydmF0aXZlOiB0aGUgZG93bnN0cmVhbSB3cml0ZSBjYXJyaWVzIG5vIHBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKHRoZSB3cml0ZVByb3ZlbmFuY2UgZGlhbCB3YXMgb2ZmLCBvciB0aGUgbG9nIGlzIG1peGVkKSwgc28gYWxsIHRoYXQgaXMga25vd24gaXMgdGhhdCBpdHMgc3RhZ2UgcmVhZCB0aGlzIGtleSBhbmQgd3JvdGUgdGhhdCBwYXRoIGluIHNvbWUgb3JkZXIsIGFuZCB0aGUgZWRnZSBtYXkgbm90IGJlIHJlYWwuJyxcbiAgLy8g4pSA4pSAIGhvdyBhbiBlbGVtZW50J3MgYmlydGggd2FzIGF0dHJpYnV0ZWQg4oCUIGBFbGVtZW50QmlydGguYmFzaXNgIChzbGljZS86IEF0dHJpYnV0aW9uQmFzaXMpIOKUgFxuICAnYXBwZW5kLXZlcmInOlxuICAgIFwiVGhlIGVuZ2luZSByZWNvcmRlZCB0aGUgZWxlbWVudCBpbiBhbiBhcHBlbmQgcm93J3MgdGFpbCAoaG93IGNvbW1pdFZhbHVlczogJ2RlbHRhJyByZWNvcmRzIGFuIGFycmF5J3MgZ3Jvd3RoKSwgc28gdGhlIGNvbW1pdCB0aGF0IGFkZGVkIGl0IGlzIGtub3duIGV4YWN0bHksIG5vdCBpbmZlcnJlZC5cIixcbiAgJ3ByZWZpeC1pbmZlcmVuY2UnOlxuICAgICdBIHdob2xlLXZhbHVlIHdyaXRlIChhIHNldCBvciBhIG1lcmdlKSBrZXB0IHRoZSBwcmV2aW91cyBhcnJheSBhcyBpdHMgcHJlZml4LCBzbyB0aGUgbmV3IHRhaWwgaXMgYXR0cmlidXRlZCB0byB0aGF0IGNvbW1pdCBieSBpbmZlcmVuY2U6IGEgd3JpdGUgdGhhdCByZXBsYWNlZCB0aGUgYXJyYXkgd2l0aCBvbmUgdGhhdCBoYXBwZW5zIHRvIGJlZ2luIHRoZSBzYW1lIHdheSBsb29rcyBpZGVudGljYWwuJyxcbiAgJ3dob2xlLXZhbHVlJzpcbiAgICBcIlRoaXMgY29tbWl0IHBsYWNlZCB0aGUgYXJyYXkgd2hvbGVzYWxlICh0aGVyZSB3YXMgbm8gZWFybGllciBhcnJheSwgb3IgdGhlIG5ldyBvbmUgZG9lcyBub3QgYmVnaW4gd2l0aCBpdCksIHNvIGV2ZXJ5IGVsZW1lbnQncyBiaXJ0aCByZXNldHMgdG8gdGhpcyBjb21taXQ6IGV4YWN0LCBidXQgY29hcnNlLlwiLFxuICAvLyDilIDilIAgaG93IGEgZm9sZCB3YXMgZGVyaXZlZCDigJQgYEZvbGRlZFN0YXRlLmJhc2lzYCAodGltZS10cmF2ZWwvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2luaXRpYWwrbG9nJzpcbiAgICAnVGhlIGZvbGQgc3RhcnRlZCBmcm9tIHRoZSBmb2xkIGJhc2UgdGhhdCB0cmF2ZWxsZWQgd2l0aCB0aGUgbG9nIChpbml0aWFsU3RhdGUpIGFuZCByZXBsYXllZCB0aGUgY29tbWl0IGxvZyBvbnRvIGl0LCBzbyBub3RoaW5nIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biBpcyBtaXNzaW5nOyByb3dzIGl0IGNvdWxkIG5vdCByZWFkIGFyZSBsaXN0ZWQgYXBhcnQsIGluIHNraXBwZWQuJyxcbiAgJ2xvZy1vbmx5JzpcbiAgICAnTm8gaW5pdGlhbFN0YXRlIHRyYXZlbGxlZCB3aXRoIHRoaXMgbG9nIChhIHNuYXBzaG90IHN0b3JlZCBiZWZvcmUgOS4xNywgYSByZWRhY3RlZCBzbmFwc2hvdCBvciBhIGhhbmQtYnVpbHQgbG9nKSwgc28gdGhlIGZvbGQgc3RhcnRlZCBmcm9tIGFuIGVtcHR5IG9iamVjdDogYSBrZXkgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIGlzIHdob2xlIG9ubHkgb25jZSBhIGNvbW1pdCBzaW5jZSB3cm90ZSBpdHMgd2hvbGUgdmFsdWUsIGFuZCB1bnRpbCB0aGVuIGl0IGhvbGRzIGp1c3Qgd2hhdCBpdHMgbWVyZ2VzLCBhcHBlbmRzIGFuZCBuZXN0ZWQgd3JpdGVzIGFkZGVkLCBvciBub3RoaW5nLicsXG4gIC8vIOKUgOKUgCBhIHJvdyBvZiBhIHN0b3JlZCBsb2cgdGhhdCBpcyBub3QgYSBjb21taXQgYnVuZGxlIOKAlCBgTG9nR2FwYCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2xvZy1nYXAnOlxuICAgICdBIHJvdyBvZiB0aGUgc3RvcmVkIGxvZyBjb3VsZCBub3QgYmUgcmVhZCBhcyBhIGNvbW1pdCBidW5kbGUsIHNvIGl0IGtlZXBzIGl0cyBpbmRleCBidXQgY29udHJpYnV0ZXMgbm8gc3RhdGUsIGFuZCBhbnkgZm9sZCB0aGF0IGNyb3NzZXMgaXQgaXMgbWlzc2luZyB3aGF0ZXZlciB0aGF0IHJvdyB3cm90ZS4nLFxuICAvLyDilIDilIAgdW50cmFja2VkIHJlYWRzIGEgc3RhZ2UgYWxzbyBjb25zdW1lZCDigJQgYENhdXNhbE5vZGUuaW5jb21wbGV0ZVNvdXJjZXNgIOKUgFxuICAnaW5jb21wbGV0ZS1zb3VyY2VzJzpcbiAgICAnVGhlIHN0YWdlIGFsc28gY29uc3VtZWQgcmVhZCBwYXRocyB0aGF0IGJ5cGFzcyByZWFkIHRyYWNraW5nIChhcmdzLCBlbnYgb3IgYW4gdW5zaGFkb3dlZCBzaWxlbnQgcmVhZCksIHNvIGEgc2xpY2UgdGhyb3VnaCBpdCBtYXkgYmUgaW5jb21wbGV0ZTogdGhvc2UgcmVhZHMgcHJvZHVjZSBubyByZWFkLXRvLXdyaXRlIGVkZ2UgdG8gZm9sbG93LicsXG4gIC8vIOKUgOKUgCB2YWx1ZXMgc2NydWJiZWQgYXQgd3JpdGUgdGltZSDigJQgYEZvbGRlZFN0YXRlLnJlZGFjdGVkYCAvIGByZWRhY3RlZFBhdGhzYCwgYSB2YWx1ZSBiYXNpcyDilIBcbiAgcmVkYWN0ZWQ6XG4gICAgXCJWYWx1ZXMgYXQgdGhlIHBhdGhzIGxpc3RlZCBpbiByZWRhY3RlZFBhdGhzIChhIGZvbGQncywgb3IgYSBjb21taXQncyBpbiB0aGUgcmFuZ2UgYSBrZXkncyB2YWx1ZSByZXN0cyBvbikgd2VyZSBzY3J1YmJlZCB3aGVuIHRoZXkgd2VyZSB3cml0dGVuIChieSBhIHJlZGFjdGlvbiBwb2xpY3ksIG9yIGEgd3JpdGUgbWFya2VkIHJlZGFjdGVkKSwgc28gd2hlcmUgdGhlIGFuc3dlciBob2xkcyB0aGUgbG9nJ3MgcGxhY2Vob2xkZXIgJ1JFREFDVEVEJywgb3IgbG9zdCBhIGtleSB1bmRlciBhIGNvbnRhaW5lciB0aGUgcGxhY2Vob2xkZXIgcmVwbGFjZWQsIGl0IHN0YW5kcyBpbiBmb3IgYSB2YWx1ZSB0aGUgbG9nIG5ldmVyIHJlY29yZGVkLlwiLFxuICAvLyDilIDilIAgaG93IG9uZSBrZXkncyB2YWx1ZSB3YXMgcmVhZCBvZmYgdGhlIGxvZyDigJQgYFZhbHVlQmFzaXNgIChjb21taXRWYWx1ZUF0V2l0aEJhc2lzKSDilIBcbiAgZGVsZXRlZDpcbiAgICBcIlRoZSBrZXkncyBsYXN0IHdyaXRlIGluIHRoZSByYW5nZSBhc2tlZCBhYm91dCBsZWZ0IGl0IGFic2VudCAoYSBkZWxldGUgb2YgdGhlIGtleSBvciBvZiBhIGNvbnRhaW5lciBhcm91bmQgaXQsIG9yIGEgc2V0IG9mIGEgY29udGFpbmVyIHRoYXQgbm8gbG9uZ2VyIGhvbGRzIGl0KSwgc28gdGhlIGFuc3dlciBpcyB1bmRlZmluZWQgYmVjYXVzZSB0aGUgcmVjb3JkIHNheXMgdGhlIGtleSB3YXMgZ29uZSBhdCB0aGF0IHBvaW50LCBub3QgYmVjYXVzZSBub3RoaW5nIHdhcyByZWNvcmRlZC5cIixcbiAgJ2Zyb20taW5pdGlhbC1zdGF0ZSc6XG4gICAgXCJObyBzZXQgb3IgZGVsZXRlIG9mIHRoZSBrZXksIG9yIG9mIGEgY29udGFpbmVyIGFyb3VuZCBpdCwgaXMgaW4gdGhlIHJhbmdlIGFza2VkIGFib3V0LCBzbyB0aGUgYW5zd2VyIHJlc3RzIG9uIHRoZSB2YWx1ZSB0aGUga2V5IGhhZCBiZWZvcmUgdGhlIHJ1bjogZm9sZGVkIGZyb20gdGhlIGluaXRpYWxTdGF0ZSBwYXNzZWQgaW4gd2hlbiB0aGVyZSB3YXMgb25lLCBhbmQgb3RoZXJ3aXNlIG9ubHkgd2hhdCB0aGUgbG9nJ3MgbWVyZ2VzLCBhcHBlbmRzIGFuZCBuZXN0ZWQgd3JpdGVzIGFkZGVkIHRvIGl0IChvciBub3RoaW5nKSwgd2hpY2ggaXMgcGFydGlhbCBmb3IgYSBrZXkgc2VlZGVkIGJlZm9yZSB0aGUgcnVuLlwiLFxufSBzYXRpc2ZpZXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPik7XG5cbi8qKiBBbnkgY29kZSBpbiB7QGxpbmsgSE9ORVNUWV9DT0RFU30g4oCUIHRoZSBrZXkgYSByZWFkZXIgbG9va3MgYW4gZXhwbGFuYXRpb24gdXAgYnkuICovXG5leHBvcnQgdHlwZSBIb25lc3R5Q29kZSA9IGtleW9mIHR5cGVvZiBIT05FU1RZX0NPREVTO1xuXG4vKipcbiAqIEEgdW5pb24gb2YgaG9uZXN0eSBjb2RlcyBhIHR5cGUgREVDTEFSRVM6IGBUYCBtdXN0IGJlIGEgc3Vic2V0IG9mIHtAbGluayBIb25lc3R5Q29kZX0sIG9yIHRoZVxuICogZGVjbGFyYXRpb24gZmFpbHMgdG8gY29tcGlsZSAoVFMyMzQ0KS5cbiAqXG4gKiBgUmVnaXN0ZXJlZENvZGU8VD5gIGlzIGBUYCDigJQgYW4gaWRlbnRpdHkgYXQgdGhlIHR5cGUgbGV2ZWwg4oCUIHNvIHRoZSB1bmlvbiBrZWVwcyBleGFjdGx5IHRoZVxuICogbWVtYmVycyBpdCB3YXMgd3JpdHRlbiB3aXRoIGFuZCBkb2VzIE5PVCB3aWRlbiB0byBldmVyeSBjb2RlOlxuICogYHR5cGUgRm9sZEJhc2lzID0gUmVnaXN0ZXJlZENvZGU8J2luaXRpYWwrbG9nJyB8ICdsb2ctb25seSc+YC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVnaXN0ZXJlZENvZGU8VCBleHRlbmRzIEhvbmVzdHlDb2RlPiA9IFQ7XG4iXX0=
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9uZXN0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2hvbmVzdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBRUg7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6RCw2RUFBNkU7SUFDN0Usd0JBQXdCLEVBQ3RCLCtMQUErTDtJQUNqTSxhQUFhLEVBQ1gsaVVBQWlVO0lBQ25VLGdCQUFnQixFQUNkLDZMQUE2TDtJQUMvTCxvQkFBb0IsRUFDbEIsMElBQTBJO0lBQzVJLGFBQWEsRUFDWCxtSkFBbUo7SUFDckosU0FBUyxFQUNQLDhHQUE4RztJQUNoSCxtR0FBbUc7SUFDbkcsV0FBVyxFQUNULHFJQUFxSTtJQUN2SSxlQUFlLEVBQ2IsdVlBQXVZO0lBQ3pZLGNBQWMsRUFDWiwwTkFBME47SUFDNU4sOEVBQThFO0lBQzlFLFdBQVcsRUFDVCxvT0FBb087SUFDdE8sS0FBSyxFQUNILHlRQUF5UTtJQUMzUSwrRkFBK0Y7SUFDL0YsYUFBYSxFQUNYLDRLQUE0SztJQUM5SyxrQkFBa0IsRUFDaEIsdU9BQXVPO0lBQ3pPLGFBQWEsRUFDWCxnTEFBZ0w7SUFDbEwsNkVBQTZFO0lBQzdFLGFBQWEsRUFDWCx1TkFBdU47SUFDek4sVUFBVSxFQUNSLDZVQUE2VTtJQUMvVSw2RUFBNkU7SUFDN0UsU0FBUyxFQUNQLGdMQUFnTDtJQUNsTCw4RUFBOEU7SUFDOUUsb0JBQW9CLEVBQ2xCLHNNQUFzTTtJQUN4TSwrRkFBK0Y7SUFDL0YsUUFBUSxFQUNOLDRXQUE0VztJQUM5Vyx3RkFBd0Y7SUFDeEYsT0FBTyxFQUNMLHVSQUF1UjtJQUN6UixvQkFBb0IsRUFDbEIsZ1dBQWdXO0NBQ2xVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogaG9uZXN0eS50cyDigJQgdGhlIE9ORSB2b2NhYnVsYXJ5IGZvciB3aGF0IGEgcmVhZGVyIGNhbm5vdCBzZWUuXG4gKlxuICogV0hZIFRISVMgRklMRSBFWElTVFMuIEEgcmVjb3JkaW5nIGNhbm5vdCBhbHdheXMgYW5zd2VyIHdoYXQgaXQgaXMgYXNrZWQsIGFuZCB0aGUgbGlicmFyeSBzYXlzXG4gKiBzbyBpbiBzZXZlcmFsIHBsYWNlcywgZWFjaCBpbiBpdHMgb3duIHdvcmRzOiBhIHNsaWNlIGNhcnJpZXMgYEhvbmVzdHlOb3RlYHMgYW5kLCB3aGVuIGl0IGhhcyBub1xuICogYW5zd2VyLCBhIGBtaXNzaW5nYCByZWFzb247IGEgZmVkIGVkZ2UgYW5kIGFuIGVsZW1lbnQgYmlydGggY2FycnkgYSBgYmFzaXNgOyBhIGZvbGQgY2FycmllcyBhXG4gKiBgYmFzaXNgIGFuZCBpdHMgYHJlZGFjdGVkYCBwYXRoczsgYSBzdG9yZWQgbG9nIHJlcG9ydHMgYExvZ0dhcGBzOyBhIGNhdXNhbCBub2RlIGNhcnJpZXNcbiAqIGBpbmNvbXBsZXRlU291cmNlc2AgYW5kIGB0cnVuY2F0ZWRgLiBBIHJlYWRlciB0aGF0IHdhbnRzIHRvIEVYUExBSU4gYW55IG9mIHRoZW0gdG8gYSBwZXJzb24gKGFcbiAqIHdoeS1wYW5lbCwgYW4gYWdlbnQgdG9vbCkga2VwdCBpdHMgb3duIHRhYmxlIG9mIGNvZGUg4oaSIHNlbnRlbmNlLCBhbmQgdGFibGVzIGtlcHQgYXBhcnQgZHJpZnQuXG4gKiBUaGlzIGZpbGUgaXMgdGhhdCB0YWJsZSwgb25jZS5cbiAqXG4gKiBXSEFUIElUIEhPTERTLlxuICogICAtIGBIT05FU1RZX0NPREVTYCDigJQgYSBmcm96ZW4sIGNsb3NlZCByZWdpc3RyeTogY29kZSDihpIgdGhlIE9ORSBzZW50ZW5jZSB0aGF0IHNheXMgd2hhdCB0aGUgY29kZVxuICogICAgIG1lYW5zLiBUaGUgc2hhcGUgb2YgcnVzdGMncyBgLS1leHBsYWluYCBhbmQgTFNQJ3MgYERpYWdub3N0aWMuY29kZWA6IHRoZSBjb2RlIGlzIHRoZSBzdGFibGVcbiAqICAgICBrZXkgYSBjb25zdW1lciBCUkFOQ0hFUyBvbjsgdGhlIHNlbnRlbmNlIGlzIGZvciB3aG9ldmVyIHJlYWRzIHRoZSBzY3JlZW4uIEl0IGlzIG5vdCB0aGVcbiAqICAgICBwZXItaW5zdGFuY2UgYGRldGFpbGAgYSBub3RlIGNhcnJpZXMgKHRoYXQgbmFtZXMgdGhlIGtleSwgdGhlIGJ1ZGdldCwgdGhlIHJvd3MpLlxuICogICAtIGBIb25lc3R5Q29kZWAgLyBgUmVnaXN0ZXJlZENvZGVgIOKAlCB3aGF0IG1ha2VzIHRoZSByZWdpc3RyeSB0aGUgb3duZXIgYW5kIG5vdCBhIHN1Z2dlc3Rpb246XG4gKiAgICAgZWFjaCBwdWJsaWMgdW5pb24gb2YgdGhlc2UgY29kZXMgKGBIb25lc3R5Tm90ZUNvZGVgLCBgTWlzc2luZ1NsaWNlUmVhc29uYCxcbiAqICAgICBgTWlzc2luZ1Byb3ZlbmFuY2VSZWFzb25gLCBgRmVkQmFzaXNgLCBgQXR0cmlidXRpb25CYXNpc2AsIGBGb2xkQmFzaXNgLCBhbmQgc2luY2UgOS4zMy4wIGBWYWx1ZUJhc2lzYCAvXG4gKiAgICAgYFdyaXRlckJhc2lzYCDigJQgdGhlIGJhc2lzIHR3aW5zIG9mIGBjb21taXRWYWx1ZUF0YCAvIGBmaW5kTGFzdFdyaXRlcmApIGRlY2xhcmVzIGl0cyBtZW1iZXJzXG4gKiAgICAgdGhyb3VnaCBgUmVnaXN0ZXJlZENvZGVgLCBzbyBhIG1lbWJlciB0aGUgcmVnaXN0cnkgZG9lcyBub3QgaG9sZCBmYWlscyB0byBDT01QSUxFLiBBbmRcbiAqICAgICBgdGVzdC9hcmNoaXRlY3R1cmUvaG9uZXN0eS12b2NhYnVsYXJ5LnRlc3QudHNgIGFza3MgdGhlIHR5cGUgY2hlY2tlciBmb3IgZXZlcnkgZXhwb3J0ZWQgdHlwZVxuICogICAgIGFsaWFzIG9mIGBmb290cHJpbnRqcy90cmFjZWAgdGhhdCBpcyBhIHVuaW9uIG9mIHN0cmluZyBsaXRlcmFsczogZWFjaCBvbmUgaXMgaW5zaWRlIHRoZVxuICogICAgIHJlZ2lzdHJ5IG9yIGlzIG5hbWVkLCB3aXRoIGl0cyByZWFzb24sIGFzIG5vdCBhbiBob25lc3R5IHZvY2FidWxhcnkuXG4gKlxuICogTk8gT0JKRUNUIEdBSU5TIEEgRklFTEQgZnJvbSBiZWluZyByZWdpc3RlcmVkLiBUaHJlZSBzaWduYWxzIGNhcnJ5IG5vIGNvZGUgb2YgdGhlaXIgb3duIOKAlCBhXG4gKiBgTG9nR2FwYCAoYCdsb2ctZ2FwJ2ApLCBgQ2F1c2FsTm9kZS5pbmNvbXBsZXRlU291cmNlc2AgKGAnaW5jb21wbGV0ZS1zb3VyY2VzJ2ApIGFuZFxuICogYEZvbGRlZFN0YXRlLnJlZGFjdGVkYCAvIGByZWRhY3RlZFBhdGhzYCAoYCdyZWRhY3RlZCdgKSDigJQgYW5kIGEgYHRydW5jYXRlZDogeyBieURlcHRoLCBieU5vZGVzIH1gXG4gKiBmaWVsZCBtZWFucyBgJ3RydW5jYXRlZCdgOyB0aGV5IGFyZSByZWdpc3RlcmVkIHNvIGEgcmVhZGVyIGV4cGxhaW5zIHRoZW0gZnJvbSB0aGUgc2FtZSBwbGFjZS5cbiAqXG4gKiBOT1QgSEVSRTogdGhlIHR3byBzdHJpbmdzIGEgcmVkYWN0aW9uIGxlYXZlcyB3aGVyZSBhIHZhbHVlIHdhcy4gVGhlIGVuZ2luZSB3cml0ZXMgdGhvc2Ugb24gZXZlcnlcbiAqIHJlZGFjdGVkIHJ1bjsgdGhlIGxvZydzIGxpdmVzIGluIGl0cyBvd24gbGVhZiwgYG1lbW9yeS9wbGFjZWhvbGRlcnMudHNgICh0aGUgc2NvcGUgY2hhbm5lbCdzIHdpdGhcbiAqIHRoZSB2ZXJkaWN0LCBgbWVtb3J5L3JlZGFjdGlvbi50c2ApLCBzbyB0aGF0IGFuIGFwcCB3aGljaCBvbmx5IHJ1bnMgY2hhcnRzIGRvZXMgbm90IGNhcnJ5IHRoZXNlXG4gKiBzZW50ZW5jZXMgaW4gaXRzIGJ1bmRsZSAoYEhPTkVTVFlfQ09ERVNgIGlzIGEgcHVyZSBleHByZXNzaW9uLCBzbyBhIGJ1bmRsZXIgZHJvcHMgaXQgd2hlcmV2ZXJcbiAqIG5vdGhpbmcgcmVhZHMgaXQpLlxuICpcbiAqIFdIWSBMMC4gVGhpcyBmaWxlIGltcG9ydHMgTk9USElORywgYW5kIGBzbGljZS9gIGFuZCBgdGltZS10cmF2ZWwvYCAoTDMpIHR5cGUgdGhlaXIgY29kZXMgdGhyb3VnaFxuICogaXQsIHNvIGl0IHNpdHMgYmVsb3cgdGhlbSDigJQgdGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBIT05FU1RZX0NPREVTIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGZvciAoY29uc3QgeyBjb2RlIH0gb2YgZm9yd2FyZFNsaWNlLm5vdGVzKSBjb25zb2xlLmxvZyhjb2RlLCAn4oaSJywgSE9ORVNUWV9DT0RFU1tjb2RlXSk7XG4gKiAvLyByZWFkcy1ub3QtcmVjb3JkZWQg4oaSIFRoaXMgbG9nIGNhcnJpZXMgbm8gcmVjb3JkZWQgcmVhZCBhdCBhbGwgKHRoZSByZWFkVHJhY2tpbmc6ICdvZmYnIHNpZ25hdHVyZSksIOKAplxuICogSE9ORVNUWV9DT0RFU1tmb2xkZWRTdGF0ZS5iYXNpc107IC8vICdsb2ctb25seScg4oaSIE5vIGluaXRpYWxTdGF0ZSB0cmF2ZWxsZWQgd2l0aCB0aGlzIGxvZyAo4oCmKSwg4oCmXG4gKiBgYGBcbiAqL1xuXG4vKipcbiAqIEV2ZXJ5IGhvbmVzdHkgY29kZSB0aGUgdHJhY2UgcmVhZGVycyAoYGZvb3RwcmludGpzL3RyYWNlYCkgc3BlYWssIHdpdGggdGhlIG9uZSBzZW50ZW5jZSB0aGF0IHNheXNcbiAqIHdoYXQgaXQgbWVhbnMuXG4gKlxuICogRnJvemVuIGFuZCBjbG9zZWQ6IHRoZSBrZXlzIGFyZSBleGFjdGx5IHRoZSBjb2RlcyBiZWxvdywgYW5kIHtAbGluayBIb25lc3R5Q29kZX0gaXMgZGVyaXZlZCBmcm9tXG4gKiB0aGVtLiBBIG5ldyBjb2RlIGlzIG9uZSBuZXcgbGluZSBoZXJlOiBhIHVuaW9uIGRlY2xhcmVkIHRocm91Z2gge0BsaW5rIFJlZ2lzdGVyZWRDb2RlfSBjYW5ub3QgaG9sZFxuICogYSBjb2RlIHRoYXQgaXMgbm90IG9uIGl0LCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL2hvbmVzdHktdm9jYWJ1bGFyeS50ZXN0LnRzYCBmYWlscyBvbiBhbiBleHBvcnRlZFxuICogdHlwZSBhbGlhcyBvZiBgZm9vdHByaW50anMvdHJhY2VgIHRoYXQgaXMgYSB1bmlvbiBvZiBzdHJpbmcgbGl0ZXJhbHMgbmVpdGhlciBpbnNpZGUgdGhlIHJlZ2lzdHJ5XG4gKiBub3IgbmFtZWQgdGhlcmUgYXMgbm90IGFuIGhvbmVzdHkgdm9jYWJ1bGFyeS4gVGhlIHZhbHVlcyBhcmUgdHlwZWQgYHN0cmluZ2AsIG5vdCBsaXRlcmFsIHR5cGVzLFxuICogb24gcHVycG9zZTogdGhlIHNlbnRlbmNlcyBhcmUgZm9yIGEgc2NyZWVuIGFuZCBtYXkgYmUgcmV3b3JkZWQ7IGEgY29uc3VtZXIgYnJhbmNoZXMgb24gdGhlIEtFWS5cbiAqL1xuZXhwb3J0IGNvbnN0IEhPTkVTVFlfQ09ERVMgPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmZyZWV6ZSh7XG4gIC8vIOKUgOKUgCBhIHNsaWNlJ3Mgbm90ZXMg4oCUIGBIb25lc3R5Tm90ZS5jb2RlYCAoc2xpY2UvKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgJ2NvbnNlcnZhdGl2ZS1mZWQtZWRnZXMnOlxuICAgIFwiQXQgbGVhc3Qgb25lICdmZWQnIGVkZ2UgaXMgc3RhZ2UtbGV2ZWwgKGNvbnNlcnZhdGl2ZSk6IGl0cyB3cml0ZSBjYXJyaWVzIG5vIHBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UsIHNvIHRoZSBlZGdlIG1heSBub3QgYmUgcmVhbCDigJQgdHVybiBvbiB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnIGZvciBleGFjdCBlZGdlcy5cIixcbiAgJ25lc3RlZC1yb3dzJzpcbiAgICBcIkEgd3JpdGUgdGhpcyBhbnN3ZXIgcmVzdHMgb24gcmVhY2hlZCB0aGUga2V5IG9ubHkgdGhyb3VnaCBwYXRocyBpbnNpZGUgaXQgKGEgc3ViZmxvdydzIGlucHV0IHNlZWQsIGFuIG91dHB1dE1hcHBlciBtZXJnZS1iYWNrLCBhIGZvcmsgY2hpbGQncyBuYW1lc3BhY2UpLCBzbyBpdCBjaGFuZ2VkIHBhcnQgb2YgdGhlIGtleSdzIHZhbHVlLCBub3QgdGhlIHdob2xlOiBlYXJsaWVyIHdyaXRlcyBtYXkgYWNjb3VudCBmb3IgdGhlIHJlc3QsIGFuZCBhIHJlYWRlciBvZiB0aGUga2V5IG1heSBub3QgaGF2ZSByZWFkIHRoZSBwYXJ0IHRoYXQgd3JpdGUgY2hhbmdlZC5cIixcbiAgJ3ByZS1ydW4tb3JpZ2luJzpcbiAgICAnVGhlIHZhbHVlIGJlaW5nIGZvbGxvd2VkIHdhcyBhYnNlbnQgb3IgYWxyZWFkeSB0aGVyZSBiZWZvcmUgdGhlIGZpcnN0IHdyaXRlIHRoaXMgbG9nIGNhbiBzZWUgKGluaXRpYWwgc3RhdGUsIGZyb3plbiBydW4gaW5wdXQgb3IgYSBjbG9zdXJlKSwgc28gd2hvIHB1dCBpdCB0aGVyZSBpcyBvdXRzaWRlIHRoZSBjb21taXQgbG9nLicsXG4gICdyZWFkcy1ub3QtcmVjb3JkZWQnOlxuICAgIFwiVGhpcyBsb2cgY2FycmllcyBubyByZWNvcmRlZCByZWFkIGF0IGFsbCAodGhlIHJlYWRUcmFja2luZzogJ29mZicgc2lnbmF0dXJlKSwgc28gJ25vdGhpbmcgcmVhZCB0aGlzIHZhbHVlJyBpcyB1bmtub3dhYmxlIGhlcmUsIG5vdCB0cnVlLlwiLFxuICAndW5rbm93bi1rZXknOlxuICAgIFwiVGhpcyBsb2cgaGFzIG5vIHdyaXRlIGFuZCBubyByZWNvcmRlZCByZWFkIG9mIHRoZSBrZXksIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEgdHlwbyBvciB0aGUgd3JvbmcgcnVuJ3MgbG9nIHJhdGhlciB0aGFuIGEgdmFyaWFibGUgd2l0aCBubyBoaXN0b3J5LlwiLFxuICB0cnVuY2F0ZWQ6XG4gICAgJ0EgYnVkZ2V0IChtYXhEZXB0aCBvciBtYXhOb2RlcykgY3V0IHRoZSB3YWxrLCBzbyBtb3JlIG9mIHRoZSBhbnN3ZXIgZXhpc3RzIGJleW9uZCB0aGUgaG9yaXpvbiBpdCBzdG9wcGVkIGF0LicsXG4gIC8vIOKUgOKUgCB3aHkgYSBzbGljZSBoYXMgbm8gYW5zd2VyIOKAlCBgbWlzc2luZ2AgKHNsaWNlLzogTWlzc2luZ1NsaWNlUmVhc29uLCBNaXNzaW5nUHJvdmVuYW5jZVJlYXNvbikg4pSAXG4gICdlbXB0eS1sb2cnOlxuICAgICdUaGUgY29tbWl0IGxvZyBob2xkcyBubyBjb21taXQgYXQgYWxsIChub3RoaW5nIGhhcyBleGVjdXRlZCwgb3IgdGhlIGxvZyBoYW5kZWQgaW4gaXMgZW1wdHkpLCBzbyB0aGVyZSBpcyBubyBoaXN0b3J5IHRvIGFuc3dlciBmcm9tLicsXG4gICduZXZlci13cml0dGVuJzpcbiAgICAnTm8gY29tbWl0IGluIHRoZSByYW5nZSBhc2tlZCBhYm91dCB3cm90ZSB0aGUga2V5IOKAlCBub3QgaXRzIHdob2xlIHZhbHVlLCBub3QgYSBwYXRoIGluc2lkZSBpdCwgYW5kIG5vdCBhIGNvbnRhaW5lciBhcm91bmQgaXQgaW4gYSB3YXkgdGhhdCBjaGFuZ2VkIGl0IChhIGZvcndhcmQgc2xpY2Ugb3IgYSB0aW1lbGluZSBhbHNvIGZvdW5kIG5vIHJlY29yZGVkIHJlYWQgb24sIGluc2lkZSBvciBhcm91bmQgaXQpIOKAlCBzbyB0aGVyZSBpcyBubyB3cml0ZSB0byBzdGFydCBmcm9tOiBhbnkgdmFsdWUgaXQgaGFzIGNhbWUgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZSwgdGhlIGZyb3plbiBydW4gaW5wdXQgb3IgYSBjbG9zdXJlLCBub25lIG9mIHdoaWNoIHRoZSBjb21taXQgbG9nIGNhbiBzZWUuJyxcbiAgJ25vdC1hbi1hcnJheSc6XG4gICAgJ1RoZSBrZXkgd2FzIHdyaXR0ZW4sIGJ1dCBpdHMgdmFsdWUgYXQgdGhlIHBvaW50IGFza2VkIGFib3V0IGlzIG5vdCBhbiBhcnJheSAoYSBzY2FsYXIgb3Igb2JqZWN0IGtleSwgYSBkZWxldGVkIGtleSwgb3IgYSBtZXJnZSB0aGF0IGRlZ3JhZGVkIGl0KSwgc28gZWxlbWVudCBwcm92ZW5hbmNlIGRvZXMgbm90IGFwcGx5OiBzbGljZUZvcktleSBpcyB0aGUgcXVlcnkgZm9yIGl0LicsXG4gIC8vIOKUgOKUgCBob3cgYSBmZWQgZWRnZSB3YXMgYXR0cmlidXRlZCDigJQgYEZvcndhcmRFZGdlLmJhc2lzYCAoc2xpY2UvOiBGZWRCYXNpcykg4pSAXG4gICdwZXItd3JpdGUnOlxuICAgIFwiVGhpcyBmZWQgZWRnZSBpcyBleGFjdDogdGhlIGRvd25zdHJlYW0gd3JpdGUgY2FycmllcyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlIChUcmFjZUVudHJ5LnJlYWRLZXlzLCByZWNvcmRlZCB1bmRlciB3cml0ZVByb3ZlbmFuY2U6ICdyZWFkcy1wcmVmaXgnKSBhbmQgdGhhdCBsaXN0IG5hbWVzIHRoZSBrZXksIHNvIHRoZSB2YWx1ZSB3YXMgcmVhZCBiZWZvcmUgdGhlIHdyaXRlIGl0IGZlZWRzLlwiLFxuICBzdGFnZTpcbiAgICAnVGhpcyBmZWQgZWRnZSBpcyBjb25zZXJ2YXRpdmU6IHRoZSBkb3duc3RyZWFtIHdyaXRlIGNhcnJpZXMgbm8gcGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAodGhlIHdyaXRlUHJvdmVuYW5jZSBkaWFsIHdhcyBvZmYsIG9yIHRoZSBsb2cgaXMgbWl4ZWQpLCBzbyBhbGwgdGhhdCBpcyBrbm93biBpcyB0aGF0IGl0cyBzdGFnZSByZWFkIHRoaXMga2V5IGFuZCB3cm90ZSB0aGF0IHBhdGggaW4gc29tZSBvcmRlciwgYW5kIHRoZSBlZGdlIG1heSBub3QgYmUgcmVhbC4nLFxuICAvLyDilIDilIAgaG93IGFuIGVsZW1lbnQncyBiaXJ0aCB3YXMgYXR0cmlidXRlZCDigJQgYEVsZW1lbnRCaXJ0aC5iYXNpc2AgKHNsaWNlLzogQXR0cmlidXRpb25CYXNpcykg4pSAXG4gICdhcHBlbmQtdmVyYic6XG4gICAgXCJUaGUgZW5naW5lIHJlY29yZGVkIHRoZSBlbGVtZW50IGluIGFuIGFwcGVuZCByb3cncyB0YWlsIChob3cgY29tbWl0VmFsdWVzOiAnZGVsdGEnIHJlY29yZHMgYW4gYXJyYXkncyBncm93dGgpLCBzbyB0aGUgY29tbWl0IHRoYXQgYWRkZWQgaXQgaXMga25vd24gZXhhY3RseSwgbm90IGluZmVycmVkLlwiLFxuICAncHJlZml4LWluZmVyZW5jZSc6XG4gICAgJ0Egd2hvbGUtdmFsdWUgd3JpdGUgKGEgc2V0IG9yIGEgbWVyZ2UpIGtlcHQgdGhlIHByZXZpb3VzIGFycmF5IGFzIGl0cyBwcmVmaXgsIHNvIHRoZSBuZXcgdGFpbCBpcyBhdHRyaWJ1dGVkIHRvIHRoYXQgY29tbWl0IGJ5IGluZmVyZW5jZTogYSB3cml0ZSB0aGF0IHJlcGxhY2VkIHRoZSBhcnJheSB3aXRoIG9uZSB0aGF0IGhhcHBlbnMgdG8gYmVnaW4gdGhlIHNhbWUgd2F5IGxvb2tzIGlkZW50aWNhbC4nLFxuICAnd2hvbGUtdmFsdWUnOlxuICAgIFwiVGhpcyBjb21taXQgcGxhY2VkIHRoZSBhcnJheSB3aG9sZXNhbGUgKHRoZXJlIHdhcyBubyBlYXJsaWVyIGFycmF5LCBvciB0aGUgbmV3IG9uZSBkb2VzIG5vdCBiZWdpbiB3aXRoIGl0KSwgc28gZXZlcnkgZWxlbWVudCdzIGJpcnRoIHJlc2V0cyB0byB0aGlzIGNvbW1pdDogZXhhY3QsIGJ1dCBjb2Fyc2UuXCIsXG4gIC8vIOKUgOKUgCBob3cgYSBmb2xkIHdhcyBkZXJpdmVkIOKAlCBgRm9sZGVkU3RhdGUuYmFzaXNgICh0aW1lLXRyYXZlbC8pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAnaW5pdGlhbCtsb2cnOlxuICAgICdUaGUgZm9sZCBzdGFydGVkIGZyb20gdGhlIGZvbGQgYmFzZSB0aGF0IHRyYXZlbGxlZCB3aXRoIHRoZSBsb2cgKGluaXRpYWxTdGF0ZSkgYW5kIHJlcGxheWVkIHRoZSBjb21taXQgbG9nIG9udG8gaXQsIHNvIG5vdGhpbmcgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIGlzIG1pc3Npbmc7IHJvd3MgaXQgY291bGQgbm90IHJlYWQgYXJlIGxpc3RlZCBhcGFydCwgaW4gc2tpcHBlZC4nLFxuICAnbG9nLW9ubHknOlxuICAgICdObyBpbml0aWFsU3RhdGUgdHJhdmVsbGVkIHdpdGggdGhpcyBsb2cgKGEgc25hcHNob3Qgc3RvcmVkIGJlZm9yZSA5LjE3LCBhIHJlZGFjdGVkIHNuYXBzaG90IG9yIGEgaGFuZC1idWlsdCBsb2cpLCBzbyB0aGUgZm9sZCBzdGFydGVkIGZyb20gYW4gZW1wdHkgb2JqZWN0OiBhIGtleSBzZWVkZWQgYmVmb3JlIHRoZSBydW4gaXMgd2hvbGUgb25seSBvbmNlIGEgY29tbWl0IHNpbmNlIHdyb3RlIGl0cyB3aG9sZSB2YWx1ZSwgYW5kIHVudGlsIHRoZW4gaXQgaG9sZHMganVzdCB3aGF0IGl0cyBtZXJnZXMsIGFwcGVuZHMgYW5kIG5lc3RlZCB3cml0ZXMgYWRkZWQsIG9yIG5vdGhpbmcuJyxcbiAgLy8g4pSA4pSAIGEgcm93IG9mIGEgc3RvcmVkIGxvZyB0aGF0IGlzIG5vdCBhIGNvbW1pdCBidW5kbGUg4oCUIGBMb2dHYXBgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAnbG9nLWdhcCc6XG4gICAgJ0Egcm93IG9mIHRoZSBzdG9yZWQgbG9nIGNvdWxkIG5vdCBiZSByZWFkIGFzIGEgY29tbWl0IGJ1bmRsZSwgc28gaXQga2VlcHMgaXRzIGluZGV4IGJ1dCBjb250cmlidXRlcyBubyBzdGF0ZSwgYW5kIGFueSBmb2xkIHRoYXQgY3Jvc3NlcyBpdCBpcyBtaXNzaW5nIHdoYXRldmVyIHRoYXQgcm93IHdyb3RlLicsXG4gIC8vIOKUgOKUgCB1bnRyYWNrZWQgcmVhZHMgYSBzdGFnZSBhbHNvIGNvbnN1bWVkIOKAlCBgQ2F1c2FsTm9kZS5pbmNvbXBsZXRlU291cmNlc2Ag4pSAXG4gICdpbmNvbXBsZXRlLXNvdXJjZXMnOlxuICAgICdUaGUgc3RhZ2UgYWxzbyBjb25zdW1lZCByZWFkIHBhdGhzIHRoYXQgYnlwYXNzIHJlYWQgdHJhY2tpbmcgKGFyZ3MsIGVudiBvciBhbiB1bnNoYWRvd2VkIHNpbGVudCByZWFkKSwgc28gYSBzbGljZSB0aHJvdWdoIGl0IG1heSBiZSBpbmNvbXBsZXRlOiB0aG9zZSByZWFkcyBwcm9kdWNlIG5vIHJlYWQtdG8td3JpdGUgZWRnZSB0byBmb2xsb3cuJyxcbiAgLy8g4pSA4pSAIHZhbHVlcyBzY3J1YmJlZCBhdCB3cml0ZSB0aW1lIOKAlCBgRm9sZGVkU3RhdGUucmVkYWN0ZWRgIC8gYHJlZGFjdGVkUGF0aHNgLCBhIHZhbHVlIGJhc2lzIOKUgFxuICByZWRhY3RlZDpcbiAgICBcIlZhbHVlcyBhdCB0aGUgcGF0aHMgbGlzdGVkIGluIHJlZGFjdGVkUGF0aHMgKGEgZm9sZCdzLCBvciBhIGNvbW1pdCdzIGluIHRoZSByYW5nZSBhIGtleSdzIHZhbHVlIHJlc3RzIG9uKSB3ZXJlIHNjcnViYmVkIHdoZW4gdGhleSB3ZXJlIHdyaXR0ZW4gKGJ5IGEgcmVkYWN0aW9uIHBvbGljeSwgb3IgYSB3cml0ZSBtYXJrZWQgcmVkYWN0ZWQpLCBzbyB3aGVyZSB0aGUgYW5zd2VyIGhvbGRzIHRoZSBsb2cncyBwbGFjZWhvbGRlciAnUkVEQUNURUQnLCBvciBsb3N0IGEga2V5IHVuZGVyIGEgY29udGFpbmVyIHRoZSBwbGFjZWhvbGRlciByZXBsYWNlZCwgaXQgc3RhbmRzIGluIGZvciBhIHZhbHVlIHRoZSBsb2cgbmV2ZXIgcmVjb3JkZWQuXCIsXG4gIC8vIOKUgOKUgCBob3cgb25lIGtleSdzIHZhbHVlIHdhcyByZWFkIG9mZiB0aGUgbG9nIOKAlCBgVmFsdWVCYXNpc2AgKGNvbW1pdFZhbHVlQXRXaXRoQmFzaXMpIOKUgFxuICBkZWxldGVkOlxuICAgIFwiVGhlIGtleSdzIGxhc3Qgd3JpdGUgaW4gdGhlIHJhbmdlIGFza2VkIGFib3V0IGxlZnQgaXQgYWJzZW50IChhIGRlbGV0ZSBvZiB0aGUga2V5IG9yIG9mIGEgY29udGFpbmVyIGFyb3VuZCBpdCwgb3IgYSBzZXQgb2YgYSBjb250YWluZXIgdGhhdCBubyBsb25nZXIgaG9sZHMgaXQpLCBzbyB0aGUgYW5zd2VyIGlzIHVuZGVmaW5lZCBiZWNhdXNlIHRoZSByZWNvcmQgc2F5cyB0aGUga2V5IHdhcyBnb25lIGF0IHRoYXQgcG9pbnQsIG5vdCBiZWNhdXNlIG5vdGhpbmcgd2FzIHJlY29yZGVkLlwiLFxuICAnZnJvbS1pbml0aWFsLXN0YXRlJzpcbiAgICBcIk5vIHNldCBvciBkZWxldGUgb2YgdGhlIGtleSwgb3Igb2YgYSBjb250YWluZXIgYXJvdW5kIGl0LCBpcyBpbiB0aGUgcmFuZ2UgYXNrZWQgYWJvdXQsIHNvIHRoZSBhbnN3ZXIgcmVzdHMgb24gdGhlIHZhbHVlIHRoZSBrZXkgaGFkIGJlZm9yZSB0aGUgcnVuOiBmb2xkZWQgZnJvbSB0aGUgaW5pdGlhbFN0YXRlIHBhc3NlZCBpbiB3aGVuIHRoZXJlIHdhcyBvbmUsIGFuZCBvdGhlcndpc2Ugb25seSB3aGF0IHRoZSBsb2cncyBtZXJnZXMsIGFwcGVuZHMgYW5kIG5lc3RlZCB3cml0ZXMgYWRkZWQgdG8gaXQgKG9yIG5vdGhpbmcpLCB3aGljaCBpcyBwYXJ0aWFsIGZvciBhIGtleSBzZWVkZWQgYmVmb3JlIHRoZSBydW4uXCIsXG59IHNhdGlzZmllcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTtcblxuLyoqIEFueSBjb2RlIGluIHtAbGluayBIT05FU1RZX0NPREVTfSDigJQgdGhlIGtleSBhIHJlYWRlciBsb29rcyBhbiBleHBsYW5hdGlvbiB1cCBieS4gKi9cbmV4cG9ydCB0eXBlIEhvbmVzdHlDb2RlID0ga2V5b2YgdHlwZW9mIEhPTkVTVFlfQ09ERVM7XG5cbi8qKlxuICogQSB1bmlvbiBvZiBob25lc3R5IGNvZGVzIGEgdHlwZSBERUNMQVJFUzogYFRgIG11c3QgYmUgYSBzdWJzZXQgb2Yge0BsaW5rIEhvbmVzdHlDb2RlfSwgb3IgdGhlXG4gKiBkZWNsYXJhdGlvbiBmYWlscyB0byBjb21waWxlIChUUzIzNDQpLlxuICpcbiAqIGBSZWdpc3RlcmVkQ29kZTxUPmAgaXMgYFRgIOKAlCBhbiBpZGVudGl0eSBhdCB0aGUgdHlwZSBsZXZlbCDigJQgc28gdGhlIHVuaW9uIGtlZXBzIGV4YWN0bHkgdGhlXG4gKiBtZW1iZXJzIGl0IHdhcyB3cml0dGVuIHdpdGggYW5kIGRvZXMgTk9UIHdpZGVuIHRvIGV2ZXJ5IGNvZGU6XG4gKiBgdHlwZSBGb2xkQmFzaXMgPSBSZWdpc3RlcmVkQ29kZTwnaW5pdGlhbCtsb2cnIHwgJ2xvZy1vbmx5Jz5gLlxuICovXG5leHBvcnQgdHlwZSBSZWdpc3RlcmVkQ29kZTxUIGV4dGVuZHMgSG9uZXN0eUNvZGU+ID0gVDtcbiJdfQ==
|
|
@@ -10,12 +10,14 @@ export { SharedMemory } from './SharedMemory.js';
|
|
|
10
10
|
export { StageContext } from './StageContext.js';
|
|
11
11
|
export { TransactionBuffer } from './TransactionBuffer.js';
|
|
12
12
|
export type { RedactionVerdict } from './redaction.js';
|
|
13
|
-
export { RedactionRule
|
|
13
|
+
export { RedactionRule } from './redaction.js';
|
|
14
|
+
export { redactPatch } from './scrub.js';
|
|
14
15
|
export type { RunDials, RunPolicy } from './runPolicy.js';
|
|
15
16
|
export { DEFAULT_RUN_POLICY, runPolicy } from './runPolicy.js';
|
|
16
17
|
export type { HonestyCode } from './honesty.js';
|
|
17
18
|
export { HONESTY_CODES } from './honesty.js';
|
|
18
|
-
export { LOG_PLACEHOLDER
|
|
19
|
+
export { LOG_PLACEHOLDER } from './placeholders.js';
|
|
20
|
+
export { SCOPE_PLACEHOLDER } from './redaction.js';
|
|
19
21
|
export type { CommitBundle, CommitValuesMode, FlowControlType, FlowMessage, MemoryPatch, ReadSummaryMarker, ReadTrackingMode, RetentionPolicy, ScopeFactory, StageSnapshot, TraceEntry, UntrackedSource, WriteSummaryMarker, WriteTrackingMode, } from './types.js';
|
|
20
22
|
export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
|
|
21
23
|
export { UnknownVerbError } from './verbs.js';
|
|
@@ -11,14 +11,16 @@ export { EventLog } from './EventLog.js';
|
|
|
11
11
|
export { SharedMemory } from './SharedMemory.js';
|
|
12
12
|
export { StageContext } from './StageContext.js';
|
|
13
13
|
export { TransactionBuffer } from './TransactionBuffer.js';
|
|
14
|
-
export { RedactionRule
|
|
14
|
+
export { RedactionRule } from './redaction.js';
|
|
15
|
+
export { redactPatch } from './scrub.js';
|
|
15
16
|
export { DEFAULT_RUN_POLICY, runPolicy } from './runPolicy.js';
|
|
16
17
|
export { HONESTY_CODES } from './honesty.js';
|
|
17
|
-
// The two strings a redaction leaves where a value was (F4a;
|
|
18
|
-
export { LOG_PLACEHOLDER
|
|
18
|
+
// The two strings a redaction leaves where a value was, one per owner (F4a; split in C4): the record's, the verdict's
|
|
19
|
+
export { LOG_PLACEHOLDER } from './placeholders.js';
|
|
20
|
+
export { SCOPE_PLACEHOLDER } from './redaction.js';
|
|
19
21
|
export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
|
|
20
22
|
// The verb law's refusal: a commit row whose verb is not set | merge | append | delete
|
|
21
23
|
export { UnknownVerbError } from './verbs.js';
|
|
22
24
|
// Utilities
|
|
23
25
|
export { applySmartMerge, deepSmartMerge, DELIM, getNestedValue, getRunAndGlobalPaths, normalisePath, pathSegments, setNestedValue, updateNestedValue, updateValue, } from './utils.js';
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSTNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBSXpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUkvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLHNIQUFzSDtBQUN0SCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFtQm5ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6RSx1RkFBdUY7QUFDdkYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTlDLFlBQVk7QUFDWixPQUFPLEVBQ0wsZUFBZSxFQUNmLGNBQWMsRUFDZCxLQUFLLEVBQ0wsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsV0FBVyxHQUNaLE1BQU0sWUFBWSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogbWVtb3J5LyDigJQgRm91bmRhdGlvbiBsaWJyYXJ5ICh6ZXJvIGV4dGVybmFsIGRlcHMpXG4gKlxuICogVHJhbnNhY3Rpb25hbCBzdGF0ZSBtYW5hZ2VtZW50IHdpdGggbmFtZXNwYWNlIGlzb2xhdGlvbixcbiAqIGF0b21pYyBjb21taXRzLCBhbmQgZXZlbnQtc291cmNlZCB0aW1lLXRyYXZlbC5cbiAqL1xuXG4vLyBDbGFzc2VzXG5leHBvcnQgeyBEaWFnbm9zdGljQ29sbGVjdG9yIH0gZnJvbSAnLi9EaWFnbm9zdGljQ29sbGVjdG9yLmpzJztcbmV4cG9ydCB7IEV2ZW50TG9nIH0gZnJvbSAnLi9FdmVudExvZy5qcyc7XG5leHBvcnQgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5leHBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuL1N0YWdlQ29udGV4dC5qcyc7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1ZmZlciB9IGZyb20gJy4vVHJhbnNhY3Rpb25CdWZmZXIuanMnO1xuXG4vLyBSZWRhY3Rpb24g4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKDkuMTkuMCk7IHRoZSBsb2cncyBzY3J1YiBpcyB0aGUgcmVjb3JkJ3MgKHNjcnViLnRzLCBDNClcbmV4cG9ydCB0eXBlIHsgUmVkYWN0aW9uVmVyZGljdCB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcbmV4cG9ydCB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5leHBvcnQgeyByZWRhY3RQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuXG4vLyBUaGUgcnVuJ3MgcG9saWN5IOKAlCB0aGUgZm91ciBkaWFscywgdGhlIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZyBhcyBPTkUgb2JqZWN0IChGNSlcbmV4cG9ydCB0eXBlIHsgUnVuRGlhbHMsIFJ1blBvbGljeSB9IGZyb20gJy4vcnVuUG9saWN5LmpzJztcbmV4cG9ydCB7IERFRkFVTFRfUlVOX1BPTElDWSwgcnVuUG9saWN5IH0gZnJvbSAnLi9ydW5Qb2xpY3kuanMnO1xuXG4vLyBIb25lc3R5IOKAlCB0aGUgT05FIHZvY2FidWxhcnkgZm9yIHdoYXQgYSByZWFkZXIgY2Fubm90IHNlZSAoRjRhKTogY29kZSDihpIgdGhlIG9uZSBzZW50ZW5jZVxuZXhwb3J0IHR5cGUgeyBIb25lc3R5Q29kZSB9IGZyb20gJy4vaG9uZXN0eS5qcyc7XG5leHBvcnQgeyBIT05FU1RZX0NPREVTIH0gZnJvbSAnLi9ob25lc3R5LmpzJztcblxuLy8gVGhlIHR3byBzdHJpbmdzIGEgcmVkYWN0aW9uIGxlYXZlcyB3aGVyZSBhIHZhbHVlIHdhcywgb25lIHBlciBvd25lciAoRjRhOyBzcGxpdCBpbiBDNCk6IHRoZSByZWNvcmQncywgdGhlIHZlcmRpY3Qnc1xuZXhwb3J0IHsgTE9HX1BMQUNFSE9MREVSIH0gZnJvbSAnLi9wbGFjZWhvbGRlcnMuanMnO1xuZXhwb3J0IHsgU0NPUEVfUExBQ0VIT0xERVIgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEJ1bmRsZSxcbiAgQ29tbWl0VmFsdWVzTW9kZSxcbiAgRmxvd0NvbnRyb2xUeXBlLFxuICBGbG93TWVzc2FnZSxcbiAgTWVtb3J5UGF0Y2gsXG4gIFJlYWRTdW1tYXJ5TWFya2VyLFxuICBSZWFkVHJhY2tpbmdNb2RlLFxuICBSZXRlbnRpb25Qb2xpY3ksXG4gIFNjb3BlRmFjdG9yeSxcbiAgU3RhZ2VTbmFwc2hvdCxcbiAgVHJhY2VFbnRyeSxcbiAgVW50cmFja2VkU291cmNlLFxuICBXcml0ZVN1bW1hcnlNYXJrZXIsXG4gIFdyaXRlVHJhY2tpbmdNb2RlLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCB7IFJFQURfUFJFVklFV19MRU5HVEgsIFNVTU1BUllfUFJFVklFV19MRU5HVEggfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gVGhlIHZlcmIgbGF3J3MgcmVmdXNhbDogYSBjb21taXQgcm93IHdob3NlIHZlcmIgaXMgbm90IHNldCB8IG1lcmdlIHwgYXBwZW5kIHwgZGVsZXRlXG5leHBvcnQgeyBVbmtub3duVmVyYkVycm9yIH0gZnJvbSAnLi92ZXJicy5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHtcbiAgYXBwbHlTbWFydE1lcmdlLFxuICBkZWVwU21hcnRNZXJnZSxcbiAgREVMSU0sXG4gIGdldE5lc3RlZFZhbHVlLFxuICBnZXRSdW5BbmRHbG9iYWxQYXRocyxcbiAgbm9ybWFsaXNlUGF0aCxcbiAgcGF0aFNlZ21lbnRzLFxuICBzZXROZXN0ZWRWYWx1ZSxcbiAgdXBkYXRlTmVzdGVkVmFsdWUsXG4gIHVwZGF0ZVZhbHVlLFxufSBmcm9tICcuL3V0aWxzLmpzJztcbiJdfQ==
|
|
@@ -1,44 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* placeholders.ts — the
|
|
2
|
+
* placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
|
|
3
3
|
*
|
|
4
|
-
* WHY THIS FILE EXISTS. Before F4a six files each spelled
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* no other `src/` file spells
|
|
4
|
+
* WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
|
|
5
|
+
* kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
|
|
6
|
+
* the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
|
|
7
|
+
* no other `src/` file spells it.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* {@link
|
|
13
|
-
*
|
|
9
|
+
* ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
|
|
10
|
+
* strings, and both are historical, so neither may change (stored recordings hold this one). Which
|
|
11
|
+
* one a reader sees depends on WHERE it reads, and each has the owner its reader has:
|
|
12
|
+
* - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
|
|
13
|
+
* served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
|
|
14
|
+
* passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
|
|
15
|
+
* seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
|
|
16
|
+
* (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
|
|
17
|
+
* - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
|
|
18
|
+
* writes, recorder events, the narrative. It lives beside the verdict that writes it
|
|
19
|
+
* (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
|
|
20
|
+
* the record took the engine's string with it.
|
|
14
21
|
*
|
|
15
22
|
* WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
|
|
16
|
-
* reasons to change:
|
|
17
|
-
*
|
|
18
|
-
* business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
|
|
19
|
-
*
|
|
20
|
-
* (`redactPatch` lived in `memory/utils.ts`, L1, until 9.33.0) — the layer table is `scripts/layering.config.cjs`.
|
|
23
|
+
* reasons to change: this string is written on the engine's WRITE path on every redacted run, the
|
|
24
|
+
* honesty registry is read by a reader that explains a recording — and the registry's sentences have
|
|
25
|
+
* no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
|
|
26
|
+
* (the layer table is `scripts/layering.config.cjs`).
|
|
21
27
|
*/
|
|
22
28
|
/**
|
|
23
29
|
* What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
|
|
24
30
|
*
|
|
25
|
-
* `memory/
|
|
31
|
+
* `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
|
|
26
32
|
* mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
|
|
27
33
|
* reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
|
|
28
34
|
* re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
|
|
29
35
|
* (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
|
|
30
36
|
* `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
|
|
31
|
-
* well, not
|
|
37
|
+
* well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
|
|
32
38
|
*/
|
|
33
39
|
export declare const LOG_PLACEHOLDER = "REDACTED";
|
|
34
|
-
/**
|
|
35
|
-
* What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
|
|
36
|
-
* commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
|
|
37
|
-
* emit payload matched by `emitPatterns`, and a subflow's narrated seed (`onSubflowEntry`).
|
|
38
|
-
*
|
|
39
|
-
* NOT every recorder event: `onSubflowExit.outputState` serves the subflow's redacted mirror when a
|
|
40
|
-
* policy keeps one, and so carries {@link LOG_PLACEHOLDER} (without a mirror — per-call marks alone —
|
|
41
|
-
* it is the subflow's heap retained under the rule, with this string). The string did not change
|
|
42
|
-
* when it moved here — it was `REDACTED`, in `memory/redaction.ts`, until then.
|
|
43
|
-
*/
|
|
44
|
-
export declare const SCOPE_PLACEHOLDER = "[REDACTED]";
|
|
@@ -1,45 +1,40 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* placeholders.ts — the
|
|
2
|
+
* placeholders.ts — the string a redaction leaves where a value was, in the RECORD.
|
|
3
3
|
*
|
|
4
|
-
* WHY THIS FILE EXISTS. Before F4a six files each spelled
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* no other `src/` file spells
|
|
4
|
+
* WHY THIS FILE EXISTS. Before F4a six files each spelled a placeholder as a literal, and a spelling
|
|
5
|
+
* kept in six places is a placeholder a reader can no longer match on. Every `src/` file that writes
|
|
6
|
+
* the log's placeholder imports it from here, and `test/architecture/placeholders.test.ts` pins that
|
|
7
|
+
* no other `src/` file spells it.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* {@link
|
|
13
|
-
*
|
|
9
|
+
* ONE STRING HERE, ITS TWIN ON THE VERDICT'S SIDE (C4, review N2). A redaction leaves one of two
|
|
10
|
+
* strings, and both are historical, so neither may change (stored recordings hold this one). Which
|
|
11
|
+
* one a reader sees depends on WHERE it reads, and each has the owner its reader has:
|
|
12
|
+
* - {@link LOG_PLACEHOLDER} (`'REDACTED'`, here) is a RECORD byte: the commit log and everything
|
|
13
|
+
* served from it — written into the log by the record's scrub (`memory/scrub.ts`, L2), and
|
|
14
|
+
* passed by the two places that serve a mirror (`runner/ExecutionRuntime.ts`, the mirror's
|
|
15
|
+
* seed; `engine/handlers/SubflowExecutor.ts`, a subflow's served state). The readers
|
|
16
|
+
* (`slice/`, `time-travel/`) only name it in their docs: they meet it as data in the log;
|
|
17
|
+
* - `SCOPE_PLACEHOLDER` (`'[REDACTED]'`) is the ENGINE's: the scope channel's retained reads and
|
|
18
|
+
* writes, recorder events, the narrative. It lives beside the verdict that writes it
|
|
19
|
+
* (`memory/redaction.ts`, L4). Until C4 both sat in this file ("two placeholders, one leaf");
|
|
20
|
+
* the record took the engine's string with it.
|
|
14
21
|
*
|
|
15
22
|
* WHY A LEAF OF ITS OWN (and not beside `honesty.ts · HONESTY_CODES`). Different readers, different
|
|
16
|
-
* reasons to change:
|
|
17
|
-
*
|
|
18
|
-
* business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
|
|
19
|
-
*
|
|
20
|
-
* (`redactPatch` lived in `memory/utils.ts`, L1, until 9.33.0) — the layer table is `scripts/layering.config.cjs`.
|
|
23
|
+
* reasons to change: this string is written on the engine's WRITE path on every redacted run, the
|
|
24
|
+
* honesty registry is read by a reader that explains a recording — and the registry's sentences have
|
|
25
|
+
* no business in the bundle of an app that only runs charts. This file imports NOTHING, so it is L0
|
|
26
|
+
* (the layer table is `scripts/layering.config.cjs`).
|
|
21
27
|
*/
|
|
22
28
|
/**
|
|
23
29
|
* What the COMMIT LOG and the redacted MIRROR carry where a value was scrubbed.
|
|
24
30
|
*
|
|
25
|
-
* `memory/
|
|
31
|
+
* `memory/scrub.ts · scrubPatch` writes it into the patch the log records (both encodings), and the
|
|
26
32
|
* mirror's seed is scrubbed with the same string (`runner/ExecutionRuntime.ts`), so a fold of the log
|
|
27
33
|
* reproduces it (`stateAt` → `FoldedState.redactedPaths`) and a slice or an element birth, which
|
|
28
34
|
* re-serve the log's bytes, show it too. A subflow's SERVED state is the subflow's own nested mirror
|
|
29
35
|
* (9.20.0): `subflowResults[*].treeContext.globalContext` under `getSnapshot({ redact: true })`, and
|
|
30
36
|
* `onSubflowExit.outputState` whenever a policy keeps that mirror — so those carry this string as
|
|
31
|
-
* well, not
|
|
37
|
+
* well, not the scope channel's `SCOPE_PLACEHOLDER` (`memory/redaction.ts`).
|
|
32
38
|
*/
|
|
33
39
|
export const LOG_PLACEHOLDER = 'REDACTED';
|
|
34
|
-
|
|
35
|
-
* What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
|
|
36
|
-
* commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
|
|
37
|
-
* emit payload matched by `emitPatterns`, and a subflow's narrated seed (`onSubflowEntry`).
|
|
38
|
-
*
|
|
39
|
-
* NOT every recorder event: `onSubflowExit.outputState` serves the subflow's redacted mirror when a
|
|
40
|
-
* policy keeps one, and so carries {@link LOG_PLACEHOLDER} (without a mirror — per-call marks alone —
|
|
41
|
-
* it is the subflow's heap retained under the rule, with this string). The string did not change
|
|
42
|
-
* when it moved here — it was `REDACTED`, in `memory/redaction.ts`, until then.
|
|
43
|
-
*/
|
|
44
|
-
export const SCOPE_PLACEHOLDER = '[REDACTED]';
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcGxhY2Vob2xkZXJzLnRzIOKAlCB0aGUgdHdvIHN0cmluZ3MgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgb25lIG9mIHRoZXNlIHN0cmluZ3MgYXMgYSBsaXRlcmFsLCBhbmQgYVxuICogc3BlbGxpbmcga2VwdCBpbiBzaXggcGxhY2VzIGlzIGEgcGxhY2Vob2xkZXIgYSByZWFkZXIgY2FuIG5vIGxvbmdlciBtYXRjaCBvbi4gRXZlcnkgYHNyYy9gIGZpbGVcbiAqIHRoYXQgd3JpdGVzIG9uZSBub3cgaW1wb3J0cyBpdCBmcm9tIGhlcmUsIGFuZCBgdGVzdC9hcmNoaXRlY3R1cmUvcGxhY2Vob2xkZXJzLnRlc3QudHNgIHBpbnMgdGhhdFxuICogbm8gb3RoZXIgYHNyYy9gIGZpbGUgc3BlbGxzIGVpdGhlci5cbiAqXG4gKiBXSFkgVFdPLCBBTkQgV0hZIE5PVCBVTklGSUVELiBCb3RoIGFyZSBoaXN0b3JpY2FsIGFuZCBzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoZSBsb2cgb25lLCBzb1xuICogbmVpdGhlciBzdHJpbmcgbWF5IGNoYW5nZS4gV2hpY2ggb25lIGEgcmVhZGVyIHNlZXMgZGVwZW5kcyBvbiBXSEVSRSBpdCByZWFkczogdGhlIGNvbW1pdCBsb2cgYW5kXG4gKiBldmVyeXRoaW5nIHNlcnZlZCBmcm9tIGl0IHNheSB7QGxpbmsgTE9HX1BMQUNFSE9MREVSfTsgdGhlIHNjb3BlIGNoYW5uZWwgc2F5c1xuICoge0BsaW5rIFNDT1BFX1BMQUNFSE9MREVSfSDigJQgZXhjZXB0IGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCwgd2hpY2ggY2FycmllcyB0aGUgbG9nJ3Mgc3RyaW5nXG4gKiB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyBhIG1pcnJvciAoc2VlIHtAbGluayBTQ09QRV9QTEFDRUhPTERFUn0pLlxuICpcbiAqIFdIWSBBIExFQUYgT0YgSVRTIE9XTiAoYW5kIG5vdCBiZXNpZGUgYGhvbmVzdHkudHMgwrcgSE9ORVNUWV9DT0RFU2ApLiBEaWZmZXJlbnQgcmVhZGVycywgZGlmZmVyZW50XG4gKiByZWFzb25zIHRvIGNoYW5nZTogdGhlc2UgdHdvIHN0cmluZ3MgYXJlIHJlYWQgYnkgdGhlIGVuZ2luZSdzIFdSSVRFIHBhdGggb24gZXZlcnkgcmVkYWN0ZWQgcnVuLFxuICogdGhlIGhvbmVzdHkgcmVnaXN0cnkgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlIG5vXG4gKiBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwOlxuICogYG1lbW9yeS9yZWRhY3Rpb24udHNgIChMMikgd3JpdGVzIGJvdGgg4oCUIHRoZSBsb2cgb25lIGluIGBzY3J1YlBhdGNoYCAoYW5kIHRoZSBwdWJsaWMgYHJlZGFjdFBhdGNoYCksIHRoZSBzY29wZSBvbmUgaW4gYFJlZGFjdGlvblJ1bGVgXG4gKiAoYHJlZGFjdFBhdGNoYCBsaXZlZCBpbiBgbWVtb3J5L3V0aWxzLnRzYCwgTDEsIHVudGlsIDkuMzMuMCkg4oCUIHRoZSBsYXllciB0YWJsZSBpcyBgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzYC5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9yZWRhY3Rpb24udHMgwrcgc2NydWJQYXRjaGAgd3JpdGVzIGl0IGludG8gdGhlIHBhdGNoIHRoZSBsb2cgcmVjb3JkcyAoYm90aCBlbmNvZGluZ3MpLCBhbmQgdGhlXG4gKiBtaXJyb3IncyBzZWVkIGlzIHNjcnViYmVkIHdpdGggdGhlIHNhbWUgc3RyaW5nIChgcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHNgKSwgc28gYSBmb2xkIG9mIHRoZSBsb2dcbiAqIHJlcHJvZHVjZXMgaXQgKGBzdGF0ZUF0YCDihpIgYEZvbGRlZFN0YXRlLnJlZGFjdGVkUGF0aHNgKSBhbmQgYSBzbGljZSBvciBhbiBlbGVtZW50IGJpcnRoLCB3aGljaFxuICogcmUtc2VydmUgdGhlIGxvZydzIGJ5dGVzLCBzaG93IGl0IHRvby4gQSBzdWJmbG93J3MgU0VSVkVEIHN0YXRlIGlzIHRoZSBzdWJmbG93J3Mgb3duIG5lc3RlZCBtaXJyb3JcbiAqICg5LjIwLjApOiBgc3ViZmxvd1Jlc3VsdHNbKl0udHJlZUNvbnRleHQuZ2xvYmFsQ29udGV4dGAgdW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCwgYW5kXG4gKiBgb25TdWJmbG93RXhpdC5vdXRwdXRTdGF0ZWAgd2hlbmV2ZXIgYSBwb2xpY3kga2VlcHMgdGhhdCBtaXJyb3Ig4oCUIHNvIHRob3NlIGNhcnJ5IHRoaXMgc3RyaW5nIGFzXG4gKiB3ZWxsLCBub3Qge0BsaW5rIFNDT1BFX1BMQUNFSE9MREVSfS5cbiAqL1xuZXhwb3J0IGNvbnN0IExPR19QTEFDRUhPTERFUiA9ICdSRURBQ1RFRCc7XG5cbi8qKlxuICogV2hhdCB0aGUgU0NPUEUgQ0hBTk5FTCBjYXJyaWVzIHdoZXJlIGEgdmFsdWUgd2FzIHNjcnViYmVkOiBhIHNjb3BlIHJlY29yZGVyJ3MgcmVhZCwgd3JpdGUgYW5kXG4gKiBjb21taXQgZXZlbnRzLCB0aGUgYHN0YWdlUmVhZHNgIC8gYHN0YWdlV3JpdGVzYCByZXRlbnRpb24sIHRoZSBuYXJyYXRpdmUsIGEgZGVjaXNpb24ncyBldmlkZW5jZSwgYW5cbiAqIGVtaXQgcGF5bG9hZCBtYXRjaGVkIGJ5IGBlbWl0UGF0dGVybnNgLCBhbmQgYSBzdWJmbG93J3MgbmFycmF0ZWQgc2VlZCAoYG9uU3ViZmxvd0VudHJ5YCkuXG4gKlxuICogTk9UIGV2ZXJ5IHJlY29yZGVyIGV2ZW50OiBgb25TdWJmbG93RXhpdC5vdXRwdXRTdGF0ZWAgc2VydmVzIHRoZSBzdWJmbG93J3MgcmVkYWN0ZWQgbWlycm9yIHdoZW4gYVxuICogcG9saWN5IGtlZXBzIG9uZSwgYW5kIHNvIGNhcnJpZXMge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKHdpdGhvdXQgYSBtaXJyb3Ig4oCUIHBlci1jYWxsIG1hcmtzIGFsb25lIOKAlFxuICogaXQgaXMgdGhlIHN1YmZsb3cncyBoZWFwIHJldGFpbmVkIHVuZGVyIHRoZSBydWxlLCB3aXRoIHRoaXMgc3RyaW5nKS4gVGhlIHN0cmluZyBkaWQgbm90IGNoYW5nZVxuICogd2hlbiBpdCBtb3ZlZCBoZXJlIOKAlCBpdCB3YXMgYFJFREFDVEVEYCwgaW4gYG1lbW9yeS9yZWRhY3Rpb24udHNgLCB1bnRpbCB0aGVuLlxuICovXG5leHBvcnQgY29uc3QgU0NPUEVfUExBQ0VIT0xERVIgPSAnW1JFREFDVEVEXSc7XG4iXX0=
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUVIOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwbGFjZWhvbGRlcnMudHMg4oCUIHRoZSBzdHJpbmcgYSByZWRhY3Rpb24gbGVhdmVzIHdoZXJlIGEgdmFsdWUgd2FzLCBpbiB0aGUgUkVDT1JELlxuICpcbiAqIFdIWSBUSElTIEZJTEUgRVhJU1RTLiBCZWZvcmUgRjRhIHNpeCBmaWxlcyBlYWNoIHNwZWxsZWQgYSBwbGFjZWhvbGRlciBhcyBhIGxpdGVyYWwsIGFuZCBhIHNwZWxsaW5nXG4gKiBrZXB0IGluIHNpeCBwbGFjZXMgaXMgYSBwbGFjZWhvbGRlciBhIHJlYWRlciBjYW4gbm8gbG9uZ2VyIG1hdGNoIG9uLiBFdmVyeSBgc3JjL2AgZmlsZSB0aGF0IHdyaXRlc1xuICogdGhlIGxvZydzIHBsYWNlaG9sZGVyIGltcG9ydHMgaXQgZnJvbSBoZXJlLCBhbmQgYHRlc3QvYXJjaGl0ZWN0dXJlL3BsYWNlaG9sZGVycy50ZXN0LnRzYCBwaW5zIHRoYXRcbiAqIG5vIG90aGVyIGBzcmMvYCBmaWxlIHNwZWxscyBpdC5cbiAqXG4gKiBPTkUgU1RSSU5HIEhFUkUsIElUUyBUV0lOIE9OIFRIRSBWRVJESUNUJ1MgU0lERSAoQzQsIHJldmlldyBOMikuIEEgcmVkYWN0aW9uIGxlYXZlcyBvbmUgb2YgdHdvXG4gKiBzdHJpbmdzLCBhbmQgYm90aCBhcmUgaGlzdG9yaWNhbCwgc28gbmVpdGhlciBtYXkgY2hhbmdlIChzdG9yZWQgcmVjb3JkaW5ncyBob2xkIHRoaXMgb25lKS4gV2hpY2hcbiAqIG9uZSBhIHJlYWRlciBzZWVzIGRlcGVuZHMgb24gV0hFUkUgaXQgcmVhZHMsIGFuZCBlYWNoIGhhcyB0aGUgb3duZXIgaXRzIHJlYWRlciBoYXM6XG4gKiAgIC0ge0BsaW5rIExPR19QTEFDRUhPTERFUn0gKGAnUkVEQUNURUQnYCwgaGVyZSkgaXMgYSBSRUNPUkQgYnl0ZTogdGhlIGNvbW1pdCBsb2cgYW5kIGV2ZXJ5dGhpbmdcbiAqICAgICBzZXJ2ZWQgZnJvbSBpdCDigJQgd3JpdHRlbiBpbnRvIHRoZSBsb2cgYnkgdGhlIHJlY29yZCdzIHNjcnViIChgbWVtb3J5L3NjcnViLnRzYCwgTDIpLCBhbmRcbiAqICAgICBwYXNzZWQgYnkgdGhlIHR3byBwbGFjZXMgdGhhdCBzZXJ2ZSBhIG1pcnJvciAoYHJ1bm5lci9FeGVjdXRpb25SdW50aW1lLnRzYCwgdGhlIG1pcnJvcidzXG4gKiAgICAgc2VlZDsgYGVuZ2luZS9oYW5kbGVycy9TdWJmbG93RXhlY3V0b3IudHNgLCBhIHN1YmZsb3cncyBzZXJ2ZWQgc3RhdGUpLiBUaGUgcmVhZGVyc1xuICogICAgIChgc2xpY2UvYCwgYHRpbWUtdHJhdmVsL2ApIG9ubHkgbmFtZSBpdCBpbiB0aGVpciBkb2NzOiB0aGV5IG1lZXQgaXQgYXMgZGF0YSBpbiB0aGUgbG9nO1xuICogICAtIGBTQ09QRV9QTEFDRUhPTERFUmAgKGAnW1JFREFDVEVEXSdgKSBpcyB0aGUgRU5HSU5FJ3M6IHRoZSBzY29wZSBjaGFubmVsJ3MgcmV0YWluZWQgcmVhZHMgYW5kXG4gKiAgICAgd3JpdGVzLCByZWNvcmRlciBldmVudHMsIHRoZSBuYXJyYXRpdmUuIEl0IGxpdmVzIGJlc2lkZSB0aGUgdmVyZGljdCB0aGF0IHdyaXRlcyBpdFxuICogICAgIChgbWVtb3J5L3JlZGFjdGlvbi50c2AsIEw0KS4gVW50aWwgQzQgYm90aCBzYXQgaW4gdGhpcyBmaWxlIChcInR3byBwbGFjZWhvbGRlcnMsIG9uZSBsZWFmXCIpO1xuICogICAgIHRoZSByZWNvcmQgdG9vayB0aGUgZW5naW5lJ3Mgc3RyaW5nIHdpdGggaXQuXG4gKlxuICogV0hZIEEgTEVBRiBPRiBJVFMgT1dOIChhbmQgbm90IGJlc2lkZSBgaG9uZXN0eS50cyDCtyBIT05FU1RZX0NPREVTYCkuIERpZmZlcmVudCByZWFkZXJzLCBkaWZmZXJlbnRcbiAqIHJlYXNvbnMgdG8gY2hhbmdlOiB0aGlzIHN0cmluZyBpcyB3cml0dGVuIG9uIHRoZSBlbmdpbmUncyBXUklURSBwYXRoIG9uIGV2ZXJ5IHJlZGFjdGVkIHJ1biwgdGhlXG4gKiBob25lc3R5IHJlZ2lzdHJ5IGlzIHJlYWQgYnkgYSByZWFkZXIgdGhhdCBleHBsYWlucyBhIHJlY29yZGluZyDigJQgYW5kIHRoZSByZWdpc3RyeSdzIHNlbnRlbmNlcyBoYXZlXG4gKiBubyBidXNpbmVzcyBpbiB0aGUgYnVuZGxlIG9mIGFuIGFwcCB0aGF0IG9ubHkgcnVucyBjaGFydHMuIFRoaXMgZmlsZSBpbXBvcnRzIE5PVEhJTkcsIHNvIGl0IGlzIEwwXG4gKiAodGhlIGxheWVyIHRhYmxlIGlzIGBzY3JpcHRzL2xheWVyaW5nLmNvbmZpZy5janNgKS5cbiAqL1xuXG4vKipcbiAqIFdoYXQgdGhlIENPTU1JVCBMT0cgYW5kIHRoZSByZWRhY3RlZCBNSVJST1IgY2Fycnkgd2hlcmUgYSB2YWx1ZSB3YXMgc2NydWJiZWQuXG4gKlxuICogYG1lbW9yeS9zY3J1Yi50cyDCtyBzY3J1YlBhdGNoYCB3cml0ZXMgaXQgaW50byB0aGUgcGF0Y2ggdGhlIGxvZyByZWNvcmRzIChib3RoIGVuY29kaW5ncyksIGFuZCB0aGVcbiAqIG1pcnJvcidzIHNlZWQgaXMgc2NydWJiZWQgd2l0aCB0aGUgc2FtZSBzdHJpbmcgKGBydW5uZXIvRXhlY3V0aW9uUnVudGltZS50c2ApLCBzbyBhIGZvbGQgb2YgdGhlIGxvZ1xuICogcmVwcm9kdWNlcyBpdCAoYHN0YXRlQXRgIOKGkiBgRm9sZGVkU3RhdGUucmVkYWN0ZWRQYXRoc2ApIGFuZCBhIHNsaWNlIG9yIGFuIGVsZW1lbnQgYmlydGgsIHdoaWNoXG4gKiByZS1zZXJ2ZSB0aGUgbG9nJ3MgYnl0ZXMsIHNob3cgaXQgdG9vLiBBIHN1YmZsb3cncyBTRVJWRUQgc3RhdGUgaXMgdGhlIHN1YmZsb3cncyBvd24gbmVzdGVkIG1pcnJvclxuICogKDkuMjAuMCk6IGBzdWJmbG93UmVzdWx0c1sqXS50cmVlQ29udGV4dC5nbG9iYWxDb250ZXh0YCB1bmRlciBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLCBhbmRcbiAqIGBvblN1YmZsb3dFeGl0Lm91dHB1dFN0YXRlYCB3aGVuZXZlciBhIHBvbGljeSBrZWVwcyB0aGF0IG1pcnJvciDigJQgc28gdGhvc2UgY2FycnkgdGhpcyBzdHJpbmcgYXNcbiAqIHdlbGwsIG5vdCB0aGUgc2NvcGUgY2hhbm5lbCdzIGBTQ09QRV9QTEFDRUhPTERFUmAgKGBtZW1vcnkvcmVkYWN0aW9uLnRzYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBMT0dfUExBQ0VIT0xERVIgPSAnUkVEQUNURUQnO1xuIl19
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
|
|
7
7
|
* moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
|
|
8
8
|
* 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
|
|
9
|
-
* anything moves; then its raw rows build live state's next generation, `scrubPatch`
|
|
10
|
-
* placeholder at each redacted path that holds a value
|
|
11
|
-
* patch), and the mirror and the log take the scrubbed rows —
|
|
9
|
+
* anything moves; then its raw rows build live state's next generation, `scrubPatch`
|
|
10
|
+
* (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
|
|
11
|
+
* (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
|
|
12
|
+
* never the raw ones. The redacted paths are data by now: the engine decided them per write
|
|
13
|
+
* (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
|
|
12
14
|
* 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
|
|
13
15
|
* `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
|
|
14
16
|
* when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
|
|
@@ -6,9 +6,11 @@
|
|
|
6
6
|
* 1. No payload (the stage staged no write) → an EMPTY bundle goes to the log, and nothing else
|
|
7
7
|
* moves: live state and the mirror keep their generation. Every executed stage is a cursor stop.
|
|
8
8
|
* 2. A payload → its names are read first, so a stamp that cannot be read fails the commit before
|
|
9
|
-
* anything moves; then its raw rows build live state's next generation, `scrubPatch`
|
|
10
|
-
* placeholder at each redacted path that holds a value
|
|
11
|
-
* patch), and the mirror and the log take the scrubbed rows —
|
|
9
|
+
* anything moves; then its raw rows build live state's next generation, `scrubPatch`
|
|
10
|
+
* (`scrub.ts`, the record's own) puts the placeholder at each redacted path that holds a value
|
|
11
|
+
* (in a spine copy, never in the raw patch), and the mirror and the log take the scrubbed rows —
|
|
12
|
+
* never the raw ones. The redacted paths are data by now: the engine decided them per write
|
|
13
|
+
* (`RecordFrame · write`); nothing here imports the engine's verdict (C4).
|
|
12
14
|
* 3. The bundle's KEY ORDER is the record's bytes: `overwrite`, `updates`, `redactedPaths`, `trace`,
|
|
13
15
|
* `stage`, `stageId`, `runtimeStageId`, then `untrackedSources`, `tags` and `phase`, each only
|
|
14
16
|
* when it has something to say (absent, never empty). `EventLog · record` appends `idx`. The
|
|
@@ -18,7 +20,7 @@
|
|
|
18
20
|
* is a continuation — and keeps what is not the record: retention, diagnostics, the dev-mode
|
|
19
21
|
* warnings and the commit observer.
|
|
20
22
|
*/
|
|
21
|
-
import { scrubPatch } from './
|
|
23
|
+
import { scrubPatch } from './scrub.js';
|
|
22
24
|
/** Record one commit (the module law). `payload` absent = the empty commit. */
|
|
23
25
|
export function recordCommit(payload, stamp, into) {
|
|
24
26
|
if (payload === undefined) {
|
|
@@ -56,4 +58,4 @@ function namesOf({ stage, stageId, runtimeStageId, untrackedSources, tags, phase
|
|
|
56
58
|
phase: phase || undefined,
|
|
57
59
|
};
|
|
58
60
|
}
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkQ29tbWl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcmVjb3JkQ29tbWl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFHSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBMkJ4QywrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFrQyxFQUFFLEtBQWtCLEVBQUUsSUFBbUI7SUFDdEcsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLE1BQU0sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqRSxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMzRCxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsdUhBQXVIO0FBQ3ZILFNBQVMsUUFBUSxDQUNmLFNBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLGFBQXVCLEVBQ3ZCLEtBQW1CLEVBQ25CLEtBQVk7SUFFWixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBaUIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUMxRyxJQUFJLGdCQUFnQjtRQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztJQUNqRSxJQUFJLElBQUk7UUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUM3QixJQUFJLEtBQUs7UUFBRSxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNoQyxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0hBQWdIO0FBQ2hILFNBQVMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBZTtJQUM3RixPQUFPO1FBQ0wsS0FBSztRQUNMLE9BQU87UUFDUCxjQUFjO1FBQ2QsZ0JBQWdCLEVBQUUsQ0FBQyxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQztRQUN0RyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNuRCxLQUFLLEVBQUUsS0FBSyxJQUFJLFNBQVM7S0FDMUIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZENvbW1pdCDigJQgb25lIHN0YWdlJ3MgY29tbWl0IG9udG8gdGhlIHJlY29yZCAoQzEsIEwzKS4gVGhlIG9uZSBvd25lciBvZiBhIGJ1bmRsZSdzIGJ5dGVzIGFuZFxuICogb2Ygd2hlcmUgYSBjb21taXQgbGFuZHM6IGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IsIHRoZSBsb2cuXG4gKlxuICogVEhFIExBVzpcbiAqICAgMS4gTm8gcGF5bG9hZCAodGhlIHN0YWdlIHN0YWdlZCBubyB3cml0ZSkg4oaSIGFuIEVNUFRZIGJ1bmRsZSBnb2VzIHRvIHRoZSBsb2csIGFuZCBub3RoaW5nIGVsc2VcbiAqICAgICAgbW92ZXM6IGxpdmUgc3RhdGUgYW5kIHRoZSBtaXJyb3Iga2VlcCB0aGVpciBnZW5lcmF0aW9uLiBFdmVyeSBleGVjdXRlZCBzdGFnZSBpcyBhIGN1cnNvciBzdG9wLlxuICogICAyLiBBIHBheWxvYWQg4oaSIGl0cyBuYW1lcyBhcmUgcmVhZCBmaXJzdCwgc28gYSBzdGFtcCB0aGF0IGNhbm5vdCBiZSByZWFkIGZhaWxzIHRoZSBjb21taXQgYmVmb3JlXG4gKiAgICAgIGFueXRoaW5nIG1vdmVzOyB0aGVuIGl0cyByYXcgcm93cyBidWlsZCBsaXZlIHN0YXRlJ3MgbmV4dCBnZW5lcmF0aW9uLCBgc2NydWJQYXRjaGBcbiAqICAgICAgKGBzY3J1Yi50c2AsIHRoZSByZWNvcmQncyBvd24pIHB1dHMgdGhlIHBsYWNlaG9sZGVyIGF0IGVhY2ggcmVkYWN0ZWQgcGF0aCB0aGF0IGhvbGRzIGEgdmFsdWVcbiAqICAgICAgKGluIGEgc3BpbmUgY29weSwgbmV2ZXIgaW4gdGhlIHJhdyBwYXRjaCksIGFuZCB0aGUgbWlycm9yIGFuZCB0aGUgbG9nIHRha2UgdGhlIHNjcnViYmVkIHJvd3Mg4oCUXG4gKiAgICAgIG5ldmVyIHRoZSByYXcgb25lcy4gVGhlIHJlZGFjdGVkIHBhdGhzIGFyZSBkYXRhIGJ5IG5vdzogdGhlIGVuZ2luZSBkZWNpZGVkIHRoZW0gcGVyIHdyaXRlXG4gKiAgICAgIChgUmVjb3JkRnJhbWUgwrcgd3JpdGVgKTsgbm90aGluZyBoZXJlIGltcG9ydHMgdGhlIGVuZ2luZSdzIHZlcmRpY3QgKEM0KS5cbiAqICAgMy4gVGhlIGJ1bmRsZSdzIEtFWSBPUkRFUiBpcyB0aGUgcmVjb3JkJ3MgYnl0ZXM6IGBvdmVyd3JpdGVgLCBgdXBkYXRlc2AsIGByZWRhY3RlZFBhdGhzYCwgYHRyYWNlYCxcbiAqICAgICAgYHN0YWdlYCwgYHN0YWdlSWRgLCBgcnVudGltZVN0YWdlSWRgLCB0aGVuIGB1bnRyYWNrZWRTb3VyY2VzYCwgYHRhZ3NgIGFuZCBgcGhhc2VgLCBlYWNoIG9ubHlcbiAqICAgICAgd2hlbiBpdCBoYXMgc29tZXRoaW5nIHRvIHNheSAoYWJzZW50LCBuZXZlciBlbXB0eSkuIGBFdmVudExvZyDCtyByZWNvcmRgIGFwcGVuZHMgYGlkeGAuIFRoZVxuICogICAgICBuYW1lcyBhcmUgbmFtZXM6IG5vIHJlZGFjdGlvbiByZWFkcyB0aGVtLCBhbmQgbm8gZW5jb2RpbmcgKGBjb21taXRWYWx1ZXNgKSBjaGFuZ2VzIHRoZW0uXG4gKlxuICogVGhlIGZyYW1lIChgU3RhZ2VDb250ZXh0YCkgZGVjaWRlcyBXSEFUIGlzIGNvbW1pdHRlZCDigJQgdGhlIHBheWxvYWQsIHRoZSBuYW1lcywgd2hldGhlciB0aGUgYnVuZGxlXG4gKiBpcyBhIGNvbnRpbnVhdGlvbiDigJQgYW5kIGtlZXBzIHdoYXQgaXMgbm90IHRoZSByZWNvcmQ6IHJldGVudGlvbiwgZGlhZ25vc3RpY3MsIHRoZSBkZXYtbW9kZVxuICogd2FybmluZ3MgYW5kIHRoZSBjb21taXQgb2JzZXJ2ZXIuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFdmVudExvZyB9IGZyb20gJy4vRXZlbnRMb2cuanMnO1xuaW1wb3J0IHsgc2NydWJQYXRjaCB9IGZyb20gJy4vc2NydWIuanMnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICcuL1NoYXJlZE1lbW9yeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0UGhhc2UsIE1lbW9yeVBhdGNoLCBUcmFjZUVudHJ5LCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIE9uZSBzdGFnZSdzIG5ldCBjaGFuZ2UsIGFzIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBjb21taXRgIGhhbmRzIGl0IG92ZXIuICovXG5leHBvcnQgdHlwZSBDb21taXRQYXlsb2FkID0gUmV0dXJuVHlwZTxUcmFuc2FjdGlvbkJ1ZmZlclsnY29tbWl0J10+O1xuXG4vKiogV2hhdCBuYW1lcyBhIGNvbW1pdCBvbiB0aGUgcmVjb3JkLCBiZXNpZGUgaXRzIHBheWxvYWQgKGxhdyAzKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWl0U3RhbXAge1xuICBzdGFnZTogc3RyaW5nO1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seVNldDxVbnRyYWNrZWRTb3VyY2U+O1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBXaGVyZSBhIGNvbW1pdCBsYW5kczogbGl2ZSBzdGF0ZSBhbHdheXM7IHRoZSBtaXJyb3IgYW5kIHRoZSBsb2cgd2hlbiB0aGUgcnVuIGtlZXBzIHRoZW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdFRhcmdldHMge1xuICBzdGF0ZTogU2hhcmVkTWVtb3J5O1xuICBtaXJyb3I/OiBTaGFyZWRNZW1vcnk7XG4gIGxvZz86IEV2ZW50TG9nO1xufVxuXG50eXBlIE5hbWVzID0gUGljazxDb21taXRCdW5kbGUsICdzdGFnZScgfCAnc3RhZ2VJZCcgfCAncnVudGltZVN0YWdlSWQnIHwgJ3VudHJhY2tlZFNvdXJjZXMnIHwgJ3RhZ3MnIHwgJ3BoYXNlJz47XG5cbi8qKiBSZWNvcmQgb25lIGNvbW1pdCAodGhlIG1vZHVsZSBsYXcpLiBgcGF5bG9hZGAgYWJzZW50ID0gdGhlIGVtcHR5IGNvbW1pdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRDb21taXQocGF5bG9hZDogQ29tbWl0UGF5bG9hZCB8IHVuZGVmaW5lZCwgc3RhbXA6IENvbW1pdFN0YW1wLCBpbnRvOiBDb21taXRUYXJnZXRzKTogdm9pZCB7XG4gIGlmIChwYXlsb2FkID09PSB1bmRlZmluZWQpIHtcbiAgICBpbnRvLmxvZz8ucmVjb3JkKGJ1bmRsZU9mKHt9LCB7fSwgW10sIFtdLCBuYW1lc09mKHN0YW1wKSkpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5hbWVzT2Yoc3RhbXApO1xuICBjb25zdCB7IHJlZGFjdGVkUGF0aHMsIHRyYWNlIH0gPSBwYXlsb2FkO1xuICBpbnRvLnN0YXRlLmFwcGx5UGF0Y2gocGF5bG9hZC5vdmVyd3JpdGUsIHBheWxvYWQudXBkYXRlcywgdHJhY2UpO1xuICBjb25zdCBvdmVyd3JpdGUgPSBzY3J1YlBhdGNoKHBheWxvYWQub3ZlcndyaXRlLCByZWRhY3RlZFBhdGhzKTtcbiAgY29uc3QgdXBkYXRlcyA9IHNjcnViUGF0Y2gocGF5bG9hZC51cGRhdGVzLCByZWRhY3RlZFBhdGhzKTtcbiAgaW50by5taXJyb3I/LmFwcGx5UGF0Y2gob3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSk7XG4gIGludG8ubG9nPy5yZWNvcmQoYnVuZGxlT2Yob3ZlcndyaXRlLCB1cGRhdGVzLCBbLi4ucmVkYWN0ZWRQYXRoc10sIHRyYWNlLCBuYW1lcykpO1xufVxuXG4vKiogVEhFIGJ1bmRsZSAobGF3IDMpOiB0aGUgcGF5bG9hZCdzIGZvdXIga2V5cywgdGhlIHRocmVlIG5hbWVzLCB0aGVuIGVhY2ggb3B0aW9uYWwgbmFtZSB0aGF0IGhhcyBzb21ldGhpbmcgdG8gc2F5LiAqL1xuZnVuY3Rpb24gYnVuZGxlT2YoXG4gIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2gsXG4gIHVwZGF0ZXM6IE1lbW9yeVBhdGNoLFxuICByZWRhY3RlZFBhdGhzOiBzdHJpbmdbXSxcbiAgdHJhY2U6IFRyYWNlRW50cnlbXSxcbiAgbmFtZXM6IE5hbWVzLFxuKTogQ29tbWl0QnVuZGxlIHtcbiAgY29uc3QgeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH0gPSBuYW1lcztcbiAgY29uc3QgYnVuZGxlOiBDb21taXRCdW5kbGUgPSB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UsIHN0YWdlLCBzdGFnZUlkLCBydW50aW1lU3RhZ2VJZCB9O1xuICBpZiAodW50cmFja2VkU291cmNlcykgYnVuZGxlLnVudHJhY2tlZFNvdXJjZXMgPSB1bnRyYWNrZWRTb3VyY2VzO1xuICBpZiAodGFncykgYnVuZGxlLnRhZ3MgPSB0YWdzO1xuICBpZiAocGhhc2UpIGJ1bmRsZS5waGFzZSA9IHBoYXNlO1xuICByZXR1cm4gYnVuZGxlO1xufVxuXG4vKiogVGhlIG5hbWVzLCByZWFkIG9uY2Ug4oCUIGJlZm9yZSBhbnl0aGluZyBtb3ZlcyAobGF3IDIpLiBBbiBvcHRpb25hbCBvbmUgd2l0aCBub3RoaW5nIHRvIHNheSBpcyBgdW5kZWZpbmVkYC4gKi9cbmZ1bmN0aW9uIG5hbWVzT2YoeyBzdGFnZSwgc3RhZ2VJZCwgcnVudGltZVN0YWdlSWQsIHVudHJhY2tlZFNvdXJjZXMsIHRhZ3MsIHBoYXNlIH06IENvbW1pdFN0YW1wKTogTmFtZXMge1xuICByZXR1cm4ge1xuICAgIHN0YWdlLFxuICAgIHN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgdW50cmFja2VkU291cmNlczogIXVudHJhY2tlZFNvdXJjZXMgfHwgdW50cmFja2VkU291cmNlcy5zaXplID09PSAwID8gdW5kZWZpbmVkIDogWy4uLnVudHJhY2tlZFNvdXJjZXNdLFxuICAgIHRhZ3M6ICF0YWdzIHx8IHRhZ3MubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogdGFncyxcbiAgICBwaGFzZTogcGhhc2UgfHwgdW5kZWZpbmVkLFxuICB9O1xufVxuIl19
|
|
@@ -40,16 +40,41 @@
|
|
|
40
40
|
* the facade held the verdict alone, and every path that wrote or read past
|
|
41
41
|
* the facade — five of them — retained plaintext under a policy.
|
|
42
42
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
43
|
+
* ONE VERDICT OWNER, ONE ENCODING OWNER (C4). This file DECIDES — the rule,
|
|
44
|
+
* and for a staged write {@link decideWrite} (the verdict),
|
|
45
|
+
* {@link inheritByIdentity} and {@link markStagedWrite} (the marks) — and is
|
|
46
|
+
* the engine's (L4, beside the run policy that carries the rule). The BYTES of a
|
|
47
|
+
* verdict are the record's: the frame hands its scrub (`whole`, or the
|
|
48
|
+
* `fields` inside the value — {@link scrubOf}) to `RecordFrame · write`, and
|
|
49
|
+
* the record's own scrub (`memory/scrub.ts`, L2) writes the log's placeholder
|
|
50
|
+
* at commit. Before C4 the scrub lived here too, so the record imported the
|
|
51
|
+
* engine's policy module to write a string.
|
|
52
|
+
*
|
|
53
|
+
* TWO PLACEHOLDERS, BOTH HISTORICAL, ONE PER OWNER: the commit log and the
|
|
54
|
+
* mirror carry `'REDACTED'` (`LOG_PLACEHOLDER`, `memory/placeholders.ts` — a
|
|
55
|
+
* record byte, written by `memory/scrub.ts`); every scope-tier view — scope
|
|
56
|
+
* recorder events, `stageReads`/`stageWrites`, narrative — carries
|
|
57
|
+
* `'[REDACTED]'` ({@link SCOPE_PLACEHOLDER}, below — the verdict's own).
|
|
58
|
+
* Neither string changed in 9.19.0 or since; each is spelled once in `src/`.
|
|
49
59
|
*/
|
|
50
60
|
import type { StructuredErrorInfo } from '../errors/errorInfo.js';
|
|
51
61
|
import type { RedactionMarks } from '../pause/types.js';
|
|
52
|
-
import type {
|
|
62
|
+
import type { WriteScrub, WriteVerb } from './RecordFrame.js';
|
|
63
|
+
/**
|
|
64
|
+
* What the SCOPE CHANNEL carries where a value was scrubbed: a scope recorder's read, write and
|
|
65
|
+
* commit events, the `stageReads` / `stageWrites` retention, the narrative, a decision's evidence, an
|
|
66
|
+
* emit payload matched by `emitPatterns`, a pause payload's served form and a subflow's narrated seed
|
|
67
|
+
* (`onSubflowEntry`) — every value this verdict serves, unless its caller passes the log's string.
|
|
68
|
+
*
|
|
69
|
+
* Its twin is the RECORD's `LOG_PLACEHOLDER` (`'REDACTED'`, `memory/placeholders.ts`): the commit log,
|
|
70
|
+
* the redacted mirror and everything served from them. So NOT every recorder event carries this one:
|
|
71
|
+
* `onSubflowExit.outputState` serves the subflow's redacted mirror when a policy keeps one, and so
|
|
72
|
+
* carries the log's string (without a mirror — per-call marks alone — it is the subflow's heap
|
|
73
|
+
* retained under the rule, with this one). Both strings are historical and neither changed when it
|
|
74
|
+
* moved: this one was the constant `REDACTED` in this file until F4a, then `placeholders.ts ·
|
|
75
|
+
* SCOPE_PLACEHOLDER`, and since C4 it lives here again, beside the verdict that writes it.
|
|
76
|
+
*/
|
|
77
|
+
export declare const SCOPE_PLACEHOLDER = "[REDACTED]";
|
|
53
78
|
/**
|
|
54
79
|
* Declarative key/path redaction for recorded state and boundary records.
|
|
55
80
|
*
|
|
@@ -127,6 +152,14 @@ export type RedactionVerdict = {
|
|
|
127
152
|
readonly paths: readonly string[];
|
|
128
153
|
};
|
|
129
154
|
export declare const CLEAR: RedactionVerdict;
|
|
155
|
+
/**
|
|
156
|
+
* The user-level NAME of `key` under `path` — the key itself at the top level, else the segments
|
|
157
|
+
* joined by a dot (`['profile'] + 'auth'` → `'profile.auth'`): what a verdict decides on, a mark
|
|
158
|
+
* holds, and the frame keys a stage's retained reads and writes by (`StageContext`). A name, not an
|
|
159
|
+
* address — a key may contain a dot — so it never goes into a trace path. No allocation for the
|
|
160
|
+
* common top-level key. (The record spells the same name for `readKeys`, `RecordFrame · noteRead`.)
|
|
161
|
+
*/
|
|
162
|
+
export declare function userKeyOf(path: readonly string[], key: string): string;
|
|
130
163
|
export declare class RedactionRule {
|
|
131
164
|
private policy;
|
|
132
165
|
private diagnosticRule;
|
|
@@ -298,7 +331,7 @@ export declare class RedactionRule {
|
|
|
298
331
|
* (declared or themselves inherited). Run-wide, by name, like a mark.
|
|
299
332
|
*/
|
|
300
333
|
inheritFields(target: string, paths: readonly string[]): void;
|
|
301
|
-
/** The verdict of a key a mapper read — `runs` (the run namespaces) is selected when any namespaced key is. */
|
|
334
|
+
/** The verdict of a key a mapper read — `runs` (the run namespaces, `RUN_NAMESPACE`) is selected when any namespaced key is. */
|
|
302
335
|
verdictOfRead(key: string, value: unknown): RedactionVerdict;
|
|
303
336
|
/**
|
|
304
337
|
* The retained / served form of a value at a path: the placeholder, a
|
|
@@ -381,6 +414,43 @@ export declare class RedactionRule {
|
|
|
381
414
|
static scrubFields(value: unknown, paths: readonly string[], placeholder?: string): Record<string, unknown> | undefined;
|
|
382
415
|
report(): RedactionReport;
|
|
383
416
|
}
|
|
417
|
+
/**
|
|
418
|
+
* Step 1 — THE VERDICT for one staged write: an explicit per-call flag (`setValue(key, value, true)`)
|
|
419
|
+
* makes the value secret whole under its user-level key; else the `active` rule decides from the
|
|
420
|
+
* user-level path; with none (no rule, or an inert one — the caller passes `undefined`), clear, with no
|
|
421
|
+
* verdict call and no path allocation (the no-policy fast path). Marks nothing.
|
|
422
|
+
*
|
|
423
|
+
* ```ts
|
|
424
|
+
* decideWrite(new RedactionRule({ fields: { card: ['number'] } }), [], 'card', false); // { kind: 'fields', key: 'card', paths: ['number'] }
|
|
425
|
+
* decideWrite(undefined, ['profile'], 'auth', true); // { kind: 'whole', key: 'profile.auth' }
|
|
426
|
+
* ```
|
|
427
|
+
*/
|
|
428
|
+
export declare function decideWrite(active: RedactionRule | undefined, path: readonly string[], key: string, explicit: boolean | undefined): RedactionVerdict;
|
|
429
|
+
/**
|
|
430
|
+
* Step 2 — IDENTITY: an OBJECT the stage read under a selected name (`selected` — the frame's selected
|
|
431
|
+
* reads, filled by its tracked reads), written under another name (`s.person = s.profile`), keeps that
|
|
432
|
+
* read's rule, matched by identity: a whole read marks the new key, a `fields` read hands it the fields
|
|
433
|
+
* (re-based under the written path), and the verdict is asked again. A new object, a primitive, or a
|
|
434
|
+
* write already whole is selected by its own name only — `verdict` comes back as it is. Decided BEFORE
|
|
435
|
+
* the write, because the verdict needs it: an inheritance stays even if the write then fails to stage.
|
|
436
|
+
*/
|
|
437
|
+
export declare function inheritByIdentity(active: RedactionRule | undefined, verdict: RedactionVerdict, selected: WeakMap<object, RedactionVerdict> | undefined, path: readonly string[], key: string, value: unknown): RedactionVerdict;
|
|
438
|
+
/**
|
|
439
|
+
* Step 3's input — a verdict's BYTES for the record (`RecordFrame · write`): nothing when clear, the
|
|
440
|
+
* whole value, or the fields inside it. No allocation on the default path (clear) or for a whole verdict.
|
|
441
|
+
*/
|
|
442
|
+
export declare function scrubOf(verdict: RedactionVerdict): WriteScrub | undefined;
|
|
443
|
+
/**
|
|
444
|
+
* Step 4 — the MARKS a staged write leaves; call it only once the write staged, so a write that fails to
|
|
445
|
+
* stage marks nothing. A delete clears its key's mark (and any fields a mapper handed it) on `active`,
|
|
446
|
+
* the rule that was active as the write BEGAN — none when it was inert, even if user code marked the key
|
|
447
|
+
* during the write. A whole verdict marks its key — the key that DECIDED it (`verdict.key`: an ancestor
|
|
448
|
+
* for a nested write under a whole-selected key) — for the rest of the run on `rule`, the run's rule as
|
|
449
|
+
* it stands NOW (user code during the write may have installed one; an explicit mark is what makes an
|
|
450
|
+
* inert rule active). A mark is a run-wide NAME: it stays when the stage's commit fails or a retry
|
|
451
|
+
* discards the attempt — the safe side; only a staged delete removes one.
|
|
452
|
+
*/
|
|
453
|
+
export declare function markStagedWrite(active: RedactionRule | undefined, rule: RedactionRule | undefined, verdict: RedactionVerdict, path: readonly string[], key: string, verb: WriteVerb): void;
|
|
384
454
|
/**
|
|
385
455
|
* Path visits one walk may make — reachable only under a PATH-dependent
|
|
386
456
|
* pattern over a value whose paths outnumber its objects (a linked history, a
|
|
@@ -518,35 +588,3 @@ export declare class MapperTaint {
|
|
|
518
588
|
/** Does a value the mapper BUILT embed, by reference, a selected record it read or was handed? */
|
|
519
589
|
private embedsSelected;
|
|
520
590
|
}
|
|
521
|
-
/**
|
|
522
|
-
* The commit log's scrub: `patch` with {@link LOG_PLACEHOLDER} at every path in `redactedPaths` that
|
|
523
|
-
* holds a defined value — the copy `recordCommit` records and feeds the redacted mirror.
|
|
524
|
-
*
|
|
525
|
-
* CLONE-FREE (9.33.0). The patch is the transaction buffer's commit-time payload, already the record's
|
|
526
|
-
* own copy (`TransactionBuffer · commit` clones each surviving path once; the buffer is dropped at
|
|
527
|
-
* commit), so the scrub copies only what it must not edit in place:
|
|
528
|
-
* - no path to scrub (no policy, no per-call mark — the common case) → `patch` ITSELF, no copy at all;
|
|
529
|
-
* - otherwise → a new root and a shallow copy of each container on a scrubbed path (`pathOps ·
|
|
530
|
-
* ownSpine`), every other subtree shared with `patch`. `patch` is never edited.
|
|
531
|
-
* The engine called the public {@link redactPatch} (a whole `structuredClone`) twice per commit before
|
|
532
|
-
* 9.33.0. The bytes are the same: a scrubbed path holds the placeholder, every other path the value the
|
|
533
|
-
* buffer cloned (pinned by the 9.18.1 / 9.19.1 redaction byte tests).
|
|
534
|
-
*
|
|
535
|
-
* Paths are scrubbed in the set's order, against the tree as scrubbed so far: a path under one already
|
|
536
|
-
* scrubbed finds a string, not a container, and is left alone (as before).
|
|
537
|
-
*
|
|
538
|
-
* INTERNAL — the result shares structure with `patch`. A caller outside the commit path wants
|
|
539
|
-
* {@link redactPatch}.
|
|
540
|
-
*
|
|
541
|
-
* @param redactedPaths DELIM-joined paths (`TransactionBuffer`'s `redactedPaths`; a bundle's
|
|
542
|
-
* `redactedPaths` array works too).
|
|
543
|
-
*/
|
|
544
|
-
export declare function scrubPatch(patch: MemoryPatch, redactedPaths: Iterable<string>): MemoryPatch;
|
|
545
|
-
/**
|
|
546
|
-
* Redacts sensitive values in a patch for logging/debugging — the PUBLIC scrub (`footprintjs/advanced`),
|
|
547
|
-
* its contract unchanged since 4.x: a fresh deep copy of `patch` (`structuredClone`) with
|
|
548
|
-
* {@link LOG_PLACEHOLDER} at every listed path that holds a defined value. Shares nothing with `patch`
|
|
549
|
-
* and never edits it. (Moved here from `memory/utils.ts` in 9.33.0; the engine's own commit path uses the
|
|
550
|
-
* clone-free {@link scrubPatch}.)
|
|
551
|
-
*/
|
|
552
|
-
export declare function redactPatch(patch: MemoryPatch, redactedSet: Set<string>): MemoryPatch;
|