approval-md 0.3.0 → 0.4.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/README.md +83 -914
- package/SPEC.md +101 -13
- package/cli.js +134 -7
- package/dist/src/adapters/smtp.d.ts +18 -0
- package/dist/src/adapters/smtp.js +24 -3
- package/dist/src/adapters/smtp.js.map +1 -1
- package/dist/src/channels/contract.d.ts +72 -0
- package/dist/src/channels/contract.js +161 -1
- package/dist/src/channels/contract.js.map +1 -1
- package/dist/src/channels/relay-server.d.ts +90 -0
- package/dist/src/channels/relay-server.js +295 -0
- package/dist/src/channels/relay-server.js.map +1 -0
- package/dist/src/channels/relay.d.ts +273 -0
- package/dist/src/channels/relay.js +564 -0
- package/dist/src/channels/relay.js.map +1 -0
- package/dist/src/channels/tagging.d.ts +25 -0
- package/dist/src/channels/tagging.js +63 -6
- package/dist/src/channels/tagging.js.map +1 -1
- package/dist/src/channels/telegram-minimal.d.ts +251 -0
- package/dist/src/channels/telegram-minimal.js +618 -0
- package/dist/src/channels/telegram-minimal.js.map +1 -0
- package/dist/src/channels/telegram-webhook.d.ts +273 -0
- package/dist/src/channels/telegram-webhook.js +536 -0
- package/dist/src/channels/telegram-webhook.js.map +1 -0
- package/dist/src/channels/telegram.d.ts +725 -20
- package/dist/src/channels/telegram.js +1332 -123
- package/dist/src/channels/telegram.js.map +1 -1
- package/dist/src/cli/amend.js +358 -5
- package/dist/src/cli/amend.js.map +1 -1
- package/dist/src/cli/attest.js +43 -6
- package/dist/src/cli/attest.js.map +1 -1
- package/dist/src/cli/audit-card.d.ts +1 -1
- package/dist/src/cli/audit-card.js +40 -1
- package/dist/src/cli/audit-card.js.map +1 -1
- package/dist/src/cli/audit.d.ts +7 -5
- package/dist/src/cli/audit.js +22 -10
- package/dist/src/cli/audit.js.map +1 -1
- package/dist/src/cli/channel-relay.d.ts +108 -0
- package/dist/src/cli/channel-relay.js +334 -0
- package/dist/src/cli/channel-relay.js.map +1 -0
- package/dist/src/cli/channel-telegram-webhook.d.ts +275 -0
- package/dist/src/cli/channel-telegram-webhook.js +716 -0
- package/dist/src/cli/channel-telegram-webhook.js.map +1 -0
- package/dist/src/cli/channel-telegram.d.ts +347 -28
- package/dist/src/cli/channel-telegram.js +648 -56
- package/dist/src/cli/channel-telegram.js.map +1 -1
- package/dist/src/cli/channel.d.ts +1 -1
- package/dist/src/cli/channel.js +5 -1
- package/dist/src/cli/channel.js.map +1 -1
- package/dist/src/cli/daemon.js +37 -5
- package/dist/src/cli/daemon.js.map +1 -1
- package/dist/src/cli/doctor.d.ts +63 -0
- package/dist/src/cli/doctor.js +856 -111
- package/dist/src/cli/doctor.js.map +1 -1
- package/dist/src/cli/execute.d.ts +29 -1
- package/dist/src/cli/execute.js +387 -21
- package/dist/src/cli/execute.js.map +1 -1
- package/dist/src/cli/exit-codes.d.ts +12 -0
- package/dist/src/cli/exit-codes.js +13 -0
- package/dist/src/cli/exit-codes.js.map +1 -1
- package/dist/src/cli/gate.d.ts +2 -0
- package/dist/src/cli/gate.js +233 -2
- package/dist/src/cli/gate.js.map +1 -1
- package/dist/src/cli/help.d.ts +10 -1
- package/dist/src/cli/help.js +283 -54
- package/dist/src/cli/help.js.map +1 -1
- package/dist/src/cli/hook.d.ts +485 -6
- package/dist/src/cli/hook.js +2370 -70
- package/dist/src/cli/hook.js.map +1 -1
- package/dist/src/cli/init.js +16 -7
- package/dist/src/cli/init.js.map +1 -1
- package/dist/src/cli/instructions.js +24 -3
- package/dist/src/cli/instructions.js.map +1 -1
- package/dist/src/cli/log-anchor.d.ts +55 -0
- package/dist/src/cli/log-anchor.js +199 -60
- package/dist/src/cli/log-anchor.js.map +1 -1
- package/dist/src/cli/log-unlock.d.ts +23 -0
- package/dist/src/cli/log-unlock.js +109 -0
- package/dist/src/cli/log-unlock.js.map +1 -0
- package/dist/src/cli/main.d.ts +0 -12
- package/dist/src/cli/main.js +72 -4
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/muse.d.ts +2 -0
- package/dist/src/cli/muse.js +62 -0
- package/dist/src/cli/muse.js.map +1 -0
- package/dist/src/cli/payload.js +79 -1
- package/dist/src/cli/payload.js.map +1 -1
- package/dist/src/cli/scaffold.js +6 -0
- package/dist/src/cli/scaffold.js.map +1 -1
- package/dist/src/cli/serve.d.ts +53 -0
- package/dist/src/cli/serve.js +270 -0
- package/dist/src/cli/serve.js.map +1 -0
- package/dist/src/cli/up.js +26 -2
- package/dist/src/cli/up.js.map +1 -1
- package/dist/src/cli/verb-registry.d.ts +2 -0
- package/dist/src/cli/verb-registry.js +338 -39
- package/dist/src/cli/verb-registry.js.map +1 -1
- package/dist/src/cli/wordmark.d.ts +2 -2
- package/dist/src/cli/wordmark.js +2 -2
- package/dist/src/core/attest-bootstrap.d.ts +95 -0
- package/dist/src/core/attest-bootstrap.js +135 -0
- package/dist/src/core/attest-bootstrap.js.map +1 -0
- package/dist/src/core/attest.d.ts +20 -3
- package/dist/src/core/attest.js +25 -0
- package/dist/src/core/attest.js.map +1 -1
- package/dist/src/core/audit.d.ts +153 -12
- package/dist/src/core/audit.js +415 -20
- package/dist/src/core/audit.js.map +1 -1
- package/dist/src/core/channel-lease.d.ts +322 -0
- package/dist/src/core/channel-lease.js +663 -0
- package/dist/src/core/channel-lease.js.map +1 -0
- package/dist/src/core/command-class.d.ts +51 -0
- package/dist/src/core/command-class.js +766 -8
- package/dist/src/core/command-class.js.map +1 -1
- package/dist/src/core/daemon-host.d.ts +178 -0
- package/dist/src/core/daemon-host.js +228 -0
- package/dist/src/core/daemon-host.js.map +1 -0
- package/dist/src/core/daemon-identity.d.ts +238 -0
- package/dist/src/core/daemon-identity.js +252 -0
- package/dist/src/core/daemon-identity.js.map +1 -0
- package/dist/src/core/gate.d.ts +364 -6
- package/dist/src/core/gate.js +802 -27
- package/dist/src/core/gate.js.map +1 -1
- package/dist/src/core/harness-version.d.ts +128 -4
- package/dist/src/core/harness-version.js +179 -12
- package/dist/src/core/harness-version.js.map +1 -1
- package/dist/src/core/harness-wait.d.ts +82 -3
- package/dist/src/core/harness-wait.js +89 -3
- package/dist/src/core/harness-wait.js.map +1 -1
- package/dist/src/core/log-lock.d.ts +435 -0
- package/dist/src/core/log-lock.js +1093 -0
- package/dist/src/core/log-lock.js.map +1 -0
- package/dist/src/core/log-subscribe.d.ts +21 -0
- package/dist/src/core/log-subscribe.js +16 -6
- package/dist/src/core/log-subscribe.js.map +1 -1
- package/dist/src/core/log-write-layer.d.ts +55 -0
- package/dist/src/core/log-write-layer.js +91 -0
- package/dist/src/core/log-write-layer.js.map +1 -0
- package/dist/src/core/log.d.ts +130 -22
- package/dist/src/core/log.js +473 -50
- package/dist/src/core/log.js.map +1 -1
- package/dist/src/core/payload-census.d.ts +51 -0
- package/dist/src/core/payload-census.js +125 -2
- package/dist/src/core/payload-census.js.map +1 -1
- package/dist/src/core/payload-store.d.ts +31 -0
- package/dist/src/core/payload-store.js +113 -8
- package/dist/src/core/payload-store.js.map +1 -1
- package/dist/src/core/payload.d.ts +18 -3
- package/dist/src/core/payload.js +20 -4
- package/dist/src/core/payload.js.map +1 -1
- package/dist/src/core/policy-diff.d.ts +10 -0
- package/dist/src/core/policy-diff.js +10 -2
- package/dist/src/core/policy-diff.js.map +1 -1
- package/dist/src/core/policy-explain.d.ts +7 -1
- package/dist/src/core/policy-explain.js +16 -1
- package/dist/src/core/policy-explain.js.map +1 -1
- package/dist/src/core/policy-load.d.ts +24 -0
- package/dist/src/core/policy-load.js.map +1 -1
- package/dist/src/core/policy-match.d.ts +38 -0
- package/dist/src/core/policy-match.js +35 -0
- package/dist/src/core/policy-match.js.map +1 -1
- package/dist/src/core/policy-proposal.d.ts +40 -0
- package/dist/src/core/policy-proposal.js +37 -16
- package/dist/src/core/policy-proposal.js.map +1 -1
- package/dist/src/core/prompt-layout.d.ts +186 -1
- package/dist/src/core/prompt-layout.js +345 -3
- package/dist/src/core/prompt-layout.js.map +1 -1
- package/dist/src/core/read-scope.d.ts +10 -0
- package/dist/src/core/read-scope.js +4 -0
- package/dist/src/core/read-scope.js.map +1 -1
- package/dist/src/core/run-payload.d.ts +160 -0
- package/dist/src/core/run-payload.js +304 -0
- package/dist/src/core/run-payload.js.map +1 -0
- package/dist/src/core/sender-identity.d.ts +59 -11
- package/dist/src/core/sender-identity.js +79 -11
- package/dist/src/core/sender-identity.js.map +1 -1
- package/dist/src/core/state.d.ts +52 -1
- package/dist/src/core/state.js +52 -6
- package/dist/src/core/state.js.map +1 -1
- package/dist/src/core/telegram-config.d.ts +79 -0
- package/dist/src/core/telegram-config.js +108 -0
- package/dist/src/core/telegram-config.js.map +1 -1
- package/dist/src/core/validate.d.ts +20 -6
- package/dist/src/core/validate.js +0 -0
- package/dist/src/core/validate.js.map +1 -1
- package/dist/src/core/verify.d.ts +23 -1
- package/dist/src/core/verify.js +20 -2
- package/dist/src/core/verify.js.map +1 -1
- package/dist/src/daemon/audit.d.ts +80 -5
- package/dist/src/daemon/audit.js +126 -6
- package/dist/src/daemon/audit.js.map +1 -1
- package/dist/src/daemon/daemon.d.ts +174 -2
- package/dist/src/daemon/daemon.js +298 -7
- package/dist/src/daemon/daemon.js.map +1 -1
- package/dist/src/daemon/git-evidence.d.ts +2 -2
- package/dist/src/daemon/git-evidence.js +1 -1
- package/dist/src/daemon/projection.d.ts +13 -2
- package/dist/src/daemon/projection.js +39 -6
- package/dist/src/daemon/projection.js.map +1 -1
- package/dist/src/mcp/server.d.ts +39 -3
- package/dist/src/mcp/server.js +22 -3
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/muse/server.d.ts +16 -0
- package/dist/src/muse/server.js +238 -0
- package/dist/src/muse/server.js.map +1 -0
- package/dist/src/serve/archive.d.ts +166 -0
- package/dist/src/serve/archive.js +363 -0
- package/dist/src/serve/archive.js.map +1 -0
- package/dist/src/serve/arguments.d.ts +93 -0
- package/dist/src/serve/arguments.js +228 -0
- package/dist/src/serve/arguments.js.map +1 -0
- package/dist/src/serve/credentials.d.ts +91 -0
- package/dist/src/serve/credentials.js +143 -0
- package/dist/src/serve/credentials.js.map +1 -0
- package/dist/src/serve/follow.d.ts +86 -0
- package/dist/src/serve/follow.js +101 -0
- package/dist/src/serve/follow.js.map +1 -0
- package/dist/src/serve/hook-thread.d.ts +134 -0
- package/dist/src/serve/hook-thread.js +333 -0
- package/dist/src/serve/hook-thread.js.map +1 -0
- package/dist/src/serve/hook-worker.d.ts +134 -0
- package/dist/src/serve/hook-worker.js +173 -0
- package/dist/src/serve/hook-worker.js.map +1 -0
- package/dist/src/serve/server.d.ts +412 -0
- package/dist/src/serve/server.js +1251 -0
- package/dist/src/serve/server.js.map +1 -0
- package/docs/README-extended.md +768 -0
- package/docs/cli-reference.md +2139 -67
- package/package.json +4 -2
- package/schema/event.schema.json +413 -30
- package/schema/fixtures/event/invalid/audit-lock-reclaimed-age-without-created.json +19 -0
- package/schema/fixtures/event/invalid/audit-lock-reclaimed-agent-actor.json +14 -0
- package/schema/fixtures/event/invalid/audit-lock-reclaimed-lockfile-path.json +14 -0
- package/schema/fixtures/event/invalid/audit-lock-reclaimed-operator-cleared-system-actor.json +14 -0
- package/schema/fixtures/event/invalid/audit-lock-reclaimed-unknown-reason.json +14 -0
- package/schema/fixtures/event/invalid/audit-lock-reclaimed-without-age.json +13 -0
- package/schema/fixtures/event/invalid/audit-reviewed-agent-actor.json +6 -1
- package/schema/fixtures/event/invalid/audit-reviewed-bad-payload-hash.json +21 -0
- package/schema/fixtures/event/invalid/audit-reviewed-loved-no-note.json +5 -0
- package/schema/fixtures/event/invalid/audit-reviewed-no-subject-hash.json +19 -0
- package/schema/fixtures/event/invalid/audit-reviewed-no-subject-seq.json +19 -0
- package/schema/fixtures/event/invalid/audit-reviewed-no-verdict-source.json +19 -0
- package/schema/fixtures/event/invalid/audit-reviewed-no-verdict.json +19 -0
- package/schema/fixtures/event/invalid/audit-reviewed-system-actor.json +6 -1
- package/schema/fixtures/event/invalid/audit-sampled-no-policy-hash.json +14 -0
- package/schema/fixtures/event/invalid/daemon-id-malformed.json +15 -0
- package/schema/fixtures/event/invalid/execution-started-truncated-policy-sha256.json +18 -0
- package/schema/fixtures/event/invalid/harness-cap-at-margin.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-fractional.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-negative.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-string.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-without-harness-execution.json +16 -0
- package/schema/fixtures/event/invalid/harness-cap-zero.json +16 -0
- package/schema/fixtures/event/valid/approval-requested-harness-cap.json +18 -0
- package/schema/fixtures/event/valid/audit-lock-reclaimed-implausible-created.json +18 -0
- package/schema/fixtures/event/valid/audit-lock-reclaimed-legacy.json +14 -0
- package/schema/fixtures/event/valid/audit-lock-reclaimed-unlock.json +19 -0
- package/schema/fixtures/event/valid/audit-lock-reclaimed.json +19 -0
- package/schema/fixtures/event/valid/audit-reviewed-reaction.json +5 -0
- package/schema/fixtures/event/valid/audit-reviewed.json +6 -1
- package/schema/fixtures/event/valid/audit-sampled.json +2 -1
- package/schema/fixtures/event/valid/daemon-identity-declared.json +17 -0
- package/schema/fixtures/event/valid/daemon-identity.json +16 -0
- package/schema/fixtures/event/valid/execution-started-policy-sha256.json +18 -0
- package/schema/fixtures/event/valid/harness-kind-hermes.json +23 -0
- package/schema/fixtures/policy/invalid/daemons-malformed-id.json +10 -0
- package/schema/fixtures/policy/valid/daemons-allowlist.json +19 -0
- package/schema/fixtures/policy-md/invalid/schema-invalid-agent-may-request.md +21 -0
- package/schema/fixtures/policy-md/valid/agent-may-request.md +24 -0
- package/schema/policy.schema.json +102 -6
|
@@ -32,6 +32,85 @@ export declare const TELEGRAM_TOKEN_ENV = "APPROVAL_TG_TOKEN";
|
|
|
32
32
|
* declares no `channels.telegram.chat_id_env`. Also a default.
|
|
33
33
|
*/
|
|
34
34
|
export declare const TELEGRAM_CHAT_ENV = "APPROVAL_TG_CHAT";
|
|
35
|
+
/**
|
|
36
|
+
* The environment variable the webhook `secret_token` is read from (APRV-424).
|
|
37
|
+
*
|
|
38
|
+
* ## Why this one is conventional and the two above are declared
|
|
39
|
+
*
|
|
40
|
+
* `token_env` and `chat_id_env` are policy keys because a machine may run two
|
|
41
|
+
* gates against two bots, and the policy is where that pair is written down.
|
|
42
|
+
* This is not that kind of key, for two reasons and in that order:
|
|
43
|
+
*
|
|
44
|
+
* 1. `channels.telegram` in `schema/policy.schema.json` is
|
|
45
|
+
* `additionalProperties: false`, so declaring a name there is a schema
|
|
46
|
+
* amendment, which is its own task. A capability does not get to arrive by
|
|
47
|
+
* widening a validated document on the way past.
|
|
48
|
+
* 2. It is launch configuration in the sense of SPEC.md §11.1 invariant 7,
|
|
49
|
+
* which is where the precedent is: `APPROVAL_SENDER_KEY` (APRV-370) and
|
|
50
|
+
* `approval serve`'s two bearer credentials (APRV-421) are conventional
|
|
51
|
+
* names for the same reason. The host that launches one process per tenant
|
|
52
|
+
* sets it, exactly as it sets the bot token and the vault passphrase
|
|
53
|
+
* (`design/hosted-daemon-identity.md` §1.2), and two gates on one machine
|
|
54
|
+
* already have two environments rather than one.
|
|
55
|
+
*
|
|
56
|
+
* The VALUE never appears in a policy, a log, a record or a message. Telegram
|
|
57
|
+
* constrains it to 1-256 characters of `A-Z a-z 0-9 _ -`; the verb refuses
|
|
58
|
+
* anything outside that, and anything short enough to have been chosen by a
|
|
59
|
+
* person rather than generated.
|
|
60
|
+
*/
|
|
61
|
+
export declare const TELEGRAM_WEBHOOK_SECRET_ENV = "APPROVAL_TG_WEBHOOK_SECRET";
|
|
62
|
+
/**
|
|
63
|
+
* One webhook URL, reduced so two spellings of one endpoint compare equal
|
|
64
|
+
* (APRV-424, review finding 6).
|
|
65
|
+
*
|
|
66
|
+
* The host is lowercased and one trailing slash is dropped from the path.
|
|
67
|
+
* Nothing more is attempted: `normaliseApiBase` in `core/channel-owner.ts`
|
|
68
|
+
* argues the same restraint, and the direction of the error matters here. Two
|
|
69
|
+
* spellings that compare UNEQUAL turn a restart into a refusal, which an
|
|
70
|
+
* operator clears with one flag; two that compare equal when they are
|
|
71
|
+
* different endpoints would let a second host quietly take a first host's
|
|
72
|
+
* taps, which nobody would see.
|
|
73
|
+
*
|
|
74
|
+
* The path's case is preserved, because a path is case-sensitive and a webhook
|
|
75
|
+
* path is often a random token.
|
|
76
|
+
*
|
|
77
|
+
* `null` for anything that is not a URL, so a caller compares two known URLs
|
|
78
|
+
* or refuses. A failed parse is never "equal to everything".
|
|
79
|
+
*/
|
|
80
|
+
export declare function normaliseWebhookUrl(raw: string): string | null;
|
|
81
|
+
/**
|
|
82
|
+
* A webhook PATH as it may be printed (APRV-424, reviews 1 to 3).
|
|
83
|
+
*
|
|
84
|
+
* With two segments or more, the first is kept and the rest is replaced:
|
|
85
|
+
* `/hook/8Xk2-a-long-random-value` prints as `/hook/<path redacted>`, which is
|
|
86
|
+
* enough for an operator to recognise their own endpoint while the bearer half
|
|
87
|
+
* stays theirs. With exactly ONE segment the whole path is replaced, because a
|
|
88
|
+
* single-segment path is the shape a tunnel's own token takes
|
|
89
|
+
* (`https://host/8Xk2-a-long-random-value`) and keeping "the first segment"
|
|
90
|
+
* there would print the token itself (third review, finding 3).
|
|
91
|
+
*
|
|
92
|
+
* The operator loses nothing either way. They typed it into `--url`.
|
|
93
|
+
*
|
|
94
|
+
* The second review found the first version printing the SERVED path verbatim,
|
|
95
|
+
* on the argument that a path this process serves is a path the operator
|
|
96
|
+
* chose. That argument is right about the operator and wrong about everyone
|
|
97
|
+
* else who reads a terminal, a log aggregator or a pasted banner.
|
|
98
|
+
*/
|
|
99
|
+
export declare function redactWebhookPath(path: string): string;
|
|
100
|
+
/**
|
|
101
|
+
* A webhook URL as it may be printed (APRV-424, review finding 10).
|
|
102
|
+
*
|
|
103
|
+
* The origin, which carries no userinfo by construction, plus
|
|
104
|
+
* {@link redactWebhookPath}'s reading of the path. Used by every line this
|
|
105
|
+
* runtime writes about a webhook url: the start-up banner, the
|
|
106
|
+
* `webhook_started` object, the registration refusal and the listener's
|
|
107
|
+
* `webhook-registered` message, whether the url is this process's own or
|
|
108
|
+
* another host's.
|
|
109
|
+
*
|
|
110
|
+
* A url carrying userinfo is refused at startup rather than printed; this is
|
|
111
|
+
* the belt on that brace, because the origin never contains it.
|
|
112
|
+
*/
|
|
113
|
+
export declare function redactWebhookUrl(raw: string): string;
|
|
35
114
|
/** The NAME of the variable this policy says the bot token lives in. */
|
|
36
115
|
export declare function telegramTokenEnvFor(load: PolicyLoadResult): string;
|
|
37
116
|
/** The NAME of the variable this policy says the approver chat id lives in. */
|
|
@@ -30,6 +30,114 @@ export const TELEGRAM_TOKEN_ENV = "APPROVAL_TG_TOKEN";
|
|
|
30
30
|
* declares no `channels.telegram.chat_id_env`. Also a default.
|
|
31
31
|
*/
|
|
32
32
|
export const TELEGRAM_CHAT_ENV = "APPROVAL_TG_CHAT";
|
|
33
|
+
/**
|
|
34
|
+
* The environment variable the webhook `secret_token` is read from (APRV-424).
|
|
35
|
+
*
|
|
36
|
+
* ## Why this one is conventional and the two above are declared
|
|
37
|
+
*
|
|
38
|
+
* `token_env` and `chat_id_env` are policy keys because a machine may run two
|
|
39
|
+
* gates against two bots, and the policy is where that pair is written down.
|
|
40
|
+
* This is not that kind of key, for two reasons and in that order:
|
|
41
|
+
*
|
|
42
|
+
* 1. `channels.telegram` in `schema/policy.schema.json` is
|
|
43
|
+
* `additionalProperties: false`, so declaring a name there is a schema
|
|
44
|
+
* amendment, which is its own task. A capability does not get to arrive by
|
|
45
|
+
* widening a validated document on the way past.
|
|
46
|
+
* 2. It is launch configuration in the sense of SPEC.md §11.1 invariant 7,
|
|
47
|
+
* which is where the precedent is: `APPROVAL_SENDER_KEY` (APRV-370) and
|
|
48
|
+
* `approval serve`'s two bearer credentials (APRV-421) are conventional
|
|
49
|
+
* names for the same reason. The host that launches one process per tenant
|
|
50
|
+
* sets it, exactly as it sets the bot token and the vault passphrase
|
|
51
|
+
* (`design/hosted-daemon-identity.md` §1.2), and two gates on one machine
|
|
52
|
+
* already have two environments rather than one.
|
|
53
|
+
*
|
|
54
|
+
* The VALUE never appears in a policy, a log, a record or a message. Telegram
|
|
55
|
+
* constrains it to 1-256 characters of `A-Z a-z 0-9 _ -`; the verb refuses
|
|
56
|
+
* anything outside that, and anything short enough to have been chosen by a
|
|
57
|
+
* person rather than generated.
|
|
58
|
+
*/
|
|
59
|
+
export const TELEGRAM_WEBHOOK_SECRET_ENV = "APPROVAL_TG_WEBHOOK_SECRET";
|
|
60
|
+
/**
|
|
61
|
+
* One webhook URL, reduced so two spellings of one endpoint compare equal
|
|
62
|
+
* (APRV-424, review finding 6).
|
|
63
|
+
*
|
|
64
|
+
* The host is lowercased and one trailing slash is dropped from the path.
|
|
65
|
+
* Nothing more is attempted: `normaliseApiBase` in `core/channel-owner.ts`
|
|
66
|
+
* argues the same restraint, and the direction of the error matters here. Two
|
|
67
|
+
* spellings that compare UNEQUAL turn a restart into a refusal, which an
|
|
68
|
+
* operator clears with one flag; two that compare equal when they are
|
|
69
|
+
* different endpoints would let a second host quietly take a first host's
|
|
70
|
+
* taps, which nobody would see.
|
|
71
|
+
*
|
|
72
|
+
* The path's case is preserved, because a path is case-sensitive and a webhook
|
|
73
|
+
* path is often a random token.
|
|
74
|
+
*
|
|
75
|
+
* `null` for anything that is not a URL, so a caller compares two known URLs
|
|
76
|
+
* or refuses. A failed parse is never "equal to everything".
|
|
77
|
+
*/
|
|
78
|
+
export function normaliseWebhookUrl(raw) {
|
|
79
|
+
let url;
|
|
80
|
+
try {
|
|
81
|
+
url = new URL(raw);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const path = url.pathname.length > 1 ? url.pathname.replace(/\/+$/u, "") : url.pathname;
|
|
87
|
+
return `${url.protocol.toLowerCase()}//${url.host.toLowerCase()}${path}${url.search}`;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* A webhook PATH as it may be printed (APRV-424, reviews 1 to 3).
|
|
91
|
+
*
|
|
92
|
+
* With two segments or more, the first is kept and the rest is replaced:
|
|
93
|
+
* `/hook/8Xk2-a-long-random-value` prints as `/hook/<path redacted>`, which is
|
|
94
|
+
* enough for an operator to recognise their own endpoint while the bearer half
|
|
95
|
+
* stays theirs. With exactly ONE segment the whole path is replaced, because a
|
|
96
|
+
* single-segment path is the shape a tunnel's own token takes
|
|
97
|
+
* (`https://host/8Xk2-a-long-random-value`) and keeping "the first segment"
|
|
98
|
+
* there would print the token itself (third review, finding 3).
|
|
99
|
+
*
|
|
100
|
+
* The operator loses nothing either way. They typed it into `--url`.
|
|
101
|
+
*
|
|
102
|
+
* The second review found the first version printing the SERVED path verbatim,
|
|
103
|
+
* on the argument that a path this process serves is a path the operator
|
|
104
|
+
* chose. That argument is right about the operator and wrong about everyone
|
|
105
|
+
* else who reads a terminal, a log aggregator or a pasted banner.
|
|
106
|
+
*/
|
|
107
|
+
export function redactWebhookPath(path) {
|
|
108
|
+
const segments = path
|
|
109
|
+
.replace(/^\/+/u, "")
|
|
110
|
+
.split("/")
|
|
111
|
+
.filter((segment) => segment.length > 0);
|
|
112
|
+
const first = segments[0];
|
|
113
|
+
if (first === undefined)
|
|
114
|
+
return "/";
|
|
115
|
+
return segments.length === 1 ? "/<path redacted>" : `/${first}/<path redacted>`;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* A webhook URL as it may be printed (APRV-424, review finding 10).
|
|
119
|
+
*
|
|
120
|
+
* The origin, which carries no userinfo by construction, plus
|
|
121
|
+
* {@link redactWebhookPath}'s reading of the path. Used by every line this
|
|
122
|
+
* runtime writes about a webhook url: the start-up banner, the
|
|
123
|
+
* `webhook_started` object, the registration refusal and the listener's
|
|
124
|
+
* `webhook-registered` message, whether the url is this process's own or
|
|
125
|
+
* another host's.
|
|
126
|
+
*
|
|
127
|
+
* A url carrying userinfo is refused at startup rather than printed; this is
|
|
128
|
+
* the belt on that brace, because the origin never contains it.
|
|
129
|
+
*/
|
|
130
|
+
export function redactWebhookUrl(raw) {
|
|
131
|
+
let url;
|
|
132
|
+
try {
|
|
133
|
+
url = new URL(raw);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return "<not a url>";
|
|
137
|
+
}
|
|
138
|
+
const query = url.search === "" ? "" : "?<query redacted>";
|
|
139
|
+
return `${url.origin}${redactWebhookPath(url.pathname)}${query}`;
|
|
140
|
+
}
|
|
33
141
|
/** The NAME of the variable this policy says the bot token lives in. */
|
|
34
142
|
export function telegramTokenEnvFor(load) {
|
|
35
143
|
return declaredEnvName(load, "token_env") ?? TELEGRAM_TOKEN_ENV;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-config.js","sourceRoot":"","sources":["../../../src/core/telegram-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAEpD,wEAAwE;AACxE,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,OAAO,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,kBAAkB,CAAC;AAClE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,kBAAkB,CAAC,IAAsB;IACvD,OAAO,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,iBAAiB,CAAC;AACnE,CAAC;AAiBD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAqB,OAAO,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAsB;IACxD,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,yBAAyB,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAClE,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,QAAQ,CAAC;IAClE,OAAO,yBAAyB,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAsB;IAC5D,OAAO;QACL;YACE,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC;YAC/B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,2BAA2B;YAClC,QAAQ,EACN,sFAAsF;YACxF,QAAQ,EAAE,IAAI;SACf;QACD;YACE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;YAC9B,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,kBAAkB;YACzB,QAAQ,EACN,oFAAoF;YACtF,QAAQ,EAAE,IAAI;SACf;KACF,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,eAAe,CAAC,IAAsB,EAAE,GAAW;IAC1D,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACpE,OAAO,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC"}
|
|
1
|
+
{"version":3,"file":"telegram-config.js","sourceRoot":"","sources":["../../../src/core/telegram-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,8 +66,10 @@ export declare const DEFAULT_SCHEMA_DIR: string;
|
|
|
66
66
|
* decimal string and nothing else.
|
|
67
67
|
* - `historical` — the read boundary. The log is append-only, so a verifier
|
|
68
68
|
* walking records written before APRV-121 meets JSON-number amounts that were
|
|
69
|
-
* valid when they were appended and must stay valid forever
|
|
70
|
-
*
|
|
69
|
+
* valid when they were appended and must stay valid forever, and one walking
|
|
70
|
+
* reviews written before APRV-481 (or samples written before PR #614's F2
|
|
71
|
+
* fix) meets records without the fields those changes made required. This mode makes exactly the substitutions
|
|
72
|
+
* {@link WIDENED_DEFS} lists, and no other.
|
|
71
73
|
*
|
|
72
74
|
* The asymmetry is the point: a document only ever gets *more* permissive by a
|
|
73
75
|
* caller explicitly naming the read boundary, and the callers that do are
|
|
@@ -89,10 +91,22 @@ export interface ValidateOptions {
|
|
|
89
91
|
*
|
|
90
92
|
* Pinned as a list rather than derived from a naming convention, so widening
|
|
91
93
|
* the read boundary is always a reviewable diff in this file and never a side
|
|
92
|
-
* effect of adding a definition to a schema.
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
94
|
+
* effect of adding a definition to a schema. Three entries:
|
|
95
|
+
*
|
|
96
|
+
* - `usd_amount`: the pre-APRV-121 write boundary typed monetary fields as
|
|
97
|
+
* `{"type": "number", "minimum": 0}`, and `usd_amount_historical` is exactly
|
|
98
|
+
* that union with the decimal string.
|
|
99
|
+
* - `audit_reviewed_record` (APRV-481): the write boundary requires a review to
|
|
100
|
+
* carry `subject_seq`, `sampled_subject_hash` and `verdict`, and
|
|
101
|
+
* `audit_reviewed_record_historical` is the same record shape without those
|
|
102
|
+
* three requirements (nor `verdict_source`, required since PR #614's F5
|
|
103
|
+
* fix), so every review written before either change still validates and
|
|
104
|
+
* verifies unchanged.
|
|
105
|
+
* - `audit_sampled_record` (PR #614 refutation F2): the write boundary
|
|
106
|
+
* requires a sample to pin the attested policy it was taken under
|
|
107
|
+
* (`payload.policy_sha256`), and `audit_sampled_record_historical` drops
|
|
108
|
+
* that requirement, so a sample written before it still verifies and reads
|
|
109
|
+
* as not pinned.
|
|
96
110
|
*/
|
|
97
111
|
export declare const WIDENED_DEFS: Readonly<Record<string, string>>;
|
|
98
112
|
/**
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/core/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,gBAAgB,MAAM,aAAa,CAAC;AAG3C,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,uEAAuE;AACvE,4EAA4E;AAC5E,yBAAyB;AACzB,MAAM,UAAU,GAAI,gBAA0D;KAC3E,OAAO,CAAC;AAiBX,mEAAmE;AACnE,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AAEjD,yEAAyE;AACzE,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAC7C,IAAI,GAAG,CAAC,kBAAkB,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAC7C,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/core/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -171,7 +171,9 @@ export type VerifyFailureReason = "malformed-line" | "schema-invalid" | "bad-alg
|
|
|
171
171
|
* - `torn-tail` — the file's final line is torn (it is not newline-terminated,
|
|
172
172
|
* i.e. a writer died mid-line) while every complete line before it verifies.
|
|
173
173
|
* This is the crashed-write signature and is deliberately distinct from
|
|
174
|
-
* corruption: it is an incomplete write, not evidence of tampering.
|
|
174
|
+
* corruption: it is an incomplete write, not evidence of tampering. `tear`
|
|
175
|
+
* says which crash (APRV-440), and `intactBytes` is where the verified log
|
|
176
|
+
* ends, which is the length a human truncates the file to.
|
|
175
177
|
* - `corrupt` — everything else, reported at the first offending record.
|
|
176
178
|
*/
|
|
177
179
|
export type VerifyResult = {
|
|
@@ -183,6 +185,11 @@ export type VerifyResult = {
|
|
|
183
185
|
status: "torn-tail";
|
|
184
186
|
records: number;
|
|
185
187
|
intactThroughSeq: number;
|
|
188
|
+
tear: TornTailKind;
|
|
189
|
+
/** UTF-8 byte length of the unterminated tail (exact for a NUL-filled one). */
|
|
190
|
+
tornBytes: number;
|
|
191
|
+
/** Byte offset where the tail starts: the verified log is the file's first this-many bytes. */
|
|
192
|
+
intactBytes: number;
|
|
186
193
|
message: string;
|
|
187
194
|
anomalies: ChainAnomaly[];
|
|
188
195
|
} | {
|
|
@@ -192,6 +199,21 @@ export type VerifyResult = {
|
|
|
192
199
|
message: string;
|
|
193
200
|
anomalies: ChainAnomaly[];
|
|
194
201
|
};
|
|
202
|
+
/**
|
|
203
|
+
* Which crash a torn tail is the signature of (APRV-440).
|
|
204
|
+
*
|
|
205
|
+
* - `nul-filled` — every byte of the unterminated tail is NUL. The file was
|
|
206
|
+
* extended (its size reached the disk) but the data blocks under the new size
|
|
207
|
+
* never did: the machine stopped after the append was acknowledged and before
|
|
208
|
+
* writeback. A kill between the write and its fsync, or an append made before
|
|
209
|
+
* fsync was in the append path, leaves exactly this. No record text survives
|
|
210
|
+
* to be half-written, so it is neither a tampered line nor a partial one.
|
|
211
|
+
* - `partial-line` — anything else: some of a record's bytes reached the file
|
|
212
|
+
* and its newline did not, the signature of a writer that died mid-write.
|
|
213
|
+
*
|
|
214
|
+
* Neither is corruption, and neither is ever repaired here.
|
|
215
|
+
*/
|
|
216
|
+
export type TornTailKind = "nul-filled" | "partial-line";
|
|
195
217
|
/** Options accepted by {@link verify}. */
|
|
196
218
|
export interface VerifyOptions extends ValidateOptions {
|
|
197
219
|
/**
|
package/dist/src/core/verify.js
CHANGED
|
@@ -211,6 +211,10 @@ export function chainAnomalies(records, toleranceMs = GATE_TS_SKEW_TOLERANCE_MS)
|
|
|
211
211
|
}
|
|
212
212
|
return anomalies;
|
|
213
213
|
}
|
|
214
|
+
/** True when every character of `tail` is NUL (the tail is never empty here). */
|
|
215
|
+
function isNulFilled(tail) {
|
|
216
|
+
return tail.length > 0 && tail.replaceAll("\u0000", "").length === 0;
|
|
217
|
+
}
|
|
214
218
|
/**
|
|
215
219
|
* How many records pass between progress calls.
|
|
216
220
|
*
|
|
@@ -505,13 +509,27 @@ export function verifyText(logPath, text, options = {}, prefix = null) {
|
|
|
505
509
|
// authorization. Clean with anomalies is clean.
|
|
506
510
|
const anomalies = chainAnomalies(records, toleranceOf(options));
|
|
507
511
|
if (torn !== null) {
|
|
512
|
+
const intactThroughSeq = head === null ? 0 : head.seq;
|
|
513
|
+
const tear = isNulFilled(torn) ? "nul-filled" : "partial-line";
|
|
514
|
+
// Bytes, not UTF-16 units: the operator truncates a file, and a count in
|
|
515
|
+
// code units would be wrong for any tail holding a multi-byte character.
|
|
516
|
+
// The verified prefix ends at a newline, and a decoded line re-encodes to
|
|
517
|
+
// its own bytes once it has verified, so `intactBytes` is exact.
|
|
518
|
+
const tornBytes = Buffer.byteLength(torn, "utf8");
|
|
519
|
+
const intactBytes = (prefix === null ? 0 : prefix.byteLength) + Buffer.byteLength(text, "utf8") - tornBytes;
|
|
520
|
+
const signature = tear === "nul-filled"
|
|
521
|
+
? `ends with an unterminated tail of ${String(tornBytes)} NUL byte(s) after record ${String(intactThroughSeq)}: the crash-before-writeback signature (the file was extended but its data never reached the disk before the machine stopped), not a tampered or half-written line. Whatever those bytes held, one acknowledged append or several, is gone from this file`
|
|
522
|
+
: `ends with an unterminated line of ${String(tornBytes)} byte(s) after record ${String(intactThroughSeq)}: the signature of a crashed write, a writer that died mid-line`;
|
|
508
523
|
return {
|
|
509
524
|
result: {
|
|
510
525
|
status: "torn-tail",
|
|
511
526
|
anomalies,
|
|
512
527
|
records: lineCount,
|
|
513
|
-
intactThroughSeq
|
|
514
|
-
|
|
528
|
+
intactThroughSeq,
|
|
529
|
+
tear,
|
|
530
|
+
tornBytes,
|
|
531
|
+
intactBytes,
|
|
532
|
+
message: `log ${logPath} ${signature}; records 1..${String(intactThroughSeq)} verify clean and are its first ${String(intactBytes)} byte(s). The log is NOT repaired here: truncating the torn tail is a human decision.`,
|
|
515
533
|
},
|
|
516
534
|
records,
|
|
517
535
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/core/verify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/core/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAkC,MAAM,UAAU,CAAC;AAClF,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAwB,MAAM,eAAe,CAAC;AAWvE,8EAA8E;AAC9E,wEAAwE;AACxE,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,CACL,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7B,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QAC9B,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3B,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC1B,2EAA2E;QAC3E,2EAA2E;QAC3E,yEAAyE;QACzE,uEAAuE;QACvE,+CAA+C;QAC/C,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC;QACnC,uEAAuE;QACvE,uEAAuE;QACvE,4EAA4E;QAC5E,sEAAsE;QACtE,2DAA2D;QAC3D,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QACzB,4EAA4E;QAC5E,2EAA2E;QAC3E,0EAA0E;QAC1E,+CAA+C;QAC/C,KAAK,KAAK,gBAAgB;QAC1B,KAAK,KAAK,gBAAgB,CAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,iBAAiB,CAC/B,MAAuC,EACvC,SAAkB;IAElB,MAAM,KAAK,GACT,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;IAC3F,IAAI,SAAS,KAAK,SAAS;QAAE,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;IACzD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,yBAAyB,CAAC;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,yBAAyB,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC;;;;;;;;OAQG;IACH,oBAAoB;CACZ,CAAC;AAmBX;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA+B,EAC/B,WAAW,GAAW,yBAAyB;IAE/C,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,IAAI,QAAQ,GAAuD,IAAI,CAAC;IAExE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,8CAA8C;QAElF,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;YACxC,IAAI,MAAM,GAAG,WAAW,EAAE,CAAC;gBACzB,SAAS,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,oBAAoB;oBAC1B,GAAG,EAAE,MAAM,CAAC,GAAG;oBACf,EAAE,EAAE,MAAM,CAAC,EAAE;oBACb,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,WAAW,EAAE,QAAQ,CAAC,GAAG;oBACzB,UAAU,EAAE,QAAQ,CAAC,EAAE;oBACvB,MAAM;oBACN,OAAO,EAAE,UAAU,MAAM,CAAC,GAAG,KAAK,MAAM,CAAC,KAAK,oBAAoB,MAAM,CAAC,EAAE,KAAK,MAAM,CACpF,MAAM,CACP,4CAA4C,QAAQ,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,0HAA0H,MAAM,CACzM,WAAW,CACZ,+OAA+O;iBACjP,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,QAAQ,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAiED,iFAAiF;AACjF,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACvE,CAAC;AA6DD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,6EAA6E;AAC7E,SAAS,WAAW,CAAC,OAAsB;IACzC,IAAI,OAAO,CAAC,eAAe,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,eAAe,CAAC;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,yBAAyB,CAAC;IACnE,OAAO,iBAAiB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,OAAO,CACd,MAA2B,EAC3B,WAA0B,EAC1B,OAAe;IAEf,uEAAuE;IACvE,4EAA4E;IAC5E,6EAA6E;IAC7E,2CAA2C;IAC3C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AAC5E,CAAC;AAED,uEAAuE;AACvE,SAAS,OAAO,CAAC,MAA+B;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AACnF,CAAC;AASD;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,4CAA4C;QAC5D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,QAAQ,CAAC,GAAG,EAAE,CAAC;IACf,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC5C,CAAC;AAoBD,MAAM,aAAa,GAAc,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAEnF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,IAAI,CACX,KAAe,EACf,eAAgC,EAChC,KAAgB;AAChB;;;;GAIG;AACH,MAAM,GAAwC,IAAI;IAElD,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC5B,IAAI,QAAQ,GAAkB,KAAK,CAAC,QAAQ,CAAC;IAC7C,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,0EAA0E;IAC1E,IAAI,cAAc,GAA+C,IAAI,CAAC;IAEtE,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,QAAQ,UAAU,WAAW,CAAC;gBACvE,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,gBAAgB,EAChB,IAAI,EACJ,QAAQ,UAAU,uBAAuB,MAAM,EAAE,CAClD;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,gBAAgB,EAChB,IAAI,EACJ,QAAQ,UAAU,uBAAuB,CAC1C;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,MAAiC,CAAC;QAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzB,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YAChF,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,SAAS,EACT,GAAG,EACH,QAAQ,UAAU,qCAAqC,KAAK,eAAe,GAAG,GAAG,CAClF;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,cAAc,KAAK,gBAAgB,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;QAClF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM;iBAC7B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;iBAC1E,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,gBAAgB,EAChB,GAAG,EACH,QAAQ,UAAU,gDAAgD,MAAM,EAAE,CAC3E;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,8EAA8E;QAC9E,MAAM,MAAM,GAAG,GAA6B,CAAC;QAE7C,IAAI,UAAkB,CAAC;QACvB,IAAI,CAAC;YACH,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,eAAe,EACf,MAAM,CAAC,GAAG,EACV,UAAU,MAAM,CAAC,GAAG,4CAA4C,MAAM,EAAE,CACzE;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,UAAU,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,eAAe,EACf,MAAM,CAAC,GAAG,EACV,UAAU,MAAM,CAAC,GAAG,SAAS,MAAM,CAAC,IAAI,4CAA4C,UAAU,GAAG,CAClG;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,KAAK,OAAO,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EACvC,MAAM,CAAC,GAAG,EACV,SAAS;oBACP,CAAC,CAAC,QAAQ,UAAU,gBAAgB,MAAM,CAAC,GAAG,EAAE;oBAChD,CAAC,CAAC,QAAQ,UAAU,YAAY,MAAM,CAAC,GAAG,cAAc,OAAO,GAAG,CAAC,EAAE,CACxE;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBACzB,OAAO;oBACL,OAAO,EAAE,OAAO,CACd,aAAa,EACb,MAAM,CAAC,GAAG,EACV,UAAU,MAAM,CAAC,GAAG,wCAAwC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CACzG;oBACD,IAAI,EAAE,IAAI;oBACV,OAAO,EAAE,QAAQ;iBAClB,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,OAAO;gBACL,OAAO,EAAE,OAAO,CACd,eAAe,EACf,MAAM,CAAC,GAAG,EACV,UAAU,MAAM,CAAC,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,OAAO,SAAS,QAAQ,EAAE,CAC/G;gBACD,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,QAAQ;aAClB,CAAC;QACJ,CAAC;QAED,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC;QACrB,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;QACvB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEtB,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,iBAAiB,KAAK,CAAC;YAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE;QACjE,OAAO,EAAE,QAAQ;KAClB,CAAC;AACJ,CAAC;AAeD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,OAAO,GAAkB,EAAE;IAC5E,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO;gBACL,MAAM,EAAE,OAAO,CAAC,gBAAgB,EAAE,IAAI,EAAE,OAAO,OAAO,uBAAuB,MAAM,EAAE,CAAC;gBACtF,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QACD,0EAA0E;QAC1E,0EAA0E;QAC1E,GAAG,GAAG,EAAE,CAAC;IACX,CAAC;IAED,OAAO,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACjD,CAAC;AA0BD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,IAAY,EACZ,OAAO,GAAkB,EAAE,EAC3B,MAAM,GAA0B,IAAI;IAEpC,4EAA4E;IAC5E,0EAA0E;IAC1E,4EAA4E;IAC5E,qEAAqE;IACrE,4EAA4E;IAC5E,MAAM,eAAe,GACnB,OAAO,CAAC,SAAS,KAAK,SAAS;QAC7B,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE;QACxB,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;IAE3D,MAAM,KAAK,GACT,MAAM,KAAK,IAAI;QACb,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IAC7F,MAAM,YAAY,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;IAC3D,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IAEtD,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAE/F,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,wDAAwD;IACxD,MAAM,aAAa,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAClB,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,QAAgB,EAAQ,EAAE;YACzB,mEAAmE;YACnE,qEAAqE;YACrE,mEAAmE;YACnE,IAAI,QAAQ,IAAI,QAAQ;gBAAE,OAAO;YACjC,QAAQ,GAAG,QAAQ,CAAC;YACpB,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC;IAER,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC9D,4EAA4E;IAC5E,6EAA6E;IAC7E,uEAAuE;IACvE,kCAAkC;IAClC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACjC,MAAM,OAAO,GACX,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC;IAE/C,4EAA4E;IAC5E,0DAA0D;IAC1D,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAE1D,6EAA6E;IAC7E,4EAA4E;IAC5E,gDAAgD;IAChD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAEhE,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,MAAM,gBAAgB,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QACtD,MAAM,IAAI,GAAiB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;QAC7E,yEAAyE;QACzE,yEAAyE;QACzE,0EAA0E;QAC1E,iEAAiE;QACjE,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,WAAW,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;QAC5G,MAAM,SAAS,GACb,IAAI,KAAK,YAAY;YACnB,CAAC,CAAC,qCAAqC,MAAM,CAAC,SAAS,CAAC,6BAA6B,MAAM,CAAC,gBAAgB,CAAC,2PAA2P;YACxW,CAAC,CAAC,qCAAqC,MAAM,CAAC,SAAS,CAAC,yBAAyB,MAAM,CAAC,gBAAgB,CAAC,iEAAiE,CAAC;QAC/K,OAAO;YACL,MAAM,EAAE;gBACN,MAAM,EAAE,WAAW;gBACnB,SAAS;gBACT,OAAO,EAAE,SAAS;gBAClB,gBAAgB;gBAChB,IAAI;gBACJ,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,OAAO,OAAO,IAAI,SAAS,gBAAgB,MAAM,CAAC,gBAAgB,CAAC,mCAAmC,MAAM,CAAC,WAAW,CAAC,uFAAuF;aAC1N;YACD,OAAO;SACR,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC;IACtC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,OAAO,CACb,eAAe,EACf,IAAI,EACJ,OAAO,OAAO,0CAA0C,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,6BAA6B,CACnH;gBACD,OAAO;aACR,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7D,OAAO;gBACL,MAAM,EAAE,OAAO,CACb,eAAe,EACf,IAAI,CAAC,GAAG,EACR,OAAO,OAAO,gBAAgB,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,kCAAkC,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,+FAA+F,CAClN;gBACD,OAAO;aACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC;AACvF,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,OAAe,EAAE,OAAO,GAAkB,EAAE;IACjE,OAAO,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;AACpD,CAAC"}
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
* and subtracts the subjects already sampled. A tick that samples nothing new is
|
|
15
15
|
* the normal case; a restarted daemon, a second daemon, and an operator running
|
|
16
16
|
* a sweep by hand all converge on exactly the same set. This module therefore
|
|
17
|
-
* holds no state
|
|
17
|
+
* holds no state that any APPEND depends on: no seen-set, no cursor, no cache.
|
|
18
|
+
* The two process-lifetime sets below are output bookkeeping (which notice has
|
|
19
|
+
* been printed, which deferral was promised), and every decision about what to
|
|
20
|
+
* append is made from the log on every call.
|
|
18
21
|
*
|
|
19
22
|
* ## Reporting, and why it goes through `warning`
|
|
20
23
|
*
|
|
@@ -27,6 +30,58 @@
|
|
|
27
30
|
* its `sampled` line. Both channels remain the caller's: this module names no
|
|
28
31
|
* event and writes to no stream.
|
|
29
32
|
*
|
|
33
|
+
* ## A deferred sample is not a lost one (APRV-381)
|
|
34
|
+
*
|
|
35
|
+
* On 2026-09-19 a tick printed `append-refused audit sampling: append-failed:
|
|
36
|
+
* audit.sampled for hook:…:vcs.push.main was not appended (lock-timeout)` while a
|
|
37
|
+
* lane's hook append and a records advance were writing the same log. Nothing was
|
|
38
|
+
* lost, and the next ticks appended the sample; the operator reading the window
|
|
39
|
+
* had no way to know that, because the line said an audit record had not been
|
|
40
|
+
* written and stopped there.
|
|
41
|
+
*
|
|
42
|
+
* So the two outcomes are now said differently. `core/audit.ts` classifies
|
|
43
|
+
* `lock-timeout` and `head-moved` as transient (see its `TRANSIENT_APPEND_CODES`)
|
|
44
|
+
* and hands them back on `deferred`; this module reports each on {@link
|
|
45
|
+
* AuditSweepOptions.defer} with the action key and the fact that the next tick
|
|
46
|
+
* retries it, and reports everything else on {@link AuditSweepOptions.warn} in
|
|
47
|
+
* the form it always had. When the caller passes no `defer` sink the deferral
|
|
48
|
+
* goes to `warn` instead: a deferral nobody prints is indistinguishable, to the
|
|
49
|
+
* person who has to trust this log, from a sample that was dropped.
|
|
50
|
+
*
|
|
51
|
+
* The retry is then named as one. `pendingSamples` re-derives pendency from the
|
|
52
|
+
* verified log, so the retry needs no memory to HAPPEN; saying "this is the retry
|
|
53
|
+
* of what I deferred" is a fact about this process's own output, and it is kept
|
|
54
|
+
* here as such (see {@link rememberDeferral}).
|
|
55
|
+
*
|
|
56
|
+
* ## The lock wait: skip and retry, at `core/log.ts`'s own 2000 ms (APRV-381)
|
|
57
|
+
*
|
|
58
|
+
* The daemon is the one writer that could afford to wait longer, and it
|
|
59
|
+
* deliberately does not. Four reasons, recorded here because the number itself is
|
|
60
|
+
* a one-line change and the reasoning is not:
|
|
61
|
+
*
|
|
62
|
+
* 1. A tick is serial. This sweep sits between the TTL sweep and the queue
|
|
63
|
+
* render, so every millisecond it blocks is a millisecond an expiry line, a
|
|
64
|
+
* `state:` write-back and `QUEUE.md` wait. A longer wait spends latency a
|
|
65
|
+
* person notices on a record that costs nothing to postpone.
|
|
66
|
+
* 2. The contenders hold the lock for spans no polite wait covers. `approval log
|
|
67
|
+
* advance` holds it across a whole verify-and-commit, `approval log sync`
|
|
68
|
+
* across a baseline move. A wait long enough to win those races reliably is a
|
|
69
|
+
* wait long enough to stall the loop for seconds, and it would still time out
|
|
70
|
+
* sometimes, so the transient path has to exist either way.
|
|
71
|
+
* 3. Deferring loses nothing, provably. The sample's pendency is a property of
|
|
72
|
+
* the log (eligible, selected, no `audit.sampled` yet), not of this process, so
|
|
73
|
+
* the retry bound is the tick interval, and an append by anyone else also wakes
|
|
74
|
+
* the log watcher, which usually makes it the next debounce.
|
|
75
|
+
* 4. The appends this sweep contends with are the ones somebody is waiting on: a
|
|
76
|
+
* hook's gate verdict, a lane's execution record, an advance's commit. The
|
|
77
|
+
* writer with nobody blocked on it is the writer that should yield.
|
|
78
|
+
*
|
|
79
|
+
* "Skip" here means letting the append refuse and classifying the refusal. It
|
|
80
|
+
* explicitly does NOT mean peeking at `events.jsonl.lock` before sweeping: that
|
|
81
|
+
* read can be wrong in both directions (a lock released a microsecond later, a
|
|
82
|
+
* lock taken a microsecond after the peek), and `appendEvent`'s own acquisition
|
|
83
|
+
* under the lock is the only authority on whether an append can be made.
|
|
84
|
+
*
|
|
30
85
|
* ## A disabled sampler is not a failure
|
|
31
86
|
*
|
|
32
87
|
* When no sampling secret is configured, `core/sampler.ts` returns a disabled
|
|
@@ -58,10 +113,21 @@ export interface AuditSweepOptions {
|
|
|
58
113
|
/** Environment the sampling secret is read from. Injected by tests. */
|
|
59
114
|
env?: NodeJS.ProcessEnv;
|
|
60
115
|
/**
|
|
61
|
-
* One FAILURE line: an append the sampler could not make
|
|
62
|
-
* not read. Mapped by the caller onto its own
|
|
116
|
+
* One FAILURE line: an append the sampler could not make for a reason retrying
|
|
117
|
+
* cannot fix, or a log it could not read. Mapped by the caller onto its own
|
|
118
|
+
* warning vocabulary.
|
|
63
119
|
*/
|
|
64
120
|
warn(message: string): void;
|
|
121
|
+
/**
|
|
122
|
+
* One TRANSIENT line: an append that did not happen because another writer held
|
|
123
|
+
* the lock or moved the head, and that the next sweep will make (APRV-381).
|
|
124
|
+
*
|
|
125
|
+
* Optional, and a caller that passes none gets the same text on {@link
|
|
126
|
+
* AuditSweepOptions.warn}: the one thing this module will not do is let a
|
|
127
|
+
* deferral go unsaid. Callers that have a quieter channel for "later" should
|
|
128
|
+
* pass one; the daemon maps it onto its own `sample-deferred` warning code.
|
|
129
|
+
*/
|
|
130
|
+
defer?(message: string): void;
|
|
65
131
|
/**
|
|
66
132
|
* One CONFIGURATION line: sampling is switched off and here is why. Optional,
|
|
67
133
|
* and the daemon does not pass it — see the module header. `approval status`
|
|
@@ -72,8 +138,13 @@ export interface AuditSweepOptions {
|
|
|
72
138
|
* One SUCCESS line per `audit.sampled` appended (APRV-57). Optional, and
|
|
73
139
|
* injected exactly as {@link AuditSweepOptions.warn} is, so the sweep still
|
|
74
140
|
* reports in the caller's vocabulary and owns no output of its own.
|
|
141
|
+
*
|
|
142
|
+
* `retry` is true when THIS process deferred this same sample earlier and is
|
|
143
|
+
* now making the append it promised (APRV-381), so the caller can say so. It is
|
|
144
|
+
* a statement about output, never about the record: the appended event is
|
|
145
|
+
* byte-identical either way.
|
|
75
146
|
*/
|
|
76
|
-
sampled?(sample: SampleAppended): void;
|
|
147
|
+
sampled?(sample: SampleAppended, retry: boolean): void;
|
|
77
148
|
}
|
|
78
149
|
export interface AuditSweepSummary {
|
|
79
150
|
/** How many `audit.sampled` events this sweep appended. */
|
|
@@ -81,7 +152,11 @@ export interface AuditSweepSummary {
|
|
|
81
152
|
/** `null` when sampling ran; the reason when it did not. */
|
|
82
153
|
disabled: SamplerDisabledReason | null;
|
|
83
154
|
}
|
|
84
|
-
/**
|
|
155
|
+
/**
|
|
156
|
+
* Reset the once-per-process notice and the deferral memory. Exported for tests,
|
|
157
|
+
* used nowhere else: both are output bookkeeping, so a suite that shares a
|
|
158
|
+
* process needs to be able to start from nothing.
|
|
159
|
+
*/
|
|
85
160
|
export declare function resetAuditSweepNotices(): void;
|
|
86
161
|
/** One sampling sweep. Appends through `core/audit.ts` and decides nothing. */
|
|
87
162
|
export declare function sweepAuditSampling(options: AuditSweepOptions): AuditSweepSummary;
|