macwarden 1.0.1 → 1.1.0

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.
Files changed (67) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +20 -6
  3. package/dist/bin.js +7 -1
  4. package/dist/bounded-file.js +1 -0
  5. package/dist/cancellation.js +1 -1
  6. package/dist/caveat-address.js +1 -1
  7. package/dist/cli.js +1 -1
  8. package/dist/commands/attenuate.js +1 -1
  9. package/dist/commands/bake/allocate.js +1 -1
  10. package/dist/commands/bake/index.js +1 -1
  11. package/dist/commands/bake/write-out.js +1 -1
  12. package/dist/commands/handlers.js +1 -1
  13. package/dist/commands/inspect.js +1 -1
  14. package/dist/commands/inventory.js +1 -1
  15. package/dist/commands/recommend.js +1 -1
  16. package/dist/commands/respond.js +1 -1
  17. package/dist/commands/revoke.js +1 -1
  18. package/dist/commands/rotate.js +1 -1
  19. package/dist/commands/scan.js +1 -1
  20. package/dist/commands/verify.js +1 -0
  21. package/dist/commands/watch.js +1 -1
  22. package/dist/credential-recognition.js +1 -1
  23. package/dist/decode/index.js +1 -1
  24. package/dist/decode/recognition.js +1 -1
  25. package/dist/environment.js +1 -1
  26. package/dist/errors.js +1 -1
  27. package/dist/grade/index.js +1 -1
  28. package/dist/grouped-runs.js +1 -1
  29. package/dist/input/index.js +1 -1
  30. package/dist/input/lndconnect.js +1 -1
  31. package/dist/lnd/grpc.js +1 -1
  32. package/dist/lnd/index.js +1 -1
  33. package/dist/lnd/middleware-proto.js +1 -1
  34. package/dist/lnd/tls-identity.js +1 -0
  35. package/dist/online.js +1 -1
  36. package/dist/output/index.js +1 -1
  37. package/dist/output/scan-formats.js +1 -1
  38. package/dist/process-error-context.js +1 -1
  39. package/dist/protected-path.js +1 -1
  40. package/dist/registry/index.js +1 -1
  41. package/dist/registry/process-domain.js +1 -1
  42. package/dist/report/access-review.js +1 -1
  43. package/dist/runtime.js +1784 -617
  44. package/dist/scan/agent-configs.js +1 -1
  45. package/dist/scan/git-history.js +1 -1
  46. package/dist/scan/ignore.js +1 -1
  47. package/dist/scan/index.js +1 -1
  48. package/dist/scan/mcp-context.js +1 -1
  49. package/dist/scan/nwc-match.js +1 -1
  50. package/dist/scan/patterns.js +1 -1
  51. package/dist/scan/redact.js +1 -1
  52. package/dist/secret.js +1 -1
  53. package/dist/version.js +1 -1
  54. package/dist/watch/alert-throttle.js +1 -1
  55. package/dist/watch/alert.js +1 -1
  56. package/dist/watch/canary.js +1 -1
  57. package/dist/watch/output-queue.js +1 -1
  58. package/dist/watch/usage.js +1 -1
  59. package/package.json +2 -2
  60. package/schemas/output/attenuate.schema.json +2 -0
  61. package/schemas/output/inspect.schema.json +2 -0
  62. package/schemas/output/inventory.schema.json +35 -1
  63. package/schemas/output/recommend.schema.json +471 -0
  64. package/schemas/output/scan.schema.json +2 -0
  65. package/schemas/output/verify.schema.json +552 -0
  66. package/schemas/output/watch-event.schema.json +232 -0
  67. package/schemas/output/watch.schema.json +377 -0
@@ -1 +1 @@
1
- export {api37_agentConfigCandidates as agentConfigCandidates, api37_discoverAgentConfigs as discoverAgentConfigs, api37_defaultAgentConfigEnvironment as defaultAgentConfigEnvironment} from "../runtime.js";
1
+ export {api40_agentConfigCandidates as agentConfigCandidates, api40_discoverAgentConfigs as discoverAgentConfigs, api40_defaultAgentConfigEnvironment as defaultAgentConfigEnvironment} from "../runtime.js";
@@ -1 +1 @@
1
- export {api38_nonLocalPath as nonLocalPath, api38_locateRepository as locateRepository, api38_gitEnvironment as gitEnvironment, api38_assertWorkTree as assertWorkTree, api38_isShallowRepository as isShallowRepository, api38_historyEntries as historyEntries, api38_blobSizes as blobSizes, api38_readBlobs as readBlobs, api38_GitHistoryError as GitHistoryError, api38_MODE_REGULAR as MODE_REGULAR, api38_MODE_SYMLINK as MODE_SYMLINK, api38_MODE_OTHER as MODE_OTHER, api38_GIT_IDLE_TIMEOUT_MS as GIT_IDLE_TIMEOUT_MS, api38_MAX_HISTORY_ENTRIES as MAX_HISTORY_ENTRIES, api38_PINNED_CONFIG as PINNED_CONFIG} from "../runtime.js";
1
+ export {api41_nonLocalPath as nonLocalPath, api41_locateRepository as locateRepository, api41_gitEnvironment as gitEnvironment, api41_assertWorkTree as assertWorkTree, api41_isShallowRepository as isShallowRepository, api41_historyEntries as historyEntries, api41_blobSizes as blobSizes, api41_readBlobs as readBlobs, api41_GitHistoryError as GitHistoryError, api41_MODE_REGULAR as MODE_REGULAR, api41_MODE_SYMLINK as MODE_SYMLINK, api41_MODE_OTHER as MODE_OTHER, api41_GIT_IDLE_TIMEOUT_MS as GIT_IDLE_TIMEOUT_MS, api41_MAX_HISTORY_ENTRIES as MAX_HISTORY_ENTRIES, api41_PINNED_CONFIG as PINNED_CONFIG, api41_PREFLIGHT_LIMITS as PREFLIGHT_LIMITS} from "../runtime.js";
@@ -1 +1 @@
1
- export {api39_parseIgnoreFile as parseIgnoreFile, api39_IgnoreFileError as IgnoreFileError} from "../runtime.js";
1
+ export {api42_parseIgnoreFile as parseIgnoreFile, api42_IgnoreFileError as IgnoreFileError} from "../runtime.js";
@@ -1 +1 @@
1
- export {api40_readBounded as readBounded, api40_scan as scan, api40_IgnoreFileError as IgnoreFileError, api40_GitHistoryError as GitHistoryError, api40_FINDINGS_LIMIT as FINDINGS_LIMIT, api40_ALSO_AT_EXAMPLES as ALSO_AT_EXAMPLES, api40_HISTORY_DEDUP_WORK_LIMIT as HISTORY_DEDUP_WORK_LIMIT, api40_FindingsLimitError as FindingsLimitError, api40_SCAN_CONCURRENCY as SCAN_CONCURRENCY} from "../runtime.js";
1
+ export {api43_scan as scan, api43_IgnoreFileError as IgnoreFileError, api43_GitHistoryError as GitHistoryError, api43_FINDINGS_LIMIT as FINDINGS_LIMIT, api43_ALSO_AT_EXAMPLES as ALSO_AT_EXAMPLES, api43_HISTORY_DEDUP_WORK_LIMIT as HISTORY_DEDUP_WORK_LIMIT, api43_FindingsLimitError as FindingsLimitError, api43_SCAN_CONCURRENCY as SCAN_CONCURRENCY, api43_readBounded as readBounded} from "../runtime.js";
@@ -1 +1 @@
1
- export {api41_mcpServerStringSpans as mcpServerStringSpans, api41_withinSpans as withinSpans} from "../runtime.js";
1
+ export {api44_mcpServerStringSpans as mcpServerStringSpans, api44_withinSpans as withinSpans, api44_MAX_DEPTH as MAX_DEPTH} from "../runtime.js";
@@ -1 +1 @@
1
- export {api42_nwcMatches as nwcMatches} from "../runtime.js";
1
+ export {api45_nwcMatches as nwcMatches, api45_replaceNwc as replaceNwc, api45_nwcUnescaped as nwcUnescaped} from "../runtime.js";
@@ -1 +1 @@
1
- export {api43_macaroonHex as macaroonHex, api43_macaroonBase64 as macaroonBase64, api43_lndconnect as lndconnect, api43_nwc as nwc} from "../runtime.js";
1
+ export {api46_macaroonHex as macaroonHex, api46_macaroonBase64 as macaroonBase64, api46_lndconnect as lndconnect, api46_nwc as nwc} from "../runtime.js";
@@ -1 +1 @@
1
- export {api44_redactDecoded as redactDecoded, api44_redactPath as redactPath, api44_collectNwcSecrets as collectNwcSecrets, api44_knownSecretRedactor as knownSecretRedactor, api44_redactKnownSecrets as redactKnownSecrets} from "../runtime.js";
1
+ export {api47_redactDecoded as redactDecoded, api47_redactPath as redactPath, api47_collectNwcSecrets as collectNwcSecrets, api47_knownSecretRedactor as knownSecretRedactor, api47_redactKnownSecrets as redactKnownSecrets} from "../runtime.js";
package/dist/secret.js CHANGED
@@ -1 +1 @@
1
- export {api45_Secret as Secret} from "./runtime.js";
1
+ export {api48_Secret as Secret} from "./runtime.js";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export {api46_macwardenVersion as macwardenVersion} from "./runtime.js";
1
+ export {api49_macwardenVersion as macwardenVersion} from "./runtime.js";
@@ -1 +1 @@
1
- export {api47_createAlertThrottle as createAlertThrottle, api47_createAlertRunner as createAlertRunner, api47_ALERT_WINDOW_MS as ALERT_WINDOW_MS, api47_MAX_TRACKED_CANARIES as MAX_TRACKED_CANARIES} from "../runtime.js";
1
+ export {api50_createAlertThrottle as createAlertThrottle, api50_createAlertRunner as createAlertRunner, api50_ALERT_WINDOW_MS as ALERT_WINDOW_MS, api50_MAX_TRACKED_CANARIES as MAX_TRACKED_CANARIES} from "../runtime.js";
@@ -1 +1 @@
1
- export {api48_reapAlertGroups as reapAlertGroups, api48_runAlertCommand as runAlertCommand, api48_ALERT_TIMEOUT_MS as ALERT_TIMEOUT_MS, api48_ALERT_KILL_MS as ALERT_KILL_MS, api48_ALERT_GRACE_MS as ALERT_GRACE_MS} from "../runtime.js";
1
+ export {api51_reapAlertGroups as reapAlertGroups, api51_alertCleanupDone as alertCleanupDone, api51_runAlertCommand as runAlertCommand, api51_ALERT_TIMEOUT_MS as ALERT_TIMEOUT_MS, api51_ALERT_KILL_MS as ALERT_KILL_MS, api51_ALERT_GRACE_MS as ALERT_GRACE_MS, api51_ALERT_CLEANUP_MS as ALERT_CLEANUP_MS} from "../runtime.js";
@@ -1 +1 @@
1
- export {api49_canaryConfigPath as canaryConfigPath, api49_newCaveatName as newCaveatName, api49_newCondition as newCondition, api49_canaryCondition as canaryCondition, api49_readCanaryConfig as readCanaryConfig, api49_ensureCanaryConfig as ensureCanaryConfig, api49_canaryEntries as canaryEntries, api49_isCanary as isCanary} from "../runtime.js";
1
+ export {api52_canaryConfigPath as canaryConfigPath, api52_newCaveatName as newCaveatName, api52_newCondition as newCondition, api52_canaryCondition as canaryCondition, api52_readCanaryConfig as readCanaryConfig, api52_ensureCanaryConfig as ensureCanaryConfig, api52_canaryEntries as canaryEntries, api52_isCanary as isCanary, api52_CANARY_FILE_LIMIT as CANARY_FILE_LIMIT} from "../runtime.js";
@@ -1 +1 @@
1
- export {api50_retryable as retryable, api50_fdWriter as fdWriter, api50_createOutputQueue as createOutputQueue, api50_OUTPUT_LIMIT_BYTES as OUTPUT_LIMIT_BYTES} from "../runtime.js";
1
+ export {api53_retryable as retryable, api53_fdWriter as fdWriter, api53_createOutputQueue as createOutputQueue, api53_OUTPUT_LIMIT_BYTES as OUTPUT_LIMIT_BYTES} from "../runtime.js";
@@ -1 +1 @@
1
- export {api51_usagePath as usagePath, api51_readUsage as readUsage, api51_writeUsage as writeUsage, api51_USAGE_LIMIT as USAGE_LIMIT, api51_CANARY_LIMIT as CANARY_LIMIT, api51_COVERAGE_LIMIT as COVERAGE_LIMIT, api51_UsageFileError as UsageFileError, api51_UsageStore as UsageStore} from "../runtime.js";
1
+ export {api54_usagePath as usagePath, api54_readUsage as readUsage, api54_writeUsage as writeUsage, api54_USAGE_LIMIT as USAGE_LIMIT, api54_CANARY_LIMIT as CANARY_LIMIT, api54_COVERAGE_LIMIT as COVERAGE_LIMIT, api54_SPAN_LIMIT as SPAN_LIMIT, api54_USAGE_FILE_LIMIT as USAGE_FILE_LIMIT, api54_UsageFileError as UsageFileError, api54_UsageStore as UsageStore} from "../runtime.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "macwarden",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Lightning credential hygiene for LND: inspect, scan (incl. git history), inventory, bake, revoke, rotate and attenuate macaroons",
5
5
  "keywords": [
6
6
  "lightning",
@@ -38,7 +38,7 @@
38
38
  "provenance": true
39
39
  },
40
40
  "engines": {
41
- "node": ">=22.12.0"
41
+ "node": "^22.23.2 || ^24.18.1 || >=26.5.1"
42
42
  },
43
43
  "license": "MIT",
44
44
  "scripts": {
@@ -332,6 +332,8 @@
332
332
  "root-key-0",
333
333
  "trailing-bytes",
334
334
  "bad-time-before",
335
+ "identifier-exceeds-bounds",
336
+ "caveats-exceed-bounds",
335
337
  "unassessed-uri",
336
338
  "unassessed-permission",
337
339
  "no-permissions",
@@ -98,6 +98,8 @@
98
98
  "root-key-0",
99
99
  "trailing-bytes",
100
100
  "bad-time-before",
101
+ "identifier-exceeds-bounds",
102
+ "caveats-exceed-bounds",
101
103
  "unassessed-uri",
102
104
  "unassessed-permission",
103
105
  "no-permissions",
@@ -555,7 +555,8 @@
555
555
  "credentials",
556
556
  "totals",
557
557
  "controls",
558
- "signOff"
558
+ "signOff",
559
+ "limitations"
559
560
  ],
560
561
  "properties": {
561
562
  "schema": {
@@ -616,6 +617,7 @@
616
617
  "replacedBy",
617
618
  "lastUsed",
618
619
  "calls",
620
+ "canary",
619
621
  "flags"
620
622
  ],
621
623
  "properties": {
@@ -709,6 +711,34 @@
709
711
  ],
710
712
  "minimum": 0
711
713
  },
714
+ "canary": {
715
+ "oneOf": [
716
+ {
717
+ "type": "null"
718
+ },
719
+ {
720
+ "type": "object",
721
+ "additionalProperties": false,
722
+ "required": [
723
+ "uses",
724
+ "firstUse",
725
+ "lastUse"
726
+ ],
727
+ "properties": {
728
+ "uses": {
729
+ "type": "integer",
730
+ "minimum": 1
731
+ },
732
+ "firstUse": {
733
+ "type": "string"
734
+ },
735
+ "lastUse": {
736
+ "type": "string"
737
+ }
738
+ }
739
+ }
740
+ ]
741
+ },
712
742
  "flags": {
713
743
  "type": "array",
714
744
  "uniqueItems": true,
@@ -866,6 +896,10 @@
866
896
  "type": "null"
867
897
  }
868
898
  }
899
+ },
900
+ "limitations": {
901
+ "type": "string",
902
+ "minLength": 1
869
903
  }
870
904
  }
871
905
  }
@@ -0,0 +1,471 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://github.com/ZilverZtream/macwarden/blob/main/schemas/output/recommend.schema.json",
4
+ "title": "macwarden recommend --json output",
5
+ "description": "Normative source: SPEC.md, Commands > 9. recommend. A recommendation only; commands is empty whenever the evidence does not support narrowing.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema",
10
+ "command",
11
+ "ok",
12
+ "warnings",
13
+ "result",
14
+ "error"
15
+ ],
16
+ "properties": {
17
+ "schema": {
18
+ "const": 1
19
+ },
20
+ "command": {
21
+ "const": "recommend"
22
+ },
23
+ "ok": {
24
+ "type": "boolean"
25
+ },
26
+ "warnings": {
27
+ "type": "array",
28
+ "items": {
29
+ "$ref": "#/$defs/warning"
30
+ }
31
+ },
32
+ "result": {
33
+ "oneOf": [
34
+ {
35
+ "type": "null"
36
+ },
37
+ {
38
+ "$ref": "#/$defs/result"
39
+ }
40
+ ]
41
+ },
42
+ "error": {
43
+ "oneOf": [
44
+ {
45
+ "type": "null"
46
+ },
47
+ {
48
+ "$ref": "#/$defs/error"
49
+ }
50
+ ]
51
+ }
52
+ },
53
+ "allOf": [
54
+ {
55
+ "if": {
56
+ "properties": {
57
+ "ok": {
58
+ "const": true
59
+ }
60
+ },
61
+ "required": [
62
+ "ok"
63
+ ]
64
+ },
65
+ "then": {
66
+ "properties": {
67
+ "result": {
68
+ "$ref": "#/$defs/result"
69
+ },
70
+ "error": {
71
+ "type": "null"
72
+ }
73
+ }
74
+ },
75
+ "else": {
76
+ "properties": {
77
+ "result": {
78
+ "type": "null"
79
+ },
80
+ "error": {
81
+ "$ref": "#/$defs/error"
82
+ }
83
+ }
84
+ }
85
+ }
86
+ ],
87
+ "$defs": {
88
+ "error": {
89
+ "type": "object",
90
+ "additionalProperties": false,
91
+ "required": [
92
+ "code",
93
+ "step",
94
+ "message"
95
+ ],
96
+ "properties": {
97
+ "code": {
98
+ "type": "integer",
99
+ "minimum": 1,
100
+ "maximum": 8
101
+ },
102
+ "step": {
103
+ "type": [
104
+ "string",
105
+ "null"
106
+ ],
107
+ "minLength": 1
108
+ },
109
+ "message": {
110
+ "type": "string",
111
+ "minLength": 1
112
+ }
113
+ }
114
+ },
115
+ "warning": {
116
+ "oneOf": [
117
+ {
118
+ "type": "string",
119
+ "minLength": 1
120
+ },
121
+ {
122
+ "type": "object",
123
+ "additionalProperties": false,
124
+ "required": [
125
+ "code",
126
+ "message"
127
+ ],
128
+ "properties": {
129
+ "code": {
130
+ "type": "string",
131
+ "minLength": 1
132
+ },
133
+ "message": {
134
+ "type": "string"
135
+ }
136
+ }
137
+ }
138
+ ]
139
+ },
140
+ "rootKeyId": {
141
+ "type": "string",
142
+ "pattern": "^(0|[1-9][0-9]{0,19})$",
143
+ "description": "uint64 as a canonical decimal string (range up to 18446744073709551615 is enforced by the decoder)."
144
+ },
145
+ "grade": {
146
+ "enum": [
147
+ "ADMIN",
148
+ "SPEND",
149
+ "OPERATE",
150
+ "RECEIVE",
151
+ "READ",
152
+ "UNASSESSED"
153
+ ]
154
+ },
155
+ "registryEntry": {
156
+ "type": "object",
157
+ "required": [
158
+ "nodePubkey",
159
+ "label",
160
+ "rootKeyId",
161
+ "permissions",
162
+ "caveats",
163
+ "grade",
164
+ "fingerprint",
165
+ "outPath",
166
+ "createdAt",
167
+ "verified",
168
+ "status",
169
+ "revokedAt",
170
+ "revokeEvidence",
171
+ "replaces",
172
+ "replacedBy"
173
+ ],
174
+ "additionalProperties": false,
175
+ "properties": {
176
+ "nodePubkey": {
177
+ "type": "string",
178
+ "pattern": "^0[23][0-9a-fA-F]{64}$"
179
+ },
180
+ "label": {
181
+ "type": [
182
+ "string",
183
+ "null"
184
+ ],
185
+ "pattern": "^[A-Za-z][A-Za-z0-9._-]{0,63}$"
186
+ },
187
+ "rootKeyId": {
188
+ "type": "string",
189
+ "pattern": "^(0|[1-9][0-9]*)$"
190
+ },
191
+ "permissions": {
192
+ "type": "array",
193
+ "items": {
194
+ "type": "string"
195
+ }
196
+ },
197
+ "caveats": {
198
+ "type": "array",
199
+ "items": {
200
+ "type": "object"
201
+ }
202
+ },
203
+ "grade": {
204
+ "enum": [
205
+ "ADMIN",
206
+ "SPEND",
207
+ "OPERATE",
208
+ "RECEIVE",
209
+ "READ",
210
+ "UNASSESSED"
211
+ ]
212
+ },
213
+ "fingerprint": {
214
+ "type": [
215
+ "string",
216
+ "null"
217
+ ],
218
+ "pattern": "^fp:[0-9a-f]{16}$"
219
+ },
220
+ "outPath": {
221
+ "type": [
222
+ "string",
223
+ "null"
224
+ ]
225
+ },
226
+ "createdAt": {
227
+ "type": "string"
228
+ },
229
+ "verified": {
230
+ "type": "boolean"
231
+ },
232
+ "status": {
233
+ "enum": [
234
+ "active",
235
+ "revoked"
236
+ ]
237
+ },
238
+ "revokedAt": {
239
+ "type": [
240
+ "string",
241
+ "null"
242
+ ]
243
+ },
244
+ "revokeEvidence": {
245
+ "enum": [
246
+ "rejected",
247
+ "by-id-only",
248
+ null
249
+ ]
250
+ },
251
+ "replaces": {
252
+ "type": [
253
+ "string",
254
+ "null"
255
+ ],
256
+ "pattern": "^(0|[1-9][0-9]*)$"
257
+ },
258
+ "replacedBy": {
259
+ "type": [
260
+ "string",
261
+ "null"
262
+ ],
263
+ "pattern": "^(0|[1-9][0-9]*)$"
264
+ }
265
+ },
266
+ "allOf": [
267
+ {
268
+ "if": {
269
+ "properties": {
270
+ "fingerprint": {
271
+ "type": "null"
272
+ }
273
+ }
274
+ },
275
+ "then": {
276
+ "properties": {
277
+ "verified": {
278
+ "const": false
279
+ },
280
+ "outPath": {
281
+ "type": "null"
282
+ }
283
+ }
284
+ }
285
+ }
286
+ ]
287
+ },
288
+ "result": {
289
+ "type": "object",
290
+ "additionalProperties": false,
291
+ "required": [
292
+ "node",
293
+ "selector",
294
+ "label",
295
+ "rootKeyId",
296
+ "credentials",
297
+ "observed",
298
+ "unmapped",
299
+ "recommended",
300
+ "recommendedUris",
301
+ "current",
302
+ "unneeded",
303
+ "observation",
304
+ "commands"
305
+ ],
306
+ "properties": {
307
+ "node": {
308
+ "type": "string",
309
+ "pattern": "^0[23][0-9a-fA-F]{64}$"
310
+ },
311
+ "selector": {
312
+ "type": "string",
313
+ "minLength": 1
314
+ },
315
+ "label": {
316
+ "type": [
317
+ "string",
318
+ "null"
319
+ ]
320
+ },
321
+ "rootKeyId": {
322
+ "oneOf": [
323
+ {
324
+ "type": "null"
325
+ },
326
+ {
327
+ "$ref": "#/$defs/rootKeyId"
328
+ }
329
+ ]
330
+ },
331
+ "credentials": {
332
+ "type": "array",
333
+ "uniqueItems": true,
334
+ "items": {
335
+ "type": "string",
336
+ "pattern": "^id:[0-9a-f]{16}$"
337
+ }
338
+ },
339
+ "observed": {
340
+ "type": "array",
341
+ "items": {
342
+ "type": "object",
343
+ "additionalProperties": false,
344
+ "required": [
345
+ "method",
346
+ "calls",
347
+ "lastUsed",
348
+ "permissions"
349
+ ],
350
+ "properties": {
351
+ "method": {
352
+ "type": "string"
353
+ },
354
+ "calls": {
355
+ "type": "integer",
356
+ "minimum": 0
357
+ },
358
+ "lastUsed": {
359
+ "type": "string"
360
+ },
361
+ "permissions": {
362
+ "type": "array",
363
+ "uniqueItems": true,
364
+ "items": {
365
+ "type": "string"
366
+ }
367
+ }
368
+ }
369
+ }
370
+ },
371
+ "unmapped": {
372
+ "type": "array",
373
+ "uniqueItems": true,
374
+ "items": {
375
+ "type": "string"
376
+ }
377
+ },
378
+ "recommended": {
379
+ "type": "array",
380
+ "uniqueItems": true,
381
+ "items": {
382
+ "type": "string"
383
+ }
384
+ },
385
+ "recommendedUris": {
386
+ "type": "array",
387
+ "uniqueItems": true,
388
+ "items": {
389
+ "type": "string",
390
+ "pattern": "^uri:"
391
+ }
392
+ },
393
+ "current": {
394
+ "oneOf": [
395
+ {
396
+ "type": "null"
397
+ },
398
+ {
399
+ "type": "array",
400
+ "uniqueItems": true,
401
+ "items": {
402
+ "type": "string"
403
+ }
404
+ }
405
+ ]
406
+ },
407
+ "unneeded": {
408
+ "type": "array",
409
+ "uniqueItems": true,
410
+ "items": {
411
+ "type": "string"
412
+ }
413
+ },
414
+ "observation": {
415
+ "type": "object",
416
+ "additionalProperties": false,
417
+ "required": [
418
+ "seconds",
419
+ "since",
420
+ "until",
421
+ "sessions",
422
+ "short",
423
+ "accepted"
424
+ ],
425
+ "properties": {
426
+ "seconds": {
427
+ "oneOf": [
428
+ {
429
+ "type": "null"
430
+ },
431
+ {
432
+ "type": "integer",
433
+ "minimum": 0
434
+ }
435
+ ]
436
+ },
437
+ "since": {
438
+ "type": [
439
+ "string",
440
+ "null"
441
+ ]
442
+ },
443
+ "until": {
444
+ "type": [
445
+ "string",
446
+ "null"
447
+ ]
448
+ },
449
+ "sessions": {
450
+ "type": "integer",
451
+ "minimum": 0
452
+ },
453
+ "short": {
454
+ "type": "boolean"
455
+ },
456
+ "accepted": {
457
+ "type": "boolean"
458
+ }
459
+ }
460
+ },
461
+ "commands": {
462
+ "type": "array",
463
+ "items": {
464
+ "type": "string",
465
+ "minLength": 1
466
+ }
467
+ }
468
+ }
469
+ }
470
+ }
471
+ }
@@ -80,6 +80,8 @@
80
80
  "root-key-0",
81
81
  "trailing-bytes",
82
82
  "bad-time-before",
83
+ "identifier-exceeds-bounds",
84
+ "caveats-exceed-bounds",
83
85
  "unassessed-uri",
84
86
  "unassessed-permission",
85
87
  "no-permissions",