@decentrys/sentinel-sdk 0.1.1 → 0.1.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 +98 -28
- package/dist/browser/decentrys-sentinel.js +1 -1
- package/dist/browser/decentrys-sentinel.mjs +1 -1
- package/dist/client.d.ts +8 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +8 -1
- package/dist/client.js.map +1 -1
- package/dist/from-audit.d.ts +15 -3
- package/dist/from-audit.d.ts.map +1 -1
- package/dist/from-audit.js.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +8 -1
- package/src/from-audit.ts +15 -2
package/README.md
CHANGED
|
@@ -12,51 +12,67 @@ when those conditions actually occur.
|
|
|
12
12
|
npm install @decentrys/sentinel-sdk
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
Zero runtime dependencies. Node 18+. Types included.
|
|
16
|
+
|
|
15
17
|
## Getting an API key
|
|
16
18
|
|
|
17
19
|
Sign in at [decentrys.com/developers](https://decentrys.com/developers) and create a key.
|
|
18
20
|
|
|
19
|
-
There are two kinds, and picking the wrong one is the mistake that matters:
|
|
20
|
-
|
|
21
21
|
| Prefix | Where it belongs | Why |
|
|
22
22
|
|---|---|---|
|
|
23
23
|
| `dk_pub_live_…` | **Publishable.** Ships inside a wallet, extension or mobile app. | Bounded to the origins you register and to read-only Protect endpoints. Anyone can extract it from your bundle; that's expected, and it's why it can't do anything dangerous. |
|
|
24
24
|
| `dk_live_…` | **Secret.** Server-side only. | Full scope access. If this ends up in a client bundle it is a leaked credential the moment it ships. |
|
|
25
25
|
|
|
26
|
-
**Sentinel needs a secret key.** A
|
|
27
|
-
configuring detection is not something a credential shipped
|
|
26
|
+
**Sentinel needs a secret key.** A key beginning `dk_pub_` throws at
|
|
27
|
+
construction — configuring detection is not something a credential shipped
|
|
28
|
+
inside a client may do.
|
|
28
29
|
|
|
29
30
|
## Quick start
|
|
30
31
|
|
|
31
32
|
```ts
|
|
32
33
|
import { Sentinel } from '@decentrys/sentinel-sdk';
|
|
33
34
|
|
|
34
|
-
const sentinel = new Sentinel({ apiKey:
|
|
35
|
+
const sentinel = new Sentinel({ apiKey: process.env.DECENTRYS_API_KEY! });
|
|
36
|
+
const projectId = 'proj_…';
|
|
35
37
|
|
|
36
38
|
// 1. What do you want watched?
|
|
37
|
-
await sentinel.registerContract({
|
|
38
|
-
|
|
39
|
+
const vault = await sentinel.registerContract({
|
|
40
|
+
projectId, chain: 'ethereum', address: '0xabc…', label: 'Vault v2',
|
|
41
|
+
});
|
|
42
|
+
await sentinel.registerTreasury({
|
|
43
|
+
projectId, chain: 'ethereum', address: '0xdef…', label: 'Ops treasury',
|
|
44
|
+
});
|
|
39
45
|
|
|
40
46
|
// 2. What would worry you?
|
|
41
|
-
await sentinel.createRule({
|
|
47
|
+
const rule = await sentinel.createRule({
|
|
42
48
|
projectId,
|
|
43
49
|
name: 'Large treasury outflow',
|
|
44
|
-
severity: 'HIGH',
|
|
50
|
+
severity: 'HIGH', // INFO | LOW | MEDIUM | HIGH | CRITICAL
|
|
45
51
|
triggerType: 'treasury.transfer',
|
|
46
52
|
conditions: {
|
|
47
53
|
op: 'AND',
|
|
48
54
|
conditions: [
|
|
49
55
|
{ op: 'eq', field: 'transfer.direction', value: 'OUT' },
|
|
50
|
-
{ op: 'gt', field: 'transfer.valueUsd', value:
|
|
56
|
+
{ op: 'gt', field: 'transfer.valueUsd', value: 50_000 },
|
|
51
57
|
],
|
|
52
58
|
},
|
|
53
|
-
actions: [
|
|
54
|
-
|
|
59
|
+
actions: [
|
|
60
|
+
{ type: 'ALERT', config: {} },
|
|
61
|
+
{ type: 'SLACK', config: { webhookUrl: process.env.SLACK_WEBHOOK_URL } },
|
|
62
|
+
],
|
|
63
|
+
cooldownSeconds: 300, // suppression window; without one, a loop pages you 1000 times
|
|
55
64
|
});
|
|
56
65
|
|
|
57
|
-
// 3. Read what fired
|
|
58
|
-
const { data: alerts } = await sentinel.listAlerts({ status: 'NEW' });
|
|
59
|
-
|
|
66
|
+
// 3. Read what fired.
|
|
67
|
+
const { data: alerts } = await sentinel.listAlerts({ status: 'NEW', limit: 50 });
|
|
68
|
+
for (const alert of alerts) {
|
|
69
|
+
alert.severity;
|
|
70
|
+
alert.title;
|
|
71
|
+
alert.ruleName;
|
|
72
|
+
alert.facts; // the facts that made the rule fire — an alert without these is unactionable
|
|
73
|
+
alert.txHash;
|
|
74
|
+
await sentinel.acknowledgeAlert(alert.id, 'Expected — scheduled rebalance.');
|
|
75
|
+
}
|
|
60
76
|
```
|
|
61
77
|
|
|
62
78
|
`await sentinel.catalog()` returns every fact field, operator and action you can
|
|
@@ -65,8 +81,13 @@ build a rule from, so you can generate a rule builder rather than hardcode one.
|
|
|
65
81
|
## Test a rule before you arm it
|
|
66
82
|
|
|
67
83
|
```ts
|
|
68
|
-
const
|
|
69
|
-
|
|
84
|
+
const test = await sentinel.testRule(rule.id, {
|
|
85
|
+
'transfer.direction': 'OUT',
|
|
86
|
+
'transfer.valueUsd': 75_000,
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test.matched; // true
|
|
90
|
+
test.explanation; // string[] — which conditions passed and which did not
|
|
70
91
|
```
|
|
71
92
|
|
|
72
93
|
A rule nobody has tested is a rule whose behaviour you'll discover during an
|
|
@@ -78,12 +99,19 @@ Some things only your system knows: a deploy pipeline running, an internally
|
|
|
78
99
|
approved treasury movement, an off-chain governance action.
|
|
79
100
|
|
|
80
101
|
```ts
|
|
81
|
-
await sentinel.reportEvent({
|
|
102
|
+
const recorded = await sentinel.reportEvent({
|
|
103
|
+
projectId,
|
|
104
|
+
eventName: 'governance.executed',
|
|
105
|
+
chain: 'ethereum',
|
|
106
|
+
txHash,
|
|
107
|
+
facts: { 'governance.executed': true, proposalId: 42 },
|
|
108
|
+
});
|
|
109
|
+
if (!recorded) console.warn('Sentinel did not record the event.');
|
|
82
110
|
```
|
|
83
111
|
|
|
84
112
|
**This is the one method that never throws.** It runs on your hot path, and a
|
|
85
|
-
monitoring call must not be able to fail the thing it's monitoring. It returns
|
|
86
|
-
|
|
113
|
+
monitoring call must not be able to fail the thing it's monitoring. It returns a
|
|
114
|
+
boolean instead.
|
|
87
115
|
|
|
88
116
|
## Turn an audit into monitoring
|
|
89
117
|
|
|
@@ -91,21 +119,55 @@ The most valuable thing here. An audit identifies what a contract can do; this
|
|
|
91
119
|
converts that into what gets watched.
|
|
92
120
|
|
|
93
121
|
```ts
|
|
94
|
-
import { rulesFromAudit, unmappedCapabilities } from '@decentrys/sentinel-sdk';
|
|
122
|
+
import { rulesFromAudit, unmappedCapabilities, type AuditCapability } from '@decentrys/sentinel-sdk';
|
|
95
123
|
|
|
96
|
-
const capabilities = [
|
|
124
|
+
const capabilities: AuditCapability[] = [
|
|
125
|
+
{ type: 'UPGRADEABLE', grantedBy: 'EIP-1967 implementation slot' },
|
|
126
|
+
{ type: 'MINT_AUTHORITY' },
|
|
127
|
+
{ type: 'FEE_CONTROL' },
|
|
128
|
+
];
|
|
97
129
|
|
|
98
|
-
for (const { rule } of rulesFromAudit({
|
|
130
|
+
for (const { capability, rule } of rulesFromAudit({
|
|
131
|
+
projectId,
|
|
132
|
+
capabilities,
|
|
133
|
+
treasuryThresholdUsd: 50_000, // omit and no treasury rule is generated
|
|
134
|
+
})) {
|
|
135
|
+
console.log(`${capability} -> ${rule.name} (${rule.severity})`);
|
|
99
136
|
await sentinel.createRule(rule);
|
|
100
137
|
}
|
|
101
138
|
|
|
102
139
|
// Told, not hidden: which capabilities produced no rule.
|
|
103
|
-
console.log(unmappedCapabilities(capabilities));
|
|
140
|
+
console.log(unmappedCapabilities(capabilities)); // ['FEE_CONTROL']
|
|
104
141
|
```
|
|
105
142
|
|
|
106
143
|
It watches the upgrade **happening**, never the contract **being** upgradeable —
|
|
107
144
|
a capability is not a fault. Capabilities with no plausible response generate no
|
|
108
|
-
rule, because a rule nobody can act on trains a team to close alerts unread.
|
|
145
|
+
rule, because a rule nobody can act on trains a team to close alerts unread. A
|
|
146
|
+
customer handed six rules for nine capabilities is told which three are
|
|
147
|
+
unwatched, so the gap is a decision rather than an assumption.
|
|
148
|
+
|
|
149
|
+
Mapped capability names (aliases in brackets): `UPGRADEABLE` (`PROXY`,
|
|
150
|
+
`UPGRADE_AUTHORITY`, `DELEGATED_EXECUTION`) · `ADMIN_CONTROL` (`ADMIN`) ·
|
|
151
|
+
`OWNERSHIP` (`OWNER`) · `MINT_AUTHORITY` (`MINT`) · `PAUSABLE` (`PAUSE`) ·
|
|
152
|
+
`BLACKLIST` (`FREEZE_AUTHORITY`, `ACCOUNT_FREEZE`) · `FORCED_BALANCE_CHANGE` ·
|
|
153
|
+
`GOVERNANCE`. Anything else comes back from `unmappedCapabilities`.
|
|
154
|
+
|
|
155
|
+
No threshold is guessed on your behalf: omit `treasuryThresholdUsd` and there
|
|
156
|
+
is no treasury rule. A guessed threshold is either so low it pages constantly or
|
|
157
|
+
so high it never fires, and both teach people to ignore it.
|
|
158
|
+
|
|
159
|
+
## Every method
|
|
160
|
+
|
|
161
|
+
| | Method |
|
|
162
|
+
|---|---|
|
|
163
|
+
| **Targets** | `registerContract(input)` · `registerWallet(input)` · `registerTreasury(input)` · `registerTarget(input, targetType)` · `listTargets(projectId?)` · `setTargetEnabled(id, enabled)` · `removeTarget(id)` |
|
|
164
|
+
| **Rules** | `createRule(input)` · `updateRule(id, changes)` · `deleteRule(id)` · `listRules(projectId?)` · `testRule(id, facts)` · `catalog()` |
|
|
165
|
+
| **Alerts** | `listAlerts({status?, severity?, limit?})` · `getAlert(id)` · `acknowledgeAlert(id, note?)` |
|
|
166
|
+
| **Reporting** | `reportEvent(event)` |
|
|
167
|
+
|
|
168
|
+
`registerTarget` takes any `TargetType`: `CONTRACT` · `WALLET` · `TREASURY` ·
|
|
169
|
+
`MULTISIG` · `LP_POOL` · `ORACLE` · `BRIDGE` · `GOVERNANCE`. Target input is
|
|
170
|
+
`{ projectId, chain, address, label? }`.
|
|
109
171
|
|
|
110
172
|
## It throws
|
|
111
173
|
|
|
@@ -114,13 +176,21 @@ registering a contract fails, you must know, or you'll believe you're monitored
|
|
|
114
176
|
when you aren't.
|
|
115
177
|
|
|
116
178
|
```ts
|
|
179
|
+
import { Sentinel, SentinelError } from '@decentrys/sentinel-sdk';
|
|
180
|
+
|
|
117
181
|
try {
|
|
118
|
-
await sentinel.registerContract({
|
|
119
|
-
} catch (
|
|
120
|
-
if (
|
|
182
|
+
await sentinel.registerContract({ projectId, chain: 'ethereum', address });
|
|
183
|
+
} catch (error) {
|
|
184
|
+
if (error instanceof SentinelError) console.error(error.status, error.code, error.message);
|
|
121
185
|
}
|
|
122
186
|
```
|
|
123
187
|
|
|
188
|
+
`SentinelError` carries `status` (`0` for a timeout or network failure) and the
|
|
189
|
+
API's own `code` and `message`. The default deadline is 10 seconds; configure
|
|
190
|
+
with `new Sentinel({ apiKey, timeoutMs, baseUrl, fetch })`.
|
|
191
|
+
|
|
192
|
+
`reportEvent` is the single exception and returns `false` instead.
|
|
193
|
+
|
|
124
194
|
## The rest of the SDK
|
|
125
195
|
|
|
126
196
|
| Package | For |
|
package/dist/client.d.ts
CHANGED
|
@@ -16,7 +16,14 @@
|
|
|
16
16
|
* customer's own system and must never be able to break it.
|
|
17
17
|
*/
|
|
18
18
|
import type { Alert, AlertSeverity, MonitoringRule, MonitoringTarget, RuleAction, RuleTestResult, TargetType } from './model';
|
|
19
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Sent in the user-agent on every request.
|
|
21
|
+
*
|
|
22
|
+
* Kept in step with package.json by hand — it drifted once already, and a
|
|
23
|
+
* stale value here silently under-reports the real version in server-side
|
|
24
|
+
* telemetry rather than failing in any visible way.
|
|
25
|
+
*/
|
|
26
|
+
export declare const SDK_VERSION = "0.1.2";
|
|
20
27
|
export type FetchLike = (url: string, init: {
|
|
21
28
|
method: string;
|
|
22
29
|
headers: Record<string, string>;
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -18,7 +18,14 @@
|
|
|
18
18
|
*/
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
exports.Sentinel = exports.SentinelError = exports.SDK_VERSION = void 0;
|
|
21
|
-
|
|
21
|
+
/**
|
|
22
|
+
* Sent in the user-agent on every request.
|
|
23
|
+
*
|
|
24
|
+
* Kept in step with package.json by hand — it drifted once already, and a
|
|
25
|
+
* stale value here silently under-reports the real version in server-side
|
|
26
|
+
* telemetry rather than failing in any visible way.
|
|
27
|
+
*/
|
|
28
|
+
exports.SDK_VERSION = '0.1.2';
|
|
22
29
|
const DEFAULT_BASE_URL = 'https://api.decentrys.com';
|
|
23
30
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
24
31
|
class SentinelError extends Error {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;GAgBG;;;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/from-audit.d.ts
CHANGED
|
@@ -26,7 +26,14 @@ import type { RuleAction } from './model';
|
|
|
26
26
|
import type { CreateRuleInput } from './client';
|
|
27
27
|
/** What an audit observed about a contract, in the shape Protect reports it. */
|
|
28
28
|
export interface AuditCapability {
|
|
29
|
-
/**
|
|
29
|
+
/**
|
|
30
|
+
* e.g. UPGRADEABLE, MINT_AUTHORITY, PAUSABLE, ACCOUNT_FREEZE.
|
|
31
|
+
*
|
|
32
|
+
* Not every capability maps to a rule. `FEE_CONTROL` and `ORACLE_SETTER`
|
|
33
|
+
* are deliberately unmapped — a fee change has no single response, and a
|
|
34
|
+
* rule nobody can act on trains a team to close alerts unread.
|
|
35
|
+
* `unmappedCapabilities()` reports them rather than dropping them silently.
|
|
36
|
+
*/
|
|
30
37
|
type: string;
|
|
31
38
|
statement?: string;
|
|
32
39
|
/** The function, role or slot that grants it, when known. */
|
|
@@ -46,7 +53,13 @@ export interface AuditHandoverInput {
|
|
|
46
53
|
*/
|
|
47
54
|
treasuryThresholdUsd?: number;
|
|
48
55
|
}
|
|
49
|
-
|
|
56
|
+
/**
|
|
57
|
+
* One generated rule, paired with the capability that produced it.
|
|
58
|
+
*
|
|
59
|
+
* Exported because it is the element type of `rulesFromAudit`'s return value —
|
|
60
|
+
* without it a consumer can destructure the result but cannot name its type.
|
|
61
|
+
*/
|
|
62
|
+
export interface Generated {
|
|
50
63
|
capability: string;
|
|
51
64
|
rule: CreateRuleInput;
|
|
52
65
|
}
|
|
@@ -66,5 +79,4 @@ export declare function rulesFromAudit(input: AuditHandoverInput): Generated[];
|
|
|
66
79
|
* decision rather than an assumption.
|
|
67
80
|
*/
|
|
68
81
|
export declare function unmappedCapabilities(capabilities: AuditCapability[]): string[];
|
|
69
|
-
export {};
|
|
70
82
|
//# sourceMappingURL=from-audit.d.ts.map
|
package/dist/from-audit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-audit.d.ts","sourceRoot":"","sources":["../src/from-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B
|
|
1
|
+
{"version":3,"file":"from-audit.d.ts","sourceRoot":"","sources":["../src/from-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,gFAAgF;AAChF,MAAM,WAAW,eAAe;IAC9B;;;;;;;OAOG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,wDAAwD;IACxD,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;CACvB;AAuHD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,EAAE,CA0DrE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,EAAE,CAI9E"}
|
package/dist/from-audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-audit.js","sourceRoot":"","sources":["../src/from-audit.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;
|
|
1
|
+
{"version":3,"file":"from-audit.js","sourceRoot":"","sources":["../src/from-audit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decentrys/sentinel-sdk",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Monitoring for deployed contracts, wallets and treasuries: targets, detection rules, alerts, and audit-to-monitoring handover.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Decentrys Labs",
|
package/src/client.ts
CHANGED
|
@@ -20,7 +20,14 @@ import type {
|
|
|
20
20
|
Alert, AlertSeverity, MonitoringRule, MonitoringTarget, RuleAction, RuleTestResult, TargetType,
|
|
21
21
|
} from './model';
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Sent in the user-agent on every request.
|
|
25
|
+
*
|
|
26
|
+
* Kept in step with package.json by hand — it drifted once already, and a
|
|
27
|
+
* stale value here silently under-reports the real version in server-side
|
|
28
|
+
* telemetry rather than failing in any visible way.
|
|
29
|
+
*/
|
|
30
|
+
export const SDK_VERSION = '0.1.2';
|
|
24
31
|
|
|
25
32
|
const DEFAULT_BASE_URL = 'https://api.decentrys.com';
|
|
26
33
|
const DEFAULT_TIMEOUT_MS = 10_000;
|
package/src/from-audit.ts
CHANGED
|
@@ -28,7 +28,14 @@ import type { CreateRuleInput } from './client';
|
|
|
28
28
|
|
|
29
29
|
/** What an audit observed about a contract, in the shape Protect reports it. */
|
|
30
30
|
export interface AuditCapability {
|
|
31
|
-
/**
|
|
31
|
+
/**
|
|
32
|
+
* e.g. UPGRADEABLE, MINT_AUTHORITY, PAUSABLE, ACCOUNT_FREEZE.
|
|
33
|
+
*
|
|
34
|
+
* Not every capability maps to a rule. `FEE_CONTROL` and `ORACLE_SETTER`
|
|
35
|
+
* are deliberately unmapped — a fee change has no single response, and a
|
|
36
|
+
* rule nobody can act on trains a team to close alerts unread.
|
|
37
|
+
* `unmappedCapabilities()` reports them rather than dropping them silently.
|
|
38
|
+
*/
|
|
32
39
|
type: string;
|
|
33
40
|
statement?: string;
|
|
34
41
|
/** The function, role or slot that grants it, when known. */
|
|
@@ -50,7 +57,13 @@ export interface AuditHandoverInput {
|
|
|
50
57
|
treasuryThresholdUsd?: number;
|
|
51
58
|
}
|
|
52
59
|
|
|
53
|
-
|
|
60
|
+
/**
|
|
61
|
+
* One generated rule, paired with the capability that produced it.
|
|
62
|
+
*
|
|
63
|
+
* Exported because it is the element type of `rulesFromAudit`'s return value —
|
|
64
|
+
* without it a consumer can destructure the result but cannot name its type.
|
|
65
|
+
*/
|
|
66
|
+
export interface Generated {
|
|
54
67
|
capability: string;
|
|
55
68
|
rule: CreateRuleInput;
|
|
56
69
|
}
|