@ai-ecoverse/slicc-spectrum 1.108.1 → 1.108.2
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 -4
- package/dist/{chunk-XQHRTHDQ.js → chunk-BUSDBLS7.js} +8 -4
- package/dist/{chunk-XQHRTHDQ.js.map → chunk-BUSDBLS7.js.map} +2 -2
- package/dist/slicc-dummy.js +61 -5
- package/dist/slicc-dummy.js.map +2 -2
- package/dist/slicc-ui.js +34 -8
- package/dist/slicc-ui.js.map +3 -3
- package/dist/types/app/secrets.d.ts +2 -1
- package/dist/types/app/settings.d.ts +2 -0
- package/dist/types/dummy/vault.d.ts +4 -3
- package/dist/types/dummy.d.ts +1 -1
- package/dist/types/model/types.d.ts +12 -1
- package/dist/types/model/values.d.ts +2 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -462,7 +462,7 @@ Settings › Secrets from the model's `vault`.
|
|
|
462
462
|
It never shows a value or a placeholder.
|
|
463
463
|
Value fields are `type=password` with no reveal toggle, are read once on submit and cleared at once (on success, refusal, error, cancel, close and disconnect), and are checked before the vault is called: under 8 UTF-8 bytes, CR, LF or NUL, or containing `fnox_proxy_` are refused with the vault's own wording.
|
|
464
464
|
Values go only to `vault.put` and are never kept on the element or put in an event.
|
|
465
|
-
The head shows **Locked** or **Unlocked
|
|
465
|
+
The head shows **Locked** or **Unlocked**, then, when `status.policy` marks a file `paused`, a second light (`[data-paused]`) "Paused: {file} is missing" ("Paused: {file} and 1 more are missing" for both), and the lock mode ("Unlocks automatically in this browser", "Unlocks with a passkey" or "Unlocks with a passphrase"); locked, the vault's **Unlock** button (`slicc-vault-button[data-action=unlock]`); unlocked, **Lock** (`data-action="lock"`, with `lock`) and the vault's **Protect with a passkey** (lock `auto`) or **Change protection** button (`data-action="protect"`).
|
|
466
466
|
A status line (`[data-availability]`) says "Waiting for the vault" while `availability()` is `connecting` or `waiting` (or `status()` is `null` without it), and "Unlock the vault to continue" while `scrub.needed` and not `scrub.ready`.
|
|
467
467
|
Waiting requests show under **Waiting for you** (`[data-request]`, the agent's `prompt` as plain text under "From the agent, not checked by SLICC:", capped at 200 characters, and "Expires in N min"), with **Enter value** (`data-action="answer"`, which fires `value-request` with `{ id, vault }` for the `<slicc-value-request>` on the same vault) for `value` requests and **Cancel request** (`data-action="cancel-request"`); `oauth`, `jerk-seal`, `jerk` and `unseal` requests say what they ask for and offer Cancel request only.
|
|
468
468
|
With `backupReminder: 'due'`, an alert (`[data-backup]`) offers **Export backup** (`data-action="export"`) and **Not now** (`data-action="dismiss-backup"`, with `dismissBackupReminder`).
|
|
@@ -470,9 +470,9 @@ With `backupReminder: 'due'`, an alert (`[data-backup]`) offers **Export backup*
|
|
|
470
470
|
Saved shows "Saved NAME in the vault" (`[data-said]`).
|
|
471
471
|
The secrets, sorted by name (`li[data-secret][data-state]`, with `[data-rules]`, `[data-exits]` only when restricted, `[data-exec]` (any command, the listed commands, every bash) and how often programs were given it today, `[data-source]`, `[data-used]`, `[data-expires]`; a model record or an MCP token no rule names reads “Used for” (`[data-used-for]`, model requests to its provider or requests to its MCP server, by the agent) instead of where it's sent, with its account's state as its light, and shows its Provider (`[data-provider]`, the account's name) or Server (`[data-server]`)) offer **Replace value** (`data-action="replace"`, for `settings`, `process` and `import:*` secrets that aren't sign-ins) and **Remove** (`data-action="remove"`, behind a confirmation, passing the secret's `kind`), and removed ones, under **Removed**, **Restore** (`data-action="restore"`; ENOENT reads "Removed too long ago to restore").
|
|
472
472
|
Locked, every form (Add secret, Replace value, Import, Export) says "Unlock the vault first" (`p[data-locked]`) next to the vault's own small **Unlock** button (`slicc-vault-button[data-action=unlock]`) and disables its submit; once unlocked, the form stays open with what was typed and its submit enables.
|
|
473
|
-
Vault errors show their message, EACCES as "Unlock the vault first" and ENOTSUP as "This arrives with a later vault version".
|
|
473
|
+
Vault errors show their message, EACCES as "Unlock the vault first", an EACCES with `cause: 'policy-paused'` as "Secrets are paused until the missing policy file is back", and ENOTSUP as "This arrives with a later vault version".
|
|
474
474
|
Each action shows only when the port has its method.
|
|
475
|
-
Then **Rules SLICC refused** (`[data-refused]`), where the rules live (`[data-policy]`) and **Activity** (`ol.audit li[data-seq][data-type]`; an entry with `uid` and `tag` both `null` reads "by you", a `refresh` entry "Refreshed automatically" (with the sign-in it used), an `endpoints` entry (vault-originated, no "by …") one part per field it carries: (1.91.0's `EndpointsEntry` had a required `purged` with `url`; no vault wrote it before 1.13.0, so the shape was corrected rather than kept, with `purged` optional and `host` replacing `url`) `purged` "Removed custom model URLs an agent set, automatically: {provider name} at {host}, …. Only you can set a model URL now, in Settings › Accounts" (the provider's name from `settings.accounts()`, else its id), `adopted` "Kept the MCP servers your tokens use, automatically: {server} at {host}, …", `pinned` "{name} pinned to {host} automatically, on first use" with **Unpin** (`data-action=unpin`, calling the vault port's optional `unpin([name])`; disabled while the vault is locked; a failure shows in the row as `[data-error=unpin]`, in the same words as other vault failures; it's hidden once a newer `unpinned` entry for that name is in the log), and `unpinned` "{name} unpinned from {host}; the next use pins it again", an `mcp` entry "Sent to the MCP server SERVER at DOMAIN" with its request and exit, a `session` entry (a value the vault handed the kernel for a verified TLS session, vault 1.15.0) "Sent over {HTTP/1.1, SMTP or Postgres} to {domain}:{port}, {trusted by public roots, or trusted by its pinned anchor}, through {exit}" (no trust part when an older entry has no `verifiedBy` or a newer vault sends one spectrum doesn't know; a protocol it doesn't know reads as its raw name), and a policy entry lists its changes, its warning and, when accepted, how to change the file back; **Only reveals to programs**, `data-action="reveals"`, and **Show older**, `data-action="older"`).
|
|
475
|
+
Then **Rules SLICC refused** (`[data-refused]`), where the rules live (`[data-policy]`) and **Activity** (`ol.audit li[data-seq][data-type]`; an entry with `uid` and `tag` both `null` reads "by you", a `refresh` entry "Refreshed automatically" (with the sign-in it used), an `endpoints` entry (vault-originated, no "by …") one part per field it carries: (1.91.0's `EndpointsEntry` had a required `purged` with `url`; no vault wrote it before 1.13.0, so the shape was corrected rather than kept, with `purged` optional and `host` replacing `url`) `purged` "Removed custom model URLs an agent set, automatically: {provider name} at {host}, …. Only you can set a model URL now, in Settings › Accounts" (the provider's name from `settings.accounts()`, else its id), `adopted` "Kept the MCP servers your tokens use, automatically: {server} at {host}, …", `pinned` "{name} pinned to {host} automatically, on first use" with **Unpin** (`data-action=unpin`, calling the vault port's optional `unpin([name])`; disabled while the vault is locked; a failure shows in the row as `[data-error=unpin]`, in the same words as other vault failures; it's hidden once a newer `unpinned` entry for that name is in the log), and `unpinned` "{name} unpinned from {host}; the next use pins it again", an `mcp` entry "Sent to the MCP server SERVER at DOMAIN" with its request and exit, a `session` entry (a value the vault handed the kernel for a verified TLS session, vault 1.15.0) "Sent over {HTTP/1.1, SMTP or Postgres} to {domain}:{port}, {trusted by public roots, or trusted by its pinned anchor}, through {exit}" (no trust part when an older entry has no `verifiedBy` or a newer vault sends one spectrum doesn't know; a protocol it doesn't know reads as its raw name), and a policy entry lists its changes, its warning and, when accepted, how to change the file back, except that an entry with `absent` reads "{file} was removed. Secrets are paused until it’s back." and the accepted entry that ends its pause reads "{file} is back. Secrets are running again." ("Secrets stay paused until the other file is back." while the other file is still missing), neither with the way back; **Only reveals to programs**, `data-action="reveals"`, and **Show older**, `data-action="older"`).
|
|
476
476
|
The section's `data-vault` is `locked`, `unlocked` or `loading`.
|
|
477
477
|
A popup the browser blocked shows how to allow it (`[data-popup=blocked]`).
|
|
478
478
|
Widened-rule notices aren't shown.
|
|
@@ -1089,7 +1089,7 @@ Like slicc-agent's snapshot, the dummy's vitals are the budget, Spend, Active ag
|
|
|
1089
1089
|
`createDummyModel({ asks: 'long' })` (`?asks=long`) adds a pending sudo request with that seven-line command to kitchen-sink (`k-long`).
|
|
1090
1090
|
Decisions are recorded in `model.approvals.decisions`, and `model.approvals.end(id, reason)` ends a request.
|
|
1091
1091
|
|
|
1092
|
-
`createDummyModel({ vault: 'empty' | 'secrets' | 'policy' | 'locked' | 'request' | 'backup' | 'waiting' | 'purged' | 'session' | 'endpoints-fail' | 'off' })` (`?vault=` on `/ui/`, off by default; `notice` is kept as another name for `policy`) adds an invented vault: no secrets yet; five secrets (an API key, a jerk lease from pier-nuc revealed to `pier publish`, a Tide Mail sign-in, one without a rule and a removed one) with an activity log that pages back once; the same with a refused rule and a policy change in the log; locked before the first unlock, with a waiting request from docs-pass; unlocked with a `fnox set` request for `TIDE_STATION_TOKEN`; the secrets with a due backup reminder; or a vault that hasn't answered yet (`model.vault.arrive()` brings it); Cloudflare's Account ID and AI Gateway ID and Azure's endpoint carry `vaultSetting`s; the dummy vault keeps `settings` on its records, logs each `settings` call in `model.vault.settingsCalls`, and refuses a setting whose value starts with `bad` (“The vault refused {KEY}. Check that value and try again.”). `endpoints-fail` is the secrets with an `endpoints` that refuses (an MCP URL with “The vault refused {url} for this token. Check the server's address, then try again.”, a model URL with “The vault refused that endpoint. Check the address and try again.”). The dummy vault records each `endpoints` change in `model.vault.endpointChanges`.
|
|
1092
|
+
`createDummyModel({ vault: 'empty' | 'secrets' | 'policy' | 'locked' | 'paused' | 'request' | 'backup' | 'waiting' | 'purged' | 'session' | 'endpoints-fail' | 'off' })` (`?vault=` on `/ui/`, off by default; `notice` is kept as another name for `policy`) adds an invented vault: no secrets yet; five secrets (an API key, a jerk lease from pier-nuc revealed to `pier publish`, a Tide Mail sign-in, one without a rule and a removed one) with an activity log that pages back once; the same with a refused rule and a policy change in the log; locked before the first unlock, with a waiting request from docs-pass; the secrets with `/etc/slicc/secrets-policy.toml` missing and an earlier pause of `/etc/fnox/config.toml` in the log; unlocked with a `fnox set` request for `TIDE_STATION_TOKEN`; the secrets with a due backup reminder; or a vault that hasn't answered yet (`model.vault.arrive()` brings it); Cloudflare's Account ID and AI Gateway ID and Azure's endpoint carry `vaultSetting`s; the dummy vault keeps `settings` on its records, logs each `settings` call in `model.vault.settingsCalls`, and refuses a setting whose value starts with `bad` (“The vault refused {KEY}. Check that value and try again.”). `endpoints-fail` is the secrets with an `endpoints` that refuses (an MCP URL with “The vault refused {url} for this token. Check the server's address, then try again.”, a model URL with “The vault refused that endpoint. Check the address and try again.”). The dummy vault records each `endpoints` change in `model.vault.endpointChanges`.
|
|
1093
1093
|
`purged` is `secrets` plus two `endpoints` audit entries: one with `purged` and `adopted`, and one `pinned` (`DOCS_MCP_TOKEN` on docs.example) that Unpin turns into an `unpinned` entry; `vaultPurged` and `vaultPinned` are exported. `session` is `secrets` plus three `session` audit entries (`vaultSessions`, exported): SMTP trusted by public roots, Postgres trusted by a pinned anchor through pier-nuc, and HTTP/1.1 with no `verifiedBy`.
|
|
1094
1094
|
It implements every op with the vault's checks, and keeps only names: `model.vault.puts` records `{ name, request? }`, `cancelled` the cancelled requests, `imports` each import's kind, size and pick, and `exported` the exports.
|
|
1095
1095
|
Import offers five invented candidates (one replaces a secret, one is a model key, one is refused with a reason that the done stage repeats; KeePass adds a `_2` duplicate), six answers ENOTSUP, page ops are recorded with `uid: null, tag: null`, and value ops while locked answer EACCES.
|
|
@@ -10,17 +10,21 @@ function valueProblem(value) {
|
|
|
10
10
|
function nameProblem(name) {
|
|
11
11
|
return /^[A-Z_][A-Z0-9_]*$/.test(name) ? null : "Names use A to Z, 0 to 9 and _, and don't start with a digit";
|
|
12
12
|
}
|
|
13
|
-
function vaultFailure(code, message) {
|
|
14
|
-
return Object.assign(new Error(message), { code });
|
|
13
|
+
function vaultFailure(code, message, cause) {
|
|
14
|
+
return Object.assign(new Error(message), { code }, cause ? { cause } : {});
|
|
15
15
|
}
|
|
16
16
|
function isVaultFailure(error) {
|
|
17
17
|
return error instanceof Error && typeof error.code === "string";
|
|
18
18
|
}
|
|
19
|
+
function isPolicyPaused(error) {
|
|
20
|
+
return isVaultFailure(error) && error.cause === "policy-paused";
|
|
21
|
+
}
|
|
19
22
|
|
|
20
23
|
export {
|
|
21
24
|
valueProblem,
|
|
22
25
|
nameProblem,
|
|
23
26
|
vaultFailure,
|
|
24
|
-
isVaultFailure
|
|
27
|
+
isVaultFailure,
|
|
28
|
+
isPolicyPaused
|
|
25
29
|
};
|
|
26
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-BUSDBLS7.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model/values.ts"],
|
|
4
|
-
"sourcesContent": ["import type { ErrorCode, VaultFailure } from './types.ts';\n\nexport function valueProblem(value: string): string | null {\n if (new TextEncoder().encode(value).length < 8)\n return \"Values shorter than 8 bytes can't be protected from the model\";\n if (/[\\r\\n\\0]/.test(value)) return \"Values can't contain line breaks or NUL characters\";\n if (value.includes('fnox_proxy_'))\n return \"That's a placeholder, not a value. Paste the real value\";\n return null;\n}\n\nexport function nameProblem(name: string): string | null {\n return /^[A-Z_][A-Z0-9_]*$/.test(name)\n ? null\n : \"Names use A to Z, 0 to 9 and _, and don't start with a digit\";\n}\n\nexport function vaultFailure(code: ErrorCode
|
|
5
|
-
"mappings": ";AAEO,SAAS,aAAa,OAA8B;AACzD,MAAI,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,SAAS;AAC3C,WAAO;AACT,MAAI,WAAW,KAAK,KAAK,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,aAAa;AAC9B,WAAO;AACT,SAAO;AACT;AAEO,SAAS,YAAY,MAA6B;AACvD,SAAO,qBAAqB,KAAK,IAAI,IACjC,OACA;AACN;AAEO,SAAS,
|
|
4
|
+
"sourcesContent": ["import type { ErrorCode, VaultFailure } from './types.ts';\n\nexport function valueProblem(value: string): string | null {\n if (new TextEncoder().encode(value).length < 8)\n return \"Values shorter than 8 bytes can't be protected from the model\";\n if (/[\\r\\n\\0]/.test(value)) return \"Values can't contain line breaks or NUL characters\";\n if (value.includes('fnox_proxy_'))\n return \"That's a placeholder, not a value. Paste the real value\";\n return null;\n}\n\nexport function nameProblem(name: string): string | null {\n return /^[A-Z_][A-Z0-9_]*$/.test(name)\n ? null\n : \"Names use A to Z, 0 to 9 and _, and don't start with a digit\";\n}\n\nexport function vaultFailure(\n code: ErrorCode,\n message: string,\n cause?: VaultFailure['cause']\n): VaultFailure {\n return Object.assign(new Error(message), { code }, cause ? { cause } : {}) as VaultFailure;\n}\n\nexport function isVaultFailure(error: unknown): error is VaultFailure {\n return error instanceof Error && typeof (error as Partial<VaultFailure>).code === 'string';\n}\n\nexport function isPolicyPaused(error: unknown): boolean {\n return isVaultFailure(error) && error.cause === 'policy-paused';\n}\n"],
|
|
5
|
+
"mappings": ";AAEO,SAAS,aAAa,OAA8B;AACzD,MAAI,IAAI,YAAY,EAAE,OAAO,KAAK,EAAE,SAAS;AAC3C,WAAO;AACT,MAAI,WAAW,KAAK,KAAK,EAAG,QAAO;AACnC,MAAI,MAAM,SAAS,aAAa;AAC9B,WAAO;AACT,SAAO;AACT;AAEO,SAAS,YAAY,MAA6B;AACvD,SAAO,qBAAqB,KAAK,IAAI,IACjC,OACA;AACN;AAEO,SAAS,aACd,MACA,SACA,OACc;AACd,SAAO,OAAO,OAAO,IAAI,MAAM,OAAO,GAAG,EAAE,KAAK,GAAG,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;AAC3E;AAEO,SAAS,eAAe,OAAuC;AACpE,SAAO,iBAAiB,SAAS,OAAQ,MAAgC,SAAS;AACpF;AAEO,SAAS,eAAe,OAAyB;AACtD,SAAO,eAAe,KAAK,KAAK,MAAM,UAAU;AAClD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/slicc-dummy.js
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
nameProblem,
|
|
3
3
|
valueProblem,
|
|
4
4
|
vaultFailure
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-BUSDBLS7.js";
|
|
6
6
|
import {
|
|
7
7
|
DummySettings,
|
|
8
8
|
accounts,
|
|
@@ -6304,6 +6304,41 @@ function vaultPolicy(now2 = Date.now()) {
|
|
|
6304
6304
|
warning: "One rule was refused; it is listed under Rules SLICC refused."
|
|
6305
6305
|
};
|
|
6306
6306
|
}
|
|
6307
|
+
function vaultPaused(now2 = Date.now()) {
|
|
6308
|
+
const entry = {
|
|
6309
|
+
type: "policy",
|
|
6310
|
+
accepted: true,
|
|
6311
|
+
changes: []
|
|
6312
|
+
};
|
|
6313
|
+
return [
|
|
6314
|
+
{
|
|
6315
|
+
...entry,
|
|
6316
|
+
seq: 15,
|
|
6317
|
+
id: "audit-15",
|
|
6318
|
+
at: now2 - minute3,
|
|
6319
|
+
file: "/etc/slicc/secrets-policy.toml",
|
|
6320
|
+
sha256: null,
|
|
6321
|
+
absent: true
|
|
6322
|
+
},
|
|
6323
|
+
{
|
|
6324
|
+
...entry,
|
|
6325
|
+
seq: 14,
|
|
6326
|
+
id: "audit-14",
|
|
6327
|
+
at: now2 - 2 * minute3,
|
|
6328
|
+
file: "/etc/fnox/config.toml",
|
|
6329
|
+
sha256: "a87ff679a2f3e71d9181a67b7542122c"
|
|
6330
|
+
},
|
|
6331
|
+
{
|
|
6332
|
+
...entry,
|
|
6333
|
+
seq: 13,
|
|
6334
|
+
id: "audit-13",
|
|
6335
|
+
at: now2 - 3 * minute3,
|
|
6336
|
+
file: "/etc/fnox/config.toml",
|
|
6337
|
+
sha256: null,
|
|
6338
|
+
absent: true
|
|
6339
|
+
}
|
|
6340
|
+
];
|
|
6341
|
+
}
|
|
6307
6342
|
function vaultNotice(now2 = Date.now()) {
|
|
6308
6343
|
return {
|
|
6309
6344
|
id: "notice-widened",
|
|
@@ -6355,6 +6390,7 @@ function vaultFixtures(scenario, now2 = Date.now()) {
|
|
|
6355
6390
|
const empty = scenario === "empty";
|
|
6356
6391
|
const policy = scenario === "policy" || scenario === "notice";
|
|
6357
6392
|
const backup = scenario === "backup";
|
|
6393
|
+
const paused = scenario === "paused";
|
|
6358
6394
|
const status2 = {
|
|
6359
6395
|
version: "0.1.0",
|
|
6360
6396
|
protocol: 1,
|
|
@@ -6363,7 +6399,25 @@ function vaultFixtures(scenario, now2 = Date.now()) {
|
|
|
6363
6399
|
lock: "passkey",
|
|
6364
6400
|
scrub: { needed: !empty, version: 3, ready: scenario !== "locked" },
|
|
6365
6401
|
waiting: waiting(scenario, now2),
|
|
6366
|
-
...backup ? { backupReminder: "due", exportedAt: null } : {}
|
|
6402
|
+
...backup ? { backupReminder: "due", exportedAt: null } : {},
|
|
6403
|
+
...paused ? {
|
|
6404
|
+
policy: [
|
|
6405
|
+
{
|
|
6406
|
+
path: "/etc/fnox/config.toml",
|
|
6407
|
+
sha256: "a87ff679a2f3e71d9181a67b7542122c",
|
|
6408
|
+
accepted: true,
|
|
6409
|
+
warnings: []
|
|
6410
|
+
},
|
|
6411
|
+
{
|
|
6412
|
+
path: "/etc/slicc/secrets-policy.toml",
|
|
6413
|
+
sha256: null,
|
|
6414
|
+
accepted: true,
|
|
6415
|
+
warnings: [],
|
|
6416
|
+
absent: true,
|
|
6417
|
+
paused: true
|
|
6418
|
+
}
|
|
6419
|
+
]
|
|
6420
|
+
} : {}
|
|
6367
6421
|
};
|
|
6368
6422
|
const quay = { domain: "quay.harbor.example", header: "Authorization", methods: [], paths: [] };
|
|
6369
6423
|
const secrets = (empty ? [] : vaultSecrets(now2)).map(
|
|
@@ -6374,6 +6428,7 @@ function vaultFixtures(scenario, now2 = Date.now()) {
|
|
|
6374
6428
|
refused: policy ? vaultRefused() : [],
|
|
6375
6429
|
audit: empty ? [] : [
|
|
6376
6430
|
...policy ? [vaultPolicy(now2)] : [],
|
|
6431
|
+
...paused ? vaultPaused(now2) : [],
|
|
6377
6432
|
...scenario === "purged" ? [vaultPinned(now2), vaultPurged(now2)] : [],
|
|
6378
6433
|
...scenario === "session" ? vaultSessions(now2) : [],
|
|
6379
6434
|
...vaultAudit(now2)
|
|
@@ -6522,13 +6577,13 @@ var DummyVault = class extends Emitter {
|
|
|
6522
6577
|
this.emit("status", this.#status);
|
|
6523
6578
|
this.emit("list", this.#list);
|
|
6524
6579
|
}
|
|
6525
|
-
fail(code, message) {
|
|
6526
|
-
this.#fail = { code, message };
|
|
6580
|
+
fail(code, message, cause) {
|
|
6581
|
+
this.#fail = { code, message, cause };
|
|
6527
6582
|
}
|
|
6528
6583
|
#failed() {
|
|
6529
6584
|
const fail = this.#fail;
|
|
6530
6585
|
this.#fail = null;
|
|
6531
|
-
if (fail) throw vaultFailure(fail.code, fail.message);
|
|
6586
|
+
if (fail) throw vaultFailure(fail.code, fail.message, fail.cause);
|
|
6532
6587
|
}
|
|
6533
6588
|
async acknowledge(notice) {
|
|
6534
6589
|
await this.#time.sleep(5);
|
|
@@ -7000,6 +7055,7 @@ export {
|
|
|
7000
7055
|
vaultFixtures,
|
|
7001
7056
|
vaultNotice,
|
|
7002
7057
|
vaultOlder,
|
|
7058
|
+
vaultPaused,
|
|
7003
7059
|
vaultPinned,
|
|
7004
7060
|
vaultPolicy,
|
|
7005
7061
|
vaultPurged,
|