@decentrys/sentinel-sdk 0.1.0 → 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 +181 -25
- 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
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
# @decentrys/sentinel-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Watches contracts, wallets and treasuries you already deployed, and tells you when something changes.**
|
|
4
|
+
|
|
5
|
+
An audit is a point-in-time review. Sentinel is what happens afterwards: you
|
|
6
|
+
register what you own, write rules about what would worry you, and get alerts
|
|
7
|
+
when those conditions actually occur.
|
|
4
8
|
|
|
5
9
|
## Install
|
|
6
10
|
|
|
@@ -8,46 +12,198 @@ Monitoring for deployed contracts, wallets and treasuries.
|
|
|
8
12
|
npm install @decentrys/sentinel-sdk
|
|
9
13
|
```
|
|
10
14
|
|
|
11
|
-
|
|
15
|
+
Zero runtime dependencies. Node 18+. Types included.
|
|
16
|
+
|
|
17
|
+
## Getting an API key
|
|
18
|
+
|
|
19
|
+
Sign in at [decentrys.com/developers](https://decentrys.com/developers) and create a key.
|
|
20
|
+
|
|
21
|
+
| Prefix | Where it belongs | Why |
|
|
22
|
+
|---|---|---|
|
|
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
|
+
| `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
|
+
|
|
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.
|
|
29
|
+
|
|
30
|
+
## Quick start
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
import { Sentinel } from '@decentrys/sentinel-sdk';
|
|
34
|
+
|
|
35
|
+
const sentinel = new Sentinel({ apiKey: process.env.DECENTRYS_API_KEY! });
|
|
36
|
+
const projectId = 'proj_…';
|
|
37
|
+
|
|
38
|
+
// 1. What do you want watched?
|
|
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
|
+
});
|
|
45
|
+
|
|
46
|
+
// 2. What would worry you?
|
|
47
|
+
const rule = await sentinel.createRule({
|
|
48
|
+
projectId,
|
|
49
|
+
name: 'Large treasury outflow',
|
|
50
|
+
severity: 'HIGH', // INFO | LOW | MEDIUM | HIGH | CRITICAL
|
|
51
|
+
triggerType: 'treasury.transfer',
|
|
52
|
+
conditions: {
|
|
53
|
+
op: 'AND',
|
|
54
|
+
conditions: [
|
|
55
|
+
{ op: 'eq', field: 'transfer.direction', value: 'OUT' },
|
|
56
|
+
{ op: 'gt', field: 'transfer.valueUsd', value: 50_000 },
|
|
57
|
+
],
|
|
58
|
+
},
|
|
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
|
|
64
|
+
});
|
|
65
|
+
|
|
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
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`await sentinel.catalog()` returns every fact field, operator and action you can
|
|
79
|
+
build a rule from, so you can generate a rule builder rather than hardcode one.
|
|
80
|
+
|
|
81
|
+
## Test a rule before you arm it
|
|
12
82
|
|
|
13
83
|
```ts
|
|
14
|
-
|
|
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
|
|
91
|
+
```
|
|
15
92
|
|
|
16
|
-
|
|
93
|
+
A rule nobody has tested is a rule whose behaviour you'll discover during an
|
|
94
|
+
incident.
|
|
17
95
|
|
|
18
|
-
|
|
96
|
+
## Report events we can't see
|
|
97
|
+
|
|
98
|
+
Some things only your system knows: a deploy pipeline running, an internally
|
|
99
|
+
approved treasury movement, an off-chain governance action.
|
|
100
|
+
|
|
101
|
+
```ts
|
|
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.');
|
|
110
|
+
```
|
|
19
111
|
|
|
20
|
-
|
|
21
|
-
|
|
112
|
+
**This is the one method that never throws.** It runs on your hot path, and a
|
|
113
|
+
monitoring call must not be able to fail the thing it's monitoring. It returns a
|
|
114
|
+
boolean instead.
|
|
115
|
+
|
|
116
|
+
## Turn an audit into monitoring
|
|
117
|
+
|
|
118
|
+
The most valuable thing here. An audit identifies what a contract can do; this
|
|
119
|
+
converts that into what gets watched.
|
|
120
|
+
|
|
121
|
+
```ts
|
|
122
|
+
import { rulesFromAudit, unmappedCapabilities, type AuditCapability } from '@decentrys/sentinel-sdk';
|
|
123
|
+
|
|
124
|
+
const capabilities: AuditCapability[] = [
|
|
125
|
+
{ type: 'UPGRADEABLE', grantedBy: 'EIP-1967 implementation slot' },
|
|
126
|
+
{ type: 'MINT_AUTHORITY' },
|
|
127
|
+
{ type: 'FEE_CONTROL' },
|
|
128
|
+
];
|
|
129
|
+
|
|
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})`);
|
|
22
136
|
await sentinel.createRule(rule);
|
|
23
137
|
}
|
|
138
|
+
|
|
139
|
+
// Told, not hidden: which capabilities produced no rule.
|
|
140
|
+
console.log(unmappedCapabilities(capabilities)); // ['FEE_CONTROL']
|
|
24
141
|
```
|
|
25
142
|
|
|
26
|
-
|
|
143
|
+
It watches the upgrade **happening**, never the contract **being** upgradeable —
|
|
144
|
+
a capability is not a fault. Capabilities with no plausible response generate no
|
|
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.
|
|
27
148
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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`.
|
|
32
154
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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.
|
|
36
158
|
|
|
37
|
-
##
|
|
159
|
+
## Every method
|
|
38
160
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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)` |
|
|
43
167
|
|
|
44
|
-
|
|
168
|
+
`registerTarget` takes any `TargetType`: `CONTRACT` · `WALLET` · `TREASURY` ·
|
|
169
|
+
`MULTISIG` · `LP_POOL` · `ORACLE` · `BRIDGE` · `GOVERNANCE`. Target input is
|
|
170
|
+
`{ projectId, chain, address, label? }`.
|
|
171
|
+
|
|
172
|
+
## It throws
|
|
173
|
+
|
|
174
|
+
Unlike `@decentrys/protect`, this client raises errors. It's management — if
|
|
175
|
+
registering a contract fails, you must know, or you'll believe you're monitored
|
|
176
|
+
when you aren't.
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
import { Sentinel, SentinelError } from '@decentrys/sentinel-sdk';
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
await sentinel.registerContract({ projectId, chain: 'ethereum', address });
|
|
183
|
+
} catch (error) {
|
|
184
|
+
if (error instanceof SentinelError) console.error(error.status, error.code, error.message);
|
|
185
|
+
}
|
|
186
|
+
```
|
|
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
|
+
|
|
194
|
+
## The rest of the SDK
|
|
195
|
+
|
|
196
|
+
| Package | For |
|
|
197
|
+
|---|---|
|
|
198
|
+
| [`@decentrys/protect`](https://www.npmjs.com/package/@decentrys/protect) | Pre-sign risk assessment for wallets and dapps |
|
|
199
|
+
| [`@decentrys/ui-sdk`](https://www.npmjs.com/package/@decentrys/ui-sdk) | React components that render Protect results |
|
|
200
|
+
| [`@decentrys/sentinel-sdk`](https://www.npmjs.com/package/@decentrys/sentinel-sdk) | Monitoring deployed contracts and treasuries |
|
|
201
|
+
| [`@decentrys/risk-sdk`](https://www.npmjs.com/package/@decentrys/risk-sdk) | Screening for exchanges and custodians |
|
|
202
|
+
| [`@decentrys/dri-sdk`](https://www.npmjs.com/package/@decentrys/dri-sdk) | Fund tracing and recovery intelligence |
|
|
203
|
+
| [`@decentrys/agent`](https://www.npmjs.com/package/@decentrys/agent) | Policy enforcement for autonomous agents |
|
|
45
204
|
|
|
46
205
|
## Licence
|
|
47
206
|
|
|
48
207
|
MIT © Decentrys Labs
|
|
49
208
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
- [decentrys.com](https://decentrys.com) · [SDK overview](https://decentrys.com/sdk) · [Developer API](https://decentrys.com/developers)
|
|
53
|
-
- Source: [github.com/teamdecentrys-byte/Decentrys](https://github.com/teamdecentrys-byte/Decentrys)
|
|
209
|
+
[decentrys.com](https://decentrys.com) · [SDK overview](https://decentrys.com/sdk) · [Developer API](https://decentrys.com/developers) · [Source](https://github.com/teamdecentrys-byte/Decentrys)
|
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
|
}
|