@smthrs/kernel 0.0.0-stage → 1.0.0-rc.4
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/CHANGELOG.md +206 -0
- package/LICENSE +21 -0
- package/README.md +154 -2
- package/dist/cjs/CapabilitySet.d.ts +6 -0
- package/dist/cjs/CapabilitySet.d.ts.map +1 -0
- package/dist/cjs/CapabilitySet.js +19 -0
- package/dist/cjs/CapabilitySet.js.map +7 -0
- package/dist/cjs/ChildProcessEnvironment.d.ts +60 -0
- package/dist/cjs/ChildProcessEnvironment.d.ts.map +1 -0
- package/dist/cjs/ChildProcessEnvironment.js +61 -0
- package/dist/cjs/ChildProcessEnvironment.js.map +7 -0
- package/dist/cjs/ChildProcessSpawner.d.ts +100 -0
- package/dist/cjs/ChildProcessSpawner.d.ts.map +1 -0
- package/dist/cjs/ChildProcessSpawner.js +291 -0
- package/dist/cjs/ChildProcessSpawner.js.map +7 -0
- package/dist/cjs/CommandLine.d.ts +173 -0
- package/dist/cjs/CommandLine.d.ts.map +1 -0
- package/dist/cjs/CommandLine.js +54 -0
- package/dist/cjs/CommandLine.js.map +7 -0
- package/dist/cjs/ContainedSpawner.d.ts +135 -0
- package/dist/cjs/ContainedSpawner.d.ts.map +1 -0
- package/dist/cjs/ContainedSpawner.js +141 -0
- package/dist/cjs/ContainedSpawner.js.map +7 -0
- package/dist/cjs/FileSystem.d.ts +452 -0
- package/dist/cjs/FileSystem.d.ts.map +1 -0
- package/dist/cjs/FileSystem.js +890 -0
- package/dist/cjs/FileSystem.js.map +7 -0
- package/dist/cjs/FileSystemBatch.d.ts +94 -0
- package/dist/cjs/FileSystemBatch.d.ts.map +1 -0
- package/dist/cjs/FileSystemBatch.js +31 -0
- package/dist/cjs/FileSystemBatch.js.map +7 -0
- package/dist/cjs/GrantEvent.d.ts +240 -0
- package/dist/cjs/GrantEvent.d.ts.map +1 -0
- package/dist/cjs/GrantEvent.js +115 -0
- package/dist/cjs/GrantEvent.js.map +7 -0
- package/dist/cjs/GrantStore.d.ts +270 -0
- package/dist/cjs/GrantStore.d.ts.map +1 -0
- package/dist/cjs/GrantStore.js +857 -0
- package/dist/cjs/GrantStore.js.map +7 -0
- package/dist/cjs/HostError.d.ts +36 -0
- package/dist/cjs/HostError.d.ts.map +1 -0
- package/dist/cjs/HostError.js +17 -0
- package/dist/cjs/HostError.js.map +7 -0
- package/dist/cjs/HostServices.d.ts +101 -0
- package/dist/cjs/HostServices.d.ts.map +1 -0
- package/dist/cjs/HostServices.js +66 -0
- package/dist/cjs/HostServices.js.map +7 -0
- package/dist/cjs/HttpClient.d.ts +177 -0
- package/dist/cjs/HttpClient.d.ts.map +1 -0
- package/dist/cjs/HttpClient.js +217 -0
- package/dist/cjs/HttpClient.js.map +7 -0
- package/dist/cjs/Jj.d.ts +67 -0
- package/dist/cjs/Jj.d.ts.map +1 -0
- package/dist/cjs/Jj.js +118 -0
- package/dist/cjs/Jj.js.map +7 -0
- package/dist/cjs/JournalGrantStore.d.ts +65 -0
- package/dist/cjs/JournalGrantStore.d.ts.map +1 -0
- package/dist/cjs/JournalGrantStore.js +354 -0
- package/dist/cjs/JournalGrantStore.js.map +7 -0
- package/dist/cjs/Path.d.ts +37 -0
- package/dist/cjs/Path.d.ts.map +1 -0
- package/dist/cjs/Path.js +46 -0
- package/dist/cjs/Path.js.map +7 -0
- package/dist/cjs/ProcessConfinement.d.ts +55 -0
- package/dist/cjs/ProcessConfinement.d.ts.map +1 -0
- package/dist/cjs/ProcessConfinement.js +94 -0
- package/dist/cjs/ProcessConfinement.js.map +7 -0
- package/dist/cjs/ProcessLedger.d.ts +260 -0
- package/dist/cjs/ProcessLedger.d.ts.map +1 -0
- package/dist/cjs/ProcessLedger.js +190 -0
- package/dist/cjs/ProcessLedger.js.map +7 -0
- package/dist/cjs/Rooted.d.ts +53 -0
- package/dist/cjs/Rooted.d.ts.map +1 -0
- package/dist/cjs/Rooted.js +101 -0
- package/dist/cjs/Rooted.js.map +7 -0
- package/dist/cjs/Unreachable.d.ts +27 -0
- package/dist/cjs/Unreachable.d.ts.map +1 -0
- package/dist/cjs/Unreachable.js +43 -0
- package/dist/cjs/Unreachable.js.map +7 -0
- package/dist/cjs/Workspace.d.ts +62 -0
- package/dist/cjs/Workspace.d.ts.map +1 -0
- package/dist/cjs/Workspace.js +35 -0
- package/dist/cjs/Workspace.js.map +7 -0
- package/dist/cjs/index.d.ts +161 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +73 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/Containment.d.ts +24 -0
- package/dist/cjs/internal/Containment.d.ts.map +1 -0
- package/dist/cjs/internal/Containment.js +30 -0
- package/dist/cjs/internal/Containment.js.map +7 -0
- package/dist/cjs/internal/Pipeline.d.ts +18 -0
- package/dist/cjs/internal/Pipeline.d.ts.map +1 -0
- package/dist/cjs/internal/Pipeline.js +90 -0
- package/dist/cjs/internal/Pipeline.js.map +7 -0
- package/dist/cjs/internal/makeCapability.d.ts +16 -0
- package/dist/cjs/internal/makeCapability.d.ts.map +1 -0
- package/dist/cjs/internal/makeCapability.js +44 -0
- package/dist/cjs/internal/makeCapability.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/test/FileSystemBatchContract.d.ts +15 -0
- package/dist/cjs/test/FileSystemBatchContract.d.ts.map +1 -0
- package/dist/cjs/test/FileSystemBatchContract.js +76 -0
- package/dist/cjs/test/FileSystemBatchContract.js.map +7 -0
- package/dist/cjs/test/HostContract.d.ts +225 -0
- package/dist/cjs/test/HostContract.d.ts.map +1 -0
- package/dist/cjs/test/HostContract.js +489 -0
- package/dist/cjs/test/HostContract.js.map +7 -0
- package/dist/cjs/test/TestGrantStore.d.ts +31 -0
- package/dist/cjs/test/TestGrantStore.d.ts.map +1 -0
- package/dist/cjs/test/TestGrantStore.js +65 -0
- package/dist/cjs/test/TestGrantStore.js.map +7 -0
- package/dist/esm/CapabilitySet.d.ts +6 -0
- package/dist/esm/CapabilitySet.d.ts.map +1 -0
- package/dist/esm/CapabilitySet.js +6 -0
- package/dist/esm/CapabilitySet.js.map +1 -0
- package/dist/esm/ChildProcessEnvironment.d.ts +60 -0
- package/dist/esm/ChildProcessEnvironment.d.ts.map +1 -0
- package/dist/esm/ChildProcessEnvironment.js +91 -0
- package/dist/esm/ChildProcessEnvironment.js.map +1 -0
- package/dist/esm/ChildProcessSpawner.d.ts +100 -0
- package/dist/esm/ChildProcessSpawner.d.ts.map +1 -0
- package/dist/esm/ChildProcessSpawner.js +342 -0
- package/dist/esm/ChildProcessSpawner.js.map +1 -0
- package/dist/esm/CommandLine.d.ts +173 -0
- package/dist/esm/CommandLine.d.ts.map +1 -0
- package/dist/esm/CommandLine.js +195 -0
- package/dist/esm/CommandLine.js.map +1 -0
- package/dist/esm/ContainedSpawner.d.ts +135 -0
- package/dist/esm/ContainedSpawner.d.ts.map +1 -0
- package/dist/esm/ContainedSpawner.js +180 -0
- package/dist/esm/ContainedSpawner.js.map +1 -0
- package/dist/esm/FileSystem.d.ts +452 -0
- package/dist/esm/FileSystem.d.ts.map +1 -0
- package/dist/esm/FileSystem.js +989 -0
- package/dist/esm/FileSystem.js.map +1 -0
- package/dist/esm/FileSystemBatch.d.ts +94 -0
- package/dist/esm/FileSystemBatch.d.ts.map +1 -0
- package/dist/esm/FileSystemBatch.js +26 -0
- package/dist/esm/FileSystemBatch.js.map +1 -0
- package/dist/esm/GrantEvent.d.ts +240 -0
- package/dist/esm/GrantEvent.d.ts.map +1 -0
- package/dist/esm/GrantEvent.js +155 -0
- package/dist/esm/GrantEvent.js.map +1 -0
- package/dist/esm/GrantStore.d.ts +270 -0
- package/dist/esm/GrantStore.d.ts.map +1 -0
- package/dist/esm/GrantStore.js +951 -0
- package/dist/esm/GrantStore.js.map +1 -0
- package/dist/esm/HostError.d.ts +36 -0
- package/dist/esm/HostError.d.ts.map +1 -0
- package/dist/esm/HostError.js +20 -0
- package/dist/esm/HostError.js.map +1 -0
- package/dist/esm/HostServices.d.ts +101 -0
- package/dist/esm/HostServices.d.ts.map +1 -0
- package/dist/esm/HostServices.js +76 -0
- package/dist/esm/HostServices.js.map +1 -0
- package/dist/esm/HttpClient.d.ts +177 -0
- package/dist/esm/HttpClient.d.ts.map +1 -0
- package/dist/esm/HttpClient.js +299 -0
- package/dist/esm/HttpClient.js.map +1 -0
- package/dist/esm/Jj.d.ts +67 -0
- package/dist/esm/Jj.d.ts.map +1 -0
- package/dist/esm/Jj.js +111 -0
- package/dist/esm/Jj.js.map +1 -0
- package/dist/esm/JournalGrantStore.d.ts +65 -0
- package/dist/esm/JournalGrantStore.d.ts.map +1 -0
- package/dist/esm/JournalGrantStore.js +350 -0
- package/dist/esm/JournalGrantStore.js.map +1 -0
- package/dist/esm/Path.d.ts +37 -0
- package/dist/esm/Path.d.ts.map +1 -0
- package/dist/esm/Path.js +34 -0
- package/dist/esm/Path.js.map +1 -0
- package/dist/esm/ProcessConfinement.d.ts +55 -0
- package/dist/esm/ProcessConfinement.d.ts.map +1 -0
- package/dist/esm/ProcessConfinement.js +106 -0
- package/dist/esm/ProcessConfinement.js.map +1 -0
- package/dist/esm/ProcessLedger.d.ts +260 -0
- package/dist/esm/ProcessLedger.d.ts.map +1 -0
- package/dist/esm/ProcessLedger.js +283 -0
- package/dist/esm/ProcessLedger.js.map +1 -0
- package/dist/esm/Rooted.d.ts +53 -0
- package/dist/esm/Rooted.d.ts.map +1 -0
- package/dist/esm/Rooted.js +104 -0
- package/dist/esm/Rooted.js.map +1 -0
- package/dist/esm/Unreachable.d.ts +27 -0
- package/dist/esm/Unreachable.d.ts.map +1 -0
- package/dist/esm/Unreachable.js +26 -0
- package/dist/esm/Unreachable.js.map +1 -0
- package/dist/esm/Workspace.d.ts +62 -0
- package/dist/esm/Workspace.d.ts.map +1 -0
- package/dist/esm/Workspace.js +51 -0
- package/dist/esm/Workspace.js.map +1 -0
- package/dist/esm/index.d.ts +161 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +151 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/Containment.d.ts +24 -0
- package/dist/esm/internal/Containment.d.ts.map +1 -0
- package/dist/esm/internal/Containment.js +27 -0
- package/dist/esm/internal/Containment.js.map +1 -0
- package/dist/esm/internal/Pipeline.d.ts +18 -0
- package/dist/esm/internal/Pipeline.d.ts.map +1 -0
- package/dist/esm/internal/Pipeline.js +68 -0
- package/dist/esm/internal/Pipeline.js.map +1 -0
- package/dist/esm/internal/makeCapability.d.ts +16 -0
- package/dist/esm/internal/makeCapability.d.ts.map +1 -0
- package/dist/esm/internal/makeCapability.js +22 -0
- package/dist/esm/internal/makeCapability.js.map +1 -0
- package/dist/esm/test/FileSystemBatchContract.d.ts +15 -0
- package/dist/esm/test/FileSystemBatchContract.d.ts.map +1 -0
- package/dist/esm/test/FileSystemBatchContract.js +57 -0
- package/dist/esm/test/FileSystemBatchContract.js.map +1 -0
- package/dist/esm/test/HostContract.d.ts +225 -0
- package/dist/esm/test/HostContract.d.ts.map +1 -0
- package/dist/esm/test/HostContract.js +460 -0
- package/dist/esm/test/HostContract.js.map +1 -0
- package/dist/esm/test/TestGrantStore.d.ts +31 -0
- package/dist/esm/test/TestGrantStore.d.ts.map +1 -0
- package/dist/esm/test/TestGrantStore.js +57 -0
- package/dist/esm/test/TestGrantStore.js.map +1 -0
- package/docs/README.md +162 -0
- package/docs/api.md +1532 -0
- package/docs/concepts/decoration-in-place.md +117 -0
- package/docs/concepts/filesystem-batches.md +58 -0
- package/docs/concepts/filesystem-confinement.md +168 -0
- package/docs/concepts/grant-decisions.md +181 -0
- package/docs/concepts/process-containment.md +155 -0
- package/docs/contract.md +14 -0
- package/docs/guides/adapt-a-new-host-platform.md +148 -0
- package/docs/guides/answer-permission-requests.md +151 -0
- package/docs/guides/authorize-network-and-model-calls.md +118 -0
- package/docs/guides/contain-spawned-processes.md +118 -0
- package/docs/guides/guard-a-host-bundle.md +109 -0
- package/docs/guides/persist-grants-across-restarts.md +135 -0
- package/docs/guides/write-a-capability-policy.md +159 -0
- package/docs/installation.md +115 -0
- package/docs/quickstart.md +182 -0
- package/docs/testing.md +108 -0
- package/docs/troubleshooting.md +281 -0
- package/package.json +344 -3
- package/src/CapabilitySet.ts +6 -0
- package/src/ChildProcessEnvironment.ts +98 -0
- package/src/ChildProcessSpawner.ts +414 -0
- package/src/CommandLine.ts +250 -0
- package/src/ContainedSpawner.ts +284 -0
- package/src/FileSystem.ts +1655 -0
- package/src/FileSystemBatch.ts +90 -0
- package/src/GrantEvent.ts +174 -0
- package/src/GrantStore.ts +1345 -0
- package/src/HostError.ts +37 -0
- package/src/HostServices.ts +133 -0
- package/src/HttpClient.ts +406 -0
- package/src/Jj.ts +159 -0
- package/src/JournalGrantStore.ts +461 -0
- package/src/Path.ts +47 -0
- package/src/ProcessConfinement.ts +156 -0
- package/src/ProcessLedger.ts +423 -0
- package/src/Rooted.ts +128 -0
- package/src/Unreachable.ts +30 -0
- package/src/Workspace.ts +65 -0
- package/src/index.ts +181 -0
- package/src/internal/Containment.ts +37 -0
- package/src/internal/Pipeline.ts +85 -0
- package/src/internal/makeCapability.ts +26 -0
- package/src/test/FileSystemBatchContract.ts +59 -0
- package/src/test/HostContract.ts +785 -0
- package/src/test/TestGrantStore.ts +73 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable grant decision events.
|
|
3
|
+
*
|
|
4
|
+
* Governing design:
|
|
5
|
+
* `docs/specs/Concepts/Permission Kernel.md` and
|
|
6
|
+
* `docs/specs/Concepts/Journal Queue.md`.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0-rc.0
|
|
9
|
+
*/
|
|
10
|
+
import { Capability, CapabilityPattern } from "@smthrs/capability/Capability";
|
|
11
|
+
import * as Schema from "effect/Schema";
|
|
12
|
+
/**
|
|
13
|
+
* The tier at which a capability decision was made.
|
|
14
|
+
*
|
|
15
|
+
* @category schemas
|
|
16
|
+
* @since 1.0.0-rc.0
|
|
17
|
+
*/
|
|
18
|
+
export declare const GrantTier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
19
|
+
/**
|
|
20
|
+
* The scope selected for a permission grant.
|
|
21
|
+
*
|
|
22
|
+
* @category schemas
|
|
23
|
+
* @since 1.0.0-rc.0
|
|
24
|
+
*/
|
|
25
|
+
export declare const GrantScope: Schema.Literals<readonly ["once", "run", "remembered"]>;
|
|
26
|
+
declare const OnceGrant_base: Schema.Class<OnceGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/OnceGrant", {
|
|
27
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.once.v1">;
|
|
28
|
+
readonly requestId: Schema.String;
|
|
29
|
+
readonly runId: Schema.String;
|
|
30
|
+
readonly planDigest: Schema.optional<Schema.String>;
|
|
31
|
+
readonly capability: typeof Capability;
|
|
32
|
+
readonly pattern: typeof CapabilityPattern;
|
|
33
|
+
readonly scope: Schema.Literal<"once">;
|
|
34
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
35
|
+
}>, {}>;
|
|
36
|
+
/**
|
|
37
|
+
* A one-call grant.
|
|
38
|
+
*
|
|
39
|
+
* It is durable audit evidence but is deliberately never replayed as active
|
|
40
|
+
* authority.
|
|
41
|
+
*
|
|
42
|
+
* @category models
|
|
43
|
+
* @since 1.0.0-rc.0
|
|
44
|
+
*/
|
|
45
|
+
export declare class OnceGrant extends OnceGrant_base {
|
|
46
|
+
}
|
|
47
|
+
declare const RememberedGrant_base: Schema.Class<RememberedGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/RememberedGrant", {
|
|
48
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.remembered.v1">;
|
|
49
|
+
readonly requestId: Schema.String;
|
|
50
|
+
readonly runId: Schema.String;
|
|
51
|
+
readonly planDigest: Schema.optional<Schema.String>;
|
|
52
|
+
readonly capability: typeof Capability;
|
|
53
|
+
readonly pattern: typeof CapabilityPattern;
|
|
54
|
+
readonly scope: Schema.Literal<"remembered">;
|
|
55
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
56
|
+
}>, {}>;
|
|
57
|
+
/**
|
|
58
|
+
* A grant remembered across runs.
|
|
59
|
+
*
|
|
60
|
+
* @category models
|
|
61
|
+
* @since 1.0.0-rc.0
|
|
62
|
+
*/
|
|
63
|
+
export declare class RememberedGrant extends RememberedGrant_base {
|
|
64
|
+
}
|
|
65
|
+
declare const RunGrant_base: Schema.Class<RunGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/RunGrant", {
|
|
66
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.run.v2">;
|
|
67
|
+
readonly requestId: Schema.String;
|
|
68
|
+
readonly runId: Schema.String;
|
|
69
|
+
readonly planDigest: Schema.String;
|
|
70
|
+
readonly capability: typeof Capability;
|
|
71
|
+
readonly pattern: typeof CapabilityPattern;
|
|
72
|
+
readonly ceiling: Schema.$Array<Schema.$Array<typeof CapabilityPattern>>;
|
|
73
|
+
readonly scope: Schema.Literal<"run">;
|
|
74
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
75
|
+
}>, {}>;
|
|
76
|
+
/**
|
|
77
|
+
* A grant scoped to the current run.
|
|
78
|
+
*
|
|
79
|
+
* Version 2 captures the requesting fiber's normalized conjunction of any-of
|
|
80
|
+
* capability-pattern groups. Replay intersects it with the constructor ceiling.
|
|
81
|
+
* Version 1 omitted this boundary and cannot safely activate authority.
|
|
82
|
+
*
|
|
83
|
+
* @category models
|
|
84
|
+
* @since 1.0.0-rc.0
|
|
85
|
+
*/
|
|
86
|
+
export declare class RunGrant extends RunGrant_base {
|
|
87
|
+
}
|
|
88
|
+
declare const DeniedGrant_base: Schema.Class<DeniedGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/DeniedGrant", {
|
|
89
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.denied.v1">;
|
|
90
|
+
readonly requestId: Schema.String;
|
|
91
|
+
readonly runId: Schema.String;
|
|
92
|
+
readonly planDigest: Schema.optional<Schema.String>;
|
|
93
|
+
readonly capability: typeof Capability;
|
|
94
|
+
readonly pattern: typeof CapabilityPattern;
|
|
95
|
+
readonly scope: Schema.Literal<"once">;
|
|
96
|
+
readonly tier: Schema.Literals<readonly ["sealed", "compensable", "irreversible"]>;
|
|
97
|
+
}>, {}>;
|
|
98
|
+
/**
|
|
99
|
+
* A denied permission request.
|
|
100
|
+
*
|
|
101
|
+
* @category models
|
|
102
|
+
* @since 1.0.0-rc.0
|
|
103
|
+
*/
|
|
104
|
+
export declare class DeniedGrant extends DeniedGrant_base {
|
|
105
|
+
}
|
|
106
|
+
declare const EnvelopeGrant_base: Schema.Class<EnvelopeGrant, Schema.TaggedStruct<"@smthrs/kernel/GrantEvent/EnvelopeGrant", {
|
|
107
|
+
readonly eventType: Schema.Literal<"flows.kernel.grant.envelope.v1">;
|
|
108
|
+
readonly runId: Schema.String;
|
|
109
|
+
readonly planDigest: Schema.String;
|
|
110
|
+
readonly patterns: Schema.$Array<typeof CapabilityPattern>;
|
|
111
|
+
readonly scope: Schema.Literals<readonly ["run", "remembered"]>;
|
|
112
|
+
}>, {}>;
|
|
113
|
+
/**
|
|
114
|
+
* A capability envelope grant.
|
|
115
|
+
*
|
|
116
|
+
* Envelope grants are not attached to an individual request. `planDigest`
|
|
117
|
+
* binds the decision to exactly the plan shown to the approver. A `run`
|
|
118
|
+
* envelope is replayed only for that run and digest; a `remembered` envelope
|
|
119
|
+
* becomes remembered predicate grants for future plans while retaining its
|
|
120
|
+
* origin digest as audit evidence.
|
|
121
|
+
*
|
|
122
|
+
* @category models
|
|
123
|
+
* @since 1.0.0-rc.0
|
|
124
|
+
*/
|
|
125
|
+
export declare class EnvelopeGrant extends EnvelopeGrant_base {
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* All durable grant events understood by the kernel.
|
|
129
|
+
*
|
|
130
|
+
* @category models
|
|
131
|
+
* @since 1.0.0-rc.0
|
|
132
|
+
*/
|
|
133
|
+
export declare const GrantEventSchema: Schema.Union<readonly [typeof OnceGrant, typeof RememberedGrant, typeof DeniedGrant, typeof EnvelopeGrant, typeof RunGrant]>;
|
|
134
|
+
/**
|
|
135
|
+
* All durable grant events understood by the kernel.
|
|
136
|
+
*
|
|
137
|
+
* @category models
|
|
138
|
+
* @since 1.0.0-rc.0
|
|
139
|
+
*/
|
|
140
|
+
export type GrantEvent = typeof GrantEventSchema.Type;
|
|
141
|
+
/**
|
|
142
|
+
* Decodes one JSON-compatible journal payload into a grant event.
|
|
143
|
+
*
|
|
144
|
+
* Excess payload keys are rejected rather than stripped. Grant payloads are
|
|
145
|
+
* replayed as active permission authority, so a payload that mixes fields
|
|
146
|
+
* from two grant variants — for example an envelope carrying request-only
|
|
147
|
+
* fields — is treated as corrupt instead of silently narrowed to whichever
|
|
148
|
+
* variant its declared keys happen to satisfy.
|
|
149
|
+
*
|
|
150
|
+
* @category decoding
|
|
151
|
+
* @since 1.0.0-rc.0
|
|
152
|
+
*/
|
|
153
|
+
export declare const decode: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => import("effect/Result").Result<OnceGrant | RememberedGrant | RunGrant | DeniedGrant | EnvelopeGrant, Schema.SchemaError>;
|
|
154
|
+
/**
|
|
155
|
+
* Encodes a grant event into its JSON-compatible journal payload.
|
|
156
|
+
*
|
|
157
|
+
* @category encoding
|
|
158
|
+
* @since 1.0.0-rc.0
|
|
159
|
+
*/
|
|
160
|
+
export declare const encode: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => import("effect/Result").Result<{
|
|
161
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/OnceGrant";
|
|
162
|
+
readonly pattern: {
|
|
163
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
164
|
+
readonly resource: string;
|
|
165
|
+
};
|
|
166
|
+
readonly requestId: string;
|
|
167
|
+
readonly runId: string;
|
|
168
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
169
|
+
readonly capability: {
|
|
170
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
171
|
+
readonly resource: string;
|
|
172
|
+
};
|
|
173
|
+
readonly eventType: "flows.kernel.grant.once.v1";
|
|
174
|
+
readonly scope: "once";
|
|
175
|
+
readonly planDigest?: string | undefined;
|
|
176
|
+
} | {
|
|
177
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/RememberedGrant";
|
|
178
|
+
readonly pattern: {
|
|
179
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
180
|
+
readonly resource: string;
|
|
181
|
+
};
|
|
182
|
+
readonly requestId: string;
|
|
183
|
+
readonly runId: string;
|
|
184
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
185
|
+
readonly capability: {
|
|
186
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
187
|
+
readonly resource: string;
|
|
188
|
+
};
|
|
189
|
+
readonly eventType: "flows.kernel.grant.remembered.v1";
|
|
190
|
+
readonly scope: "remembered";
|
|
191
|
+
readonly planDigest?: string | undefined;
|
|
192
|
+
} | {
|
|
193
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/RunGrant";
|
|
194
|
+
readonly eventType: "flows.kernel.grant.run.v2";
|
|
195
|
+
readonly requestId: string;
|
|
196
|
+
readonly runId: string;
|
|
197
|
+
readonly planDigest: string;
|
|
198
|
+
readonly capability: {
|
|
199
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
200
|
+
readonly resource: string;
|
|
201
|
+
};
|
|
202
|
+
readonly pattern: {
|
|
203
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
204
|
+
readonly resource: string;
|
|
205
|
+
};
|
|
206
|
+
readonly ceiling: readonly (readonly {
|
|
207
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
208
|
+
readonly resource: string;
|
|
209
|
+
}[])[];
|
|
210
|
+
readonly scope: "run";
|
|
211
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
212
|
+
} | {
|
|
213
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/DeniedGrant";
|
|
214
|
+
readonly pattern: {
|
|
215
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
216
|
+
readonly resource: string;
|
|
217
|
+
};
|
|
218
|
+
readonly requestId: string;
|
|
219
|
+
readonly runId: string;
|
|
220
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
221
|
+
readonly capability: {
|
|
222
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore";
|
|
223
|
+
readonly resource: string;
|
|
224
|
+
};
|
|
225
|
+
readonly eventType: "flows.kernel.grant.denied.v1";
|
|
226
|
+
readonly scope: "once";
|
|
227
|
+
readonly planDigest?: string | undefined;
|
|
228
|
+
} | {
|
|
229
|
+
readonly _tag: "@smthrs/kernel/GrantEvent/EnvelopeGrant";
|
|
230
|
+
readonly eventType: "flows.kernel.grant.envelope.v1";
|
|
231
|
+
readonly runId: string;
|
|
232
|
+
readonly planDigest: string;
|
|
233
|
+
readonly patterns: readonly {
|
|
234
|
+
readonly action: "fs:read" | "fs:write" | "net:get" | "net:post" | "net:private" | "model:call" | "memory:read" | "memory:write" | "proc:spawn" | "jj:status" | "jj:diff" | "jj:snapshot" | "jj:restore" | "jj:workspace-add" | "jj:workspace-forget" | "jj:root" | "jj:revert" | "jj:op-restore" | "fs:*" | "net:*" | "model:*" | "memory:*" | "proc:*" | "jj:*" | "*";
|
|
235
|
+
readonly resource: string;
|
|
236
|
+
}[];
|
|
237
|
+
readonly scope: "run" | "remembered";
|
|
238
|
+
}, Schema.SchemaError>;
|
|
239
|
+
export {};
|
|
240
|
+
//# sourceMappingURL=GrantEvent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrantEvent.d.ts","sourceRoot":"","sources":["../../src/GrantEvent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AAC7E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,SAAS,qEAA6D,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,yDAAiD,CAAA;;;;;;;;;;;AAExE;;;;;;;;GAQG;AACH,qBAAa,SAAU,SAAQ,cAS7B;CAAG;;;;;;;;;;;AAEL;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,oBAYpC;CAAG;;;;;;;;;;;;AAEJ;;;;;;;;;GASG;AACH,qBAAa,QAAS,SAAQ,aAU5B;CAAG;;;;;;;;;;;AAEL;;;;;GAKG;AACH,qBAAa,WAAY,SAAQ,gBAS/B;CAAG;;;;;;;;AAEL;;;;;;;;;;;GAWG;AACH,qBAAa,aAAc,SAAQ,kBASlC;CAAG;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,8HAM3B,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,gBAAgB,CAAC,IAAI,CAAA;AAErD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,MAAM,iMAA8E,CAAA;AAEjG;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBAA+C,CAAA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var GrantEvent_exports = {};
|
|
30
|
+
__export(GrantEvent_exports, {
|
|
31
|
+
DeniedGrant: () => DeniedGrant,
|
|
32
|
+
EnvelopeGrant: () => EnvelopeGrant,
|
|
33
|
+
GrantEventSchema: () => GrantEventSchema,
|
|
34
|
+
GrantScope: () => GrantScope,
|
|
35
|
+
GrantTier: () => GrantTier,
|
|
36
|
+
OnceGrant: () => OnceGrant,
|
|
37
|
+
RememberedGrant: () => RememberedGrant,
|
|
38
|
+
RunGrant: () => RunGrant,
|
|
39
|
+
decode: () => decode,
|
|
40
|
+
encode: () => encode
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(GrantEvent_exports);
|
|
43
|
+
var import_Capability = require("@smthrs/capability/Capability");
|
|
44
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
45
|
+
const GrantTier = Schema.Literals(["sealed", "compensable", "irreversible"]);
|
|
46
|
+
const GrantScope = Schema.Literals(["once", "run", "remembered"]);
|
|
47
|
+
class OnceGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/OnceGrant", {
|
|
48
|
+
eventType: Schema.Literal("flows.kernel.grant.once.v1"),
|
|
49
|
+
requestId: Schema.String,
|
|
50
|
+
runId: Schema.String,
|
|
51
|
+
planDigest: Schema.optional(Schema.String),
|
|
52
|
+
capability: import_Capability.Capability,
|
|
53
|
+
pattern: import_Capability.CapabilityPattern,
|
|
54
|
+
scope: Schema.Literal("once"),
|
|
55
|
+
tier: GrantTier
|
|
56
|
+
}) {
|
|
57
|
+
}
|
|
58
|
+
class RememberedGrant extends Schema.TaggedClass()(
|
|
59
|
+
"@smthrs/kernel/GrantEvent/RememberedGrant",
|
|
60
|
+
{
|
|
61
|
+
eventType: Schema.Literal("flows.kernel.grant.remembered.v1"),
|
|
62
|
+
requestId: Schema.String,
|
|
63
|
+
runId: Schema.String,
|
|
64
|
+
planDigest: Schema.optional(Schema.String),
|
|
65
|
+
capability: import_Capability.Capability,
|
|
66
|
+
pattern: import_Capability.CapabilityPattern,
|
|
67
|
+
scope: Schema.Literal("remembered"),
|
|
68
|
+
tier: GrantTier
|
|
69
|
+
}
|
|
70
|
+
) {
|
|
71
|
+
}
|
|
72
|
+
class RunGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/RunGrant", {
|
|
73
|
+
eventType: Schema.Literal("flows.kernel.grant.run.v2"),
|
|
74
|
+
requestId: Schema.String,
|
|
75
|
+
runId: Schema.String,
|
|
76
|
+
planDigest: Schema.String,
|
|
77
|
+
capability: import_Capability.Capability,
|
|
78
|
+
pattern: import_Capability.CapabilityPattern,
|
|
79
|
+
ceiling: Schema.Array(Schema.Array(import_Capability.CapabilityPattern)),
|
|
80
|
+
scope: Schema.Literal("run"),
|
|
81
|
+
tier: GrantTier
|
|
82
|
+
}) {
|
|
83
|
+
}
|
|
84
|
+
class DeniedGrant extends Schema.TaggedClass()("@smthrs/kernel/GrantEvent/DeniedGrant", {
|
|
85
|
+
eventType: Schema.Literal("flows.kernel.grant.denied.v1"),
|
|
86
|
+
requestId: Schema.String,
|
|
87
|
+
runId: Schema.String,
|
|
88
|
+
planDigest: Schema.optional(Schema.String),
|
|
89
|
+
capability: import_Capability.Capability,
|
|
90
|
+
pattern: import_Capability.CapabilityPattern,
|
|
91
|
+
scope: Schema.Literal("once"),
|
|
92
|
+
tier: GrantTier
|
|
93
|
+
}) {
|
|
94
|
+
}
|
|
95
|
+
class EnvelopeGrant extends Schema.TaggedClass()(
|
|
96
|
+
"@smthrs/kernel/GrantEvent/EnvelopeGrant",
|
|
97
|
+
{
|
|
98
|
+
eventType: Schema.Literal("flows.kernel.grant.envelope.v1"),
|
|
99
|
+
runId: Schema.String,
|
|
100
|
+
planDigest: Schema.String,
|
|
101
|
+
patterns: Schema.Array(import_Capability.CapabilityPattern),
|
|
102
|
+
scope: Schema.Literals(["run", "remembered"])
|
|
103
|
+
}
|
|
104
|
+
) {
|
|
105
|
+
}
|
|
106
|
+
const GrantEventSchema = Schema.Union([
|
|
107
|
+
OnceGrant,
|
|
108
|
+
RememberedGrant,
|
|
109
|
+
DeniedGrant,
|
|
110
|
+
EnvelopeGrant,
|
|
111
|
+
RunGrant
|
|
112
|
+
]);
|
|
113
|
+
const decode = Schema.decodeUnknownResult(GrantEventSchema, { onExcessProperty: "error" });
|
|
114
|
+
const encode = Schema.encodeUnknownResult(GrantEventSchema);
|
|
115
|
+
//# sourceMappingURL=GrantEvent.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/GrantEvent.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Durable grant decision events.\n *\n * Governing design:\n * `docs/specs/Concepts/Permission Kernel.md` and\n * `docs/specs/Concepts/Journal Queue.md`.\n *\n * @since 1.0.0-rc.0\n */\n\nimport { Capability, CapabilityPattern } from \"@smthrs/capability/Capability\"\nimport * as Schema from \"effect/Schema\"\n\n/**\n * The tier at which a capability decision was made.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const GrantTier = Schema.Literals([\"sealed\", \"compensable\", \"irreversible\"])\n\n/**\n * The scope selected for a permission grant.\n *\n * @category schemas\n * @since 1.0.0-rc.0\n */\nexport const GrantScope = Schema.Literals([\"once\", \"run\", \"remembered\"])\n\n/**\n * A one-call grant.\n *\n * It is durable audit evidence but is deliberately never replayed as active\n * authority.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class OnceGrant extends Schema.TaggedClass<OnceGrant>()(\"@smthrs/kernel/GrantEvent/OnceGrant\", {\n eventType: Schema.Literal(\"flows.kernel.grant.once.v1\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.optional(Schema.String),\n capability: Capability,\n pattern: CapabilityPattern,\n scope: Schema.Literal(\"once\"),\n tier: GrantTier\n}) {}\n\n/**\n * A grant remembered across runs.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class RememberedGrant extends Schema.TaggedClass<RememberedGrant>()(\n \"@smthrs/kernel/GrantEvent/RememberedGrant\",\n {\n eventType: Schema.Literal(\"flows.kernel.grant.remembered.v1\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.optional(Schema.String),\n capability: Capability,\n pattern: CapabilityPattern,\n scope: Schema.Literal(\"remembered\"),\n tier: GrantTier\n }\n) {}\n\n/**\n * A grant scoped to the current run.\n *\n * Version 2 captures the requesting fiber's normalized conjunction of any-of\n * capability-pattern groups. Replay intersects it with the constructor ceiling.\n * Version 1 omitted this boundary and cannot safely activate authority.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class RunGrant extends Schema.TaggedClass<RunGrant>()(\"@smthrs/kernel/GrantEvent/RunGrant\", {\n eventType: Schema.Literal(\"flows.kernel.grant.run.v2\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.String,\n capability: Capability,\n pattern: CapabilityPattern,\n ceiling: Schema.Array(Schema.Array(CapabilityPattern)),\n scope: Schema.Literal(\"run\"),\n tier: GrantTier\n}) {}\n\n/**\n * A denied permission request.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class DeniedGrant extends Schema.TaggedClass<DeniedGrant>()(\"@smthrs/kernel/GrantEvent/DeniedGrant\", {\n eventType: Schema.Literal(\"flows.kernel.grant.denied.v1\"),\n requestId: Schema.String,\n runId: Schema.String,\n planDigest: Schema.optional(Schema.String),\n capability: Capability,\n pattern: CapabilityPattern,\n scope: Schema.Literal(\"once\"),\n tier: GrantTier\n}) {}\n\n/**\n * A capability envelope grant.\n *\n * Envelope grants are not attached to an individual request. `planDigest`\n * binds the decision to exactly the plan shown to the approver. A `run`\n * envelope is replayed only for that run and digest; a `remembered` envelope\n * becomes remembered predicate grants for future plans while retaining its\n * origin digest as audit evidence.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport class EnvelopeGrant extends Schema.TaggedClass<EnvelopeGrant>()(\n \"@smthrs/kernel/GrantEvent/EnvelopeGrant\",\n {\n eventType: Schema.Literal(\"flows.kernel.grant.envelope.v1\"),\n runId: Schema.String,\n planDigest: Schema.String,\n patterns: Schema.Array(CapabilityPattern),\n scope: Schema.Literals([\"run\", \"remembered\"])\n }\n) {}\n\n/**\n * All durable grant events understood by the kernel.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport const GrantEventSchema = Schema.Union([\n OnceGrant,\n RememberedGrant,\n DeniedGrant,\n EnvelopeGrant,\n RunGrant\n])\n\n/**\n * All durable grant events understood by the kernel.\n *\n * @category models\n * @since 1.0.0-rc.0\n */\nexport type GrantEvent = typeof GrantEventSchema.Type\n\n/**\n * Decodes one JSON-compatible journal payload into a grant event.\n *\n * Excess payload keys are rejected rather than stripped. Grant payloads are\n * replayed as active permission authority, so a payload that mixes fields\n * from two grant variants \u2014 for example an envelope carrying request-only\n * fields \u2014 is treated as corrupt instead of silently narrowed to whichever\n * variant its declared keys happen to satisfy.\n *\n * @category decoding\n * @since 1.0.0-rc.0\n */\nexport const decode = Schema.decodeUnknownResult(GrantEventSchema, { onExcessProperty: \"error\" })\n\n/**\n * Encodes a grant event into its JSON-compatible journal payload.\n *\n * @category encoding\n * @since 1.0.0-rc.0\n */\nexport const encode = Schema.encodeUnknownResult(GrantEventSchema)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,wBAA8C;AAC9C,aAAwB;AAQjB,MAAM,YAAY,OAAO,SAAS,CAAC,UAAU,eAAe,cAAc,CAAC;AAQ3E,MAAM,aAAa,OAAO,SAAS,CAAC,QAAQ,OAAO,YAAY,CAAC;AAWhE,MAAM,kBAAkB,OAAO,YAAuB,EAAE,uCAAuC;AAAA,EACpG,WAAW,OAAO,QAAQ,4BAA4B;AAAA,EACtD,WAAW,OAAO;AAAA,EAClB,OAAO,OAAO;AAAA,EACd,YAAY,OAAO,SAAS,OAAO,MAAM;AAAA,EACzC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO,OAAO,QAAQ,MAAM;AAAA,EAC5B,MAAM;AACR,CAAC,EAAE;AAAC;AAQG,MAAM,wBAAwB,OAAO,YAA6B;AAAA,EACvE;AAAA,EACA;AAAA,IACE,WAAW,OAAO,QAAQ,kCAAkC;AAAA,IAC5D,WAAW,OAAO;AAAA,IAClB,OAAO,OAAO;AAAA,IACd,YAAY,OAAO,SAAS,OAAO,MAAM;AAAA,IACzC,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,OAAO,OAAO,QAAQ,YAAY;AAAA,IAClC,MAAM;AAAA,EACR;AACF,EAAE;AAAC;AAYI,MAAM,iBAAiB,OAAO,YAAsB,EAAE,sCAAsC;AAAA,EACjG,WAAW,OAAO,QAAQ,2BAA2B;AAAA,EACrD,WAAW,OAAO;AAAA,EAClB,OAAO,OAAO;AAAA,EACd,YAAY,OAAO;AAAA,EACnB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,SAAS,OAAO,MAAM,OAAO,MAAM,mCAAiB,CAAC;AAAA,EACrD,OAAO,OAAO,QAAQ,KAAK;AAAA,EAC3B,MAAM;AACR,CAAC,EAAE;AAAC;AAQG,MAAM,oBAAoB,OAAO,YAAyB,EAAE,yCAAyC;AAAA,EAC1G,WAAW,OAAO,QAAQ,8BAA8B;AAAA,EACxD,WAAW,OAAO;AAAA,EAClB,OAAO,OAAO;AAAA,EACd,YAAY,OAAO,SAAS,OAAO,MAAM;AAAA,EACzC,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO,OAAO,QAAQ,MAAM;AAAA,EAC5B,MAAM;AACR,CAAC,EAAE;AAAC;AAcG,MAAM,sBAAsB,OAAO,YAA2B;AAAA,EACnE;AAAA,EACA;AAAA,IACE,WAAW,OAAO,QAAQ,gCAAgC;AAAA,IAC1D,OAAO,OAAO;AAAA,IACd,YAAY,OAAO;AAAA,IACnB,UAAU,OAAO,MAAM,mCAAiB;AAAA,IACxC,OAAO,OAAO,SAAS,CAAC,OAAO,YAAY,CAAC;AAAA,EAC9C;AACF,EAAE;AAAC;AAQI,MAAM,mBAAmB,OAAO,MAAM;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAsBM,MAAM,SAAS,OAAO,oBAAoB,kBAAkB,EAAE,kBAAkB,QAAQ,CAAC;AAQzF,MAAM,SAAS,OAAO,oBAAoB,gBAAgB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory capability grants with an attended Deferred request lifecycle.
|
|
3
|
+
*
|
|
4
|
+
* Governing design:
|
|
5
|
+
* `docs/specs/Concepts/Permission Kernel.md` and
|
|
6
|
+
* `docs/specs/Concepts/Trust Granularity.md`.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0-rc.0
|
|
9
|
+
*/
|
|
10
|
+
import { type Capability, CapabilityPattern, type EffectTier } from "@smthrs/capability/Capability";
|
|
11
|
+
import { GrantStoreError, type PermissionDenied, type PermissionRequired, Rule } from "@smthrs/capability/Permission";
|
|
12
|
+
import { Context, Effect, Layer, type Scope } from "effect";
|
|
13
|
+
import { type CapabilitySet } from "./CapabilitySet.ts";
|
|
14
|
+
import { type GrantEvent } from "./GrantEvent.ts";
|
|
15
|
+
import { Workspace } from "./Workspace.ts";
|
|
16
|
+
/**
|
|
17
|
+
* A capability request waiting for an attended reply.
|
|
18
|
+
*
|
|
19
|
+
* @category models
|
|
20
|
+
* @since 1.0.0-rc.0
|
|
21
|
+
*/
|
|
22
|
+
export interface PendingRequest {
|
|
23
|
+
readonly requestId: string;
|
|
24
|
+
readonly capability: Capability;
|
|
25
|
+
readonly tier: EffectTier;
|
|
26
|
+
readonly meta: Record<string, unknown>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A resolution supplied by an attended permission surface.
|
|
30
|
+
*
|
|
31
|
+
* @category models
|
|
32
|
+
* @since 1.0.0-rc.0
|
|
33
|
+
*/
|
|
34
|
+
export type Resolution = "once" | "run" | "remembered" | "deny";
|
|
35
|
+
/**
|
|
36
|
+
* Scope and plan identity for a bulk envelope approval.
|
|
37
|
+
*
|
|
38
|
+
* @category models
|
|
39
|
+
* @since 1.0.0-rc.0
|
|
40
|
+
*/
|
|
41
|
+
export interface EnvelopeGrantOptions {
|
|
42
|
+
readonly planDigest: string;
|
|
43
|
+
readonly patterns: ReadonlyArray<CapabilityPattern>;
|
|
44
|
+
readonly scope?: "run" | "remembered" | undefined;
|
|
45
|
+
}
|
|
46
|
+
/** A policy rule and the authority captured when it was granted.
|
|
47
|
+
* @category models
|
|
48
|
+
* @since 1.0.0-rc.1
|
|
49
|
+
*/
|
|
50
|
+
export interface PolicyRule {
|
|
51
|
+
readonly rule: Rule;
|
|
52
|
+
readonly ceiling: Pick<CapabilitySet, "groups">;
|
|
53
|
+
}
|
|
54
|
+
/** Atomic ordered policy snapshot, bounded by the calling fiber.
|
|
55
|
+
* @category models
|
|
56
|
+
* @since 1.0.0-rc.1
|
|
57
|
+
*/
|
|
58
|
+
export interface Policy {
|
|
59
|
+
readonly groups: ReadonlyArray<ReadonlyArray<PolicyRule>>;
|
|
60
|
+
readonly ceiling: CapabilitySet;
|
|
61
|
+
}
|
|
62
|
+
/** A conservative snapshot for services that expose no durable authority.
|
|
63
|
+
* @category constructors
|
|
64
|
+
* @since 1.0.0-rc.1
|
|
65
|
+
*/
|
|
66
|
+
export declare const emptyPolicy: Effect.Effect<Policy>;
|
|
67
|
+
/** Operations exposed by the grant store.
|
|
68
|
+
* @category models
|
|
69
|
+
* @since 1.0.0-rc.0
|
|
70
|
+
*/
|
|
71
|
+
export interface Service {
|
|
72
|
+
readonly policy: Effect.Effect<Policy, GrantStoreError>;
|
|
73
|
+
readonly check: (capability: Capability, meta?: Record<string, unknown>) => Effect.Effect<void, PermissionRequired | PermissionDenied | GrantStoreError>;
|
|
74
|
+
readonly reply: (requestId: string, resolution: Resolution, pattern?: CapabilityPattern) => Effect.Effect<void, GrantStoreError>;
|
|
75
|
+
readonly list: Effect.Effect<ReadonlyArray<PendingRequest>>;
|
|
76
|
+
readonly grantEnvelope: (options: EnvelopeGrantOptions) => Effect.Effect<void, GrantStoreError>;
|
|
77
|
+
}
|
|
78
|
+
declare const GrantStore_base: Context.ServiceClass<GrantStore, "@smthrs/kernel/GrantStore", Service>;
|
|
79
|
+
/**
|
|
80
|
+
* Service key for permission decisions and attended grant requests.
|
|
81
|
+
*
|
|
82
|
+
* @category services
|
|
83
|
+
* @since 1.0.0-rc.0
|
|
84
|
+
*/
|
|
85
|
+
export declare class GrantStore extends GrantStore_base {
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A hook that durably records a grant decision before it becomes active.
|
|
89
|
+
*
|
|
90
|
+
* @category models
|
|
91
|
+
* @since 1.0.0-rc.0
|
|
92
|
+
*/
|
|
93
|
+
export type Persist = (event: GrantEvent) => Effect.Effect<void, GrantStoreError>;
|
|
94
|
+
/**
|
|
95
|
+
* Configuration for an in-memory grant store.
|
|
96
|
+
*
|
|
97
|
+
* A nested `rules` value is also accepted by the journal adapter: its first
|
|
98
|
+
* ruleset is configured policy and subsequent rulesets are replayed remembered
|
|
99
|
+
* grants.
|
|
100
|
+
*
|
|
101
|
+
* @category models
|
|
102
|
+
* @since 1.0.0-rc.0
|
|
103
|
+
*/
|
|
104
|
+
export interface MakeOptions {
|
|
105
|
+
readonly attended?: boolean | undefined;
|
|
106
|
+
readonly rules?: ReadonlyArray<Rule> | ReadonlyArray<ReadonlyArray<Rule>> | undefined;
|
|
107
|
+
/** Bare rules use the constructor ceiling; captured groups intersect it. */
|
|
108
|
+
readonly runRules?: ReadonlyArray<Rule | {
|
|
109
|
+
readonly rule: Rule;
|
|
110
|
+
readonly ceiling: ReadonlyArray<ReadonlyArray<CapabilityPattern>>;
|
|
111
|
+
}> | undefined;
|
|
112
|
+
readonly envelope?: EnvelopeGrantOptions | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* {@link envelopeSignature} values of envelopes that are already durable —
|
|
115
|
+
* typically replayed from a journal. A construction or runtime envelope
|
|
116
|
+
* matching a seeded signature still activates its rules but is not
|
|
117
|
+
* persisted again.
|
|
118
|
+
*/
|
|
119
|
+
readonly envelopeSignatures?: ReadonlyArray<string> | undefined;
|
|
120
|
+
readonly runId?: string | undefined;
|
|
121
|
+
readonly planDigest?: string | undefined;
|
|
122
|
+
readonly persist?: Persist | undefined;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Maximum policy rules retained by one store.
|
|
126
|
+
* @category limits
|
|
127
|
+
* @since 1.0.0-rc.0
|
|
128
|
+
*/
|
|
129
|
+
export declare const maximumRules = 1024;
|
|
130
|
+
/**
|
|
131
|
+
* Maximum predicates in one approval envelope.
|
|
132
|
+
* @category limits
|
|
133
|
+
* @since 1.0.0-rc.0
|
|
134
|
+
*/
|
|
135
|
+
export declare const maximumEnvelopePatterns = 256;
|
|
136
|
+
/**
|
|
137
|
+
* Maximum permission requests parked at once.
|
|
138
|
+
* @category limits
|
|
139
|
+
* @since 1.0.0-rc.0
|
|
140
|
+
*/
|
|
141
|
+
export declare const maximumPendingRequests = 1024;
|
|
142
|
+
/**
|
|
143
|
+
* Maximum nesting depth of permission metadata.
|
|
144
|
+
* @category limits
|
|
145
|
+
* @since 1.0.0-rc.0
|
|
146
|
+
*/
|
|
147
|
+
export declare const maximumMetadataDepth = 16;
|
|
148
|
+
/**
|
|
149
|
+
* Maximum members across one permission metadata graph.
|
|
150
|
+
* @category limits
|
|
151
|
+
* @since 1.0.0-rc.0
|
|
152
|
+
*/
|
|
153
|
+
export declare const maximumMetadataMembers = 1024;
|
|
154
|
+
/**
|
|
155
|
+
* Maximum encoded bytes retained for one metadata value.
|
|
156
|
+
* @category limits
|
|
157
|
+
* @since 1.0.0-rc.0
|
|
158
|
+
*/
|
|
159
|
+
export declare const maximumMetadataBytes: number;
|
|
160
|
+
/**
|
|
161
|
+
* Maximum encoded bytes persisted for one grant event.
|
|
162
|
+
* @category limits
|
|
163
|
+
* @since 1.0.0-rc.0
|
|
164
|
+
*/
|
|
165
|
+
export declare const maximumEventBytes: number;
|
|
166
|
+
/**
|
|
167
|
+
* Maximum milliseconds one grant journal write may take before its reply or
|
|
168
|
+
* envelope admission fails with `journal_failed`. Journal writes never hold
|
|
169
|
+
* the store's mutation permit, so a slow write stalls only the admission that
|
|
170
|
+
* issued it.
|
|
171
|
+
* @category limits
|
|
172
|
+
* @since 1.0.0-rc.0
|
|
173
|
+
*/
|
|
174
|
+
export declare const maximumPersistMillis = 30000;
|
|
175
|
+
/**
|
|
176
|
+
* Maximum length of a run, plan, request, or signature identity.
|
|
177
|
+
* @category limits
|
|
178
|
+
* @since 1.0.0-rc.0
|
|
179
|
+
*/
|
|
180
|
+
export declare const maximumIdentityLength = 4096;
|
|
181
|
+
/**
|
|
182
|
+
* Maximum capability resource length enforced by the capability vocabulary.
|
|
183
|
+
* @category limits
|
|
184
|
+
* @since 1.0.0-rc.0
|
|
185
|
+
*/
|
|
186
|
+
export declare const maximumCapabilityResourceLength = 4096;
|
|
187
|
+
/**
|
|
188
|
+
* Canonicalizes an envelope pattern list: duplicate predicates collapse to
|
|
189
|
+
* their first occurrence and the survivors sort by their formatted identity.
|
|
190
|
+
*
|
|
191
|
+
* An envelope is a *set* of predicates, so two envelopes listing the same
|
|
192
|
+
* predicates in a different order or multiplicity are the same approval. Every
|
|
193
|
+
* envelope is canonicalized before it is persisted or compared, which makes
|
|
194
|
+
* envelope idempotency structural rather than dependent on caller discipline.
|
|
195
|
+
*
|
|
196
|
+
* The ordering is the code-unit sort of `format(pattern)` — the one renderer
|
|
197
|
+
* for capability identity. RFC 8785 canonical JSON (`@smthrs/canonical`)
|
|
198
|
+
* was considered and does not fit: it canonicalizes object keys but preserves
|
|
199
|
+
* array order as semantic, and the ordering that matters here is exactly the
|
|
200
|
+
* pattern-array order.
|
|
201
|
+
*
|
|
202
|
+
* @category validation
|
|
203
|
+
* @since 1.0.0-rc.0
|
|
204
|
+
*/
|
|
205
|
+
export declare const canonicalEnvelopePatterns: (patterns: ReadonlyArray<CapabilityPattern>) => ReadonlyArray<CapabilityPattern>;
|
|
206
|
+
/**
|
|
207
|
+
* Computes the canonical identity of an envelope approval.
|
|
208
|
+
*
|
|
209
|
+
* Two envelopes with the same plan digest, scope, and predicate set produce
|
|
210
|
+
* the same signature regardless of pattern order or repetition. The signature
|
|
211
|
+
* is how the store, and journal replay above it, recognise an envelope that
|
|
212
|
+
* is already durable. It is `sha256:` followed by 64 lowercase hex digits.
|
|
213
|
+
*
|
|
214
|
+
* @category validation
|
|
215
|
+
* @since 1.0.0-rc.0
|
|
216
|
+
*/
|
|
217
|
+
export declare const envelopeSignature: (planDigest: string, scope: "run" | "remembered", patterns: ReadonlyArray<CapabilityPattern>) => string;
|
|
218
|
+
/**
|
|
219
|
+
* Checks that a request-scoped grant cannot authorize a different action or a
|
|
220
|
+
* more dangerous effect tier than the request displayed to the user. A
|
|
221
|
+
* wildcard-bearing pattern identical to the resource is ambiguous because the
|
|
222
|
+
* grammar has no escape, so its wildcard reading would silently widen access.
|
|
223
|
+
*
|
|
224
|
+
* @category validation
|
|
225
|
+
* @since 1.0.0-rc.0
|
|
226
|
+
*/
|
|
227
|
+
export declare const isValidGrantPattern: (pattern: CapabilityPattern, capability: Capability, tier: EffectTier, workspaceRoot: string) => boolean;
|
|
228
|
+
/**
|
|
229
|
+
* Checks that a bulk envelope pattern preserves exact action and filesystem
|
|
230
|
+
* effect-tier boundaries.
|
|
231
|
+
*
|
|
232
|
+
* @category validation
|
|
233
|
+
* @since 1.0.0-rc.0
|
|
234
|
+
*/
|
|
235
|
+
export declare const isValidEnvelopePattern: (pattern: CapabilityPattern, workspaceRoot: string) => boolean;
|
|
236
|
+
/**
|
|
237
|
+
* Builds an in-memory grant store.
|
|
238
|
+
*
|
|
239
|
+
* Attended stores suspend an asking fiber on a request-local `Deferred`.
|
|
240
|
+
* Unattended stores fail immediately with `PermissionRequired`. The returned
|
|
241
|
+
* service is scoped: closing its scope rejects every waiter and clears the
|
|
242
|
+
* pending map.
|
|
243
|
+
*
|
|
244
|
+
* @category constructors
|
|
245
|
+
* @since 1.0.0-rc.0
|
|
246
|
+
*/
|
|
247
|
+
export declare const make: (options?: MakeOptions) => Effect.Effect<Service, GrantStoreError, Scope.Scope | Workspace>;
|
|
248
|
+
/**
|
|
249
|
+
* Provides a scoped in-memory grant store.
|
|
250
|
+
*
|
|
251
|
+
* @category layers
|
|
252
|
+
* @since 1.0.0-rc.0
|
|
253
|
+
*/
|
|
254
|
+
export declare const layer: (options?: MakeOptions) => Layer.Layer<GrantStore, GrantStoreError, Workspace>;
|
|
255
|
+
/**
|
|
256
|
+
* An allow-all grant store.
|
|
257
|
+
*
|
|
258
|
+
* @category constructors
|
|
259
|
+
* @since 1.0.0-rc.0
|
|
260
|
+
*/
|
|
261
|
+
export declare const makeNoop: Service;
|
|
262
|
+
/**
|
|
263
|
+
* Provides the allow-all grant store.
|
|
264
|
+
*
|
|
265
|
+
* @category layers
|
|
266
|
+
* @since 1.0.0-rc.0
|
|
267
|
+
*/
|
|
268
|
+
export declare const layerNoop: Layer.Layer<GrantStore>;
|
|
269
|
+
export {};
|
|
270
|
+
//# sourceMappingURL=GrantStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrantStore.d.ts","sourceRoot":"","sources":["../../src/GrantStore.ts"],"names":[],"mappings":"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"}
|