@smthrs/kernel 0.0.0-stage → 1.0.0-rc.3

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 (267) hide show
  1. package/CHANGELOG.md +206 -0
  2. package/LICENSE +21 -0
  3. package/README.md +154 -2
  4. package/dist/cjs/CapabilitySet.d.ts +6 -0
  5. package/dist/cjs/CapabilitySet.d.ts.map +1 -0
  6. package/dist/cjs/CapabilitySet.js +19 -0
  7. package/dist/cjs/CapabilitySet.js.map +7 -0
  8. package/dist/cjs/ChildProcessEnvironment.d.ts +60 -0
  9. package/dist/cjs/ChildProcessEnvironment.d.ts.map +1 -0
  10. package/dist/cjs/ChildProcessEnvironment.js +61 -0
  11. package/dist/cjs/ChildProcessEnvironment.js.map +7 -0
  12. package/dist/cjs/ChildProcessSpawner.d.ts +100 -0
  13. package/dist/cjs/ChildProcessSpawner.d.ts.map +1 -0
  14. package/dist/cjs/ChildProcessSpawner.js +291 -0
  15. package/dist/cjs/ChildProcessSpawner.js.map +7 -0
  16. package/dist/cjs/CommandLine.d.ts +173 -0
  17. package/dist/cjs/CommandLine.d.ts.map +1 -0
  18. package/dist/cjs/CommandLine.js +54 -0
  19. package/dist/cjs/CommandLine.js.map +7 -0
  20. package/dist/cjs/ContainedSpawner.d.ts +135 -0
  21. package/dist/cjs/ContainedSpawner.d.ts.map +1 -0
  22. package/dist/cjs/ContainedSpawner.js +141 -0
  23. package/dist/cjs/ContainedSpawner.js.map +7 -0
  24. package/dist/cjs/FileSystem.d.ts +452 -0
  25. package/dist/cjs/FileSystem.d.ts.map +1 -0
  26. package/dist/cjs/FileSystem.js +890 -0
  27. package/dist/cjs/FileSystem.js.map +7 -0
  28. package/dist/cjs/FileSystemBatch.d.ts +94 -0
  29. package/dist/cjs/FileSystemBatch.d.ts.map +1 -0
  30. package/dist/cjs/FileSystemBatch.js +31 -0
  31. package/dist/cjs/FileSystemBatch.js.map +7 -0
  32. package/dist/cjs/GrantEvent.d.ts +240 -0
  33. package/dist/cjs/GrantEvent.d.ts.map +1 -0
  34. package/dist/cjs/GrantEvent.js +115 -0
  35. package/dist/cjs/GrantEvent.js.map +7 -0
  36. package/dist/cjs/GrantStore.d.ts +270 -0
  37. package/dist/cjs/GrantStore.d.ts.map +1 -0
  38. package/dist/cjs/GrantStore.js +857 -0
  39. package/dist/cjs/GrantStore.js.map +7 -0
  40. package/dist/cjs/HostError.d.ts +36 -0
  41. package/dist/cjs/HostError.d.ts.map +1 -0
  42. package/dist/cjs/HostError.js +17 -0
  43. package/dist/cjs/HostError.js.map +7 -0
  44. package/dist/cjs/HostServices.d.ts +101 -0
  45. package/dist/cjs/HostServices.d.ts.map +1 -0
  46. package/dist/cjs/HostServices.js +66 -0
  47. package/dist/cjs/HostServices.js.map +7 -0
  48. package/dist/cjs/HttpClient.d.ts +177 -0
  49. package/dist/cjs/HttpClient.d.ts.map +1 -0
  50. package/dist/cjs/HttpClient.js +217 -0
  51. package/dist/cjs/HttpClient.js.map +7 -0
  52. package/dist/cjs/Jj.d.ts +67 -0
  53. package/dist/cjs/Jj.d.ts.map +1 -0
  54. package/dist/cjs/Jj.js +118 -0
  55. package/dist/cjs/Jj.js.map +7 -0
  56. package/dist/cjs/JournalGrantStore.d.ts +65 -0
  57. package/dist/cjs/JournalGrantStore.d.ts.map +1 -0
  58. package/dist/cjs/JournalGrantStore.js +354 -0
  59. package/dist/cjs/JournalGrantStore.js.map +7 -0
  60. package/dist/cjs/Path.d.ts +37 -0
  61. package/dist/cjs/Path.d.ts.map +1 -0
  62. package/dist/cjs/Path.js +46 -0
  63. package/dist/cjs/Path.js.map +7 -0
  64. package/dist/cjs/ProcessConfinement.d.ts +55 -0
  65. package/dist/cjs/ProcessConfinement.d.ts.map +1 -0
  66. package/dist/cjs/ProcessConfinement.js +94 -0
  67. package/dist/cjs/ProcessConfinement.js.map +7 -0
  68. package/dist/cjs/ProcessLedger.d.ts +260 -0
  69. package/dist/cjs/ProcessLedger.d.ts.map +1 -0
  70. package/dist/cjs/ProcessLedger.js +190 -0
  71. package/dist/cjs/ProcessLedger.js.map +7 -0
  72. package/dist/cjs/Rooted.d.ts +53 -0
  73. package/dist/cjs/Rooted.d.ts.map +1 -0
  74. package/dist/cjs/Rooted.js +101 -0
  75. package/dist/cjs/Rooted.js.map +7 -0
  76. package/dist/cjs/Unreachable.d.ts +27 -0
  77. package/dist/cjs/Unreachable.d.ts.map +1 -0
  78. package/dist/cjs/Unreachable.js +43 -0
  79. package/dist/cjs/Unreachable.js.map +7 -0
  80. package/dist/cjs/Workspace.d.ts +62 -0
  81. package/dist/cjs/Workspace.d.ts.map +1 -0
  82. package/dist/cjs/Workspace.js +35 -0
  83. package/dist/cjs/Workspace.js.map +7 -0
  84. package/dist/cjs/index.d.ts +161 -0
  85. package/dist/cjs/index.d.ts.map +1 -0
  86. package/dist/cjs/index.js +73 -0
  87. package/dist/cjs/index.js.map +7 -0
  88. package/dist/cjs/internal/Containment.d.ts +24 -0
  89. package/dist/cjs/internal/Containment.d.ts.map +1 -0
  90. package/dist/cjs/internal/Containment.js +30 -0
  91. package/dist/cjs/internal/Containment.js.map +7 -0
  92. package/dist/cjs/internal/Pipeline.d.ts +18 -0
  93. package/dist/cjs/internal/Pipeline.d.ts.map +1 -0
  94. package/dist/cjs/internal/Pipeline.js +90 -0
  95. package/dist/cjs/internal/Pipeline.js.map +7 -0
  96. package/dist/cjs/internal/makeCapability.d.ts +16 -0
  97. package/dist/cjs/internal/makeCapability.d.ts.map +1 -0
  98. package/dist/cjs/internal/makeCapability.js +44 -0
  99. package/dist/cjs/internal/makeCapability.js.map +7 -0
  100. package/dist/cjs/package.json +1 -0
  101. package/dist/cjs/test/FileSystemBatchContract.d.ts +15 -0
  102. package/dist/cjs/test/FileSystemBatchContract.d.ts.map +1 -0
  103. package/dist/cjs/test/FileSystemBatchContract.js +76 -0
  104. package/dist/cjs/test/FileSystemBatchContract.js.map +7 -0
  105. package/dist/cjs/test/HostContract.d.ts +225 -0
  106. package/dist/cjs/test/HostContract.d.ts.map +1 -0
  107. package/dist/cjs/test/HostContract.js +489 -0
  108. package/dist/cjs/test/HostContract.js.map +7 -0
  109. package/dist/cjs/test/TestGrantStore.d.ts +31 -0
  110. package/dist/cjs/test/TestGrantStore.d.ts.map +1 -0
  111. package/dist/cjs/test/TestGrantStore.js +65 -0
  112. package/dist/cjs/test/TestGrantStore.js.map +7 -0
  113. package/dist/esm/CapabilitySet.d.ts +6 -0
  114. package/dist/esm/CapabilitySet.d.ts.map +1 -0
  115. package/dist/esm/CapabilitySet.js +6 -0
  116. package/dist/esm/CapabilitySet.js.map +1 -0
  117. package/dist/esm/ChildProcessEnvironment.d.ts +60 -0
  118. package/dist/esm/ChildProcessEnvironment.d.ts.map +1 -0
  119. package/dist/esm/ChildProcessEnvironment.js +91 -0
  120. package/dist/esm/ChildProcessEnvironment.js.map +1 -0
  121. package/dist/esm/ChildProcessSpawner.d.ts +100 -0
  122. package/dist/esm/ChildProcessSpawner.d.ts.map +1 -0
  123. package/dist/esm/ChildProcessSpawner.js +342 -0
  124. package/dist/esm/ChildProcessSpawner.js.map +1 -0
  125. package/dist/esm/CommandLine.d.ts +173 -0
  126. package/dist/esm/CommandLine.d.ts.map +1 -0
  127. package/dist/esm/CommandLine.js +195 -0
  128. package/dist/esm/CommandLine.js.map +1 -0
  129. package/dist/esm/ContainedSpawner.d.ts +135 -0
  130. package/dist/esm/ContainedSpawner.d.ts.map +1 -0
  131. package/dist/esm/ContainedSpawner.js +180 -0
  132. package/dist/esm/ContainedSpawner.js.map +1 -0
  133. package/dist/esm/FileSystem.d.ts +452 -0
  134. package/dist/esm/FileSystem.d.ts.map +1 -0
  135. package/dist/esm/FileSystem.js +989 -0
  136. package/dist/esm/FileSystem.js.map +1 -0
  137. package/dist/esm/FileSystemBatch.d.ts +94 -0
  138. package/dist/esm/FileSystemBatch.d.ts.map +1 -0
  139. package/dist/esm/FileSystemBatch.js +26 -0
  140. package/dist/esm/FileSystemBatch.js.map +1 -0
  141. package/dist/esm/GrantEvent.d.ts +240 -0
  142. package/dist/esm/GrantEvent.d.ts.map +1 -0
  143. package/dist/esm/GrantEvent.js +155 -0
  144. package/dist/esm/GrantEvent.js.map +1 -0
  145. package/dist/esm/GrantStore.d.ts +270 -0
  146. package/dist/esm/GrantStore.d.ts.map +1 -0
  147. package/dist/esm/GrantStore.js +951 -0
  148. package/dist/esm/GrantStore.js.map +1 -0
  149. package/dist/esm/HostError.d.ts +36 -0
  150. package/dist/esm/HostError.d.ts.map +1 -0
  151. package/dist/esm/HostError.js +20 -0
  152. package/dist/esm/HostError.js.map +1 -0
  153. package/dist/esm/HostServices.d.ts +101 -0
  154. package/dist/esm/HostServices.d.ts.map +1 -0
  155. package/dist/esm/HostServices.js +76 -0
  156. package/dist/esm/HostServices.js.map +1 -0
  157. package/dist/esm/HttpClient.d.ts +177 -0
  158. package/dist/esm/HttpClient.d.ts.map +1 -0
  159. package/dist/esm/HttpClient.js +299 -0
  160. package/dist/esm/HttpClient.js.map +1 -0
  161. package/dist/esm/Jj.d.ts +67 -0
  162. package/dist/esm/Jj.d.ts.map +1 -0
  163. package/dist/esm/Jj.js +111 -0
  164. package/dist/esm/Jj.js.map +1 -0
  165. package/dist/esm/JournalGrantStore.d.ts +65 -0
  166. package/dist/esm/JournalGrantStore.d.ts.map +1 -0
  167. package/dist/esm/JournalGrantStore.js +350 -0
  168. package/dist/esm/JournalGrantStore.js.map +1 -0
  169. package/dist/esm/Path.d.ts +37 -0
  170. package/dist/esm/Path.d.ts.map +1 -0
  171. package/dist/esm/Path.js +34 -0
  172. package/dist/esm/Path.js.map +1 -0
  173. package/dist/esm/ProcessConfinement.d.ts +55 -0
  174. package/dist/esm/ProcessConfinement.d.ts.map +1 -0
  175. package/dist/esm/ProcessConfinement.js +106 -0
  176. package/dist/esm/ProcessConfinement.js.map +1 -0
  177. package/dist/esm/ProcessLedger.d.ts +260 -0
  178. package/dist/esm/ProcessLedger.d.ts.map +1 -0
  179. package/dist/esm/ProcessLedger.js +283 -0
  180. package/dist/esm/ProcessLedger.js.map +1 -0
  181. package/dist/esm/Rooted.d.ts +53 -0
  182. package/dist/esm/Rooted.d.ts.map +1 -0
  183. package/dist/esm/Rooted.js +104 -0
  184. package/dist/esm/Rooted.js.map +1 -0
  185. package/dist/esm/Unreachable.d.ts +27 -0
  186. package/dist/esm/Unreachable.d.ts.map +1 -0
  187. package/dist/esm/Unreachable.js +26 -0
  188. package/dist/esm/Unreachable.js.map +1 -0
  189. package/dist/esm/Workspace.d.ts +62 -0
  190. package/dist/esm/Workspace.d.ts.map +1 -0
  191. package/dist/esm/Workspace.js +51 -0
  192. package/dist/esm/Workspace.js.map +1 -0
  193. package/dist/esm/index.d.ts +161 -0
  194. package/dist/esm/index.d.ts.map +1 -0
  195. package/dist/esm/index.js +151 -0
  196. package/dist/esm/index.js.map +1 -0
  197. package/dist/esm/internal/Containment.d.ts +24 -0
  198. package/dist/esm/internal/Containment.d.ts.map +1 -0
  199. package/dist/esm/internal/Containment.js +27 -0
  200. package/dist/esm/internal/Containment.js.map +1 -0
  201. package/dist/esm/internal/Pipeline.d.ts +18 -0
  202. package/dist/esm/internal/Pipeline.d.ts.map +1 -0
  203. package/dist/esm/internal/Pipeline.js +68 -0
  204. package/dist/esm/internal/Pipeline.js.map +1 -0
  205. package/dist/esm/internal/makeCapability.d.ts +16 -0
  206. package/dist/esm/internal/makeCapability.d.ts.map +1 -0
  207. package/dist/esm/internal/makeCapability.js +22 -0
  208. package/dist/esm/internal/makeCapability.js.map +1 -0
  209. package/dist/esm/test/FileSystemBatchContract.d.ts +15 -0
  210. package/dist/esm/test/FileSystemBatchContract.d.ts.map +1 -0
  211. package/dist/esm/test/FileSystemBatchContract.js +57 -0
  212. package/dist/esm/test/FileSystemBatchContract.js.map +1 -0
  213. package/dist/esm/test/HostContract.d.ts +225 -0
  214. package/dist/esm/test/HostContract.d.ts.map +1 -0
  215. package/dist/esm/test/HostContract.js +460 -0
  216. package/dist/esm/test/HostContract.js.map +1 -0
  217. package/dist/esm/test/TestGrantStore.d.ts +31 -0
  218. package/dist/esm/test/TestGrantStore.d.ts.map +1 -0
  219. package/dist/esm/test/TestGrantStore.js +57 -0
  220. package/dist/esm/test/TestGrantStore.js.map +1 -0
  221. package/docs/README.md +162 -0
  222. package/docs/api.md +1532 -0
  223. package/docs/concepts/decoration-in-place.md +117 -0
  224. package/docs/concepts/filesystem-batches.md +58 -0
  225. package/docs/concepts/filesystem-confinement.md +168 -0
  226. package/docs/concepts/grant-decisions.md +181 -0
  227. package/docs/concepts/process-containment.md +155 -0
  228. package/docs/contract.md +14 -0
  229. package/docs/guides/adapt-a-new-host-platform.md +148 -0
  230. package/docs/guides/answer-permission-requests.md +151 -0
  231. package/docs/guides/authorize-network-and-model-calls.md +118 -0
  232. package/docs/guides/contain-spawned-processes.md +118 -0
  233. package/docs/guides/guard-a-host-bundle.md +109 -0
  234. package/docs/guides/persist-grants-across-restarts.md +135 -0
  235. package/docs/guides/write-a-capability-policy.md +159 -0
  236. package/docs/installation.md +115 -0
  237. package/docs/quickstart.md +182 -0
  238. package/docs/testing.md +108 -0
  239. package/docs/troubleshooting.md +281 -0
  240. package/package.json +344 -3
  241. package/src/CapabilitySet.ts +6 -0
  242. package/src/ChildProcessEnvironment.ts +98 -0
  243. package/src/ChildProcessSpawner.ts +414 -0
  244. package/src/CommandLine.ts +250 -0
  245. package/src/ContainedSpawner.ts +284 -0
  246. package/src/FileSystem.ts +1655 -0
  247. package/src/FileSystemBatch.ts +90 -0
  248. package/src/GrantEvent.ts +174 -0
  249. package/src/GrantStore.ts +1345 -0
  250. package/src/HostError.ts +37 -0
  251. package/src/HostServices.ts +133 -0
  252. package/src/HttpClient.ts +406 -0
  253. package/src/Jj.ts +159 -0
  254. package/src/JournalGrantStore.ts +461 -0
  255. package/src/Path.ts +47 -0
  256. package/src/ProcessConfinement.ts +156 -0
  257. package/src/ProcessLedger.ts +423 -0
  258. package/src/Rooted.ts +128 -0
  259. package/src/Unreachable.ts +30 -0
  260. package/src/Workspace.ts +65 -0
  261. package/src/index.ts +181 -0
  262. package/src/internal/Containment.ts +37 -0
  263. package/src/internal/Pipeline.ts +85 -0
  264. package/src/internal/makeCapability.ts +26 -0
  265. package/src/test/FileSystemBatchContract.ts +59 -0
  266. package/src/test/HostContract.ts +785 -0
  267. package/src/test/TestGrantStore.ts +73 -0
@@ -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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"}