@wenathlan/extension 1.1.60 → 1.1.61
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 +4 -3
- package/dist/immutablelog.d.ts +73 -0
- package/dist/immutablelog.d.ts.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +534 -1
- package/dist/index.js.map +4 -4
- package/dist/maskinputs.d.ts +52 -0
- package/dist/maskinputs.d.ts.map +1 -0
- package/dist/memory.d.ts +65 -1
- package/dist/memory.d.ts.map +1 -1
- package/dist/originpolicy.d.ts +150 -0
- package/dist/originpolicy.d.ts.map +1 -0
- package/dist/policy.d.ts +56 -1
- package/dist/policy.d.ts.map +1 -1
- package/dist/protocol.d.ts +76 -1
- package/dist/protocol.d.ts.map +1 -1
- package/dist/types.d.ts +146 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/extension/dist/background.js +715 -51
- package/extension/dist/background.js.map +4 -4
- package/extension/dist/manifest.json +1 -1
- package/extension/dist/pagebridge.js +91 -28
- package/extension/dist/pagebridge.js.map +3 -3
- package/extension/dist/popup.html +1 -1
- package/extension/dist/popup.js +39 -0
- package/extension/dist/popup.js.map +2 -2
- package/extension/dist/sidepanel.html +1 -1
- package/extension/dist/sidepanel.js +279 -0
- package/extension/dist/sidepanel.js.map +4 -4
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2178,6 +2178,73 @@ function exportrunstate(states, now) {
|
|
|
2178
2178
|
};
|
|
2179
2179
|
}
|
|
2180
2180
|
|
|
2181
|
+
// immutablelog.ts
|
|
2182
|
+
async function sha2562(payload) {
|
|
2183
|
+
const bytes = new TextEncoder().encode(payload);
|
|
2184
|
+
const digest = await crypto.subtle.digest("SHA-256", bytes);
|
|
2185
|
+
return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
2186
|
+
}
|
|
2187
|
+
function entrybody(entry) {
|
|
2188
|
+
return JSON.stringify({ id: entry.id, runid: entry.runid, kind: entry.kind, summary: entry.summary, origin: entry.origin, ...entry.stepid !== void 0 ? { stepid: entry.stepid } : {}, at: entry.at });
|
|
2189
|
+
}
|
|
2190
|
+
async function entryhashof(input) {
|
|
2191
|
+
return { previous: input.previous, current: await sha2562(`${input.previous}
|
|
2192
|
+
${entrybody(input.entry)}`), algorithm: "sha-256" };
|
|
2193
|
+
}
|
|
2194
|
+
async function logentryof(input) {
|
|
2195
|
+
if (input.summary.trim() === "") throw new Error("The log entry needs its summary in plain language.");
|
|
2196
|
+
if (input.origin.trim() === "") throw new Error("The log entry needs its origin provenance.");
|
|
2197
|
+
const entry = { id: input.id ?? randomid(), runid: input.runid, kind: input.kind, summary: input.summary, origin: input.origin, ...input.stepid !== void 0 ? { stepid: input.stepid } : {}, at: input.at };
|
|
2198
|
+
return { ...entry, hash: await entryhashof({ previous: input.previous, entry }) };
|
|
2199
|
+
}
|
|
2200
|
+
function openrunlog(input) {
|
|
2201
|
+
if (input.runid.trim() === "" || input.sessionid.trim() === "") throw new Error("The run log needs its run and session ids.");
|
|
2202
|
+
return { runid: input.runid, sessionid: input.sessionid, entries: [], updatedat: input.now };
|
|
2203
|
+
}
|
|
2204
|
+
function lasthashof(log) {
|
|
2205
|
+
const entry = log.entries[log.entries.length - 1];
|
|
2206
|
+
return entry === void 0 ? "0".repeat(64) : entry.hash.current;
|
|
2207
|
+
}
|
|
2208
|
+
async function appendlogentry(input) {
|
|
2209
|
+
if (input.log.seal !== void 0) throw new Error(`The run log of ${input.log.runid} sealed at ${input.log.seal.sealedat} and accepts no append; the seal is terminal.`);
|
|
2210
|
+
const entry = await logentryof({ ...input.id !== void 0 ? { id: input.id } : {}, runid: input.log.runid, kind: input.kind, summary: input.summary, origin: input.origin, ...input.stepid !== void 0 ? { stepid: input.stepid } : {}, at: input.at, previous: lasthashof(input.log) });
|
|
2211
|
+
return { ...input.log, entries: [...input.log.entries, entry], updatedat: input.at };
|
|
2212
|
+
}
|
|
2213
|
+
async function sealrunlog(log, now) {
|
|
2214
|
+
if (log.seal !== void 0) throw new Error(`The run log of ${log.runid} already sealed at ${log.seal.sealedat}; the seal is terminal.`);
|
|
2215
|
+
if (log.entries.length === 0) throw new Error("The run log seals at completion with at least one entry.");
|
|
2216
|
+
const sealhash = await entryhashof({ previous: lasthashof(log), entry: { id: `seal:${log.runid}`, runid: log.runid, kind: "seal", summary: `The run ${log.runid} completed and the log sealed with ${log.entries.length} entries.`, origin: log.entries[log.entries.length - 1]?.origin ?? log.runid, at: now } });
|
|
2217
|
+
const seal = { runid: log.runid, entries: log.entries.length, sealhash, sealedat: now };
|
|
2218
|
+
return { log: { ...log, seal, updatedat: now }, seal };
|
|
2219
|
+
}
|
|
2220
|
+
async function verifylogchain(entries) {
|
|
2221
|
+
let previous = "0".repeat(64);
|
|
2222
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
2223
|
+
const entry = entries[index];
|
|
2224
|
+
if (entry === void 0) continue;
|
|
2225
|
+
if (entry.hash.previous !== previous) return { valid: false, brokenat: index, reason: `The chain link of entry ${index} carries the previous hash ${entry.hash.previous} while its predecessor hashes to ${previous}; the chain reports tamper evidence.` };
|
|
2226
|
+
const expected = await entryhashof({ previous, entry: { id: entry.id, runid: entry.runid, kind: entry.kind, summary: entry.summary, origin: entry.origin, ...entry.stepid !== void 0 ? { stepid: entry.stepid } : {}, at: entry.at } });
|
|
2227
|
+
if (entry.hash.current !== expected.current) return { valid: false, brokenat: index, reason: `The entry hash of entry ${index} matches neither its body nor its predecessor hash; the chain reports tamper evidence.` };
|
|
2228
|
+
previous = entry.hash.current;
|
|
2229
|
+
}
|
|
2230
|
+
return { valid: true, reason: `The hash chain of ${entries.length} entr${entries.length === 1 ? "y" : "ies"} verifies from the genesis hash to the last entry.` };
|
|
2231
|
+
}
|
|
2232
|
+
async function readverifiedlog(log) {
|
|
2233
|
+
const verification = await verifylogchain(log.entries);
|
|
2234
|
+
if (!verification.valid) return { ok: false, entries: [], reason: verification.reason };
|
|
2235
|
+
return { ok: true, entries: [...log.entries], reason: verification.reason };
|
|
2236
|
+
}
|
|
2237
|
+
async function chainreportof(log) {
|
|
2238
|
+
const verification = await verifylogchain(log.entries);
|
|
2239
|
+
if (!verification.valid) return { runid: log.runid, valid: false, entries: log.entries.length, ...verification.brokenat !== void 0 ? { brokenat: verification.brokenat } : {}, reason: verification.reason };
|
|
2240
|
+
return { runid: log.runid, valid: true, entries: log.entries.length, reason: verification.reason, ...log.seal !== void 0 ? { sealhash: log.seal.sealhash.current, sealedat: log.seal.sealedat } : {} };
|
|
2241
|
+
}
|
|
2242
|
+
async function exportlogchain(log) {
|
|
2243
|
+
const read = await readverifiedlog(log);
|
|
2244
|
+
if (!read.ok) return { runid: log.runid, entries: 0, chainvalid: false, reason: read.reason, log: [] };
|
|
2245
|
+
return { runid: log.runid, entries: read.entries.length, chainvalid: true, reason: read.reason, ...log.seal !== void 0 ? { sealhash: log.seal.sealhash.current, sealedat: log.seal.sealedat } : {}, log: read.entries };
|
|
2246
|
+
}
|
|
2247
|
+
|
|
2181
2248
|
// memory.ts
|
|
2182
2249
|
var sessionmemory = class {
|
|
2183
2250
|
constructor(adapter) {
|
|
@@ -4637,6 +4704,139 @@ var sessionmemory = class {
|
|
|
4637
4704
|
async exportrunstates() {
|
|
4638
4705
|
return exportrunstate(await this.listrunstates(), Date.now());
|
|
4639
4706
|
}
|
|
4707
|
+
/**
|
|
4708
|
+
* Security part one persistence of the 1.1.61 family.
|
|
4709
|
+
* The trust boundary records live here: the per origin automation allowlist scoped per profile workspace with one exact origin per entry, the per site originprofiles with their kind grants and denials, the active consentwindows with their expiry timestamps that expire closed past their boundary, the mid run revokerun events with the halted step ids that stay visible for later consent prompts, the fresh class consents per origin, the mask rules for field shapes per origin, and the sealed immutable run logs with their final hash.
|
|
4710
|
+
* The run log store exposes no update or delete path: appends land whole, the seal closes a log with its final hash and the read path verifies the chain before returning a single entry so a broken link refuses the read.
|
|
4711
|
+
* The adapter seam keeps every accessor a one line storage delegation so a future append only backend replaces the adapter only; the current storage areas offer no append only hardware, so the honest derivation is the hash chain that makes any rewrite detectable at read time.
|
|
4712
|
+
*/
|
|
4713
|
+
/** Replaces the per origin automation allowlist of the profile workspaces; every entry carries one exact origin with no wildcard expansion. */
|
|
4714
|
+
async setautomationallowlist(entries) {
|
|
4715
|
+
return this.adapter.set("automationallowlist", entries);
|
|
4716
|
+
}
|
|
4717
|
+
/** Returns the per origin automation allowlist entries, oldest grant first. */
|
|
4718
|
+
async getautomationallowlist() {
|
|
4719
|
+
return await this.adapter.get("automationallowlist") ?? [];
|
|
4720
|
+
}
|
|
4721
|
+
/** Adds one exact origin to the automation allowlist of a profile workspace; a duplicate origin keeps its first grant. */
|
|
4722
|
+
async addallowlistorigin(entry) {
|
|
4723
|
+
const entries = await this.getautomationallowlist();
|
|
4724
|
+
if (entries.some((candidate) => candidate.origin === entry.origin && candidate.profileid === entry.profileid)) return;
|
|
4725
|
+
await this.setautomationallowlist([...entries, entry]);
|
|
4726
|
+
}
|
|
4727
|
+
/** Removes one origin from the automation allowlist; the denydefault posture refuses the origin again after the removal. */
|
|
4728
|
+
async removeallowlistorigin(origin, profileid) {
|
|
4729
|
+
await this.setautomationallowlist((await this.getautomationallowlist()).filter((entry) => !(entry.origin === origin && entry.profileid === profileid)));
|
|
4730
|
+
}
|
|
4731
|
+
/** Replaces the per site origin profiles with their kind grants and denials; one profile per origin. */
|
|
4732
|
+
async setoriginprofiles(profiles) {
|
|
4733
|
+
return this.adapter.set("originprofiles", profiles);
|
|
4734
|
+
}
|
|
4735
|
+
/** Returns the stored per site origin profiles, oldest update first. */
|
|
4736
|
+
async getoriginprofiles() {
|
|
4737
|
+
return await this.adapter.get("originprofiles") ?? [];
|
|
4738
|
+
}
|
|
4739
|
+
/** Upserts one origin profile: a profile of the same origin replaces its grants and denials while a new origin joins the list. */
|
|
4740
|
+
async saveoriginprofile(profile) {
|
|
4741
|
+
const profiles = await this.getoriginprofiles();
|
|
4742
|
+
await this.setoriginprofiles(profiles.some((candidate) => candidate.origin === profile.origin) ? profiles.map((candidate) => candidate.origin === profile.origin ? profile : candidate) : [...profiles, profile]);
|
|
4743
|
+
}
|
|
4744
|
+
/** Replaces the consent windows; active windows keep their expiry timestamps and closed windows stay for the audit trail. */
|
|
4745
|
+
async setconsentwindows(windows) {
|
|
4746
|
+
return this.adapter.set("consentwindows", windows);
|
|
4747
|
+
}
|
|
4748
|
+
/** Returns the stored consent windows, newest start first. */
|
|
4749
|
+
async getconsentwindows() {
|
|
4750
|
+
return await this.adapter.get("consentwindows") ?? [];
|
|
4751
|
+
}
|
|
4752
|
+
/** Expires every consent window past its duration boundary: the closed windows keep their records while their grants bind no step anymore. */
|
|
4753
|
+
async expireconsentwindows(now) {
|
|
4754
|
+
const windows = await this.getconsentwindows();
|
|
4755
|
+
const expired = windows.map((window) => window.state === "active" && now >= window.expiresat ? { ...window, state: "closed", closedat: now } : window);
|
|
4756
|
+
await this.setconsentwindows(expired);
|
|
4757
|
+
return expired;
|
|
4758
|
+
}
|
|
4759
|
+
/** Records one mid run revocation with its halted step ids; the history stays visible for later consent prompts. */
|
|
4760
|
+
async addrevocation(event) {
|
|
4761
|
+
await this.adapter.set("revocations", [event, ...await this.adapter.get("revocations") ?? []].slice(0, 500));
|
|
4762
|
+
}
|
|
4763
|
+
/** Returns the recorded mid run revocations with their halted step ids, newest first. */
|
|
4764
|
+
async getrevocations() {
|
|
4765
|
+
return await this.adapter.get("revocations") ?? [];
|
|
4766
|
+
}
|
|
4767
|
+
/** Replaces the fresh class consents per origin. */
|
|
4768
|
+
async setclassconsents(consents) {
|
|
4769
|
+
return this.adapter.set("classconsents", consents);
|
|
4770
|
+
}
|
|
4771
|
+
/** Returns the fresh class consents per origin, newest grant first. */
|
|
4772
|
+
async getclassconsents() {
|
|
4773
|
+
return await this.adapter.get("classconsents") ?? [];
|
|
4774
|
+
}
|
|
4775
|
+
/** Records one fresh class consent per origin; the prompt of one class never widens another class. */
|
|
4776
|
+
async addclassconsent(consent) {
|
|
4777
|
+
const consents = (await this.getclassconsents()).filter((candidate) => !(candidate.origin === consent.origin && candidate.sensitiveclass === consent.sensitiveclass));
|
|
4778
|
+
await this.setclassconsents([consent, ...consents]);
|
|
4779
|
+
}
|
|
4780
|
+
/** Replaces the mask rules for sensitive field shapes per origin. */
|
|
4781
|
+
async setmaskrules(rules) {
|
|
4782
|
+
return this.adapter.set("maskrules", rules);
|
|
4783
|
+
}
|
|
4784
|
+
/** Returns the stored mask rules for sensitive field shapes per origin, oldest rule first. */
|
|
4785
|
+
async getmaskrules() {
|
|
4786
|
+
return await this.adapter.get("maskrules") ?? [];
|
|
4787
|
+
}
|
|
4788
|
+
/** Adds one mask rule for field shapes, optionally scoped to one origin. */
|
|
4789
|
+
async addmaskrule(rule) {
|
|
4790
|
+
await this.setmaskrules([...await this.getmaskrules(), rule]);
|
|
4791
|
+
}
|
|
4792
|
+
/** Removes one mask rule by its id. */
|
|
4793
|
+
async removemaskrule(id) {
|
|
4794
|
+
await this.setmaskrules((await this.getmaskrules()).filter((rule) => rule.id !== id));
|
|
4795
|
+
}
|
|
4796
|
+
/** Stores the whole run log of one run: the append lands in one storage transaction so the entries and their chain links persist together. */
|
|
4797
|
+
async setimmutablelog(log) {
|
|
4798
|
+
return this.adapter.set(`immutablelog:${log.runid}`, log);
|
|
4799
|
+
}
|
|
4800
|
+
/** Returns the stored run log of one run; an absent log returns undefined. */
|
|
4801
|
+
async getimmutablelog(runid) {
|
|
4802
|
+
return this.adapter.get(`immutablelog:${runid}`);
|
|
4803
|
+
}
|
|
4804
|
+
/** Lists the stored run logs, oldest update first, with the sealed logs carrying their final hash. */
|
|
4805
|
+
async listimmutablelogs() {
|
|
4806
|
+
const index = await this.adapter.get("immutablelogindex") ?? [];
|
|
4807
|
+
const logs = [];
|
|
4808
|
+
for (const runid of index) {
|
|
4809
|
+
const log = await this.getimmutablelog(runid);
|
|
4810
|
+
if (log) logs.push(log);
|
|
4811
|
+
}
|
|
4812
|
+
return logs.sort((one, two) => one.updatedat - two.updatedat);
|
|
4813
|
+
}
|
|
4814
|
+
/** Stores the run log index entry of one run so the log listing reads every stored log. */
|
|
4815
|
+
async trackimmutablelog(runid) {
|
|
4816
|
+
const index = await this.adapter.get("immutablelogindex") ?? [];
|
|
4817
|
+
if (!index.includes(runid)) await this.adapter.set("immutablelogindex", [...index, runid]);
|
|
4818
|
+
}
|
|
4819
|
+
/** Exports the verified log chain of one run for the audit file: the read path verifies the whole hash chain first and a broken link refuses the export with no entries served. */
|
|
4820
|
+
async exportverifiedrunlog(runid) {
|
|
4821
|
+
const log = await this.getimmutablelog(runid);
|
|
4822
|
+
if (!log) throw new Error(`No run log exists for the run ${runid}.`);
|
|
4823
|
+
return exportlogchain(log);
|
|
4824
|
+
}
|
|
4825
|
+
/** Expires the sealed run logs past the user configured retention: the entries reduce to their chain summaries while the seal hash always survives. */
|
|
4826
|
+
async expireimmutablelogs(retention, now) {
|
|
4827
|
+
const logs = await this.listimmutablelogs();
|
|
4828
|
+
if (retention === void 0) return logs;
|
|
4829
|
+
const kept = [];
|
|
4830
|
+
for (const log of logs) {
|
|
4831
|
+
if (log.seal !== void 0 && now - log.seal.sealedat > retention) {
|
|
4832
|
+
const summary = { runid: log.runid, sessionid: log.sessionid, entries: [], seal: { ...log.seal, entries: log.seal.entries }, updatedat: now };
|
|
4833
|
+
await this.setimmutablelog(summary);
|
|
4834
|
+
} else {
|
|
4835
|
+
kept.push(log);
|
|
4836
|
+
}
|
|
4837
|
+
}
|
|
4838
|
+
return kept;
|
|
4839
|
+
}
|
|
4640
4840
|
};
|
|
4641
4841
|
function mediakindof(record2) {
|
|
4642
4842
|
if ("pages" in record2) return "pdf";
|
|
@@ -5839,6 +6039,144 @@ async function callgraphql(input) {
|
|
|
5839
6039
|
}
|
|
5840
6040
|
}
|
|
5841
6041
|
|
|
6042
|
+
// originpolicy.ts
|
|
6043
|
+
var denydefaultposture = "denydefault";
|
|
6044
|
+
function exactorigin(origin, entry) {
|
|
6045
|
+
return origin.trim() !== "" && origin === entry;
|
|
6046
|
+
}
|
|
6047
|
+
function wildcardentry(entry) {
|
|
6048
|
+
return entry.includes("*") || entry.includes("://*.") || entry.trim() === "" || entry.trim() === "https://" || entry.trim() === "http://";
|
|
6049
|
+
}
|
|
6050
|
+
function allowlistcheck(input) {
|
|
6051
|
+
if (input.origin.trim() === "") return { allowed: false, reason: "The step needs the exact origin it targets." };
|
|
6052
|
+
for (const entry of input.allowlist) {
|
|
6053
|
+
if (wildcardentry(entry.origin)) return { allowed: false, reason: `The allowlist entry ${entry.origin} carries a wildcard; every grant binds to one exact origin with no wildcard expansion.` };
|
|
6054
|
+
}
|
|
6055
|
+
const scoped = input.profileid === void 0 ? input.allowlist : input.allowlist.filter((entry) => entry.profileid === input.profileid);
|
|
6056
|
+
const granted = scoped.some((entry) => exactorigin(input.origin, entry.origin));
|
|
6057
|
+
if (granted) return { allowed: true, reason: `The origin ${input.origin} sits inside the automation allowlist the user granted.` };
|
|
6058
|
+
if (input.sessionorigin !== void 0 && exactorigin(input.origin, input.sessionorigin)) return { allowed: true, reason: `The active tab grant covers ${input.origin} as exactly one explicit single origin grant.` };
|
|
6059
|
+
return { allowed: false, reason: `The denydefault posture refuses ${input.origin} because the origin sits absent from the automation allowlist; grant the origin first.` };
|
|
6060
|
+
}
|
|
6061
|
+
function originprofileof(input) {
|
|
6062
|
+
if (input.origin.trim() === "") throw new Error("The origin profile needs its exact origin.");
|
|
6063
|
+
return { profileid: input.profileid ?? randomid(), origin: input.origin, grants: [...input.grants ?? []], denials: [...input.denials ?? []], createdat: input.now, updatedat: input.now };
|
|
6064
|
+
}
|
|
6065
|
+
function profilekind(input) {
|
|
6066
|
+
if (input.profile.grants.includes(input.kind) && input.decision === "grant") return input.profile;
|
|
6067
|
+
if (input.profile.denials.includes(input.kind) && input.decision === "deny") return input.profile;
|
|
6068
|
+
const grants = input.decision === "grant" ? [.../* @__PURE__ */ new Set([...input.profile.grants, input.kind])] : input.profile.grants.filter((kind) => kind !== input.kind);
|
|
6069
|
+
const denials = input.decision === "deny" ? [.../* @__PURE__ */ new Set([...input.profile.denials, input.kind])] : input.profile.denials.filter((kind) => kind !== input.kind);
|
|
6070
|
+
return { ...input.profile, grants, denials, updatedat: input.now };
|
|
6071
|
+
}
|
|
6072
|
+
function profilegrade(input) {
|
|
6073
|
+
if (!input.sensitive) return { allowed: true, consult: false, reason: `The ${input.kind} kind grades non-sensitive and the origin profile needs no consult.` };
|
|
6074
|
+
if (input.profile === void 0) return { allowed: true, consult: true, reason: `No origin profile exists for the ${input.kind} kind, so the fresh class consent gate alone routes the sensitive step.` };
|
|
6075
|
+
if (input.profile.denials.includes(input.kind)) return { allowed: false, consult: true, reason: `The origin profile of ${input.profile.origin} denies the ${input.kind} kind; a denied kind never runs on that origin.` };
|
|
6076
|
+
if (input.profile.grants.includes(input.kind)) return { allowed: true, consult: true, reason: `The origin profile of ${input.profile.origin} grants the ${input.kind} kind the user reviewed.` };
|
|
6077
|
+
return { allowed: true, consult: true, reason: `The origin profile of ${input.profile.origin} carries no ${input.kind} decision, so the fresh class consent gate alone routes the sensitive step.` };
|
|
6078
|
+
}
|
|
6079
|
+
function stepoptions(step) {
|
|
6080
|
+
if (!step.options) return {};
|
|
6081
|
+
try {
|
|
6082
|
+
const parsed = JSON.parse(step.options);
|
|
6083
|
+
return Boolean(parsed) && typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
|
|
6084
|
+
} catch {
|
|
6085
|
+
return {};
|
|
6086
|
+
}
|
|
6087
|
+
}
|
|
6088
|
+
var paymentkinds = /* @__PURE__ */ new Set(["fillcard", "fillcode"]);
|
|
6089
|
+
var credentialkinds = /* @__PURE__ */ new Set(["consentpassword", "saveapikey", "handleauth", "authflow"]);
|
|
6090
|
+
var deletekinds = /* @__PURE__ */ new Set(["discardtab", "closepattern", "clearcookies", "removeattribute", "cleanupartifacts"]);
|
|
6091
|
+
var publishkinds = /* @__PURE__ */ new Set(["postform", "postfiles", "sendmessage", "submitform", "submitsearch", "writeclipboard"]);
|
|
6092
|
+
var defaultsensitivekinds = /* @__PURE__ */ new Set(["attachfile", "uploadfile", "uploadfiles", "downloadfile", "downloadimages", "batchdownload", "pausedownload", "resumedownload", "quarantinedownload", "evaluate"]);
|
|
6093
|
+
function sensitiveclassesof(step) {
|
|
6094
|
+
const options = stepoptions(step);
|
|
6095
|
+
const fields = Array.isArray(options.fields) ? options.fields.filter((item) => Boolean(item) && typeof item === "object") : [];
|
|
6096
|
+
const names = [...fields.map((field) => typeof field.name === "string" ? field.name : ""), typeof options.field === "string" ? options.field : "", typeof options.target === "string" ? options.target : ""].map((name) => name.toLowerCase());
|
|
6097
|
+
const carries = (shape) => names.some((name) => name.includes(shape));
|
|
6098
|
+
const classes = /* @__PURE__ */ new Set();
|
|
6099
|
+
if (paymentkinds.has(step.kind) || carries("card") || carries("cvc") || carries("cvv")) classes.add("payment");
|
|
6100
|
+
const credentialshape = carries("password") || carries("token") || carries("secret") || carries("apikey") || carries("passphrase");
|
|
6101
|
+
const submits = step.kind === "submitform" || step.kind === "postform" || step.kind === "submitsearch" || step.kind === "fillform" || step.kind === "filllabel" || step.kind === "fillplaceholder";
|
|
6102
|
+
if (credentialkinds.has(step.kind) || submits && credentialshape) classes.add("credential");
|
|
6103
|
+
if (deletekinds.has(step.kind)) classes.add("delete");
|
|
6104
|
+
if (publishkinds.has(step.kind) || step.kind === "callrest" || step.kind === "callgraphql") {
|
|
6105
|
+
const verb = typeof options.method === "string" ? options.method.trim().toUpperCase() : typeof options.verb === "string" ? options.verb.trim().toUpperCase() : "";
|
|
6106
|
+
if (step.kind === "callrest" || step.kind === "callgraphql") {
|
|
6107
|
+
if (verb !== "" && !["GET", "HEAD", "OPTIONS"].includes(verb)) classes.add("publish");
|
|
6108
|
+
} else classes.add("publish");
|
|
6109
|
+
}
|
|
6110
|
+
const bydefault = defaultsensitivekinds.has(step.kind);
|
|
6111
|
+
const list = [...classes];
|
|
6112
|
+
if (list.length === 0 && !bydefault) return { classes: [], bydefault: false, sensitive: false, reason: `The ${step.kind} kind carries no sensitive class and no default sensitive grade.` };
|
|
6113
|
+
return { classes: list, bydefault, sensitive: true, reason: `The ${step.kind} kind grades sensitive${list.length > 0 ? ` through the ${list.join(", ")} class${list.length === 1 ? "" : "es"}` : ""}${bydefault ? " by default" : ""}.` };
|
|
6114
|
+
}
|
|
6115
|
+
function classconsentcovers(consents, origin, sensitiveclass, now) {
|
|
6116
|
+
return consents.some((consent) => consent.origin === origin && consent.sensitiveclass === sensitiveclass && consent.grantedat <= now && (consent.expiresat === void 0 || now < consent.expiresat));
|
|
6117
|
+
}
|
|
6118
|
+
function missingclassconsents(input) {
|
|
6119
|
+
const missing = input.classes.filter((kind) => !classconsentcovers(input.consents, input.origin, kind, input.now));
|
|
6120
|
+
if (missing.length > 0) return { needed: true, missing, reason: `The sensitive classes ${missing.join(", ")} need one fresh consent prompt each on ${input.origin}.` };
|
|
6121
|
+
if (input.bydefault && input.classes.length === 0) return { needed: true, missing: [], reason: `The ${input.origin} step grades sensitive by default and needs its fresh consent window prompt.` };
|
|
6122
|
+
return { needed: false, missing: [], reason: `The fresh class consents of ${input.origin} cover every class the step names.` };
|
|
6123
|
+
}
|
|
6124
|
+
function openconsentwindow(input) {
|
|
6125
|
+
if (input.sessionid.trim() === "" || input.origin.trim() === "") throw new Error("The consent window needs its session and its exact origin.");
|
|
6126
|
+
if (!Number.isFinite(input.duration) || input.duration <= 0) throw new Error("The consent window needs its duration as a positive user value; no window defaults to unlimited.");
|
|
6127
|
+
return { id: input.id ?? randomid(), sessionid: input.sessionid, origin: input.origin, startedat: input.now, duration: input.duration, expiresat: input.now + input.duration, boundary: input.boundary?.trim() !== "" && input.boundary !== void 0 ? input.boundary : `${input.duration} milliseconds the user chose`, kinds: [...new Set(input.kinds)], state: "active" };
|
|
6128
|
+
}
|
|
6129
|
+
function consentwindowstate(window, now) {
|
|
6130
|
+
if (window.state === "closed" || now >= window.expiresat) return { state: "expired", remaining: 0, reason: `The consent window of ${window.origin} closed at its ${window.boundary} boundary; the run suspends until a new explicit prompt renews it.` };
|
|
6131
|
+
return { state: "active", remaining: window.expiresat - now, reason: `The consent window of ${window.origin} stays active with ${window.expiresat - now} milliseconds left of its ${window.boundary} boundary.` };
|
|
6132
|
+
}
|
|
6133
|
+
function windowgatesstep(input) {
|
|
6134
|
+
if (input.window === void 0) return { allowed: false, suspended: false, reason: `No active consent window covers ${input.origin}; the consent prompt opens one before any step dispatches.` };
|
|
6135
|
+
if (input.window.sessionid !== input.sessionid) return { allowed: false, suspended: false, reason: `The consent window scopes to the session ${input.window.sessionid} only and never widens to another session.` };
|
|
6136
|
+
if (input.window.origin !== input.origin) return { allowed: false, suspended: false, reason: `The consent window scopes to the origin ${input.window.origin} only and never widens to another origin.` };
|
|
6137
|
+
const state = consentwindowstate(input.window, input.now);
|
|
6138
|
+
if (state.state === "expired") return { allowed: false, suspended: true, reason: state.reason };
|
|
6139
|
+
return { allowed: true, suspended: false, reason: state.reason };
|
|
6140
|
+
}
|
|
6141
|
+
function expireconsentwindows(windows, now) {
|
|
6142
|
+
return windows.map((window) => window.state === "active" && now >= window.expiresat ? { ...window, state: "closed", closedat: now } : window);
|
|
6143
|
+
}
|
|
6144
|
+
function renewconsentwindow(input) {
|
|
6145
|
+
const closed = input.window.state === "active" ? { ...input.window, state: "closed", closedat: input.now } : input.window;
|
|
6146
|
+
const renewed = openconsentwindow({ sessionid: input.window.sessionid, origin: input.window.origin, duration: input.duration, kinds: input.kinds.length > 0 ? input.kinds : input.window.kinds, now: input.now });
|
|
6147
|
+
return { renewed, closed };
|
|
6148
|
+
}
|
|
6149
|
+
function revokerun(input) {
|
|
6150
|
+
if (input.sessionid.trim() === "" || input.runid.trim() === "") throw new Error("The revocation needs its session and run ids.");
|
|
6151
|
+
if (input.actor.trim() === "") throw new Error("The revocation names the acting user.");
|
|
6152
|
+
const halted = [...input.pendingstepid !== void 0 ? [input.pendingstepid] : [], ...input.queuedstepids ?? []];
|
|
6153
|
+
if (halted.length === 0) throw new Error("The revocation halts at least the pending step of the run.");
|
|
6154
|
+
return { id: input.id ?? randomid(), sessionid: input.sessionid, runid: input.runid, haltedstepids: halted, actor: input.actor, reason: input.reason?.trim() !== "" && input.reason !== void 0 ? input.reason : "The user revoked the consent mid run.", at: input.now };
|
|
6155
|
+
}
|
|
6156
|
+
function haltedstepsof(revocation) {
|
|
6157
|
+
return { ...revocation.haltedstepids.length > 0 ? { pending: revocation.haltedstepids[0] } : {}, queued: revocation.haltedstepids.slice(1) };
|
|
6158
|
+
}
|
|
6159
|
+
function scopegrantof(input) {
|
|
6160
|
+
if (input.origin.trim() === "") throw new Error("The consent scope needs its exact origin.");
|
|
6161
|
+
if (input.kinds.length === 0) throw new Error("The consent scope names the kinds it covers.");
|
|
6162
|
+
if (input.boundary.trim() === "") throw new Error("The consent scope names its boundary; no grant defaults to unlimited.");
|
|
6163
|
+
return { origin: input.origin, kinds: [...new Set(input.kinds)], boundary: input.boundary, grantedat: input.now };
|
|
6164
|
+
}
|
|
6165
|
+
function deniedevidenceof(input) {
|
|
6166
|
+
return { origin: input.origin, kind: input.kind, reason: input.reason, at: input.now };
|
|
6167
|
+
}
|
|
6168
|
+
function consentprompttext(input) {
|
|
6169
|
+
const label = input.classes.length > 0 ? `the ${input.classes.join(" and ")} class${input.classes.length === 1 ? "" : "es"}` : "a sensitive by default grade";
|
|
6170
|
+
return `Allow the ${input.kind} step on ${input.origin} graded as ${label} for ${input.duration} milliseconds? The consent window closes at that boundary; no grant ever defaults to unlimited.`;
|
|
6171
|
+
}
|
|
6172
|
+
function denydefaultnotice(origin) {
|
|
6173
|
+
return `The denydefault posture refuses ${origin} until the user adds the origin to the automation allowlist; no step dispatches without the grant.`;
|
|
6174
|
+
}
|
|
6175
|
+
function profilesummary(profile) {
|
|
6176
|
+
if (profile === void 0) return "No origin profile exists for this origin yet; sensitive steps route through their fresh consent prompts.";
|
|
6177
|
+
return `The origin profile of ${profile.origin} grants ${profile.grants.length} kind${profile.grants.length === 1 ? "" : "s"} and denies ${profile.denials.length} kind${profile.denials.length === 1 ? "" : "s"} the user reviewed.`;
|
|
6178
|
+
}
|
|
6179
|
+
|
|
5842
6180
|
// socketbus.ts
|
|
5843
6181
|
var socketkinds = ["opensocket", "sendmessage", "waitmessage", "subscribesse", "longpoll"];
|
|
5844
6182
|
function channelorigin(url) {
|
|
@@ -10217,6 +10555,50 @@ function sandboxorigingate(input) {
|
|
|
10217
10555
|
function environmentrequirements() {
|
|
10218
10556
|
return environmentrequirementsof([...allowedactions]);
|
|
10219
10557
|
}
|
|
10558
|
+
function automationallowlistgate(input) {
|
|
10559
|
+
const verdict = allowlistcheck({ origin: input.origin, allowlist: input.allowlist, ...input.session !== void 0 ? { sessionorigin: input.session.origin } : {} });
|
|
10560
|
+
if (!verdict.allowed) return { allowed: false, reason: verdict.reason };
|
|
10561
|
+
return { allowed: true, reason: verdict.reason };
|
|
10562
|
+
}
|
|
10563
|
+
function originprofilegate(input) {
|
|
10564
|
+
const verdict = profilegrade(input);
|
|
10565
|
+
if (!verdict.allowed) return { allowed: false, reason: verdict.reason };
|
|
10566
|
+
return { allowed: true, reason: verdict.reason };
|
|
10567
|
+
}
|
|
10568
|
+
function consentwindowgate(input) {
|
|
10569
|
+
if (!input.sensitive) return { allowed: true, reason: "The non-sensitive step rides the session origin grants and needs no consent window of its own." };
|
|
10570
|
+
const verdict = windowgatesstep({ window: input.window, sessionid: input.sessionid, origin: input.origin, now: input.now });
|
|
10571
|
+
if (!verdict.allowed) return { allowed: false, reason: verdict.reason };
|
|
10572
|
+
return { allowed: true, reason: verdict.reason };
|
|
10573
|
+
}
|
|
10574
|
+
function revokerungate(input) {
|
|
10575
|
+
if (input.revocation === void 0) return { allowed: true, reason: "No revocation halted the run; the steps keep their reviewed order." };
|
|
10576
|
+
if (input.revocation.sessionid !== input.sessionid) return { allowed: true, reason: "The revocation belongs to another session and halts nothing here." };
|
|
10577
|
+
if (input.revocation.runid !== input.runid) return { allowed: true, reason: "The revocation belongs to another run and halts nothing here." };
|
|
10578
|
+
return { allowed: false, reason: `The revocation of ${input.revocation.actor} halted the pending step and ${Math.max(0, input.revocation.haltedstepids.length - 1)} queued step${Math.max(0, input.revocation.haltedstepids.length - 1) === 1 ? "" : "s"} without executing them: ${input.revocation.haltedstepids.join(", ")}.` };
|
|
10579
|
+
}
|
|
10580
|
+
function sensitiveclassgate(input) {
|
|
10581
|
+
if (!input.sensitive) return { allowed: true, reason: "The step carries no sensitive class and needs no fresh consent prompt." };
|
|
10582
|
+
const verdict = missingclassconsents({ origin: input.origin, classes: input.classes, bydefault: input.bydefault, consents: input.consents, now: input.now });
|
|
10583
|
+
if (verdict.needed) return { allowed: false, reason: verdict.reason };
|
|
10584
|
+
return { allowed: true, reason: verdict.reason };
|
|
10585
|
+
}
|
|
10586
|
+
function consentdurationvalid(duration) {
|
|
10587
|
+
if (!Number.isFinite(duration) || duration <= 0) return { allowed: false, reason: "The consent window duration stays a positive user value in milliseconds; no grant ever defaults to unlimited." };
|
|
10588
|
+
return { allowed: true, reason: `The consent window duration ${duration} milliseconds stays the user configured boundary the prompt names.` };
|
|
10589
|
+
}
|
|
10590
|
+
function logreadgate(input) {
|
|
10591
|
+
if (!input.valid) return { allowed: false, reason: input.brokenat !== void 0 ? `The log chain breaks at entry ${input.brokenat}; the audit accessor refuses the read of a forged record.` : "The log chain fails its verification; the audit accessor refuses the read of a forged record." };
|
|
10592
|
+
return { allowed: true, reason: "The log chain verifies from the genesis hash to the last entry; the audit accessor serves the entries." };
|
|
10593
|
+
}
|
|
10594
|
+
function sensitivepipelingate(input) {
|
|
10595
|
+
const classification = sensitiveclassesof(input.step);
|
|
10596
|
+
const profileverdict = originprofilegate({ profile: input.profile, kind: input.step.kind, sensitive: classification.sensitive });
|
|
10597
|
+
if (!profileverdict.allowed) return { allowed: false, reason: profileverdict.reason ?? "" };
|
|
10598
|
+
const consentverdict = sensitiveclassgate({ origin: input.origin, classes: classification.classes, bydefault: classification.bydefault, sensitive: classification.sensitive, consents: input.consents, now: input.now });
|
|
10599
|
+
if (!consentverdict.allowed) return { allowed: false, reason: `${classification.reason} ${consentverdict.reason}` };
|
|
10600
|
+
return { allowed: true, reason: `${classification.reason} ${consentverdict.reason}` };
|
|
10601
|
+
}
|
|
10220
10602
|
|
|
10221
10603
|
// llm.ts
|
|
10222
10604
|
var defaultrefusalmarkers = ["i cannot", "i can't", "i'm unable", "refusal:", "cannot comply"];
|
|
@@ -10577,7 +10959,7 @@ function budgetcheck(input) {
|
|
|
10577
10959
|
}
|
|
10578
10960
|
|
|
10579
10961
|
// version.ts
|
|
10580
|
-
var packageversion = "1.1.
|
|
10962
|
+
var packageversion = "1.1.61";
|
|
10581
10963
|
|
|
10582
10964
|
// types.ts
|
|
10583
10965
|
var protocolversion = packageversion;
|
|
@@ -11173,6 +11555,79 @@ function streamsummaries(raw) {
|
|
|
11173
11555
|
});
|
|
11174
11556
|
}
|
|
11175
11557
|
|
|
11558
|
+
// maskinputs.ts
|
|
11559
|
+
var defaultmaskshapes = ["password", "token", "card", "secret"];
|
|
11560
|
+
var maskmarker = "[redacted]";
|
|
11561
|
+
function fieldshapekind(name) {
|
|
11562
|
+
const lowered = name.toLowerCase();
|
|
11563
|
+
if (lowered.includes("password") || lowered.includes("passwd") || lowered.includes("pwd") || lowered.includes("passphrase")) return "password";
|
|
11564
|
+
if (lowered.includes("token") || lowered.includes("apikey") || lowered.includes("api_key") || lowered.includes("auth") || lowered.includes("bearer")) return "token";
|
|
11565
|
+
if (lowered.includes("card") || lowered.includes("cvc") || lowered.includes("cvv") || lowered.includes("expiry") || lowered.includes("pan")) return "card";
|
|
11566
|
+
if (lowered.includes("secret")) return "secret";
|
|
11567
|
+
return void 0;
|
|
11568
|
+
}
|
|
11569
|
+
function shapesof(input) {
|
|
11570
|
+
const shapes = new Set(defaultmaskshapes);
|
|
11571
|
+
for (const shape of input.settings?.maskshapes ?? []) if (shape.trim() !== "") shapes.add(shape.trim().toLowerCase());
|
|
11572
|
+
for (const rule of input.rules) {
|
|
11573
|
+
const scoped = rule.origin === void 0 || rule.origin === "" || input.origin !== void 0 && rule.origin === input.origin;
|
|
11574
|
+
if (scoped) {
|
|
11575
|
+
for (const shape of rule.shapes) if (shape.trim() !== "") shapes.add(shape.trim().toLowerCase());
|
|
11576
|
+
}
|
|
11577
|
+
}
|
|
11578
|
+
return [...shapes];
|
|
11579
|
+
}
|
|
11580
|
+
function maskingfield(name, shapes) {
|
|
11581
|
+
if (fieldshapekind(name) !== void 0) return true;
|
|
11582
|
+
const lowered = name.toLowerCase();
|
|
11583
|
+
return shapes.some((shape) => shape !== "" && lowered.includes(shape));
|
|
11584
|
+
}
|
|
11585
|
+
function maskvalue(value) {
|
|
11586
|
+
return value === "" ? "" : maskmarker;
|
|
11587
|
+
}
|
|
11588
|
+
function maskfield(input) {
|
|
11589
|
+
return maskingfield(input.name, input.shapes) ? maskvalue(input.value) : input.value;
|
|
11590
|
+
}
|
|
11591
|
+
function maskrecord(record2, shapes) {
|
|
11592
|
+
const masked = {};
|
|
11593
|
+
for (const [key, value] of Object.entries(record2)) {
|
|
11594
|
+
if (typeof value === "string") {
|
|
11595
|
+
const sibling = record2.name;
|
|
11596
|
+
masked[key] = key === "value" && typeof sibling === "string" ? maskfield({ name: sibling, value, shapes }) : maskfield({ name: key, value, shapes });
|
|
11597
|
+
} else if (Array.isArray(value)) masked[key] = value.map((item) => Boolean(item) && typeof item === "object" && !Array.isArray(item) ? maskrecord(item, shapes) : item);
|
|
11598
|
+
else if (Boolean(value) && typeof value === "object") masked[key] = maskrecord(value, shapes);
|
|
11599
|
+
else masked[key] = value;
|
|
11600
|
+
}
|
|
11601
|
+
return masked;
|
|
11602
|
+
}
|
|
11603
|
+
function masktypedvalues(input) {
|
|
11604
|
+
const sensitive = maskingfield(input.step.target ?? "", input.shapes) || maskingfield(input.step.kind, input.shapes);
|
|
11605
|
+
const maskedvalue = input.step.value !== void 0 && sensitive ? maskvalue(input.step.value) : input.step.value;
|
|
11606
|
+
let maskedoptions = input.step.options;
|
|
11607
|
+
if (input.step.options !== void 0) {
|
|
11608
|
+
try {
|
|
11609
|
+
const parsed = JSON.parse(input.step.options);
|
|
11610
|
+
if (Boolean(parsed) && typeof parsed === "object" && !Array.isArray(parsed)) maskedoptions = JSON.stringify(maskrecord(parsed, input.shapes));
|
|
11611
|
+
} catch {
|
|
11612
|
+
}
|
|
11613
|
+
}
|
|
11614
|
+
return { ...maskedvalue !== void 0 ? { value: maskedvalue } : {}, ...maskedoptions !== void 0 ? { options: maskedoptions } : {} };
|
|
11615
|
+
}
|
|
11616
|
+
function maskformstate(fields, shapes) {
|
|
11617
|
+
return fields.map((field) => ({ ...field, value: maskfield({ name: field.name, value: field.value, shapes }) }));
|
|
11618
|
+
}
|
|
11619
|
+
function maskobservation(shot, shapes) {
|
|
11620
|
+
return { ...shot, forms: shot.forms.map((form) => maskingfield(form.name, shapes) ? { ...form, options: [maskmarker] } : form) };
|
|
11621
|
+
}
|
|
11622
|
+
function maskstoredvalues(record2, shapes) {
|
|
11623
|
+
const masked = {};
|
|
11624
|
+
for (const [key, value] of Object.entries(record2)) masked[key] = maskfield({ name: key, value, shapes });
|
|
11625
|
+
return masked;
|
|
11626
|
+
}
|
|
11627
|
+
function maskexport(record2, shapes) {
|
|
11628
|
+
return maskrecord(record2, shapes);
|
|
11629
|
+
}
|
|
11630
|
+
|
|
11176
11631
|
// modelroute.ts
|
|
11177
11632
|
function routevalid(route) {
|
|
11178
11633
|
if (route.kind.trim() === "") return { allowed: false, reason: "The model route needs its task kind." };
|
|
@@ -12360,6 +12815,28 @@ function environmentreport(input) {
|
|
|
12360
12815
|
...input.keepalive !== void 0 ? { keepalive: input.keepalive } : {}
|
|
12361
12816
|
};
|
|
12362
12817
|
}
|
|
12818
|
+
function consentmodel() {
|
|
12819
|
+
return {
|
|
12820
|
+
version: protocolversion,
|
|
12821
|
+
posture: "denydefault",
|
|
12822
|
+
sensitiveclasses: ["payment", "credential", "delete", "publish"],
|
|
12823
|
+
maskshapes: [...defaultmaskshapes],
|
|
12824
|
+
notes: [
|
|
12825
|
+
"The denydefault posture refuses every origin the user never granted; the per origin automation allowlist holds one exact origin per entry with no wildcard expansion and the active tab grant counts as exactly one explicit single origin grant.",
|
|
12826
|
+
"The per site originprofiles grant and deny single action kinds; a denied kind never runs on that origin and a granted kind still routes its sensitive classes through the fresh consent prompts.",
|
|
12827
|
+
"Every consent window scopes to one session and one origin, binds the duration the user chose and names its boundary; no grant ever defaults to unlimited, and a window past its boundary suspends the run mid step until a new explicit prompt renews it.",
|
|
12828
|
+
"The revokerun is a terminal session event: the pending step and every queued step halt without executing and the immutable log records the user action.",
|
|
12829
|
+
"The immutable run log appends only: every entry chains through its loghash to the hash of its predecessor, the completion seal writes the final hash, and the read path verifies the whole chain before serving a single entry.",
|
|
12830
|
+
"maskinputs keeps typed values, form values and stored values out of every record behind the documented password, token, card and secret shapes the user extends; the observation schema keeps its field shapes while the values carry the redaction marker."
|
|
12831
|
+
]
|
|
12832
|
+
};
|
|
12833
|
+
}
|
|
12834
|
+
function securityreport(input) {
|
|
12835
|
+
return { version: protocolversion, posture: "denydefault", allowlist: input.allowlist, profiles: input.profiles, windows: input.windows, consents: input.consents, revocations: input.revocations, maskrules: input.maskrules, chain: input.chain };
|
|
12836
|
+
}
|
|
12837
|
+
function logchainreport(input) {
|
|
12838
|
+
return { version: protocolversion, runid: input.runid, valid: input.valid, entries: input.entries, ...input.brokenat !== void 0 ? { brokenat: input.brokenat } : {}, reason: input.reason, ...input.sealhash !== void 0 ? { sealhash: input.sealhash } : {}, ...input.sealedat !== void 0 ? { sealedat: input.sealedat } : {} };
|
|
12839
|
+
}
|
|
12363
12840
|
|
|
12364
12841
|
// workfloweditor.ts
|
|
12365
12842
|
var palettecategories = ["actions", "controlflow", "waits", "variables", "triggers"];
|
|
@@ -13083,6 +13560,7 @@ export {
|
|
|
13083
13560
|
agentpresetof,
|
|
13084
13561
|
agentruncontext,
|
|
13085
13562
|
agentscopevalid,
|
|
13563
|
+
allowlistcheck,
|
|
13086
13564
|
allowlistcovers,
|
|
13087
13565
|
allowlistreport,
|
|
13088
13566
|
alltools,
|
|
@@ -13092,6 +13570,7 @@ export {
|
|
|
13092
13570
|
apientries,
|
|
13093
13571
|
apikeyconsentgranted,
|
|
13094
13572
|
apireplayspecof,
|
|
13573
|
+
appendlogentry,
|
|
13095
13574
|
applycooldown,
|
|
13096
13575
|
applyheaderules,
|
|
13097
13576
|
applylayer,
|
|
@@ -13116,6 +13595,7 @@ export {
|
|
|
13116
13595
|
authrefusedmessage,
|
|
13117
13596
|
authreport,
|
|
13118
13597
|
autointervalof,
|
|
13598
|
+
automationallowlistgate,
|
|
13119
13599
|
backoffdelay,
|
|
13120
13600
|
batchreport,
|
|
13121
13601
|
beatrun,
|
|
@@ -13184,6 +13664,7 @@ export {
|
|
|
13184
13664
|
cdpeventruleof,
|
|
13185
13665
|
cdpkinds,
|
|
13186
13666
|
cdpreport,
|
|
13667
|
+
chainreportof,
|
|
13187
13668
|
channellive,
|
|
13188
13669
|
channeloptionsof,
|
|
13189
13670
|
channelorigin,
|
|
@@ -13192,6 +13673,7 @@ export {
|
|
|
13192
13673
|
choosebranch,
|
|
13193
13674
|
claim,
|
|
13194
13675
|
claimheartbeat,
|
|
13676
|
+
classconsentcovers,
|
|
13195
13677
|
classifyintent,
|
|
13196
13678
|
closechannel,
|
|
13197
13679
|
closeidlechannels,
|
|
@@ -13207,6 +13689,11 @@ export {
|
|
|
13207
13689
|
confirmmanualrun,
|
|
13208
13690
|
connectclient,
|
|
13209
13691
|
consensusstate,
|
|
13692
|
+
consentdurationvalid,
|
|
13693
|
+
consentmodel,
|
|
13694
|
+
consentprompttext,
|
|
13695
|
+
consentwindowgate,
|
|
13696
|
+
consentwindowstate,
|
|
13210
13697
|
consolecapture,
|
|
13211
13698
|
consoleconsentcovers,
|
|
13212
13699
|
consolediff,
|
|
@@ -13243,6 +13730,7 @@ export {
|
|
|
13243
13730
|
defaulthttpstream,
|
|
13244
13731
|
defaultidlewindowms,
|
|
13245
13732
|
defaultloopbound,
|
|
13733
|
+
defaultmaskshapes,
|
|
13246
13734
|
defaultmcpconfig,
|
|
13247
13735
|
defaultmcpport,
|
|
13248
13736
|
defaultpairinglifetimems,
|
|
@@ -13250,6 +13738,9 @@ export {
|
|
|
13250
13738
|
defaulttokenlifetimems,
|
|
13251
13739
|
defaulttriggercooldown,
|
|
13252
13740
|
delayjitter,
|
|
13741
|
+
deniedevidenceof,
|
|
13742
|
+
denydefaultnotice,
|
|
13743
|
+
denydefaultposture,
|
|
13253
13744
|
actionrisk as deriveactionrisk,
|
|
13254
13745
|
detachcdpsession,
|
|
13255
13746
|
devicepresetof,
|
|
@@ -13284,6 +13775,7 @@ export {
|
|
|
13284
13775
|
enqueue,
|
|
13285
13776
|
enqueuerequest,
|
|
13286
13777
|
entryfresh,
|
|
13778
|
+
entryhashof,
|
|
13287
13779
|
environmentgrammar,
|
|
13288
13780
|
environmentgrantgate,
|
|
13289
13781
|
environmentreport,
|
|
@@ -13298,11 +13790,13 @@ export {
|
|
|
13298
13790
|
eventnotification,
|
|
13299
13791
|
eventresponse,
|
|
13300
13792
|
eventrulematches,
|
|
13793
|
+
exactorigin,
|
|
13301
13794
|
exchangesreport,
|
|
13302
13795
|
executorregistry,
|
|
13303
13796
|
expandblocks,
|
|
13304
13797
|
expandtemplate,
|
|
13305
13798
|
expireapprovals,
|
|
13799
|
+
expireconsentwindows,
|
|
13306
13800
|
expirelayers,
|
|
13307
13801
|
expirelocks,
|
|
13308
13802
|
expireprofilerecords,
|
|
@@ -13310,6 +13804,7 @@ export {
|
|
|
13310
13804
|
expiresessions,
|
|
13311
13805
|
expiretokens,
|
|
13312
13806
|
exportcontentreview,
|
|
13807
|
+
exportlogchain,
|
|
13313
13808
|
exportpresetlibrary,
|
|
13314
13809
|
exportrunstate,
|
|
13315
13810
|
exportsessionfile,
|
|
@@ -13324,6 +13819,7 @@ export {
|
|
|
13324
13819
|
familyofkind,
|
|
13325
13820
|
fetchoptionsof,
|
|
13326
13821
|
fetchrequestof,
|
|
13822
|
+
fieldshapekind,
|
|
13327
13823
|
filteredsessions,
|
|
13328
13824
|
filterentries,
|
|
13329
13825
|
filterexchanges,
|
|
@@ -13345,6 +13841,7 @@ export {
|
|
|
13345
13841
|
growthtrend,
|
|
13346
13842
|
guardoutput,
|
|
13347
13843
|
guardverdictgate,
|
|
13844
|
+
haltedstepsof,
|
|
13348
13845
|
handleframe,
|
|
13349
13846
|
handoffframe,
|
|
13350
13847
|
headerfilterof,
|
|
@@ -13400,6 +13897,7 @@ export {
|
|
|
13400
13897
|
lanereport,
|
|
13401
13898
|
lapseframes,
|
|
13402
13899
|
lapseplanof,
|
|
13900
|
+
lasthashof,
|
|
13403
13901
|
latesttemplate,
|
|
13404
13902
|
launchbridge,
|
|
13405
13903
|
layernames,
|
|
@@ -13417,7 +13915,10 @@ export {
|
|
|
13417
13915
|
locationpresetof,
|
|
13418
13916
|
locationrangevalid,
|
|
13419
13917
|
lockkey,
|
|
13918
|
+
logchainreport,
|
|
13919
|
+
logentryof,
|
|
13420
13920
|
loglevels,
|
|
13921
|
+
logreadgate,
|
|
13421
13922
|
longtaskcapture,
|
|
13422
13923
|
loopof,
|
|
13423
13924
|
mailboxof,
|
|
@@ -13429,6 +13930,16 @@ export {
|
|
|
13429
13930
|
markpending,
|
|
13430
13931
|
markprovider,
|
|
13431
13932
|
markuprenderstep,
|
|
13933
|
+
maskexport,
|
|
13934
|
+
maskfield,
|
|
13935
|
+
maskformstate,
|
|
13936
|
+
maskingfield,
|
|
13937
|
+
maskmarker,
|
|
13938
|
+
maskobservation,
|
|
13939
|
+
maskrecord,
|
|
13940
|
+
maskstoredvalues,
|
|
13941
|
+
masktypedvalues,
|
|
13942
|
+
maskvalue,
|
|
13432
13943
|
matchmessage,
|
|
13433
13944
|
matchurl,
|
|
13434
13945
|
matchurlpattern,
|
|
@@ -13441,6 +13952,7 @@ export {
|
|
|
13441
13952
|
messagefilterof,
|
|
13442
13953
|
methoddomain,
|
|
13443
13954
|
minimapfocus,
|
|
13955
|
+
missingclassconsents,
|
|
13444
13956
|
mockfor,
|
|
13445
13957
|
mockreport,
|
|
13446
13958
|
mockspecof,
|
|
@@ -13478,11 +13990,15 @@ export {
|
|
|
13478
13990
|
offscreencapabilitygate,
|
|
13479
13991
|
openchannel,
|
|
13480
13992
|
openconsensus,
|
|
13993
|
+
openconsentwindow,
|
|
13481
13994
|
openoffscreen,
|
|
13482
13995
|
openrun,
|
|
13996
|
+
openrunlog,
|
|
13483
13997
|
openseal,
|
|
13484
13998
|
openstreamchannel,
|
|
13485
13999
|
opentabagent,
|
|
14000
|
+
originprofilegate,
|
|
14001
|
+
originprofileof,
|
|
13486
14002
|
outcomeresponse,
|
|
13487
14003
|
overrideinputof,
|
|
13488
14004
|
overridematches,
|
|
@@ -13535,10 +14051,13 @@ export {
|
|
|
13535
14051
|
postentry,
|
|
13536
14052
|
preparehandoff,
|
|
13537
14053
|
privatemime,
|
|
14054
|
+
profilegrade,
|
|
13538
14055
|
profilegrantgranted,
|
|
14056
|
+
profilekind,
|
|
13539
14057
|
profilereport,
|
|
13540
14058
|
profileretentionwindow,
|
|
13541
14059
|
profilerkinds,
|
|
14060
|
+
profilesummary,
|
|
13542
14061
|
progressnoticeframe,
|
|
13543
14062
|
promptcallframe,
|
|
13544
14063
|
promptreport,
|
|
@@ -13564,6 +14083,7 @@ export {
|
|
|
13564
14083
|
readentries,
|
|
13565
14084
|
readpath,
|
|
13566
14085
|
readstream,
|
|
14086
|
+
readverifiedlog,
|
|
13567
14087
|
reattachrun,
|
|
13568
14088
|
receivemessage,
|
|
13569
14089
|
receivemessages,
|
|
@@ -13598,6 +14118,7 @@ export {
|
|
|
13598
14118
|
renderprovenance,
|
|
13599
14119
|
rendertemplate,
|
|
13600
14120
|
rendertoolbriefs,
|
|
14121
|
+
renewconsentwindow,
|
|
13601
14122
|
reordersteps,
|
|
13602
14123
|
repeatuntilof,
|
|
13603
14124
|
replannonfail,
|
|
@@ -13639,6 +14160,8 @@ export {
|
|
|
13639
14160
|
reviewframe,
|
|
13640
14161
|
revocationruleof,
|
|
13641
14162
|
revokeclient,
|
|
14163
|
+
revokerun,
|
|
14164
|
+
revokerungate,
|
|
13642
14165
|
rewritesourcelocation,
|
|
13643
14166
|
roleaddress,
|
|
13644
14167
|
roledefaults,
|
|
@@ -13680,6 +14203,8 @@ export {
|
|
|
13680
14203
|
scheduleinterval,
|
|
13681
14204
|
scopecheck,
|
|
13682
14205
|
scopegate,
|
|
14206
|
+
scopegrantof,
|
|
14207
|
+
sealrunlog,
|
|
13683
14208
|
sealrunstate,
|
|
13684
14209
|
seamweights,
|
|
13685
14210
|
searchfields,
|
|
@@ -13687,11 +14212,15 @@ export {
|
|
|
13687
14212
|
searchsessionrecords,
|
|
13688
14213
|
searchsteps,
|
|
13689
14214
|
searchtemplates,
|
|
14215
|
+
securityreport,
|
|
13690
14216
|
seededrandom,
|
|
13691
14217
|
selectorresponse,
|
|
13692
14218
|
sendcdpcommand,
|
|
13693
14219
|
sendfetch,
|
|
13694
14220
|
sendmessage,
|
|
14221
|
+
sensitiveclassesof,
|
|
14222
|
+
sensitiveclassgate,
|
|
14223
|
+
sensitivepipelingate,
|
|
13695
14224
|
sequenceintegrity,
|
|
13696
14225
|
serializearg,
|
|
13697
14226
|
serializecdpcommand,
|
|
@@ -13711,6 +14240,7 @@ export {
|
|
|
13711
14240
|
sessionrestoregate,
|
|
13712
14241
|
sessiontabof,
|
|
13713
14242
|
setvariable,
|
|
14243
|
+
shapesof,
|
|
13714
14244
|
sharelesson,
|
|
13715
14245
|
shareworkflow,
|
|
13716
14246
|
shiftentryof,
|
|
@@ -13832,6 +14362,7 @@ export {
|
|
|
13832
14362
|
validatevaluegen,
|
|
13833
14363
|
validateworkflow,
|
|
13834
14364
|
verifyauth,
|
|
14365
|
+
verifylogchain,
|
|
13835
14366
|
verifytoken,
|
|
13836
14367
|
verifywebhook,
|
|
13837
14368
|
visitmatch,
|
|
@@ -13844,6 +14375,8 @@ export {
|
|
|
13844
14375
|
watchgate,
|
|
13845
14376
|
webhooksecretok,
|
|
13846
14377
|
whileof,
|
|
14378
|
+
wildcardentry,
|
|
14379
|
+
windowgatesstep,
|
|
13847
14380
|
wireformat,
|
|
13848
14381
|
wizardreport,
|
|
13849
14382
|
workerpoolsizevalid,
|