@tinycloudlabs/sdk-core 1.0.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 (166) hide show
  1. package/LICENSE.md +320 -0
  2. package/dist/TinyCloud.d.ts +206 -0
  3. package/dist/TinyCloud.d.ts.map +1 -0
  4. package/dist/TinyCloud.js +244 -0
  5. package/dist/TinyCloud.js.map +1 -0
  6. package/dist/TinyCloud.schema.d.ts +173 -0
  7. package/dist/TinyCloud.schema.d.ts.map +1 -0
  8. package/dist/TinyCloud.schema.js +136 -0
  9. package/dist/TinyCloud.schema.js.map +1 -0
  10. package/dist/TinyCloud.schema.test.d.ts +5 -0
  11. package/dist/TinyCloud.schema.test.d.ts.map +1 -0
  12. package/dist/TinyCloud.schema.test.js +286 -0
  13. package/dist/TinyCloud.schema.test.js.map +1 -0
  14. package/dist/authorization/CapabilityKeyRegistry.d.ts +317 -0
  15. package/dist/authorization/CapabilityKeyRegistry.d.ts.map +1 -0
  16. package/dist/authorization/CapabilityKeyRegistry.js +509 -0
  17. package/dist/authorization/CapabilityKeyRegistry.js.map +1 -0
  18. package/dist/authorization/authorization.schema.d.ts +233 -0
  19. package/dist/authorization/authorization.schema.d.ts.map +1 -0
  20. package/dist/authorization/authorization.schema.js +220 -0
  21. package/dist/authorization/authorization.schema.js.map +1 -0
  22. package/dist/authorization/authorization.schema.test.d.ts +5 -0
  23. package/dist/authorization/authorization.schema.test.d.ts.map +1 -0
  24. package/dist/authorization/authorization.schema.test.js +618 -0
  25. package/dist/authorization/authorization.schema.test.js.map +1 -0
  26. package/dist/authorization/index.d.ts +38 -0
  27. package/dist/authorization/index.d.ts.map +1 -0
  28. package/dist/authorization/index.js +52 -0
  29. package/dist/authorization/index.js.map +1 -0
  30. package/dist/authorization/spaceCreation.d.ts +96 -0
  31. package/dist/authorization/spaceCreation.d.ts.map +1 -0
  32. package/dist/authorization/spaceCreation.js +35 -0
  33. package/dist/authorization/spaceCreation.js.map +1 -0
  34. package/dist/authorization/spaceCreation.schema.d.ts +67 -0
  35. package/dist/authorization/spaceCreation.schema.d.ts.map +1 -0
  36. package/dist/authorization/spaceCreation.schema.js +95 -0
  37. package/dist/authorization/spaceCreation.schema.js.map +1 -0
  38. package/dist/authorization/spaceCreation.schema.test.d.ts +5 -0
  39. package/dist/authorization/spaceCreation.schema.test.d.ts.map +1 -0
  40. package/dist/authorization/spaceCreation.schema.test.js +168 -0
  41. package/dist/authorization/spaceCreation.schema.test.js.map +1 -0
  42. package/dist/authorization/strategies.d.ts +134 -0
  43. package/dist/authorization/strategies.d.ts.map +1 -0
  44. package/dist/authorization/strategies.js +15 -0
  45. package/dist/authorization/strategies.js.map +1 -0
  46. package/dist/authorization/strategies.schema.d.ts +185 -0
  47. package/dist/authorization/strategies.schema.d.ts.map +1 -0
  48. package/dist/authorization/strategies.schema.js +147 -0
  49. package/dist/authorization/strategies.schema.js.map +1 -0
  50. package/dist/authorization/strategies.schema.test.d.ts +5 -0
  51. package/dist/authorization/strategies.schema.test.d.ts.map +1 -0
  52. package/dist/authorization/strategies.schema.test.js +253 -0
  53. package/dist/authorization/strategies.schema.test.js.map +1 -0
  54. package/dist/delegations/DelegationManager.d.ts +164 -0
  55. package/dist/delegations/DelegationManager.d.ts.map +1 -0
  56. package/dist/delegations/DelegationManager.js +428 -0
  57. package/dist/delegations/DelegationManager.js.map +1 -0
  58. package/dist/delegations/SharingService.d.ts +279 -0
  59. package/dist/delegations/SharingService.d.ts.map +1 -0
  60. package/dist/delegations/SharingService.js +558 -0
  61. package/dist/delegations/SharingService.js.map +1 -0
  62. package/dist/delegations/SharingService.schema.d.ts +401 -0
  63. package/dist/delegations/SharingService.schema.d.ts.map +1 -0
  64. package/dist/delegations/SharingService.schema.js +211 -0
  65. package/dist/delegations/SharingService.schema.js.map +1 -0
  66. package/dist/delegations/index.d.ts +38 -0
  67. package/dist/delegations/index.d.ts.map +1 -0
  68. package/dist/delegations/index.js +42 -0
  69. package/dist/delegations/index.js.map +1 -0
  70. package/dist/delegations/types.d.ts +13 -0
  71. package/dist/delegations/types.d.ts.map +1 -0
  72. package/dist/delegations/types.js +42 -0
  73. package/dist/delegations/types.js.map +1 -0
  74. package/dist/delegations/types.schema.d.ts +1641 -0
  75. package/dist/delegations/types.schema.d.ts.map +1 -0
  76. package/dist/delegations/types.schema.js +535 -0
  77. package/dist/delegations/types.schema.js.map +1 -0
  78. package/dist/delegations/types.schema.test.d.ts +5 -0
  79. package/dist/delegations/types.schema.test.d.ts.map +1 -0
  80. package/dist/delegations/types.schema.test.js +627 -0
  81. package/dist/delegations/types.schema.test.js.map +1 -0
  82. package/dist/index.d.ts +22 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +52 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/json-schema.d.ts +327 -0
  87. package/dist/json-schema.d.ts.map +1 -0
  88. package/dist/json-schema.js +703 -0
  89. package/dist/json-schema.js.map +1 -0
  90. package/dist/json-schema.test.d.ts +7 -0
  91. package/dist/json-schema.test.d.ts.map +1 -0
  92. package/dist/json-schema.test.js +365 -0
  93. package/dist/json-schema.test.js.map +1 -0
  94. package/dist/signer.d.ts +28 -0
  95. package/dist/signer.d.ts.map +1 -0
  96. package/dist/signer.js +2 -0
  97. package/dist/signer.js.map +1 -0
  98. package/dist/space.d.ts +53 -0
  99. package/dist/space.d.ts.map +1 -0
  100. package/dist/space.js +67 -0
  101. package/dist/space.js.map +1 -0
  102. package/dist/space.schema.d.ts +65 -0
  103. package/dist/space.schema.d.ts.map +1 -0
  104. package/dist/space.schema.js +65 -0
  105. package/dist/space.schema.js.map +1 -0
  106. package/dist/space.schema.test.d.ts +5 -0
  107. package/dist/space.schema.test.d.ts.map +1 -0
  108. package/dist/space.schema.test.js +148 -0
  109. package/dist/space.schema.test.js.map +1 -0
  110. package/dist/spaces/Space.d.ts +175 -0
  111. package/dist/spaces/Space.d.ts.map +1 -0
  112. package/dist/spaces/Space.js +84 -0
  113. package/dist/spaces/Space.js.map +1 -0
  114. package/dist/spaces/SpaceService.d.ts +271 -0
  115. package/dist/spaces/SpaceService.d.ts.map +1 -0
  116. package/dist/spaces/SpaceService.js +715 -0
  117. package/dist/spaces/SpaceService.js.map +1 -0
  118. package/dist/spaces/index.d.ts +11 -0
  119. package/dist/spaces/index.d.ts.map +1 -0
  120. package/dist/spaces/index.js +20 -0
  121. package/dist/spaces/index.js.map +1 -0
  122. package/dist/spaces/spaces.schema.d.ts +421 -0
  123. package/dist/spaces/spaces.schema.d.ts.map +1 -0
  124. package/dist/spaces/spaces.schema.js +342 -0
  125. package/dist/spaces/spaces.schema.js.map +1 -0
  126. package/dist/spaces/spaces.schema.test.d.ts +5 -0
  127. package/dist/spaces/spaces.schema.test.d.ts.map +1 -0
  128. package/dist/spaces/spaces.schema.test.js +471 -0
  129. package/dist/spaces/spaces.schema.test.js.map +1 -0
  130. package/dist/storage.d.ts +47 -0
  131. package/dist/storage.d.ts.map +1 -0
  132. package/dist/storage.js +14 -0
  133. package/dist/storage.js.map +1 -0
  134. package/dist/storage.schema.d.ts +277 -0
  135. package/dist/storage.schema.d.ts.map +1 -0
  136. package/dist/storage.schema.js +185 -0
  137. package/dist/storage.schema.js.map +1 -0
  138. package/dist/storage.schema.test.d.ts +5 -0
  139. package/dist/storage.schema.test.d.ts.map +1 -0
  140. package/dist/storage.schema.test.js +346 -0
  141. package/dist/storage.schema.test.js.map +1 -0
  142. package/dist/userAuthorization.d.ts +99 -0
  143. package/dist/userAuthorization.d.ts.map +1 -0
  144. package/dist/userAuthorization.js +3 -0
  145. package/dist/userAuthorization.js.map +1 -0
  146. package/dist/userAuthorization.schema.d.ts +259 -0
  147. package/dist/userAuthorization.schema.d.ts.map +1 -0
  148. package/dist/userAuthorization.schema.js +175 -0
  149. package/dist/userAuthorization.schema.js.map +1 -0
  150. package/dist/userAuthorization.schema.test.d.ts +5 -0
  151. package/dist/userAuthorization.schema.test.d.ts.map +1 -0
  152. package/dist/userAuthorization.schema.test.js +356 -0
  153. package/dist/userAuthorization.schema.test.js.map +1 -0
  154. package/dist/version.d.ts +30 -0
  155. package/dist/version.d.ts.map +1 -0
  156. package/dist/version.js +54 -0
  157. package/dist/version.js.map +1 -0
  158. package/dist/wasm-validation.d.ts +287 -0
  159. package/dist/wasm-validation.d.ts.map +1 -0
  160. package/dist/wasm-validation.js +219 -0
  161. package/dist/wasm-validation.js.map +1 -0
  162. package/dist/wasm-validation.test.d.ts +5 -0
  163. package/dist/wasm-validation.test.d.ts.map +1 -0
  164. package/dist/wasm-validation.test.js +233 -0
  165. package/dist/wasm-validation.test.js.map +1 -0
  166. package/package.json +40 -0
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Tests for TinyCloud configuration schemas.
3
+ */
4
+ import { describe, it, expect } from "bun:test";
5
+ import { BackoffStrategySchema, RetryPolicySchema, PartialRetryPolicySchema, TinyCloudConfigSchema, validateTinyCloudConfig, validateRetryPolicy, } from "./TinyCloud.schema";
6
+ describe("BackoffStrategySchema", () => {
7
+ it("should accept valid backoff strategies", () => {
8
+ expect(BackoffStrategySchema.safeParse("none").success).toBe(true);
9
+ expect(BackoffStrategySchema.safeParse("linear").success).toBe(true);
10
+ expect(BackoffStrategySchema.safeParse("exponential").success).toBe(true);
11
+ });
12
+ it("should reject invalid backoff strategies", () => {
13
+ expect(BackoffStrategySchema.safeParse("invalid").success).toBe(false);
14
+ expect(BackoffStrategySchema.safeParse("").success).toBe(false);
15
+ expect(BackoffStrategySchema.safeParse(123).success).toBe(false);
16
+ });
17
+ });
18
+ describe("RetryPolicySchema", () => {
19
+ const validPolicy = {
20
+ maxAttempts: 3,
21
+ backoff: "exponential",
22
+ baseDelayMs: 1000,
23
+ maxDelayMs: 10000,
24
+ retryableErrors: ["NETWORK_ERROR", "TIMEOUT"],
25
+ };
26
+ it("should accept valid retry policy", () => {
27
+ const result = RetryPolicySchema.safeParse(validPolicy);
28
+ expect(result.success).toBe(true);
29
+ });
30
+ it("should accept zero delays", () => {
31
+ const result = RetryPolicySchema.safeParse({
32
+ ...validPolicy,
33
+ baseDelayMs: 0,
34
+ maxDelayMs: 0,
35
+ });
36
+ expect(result.success).toBe(true);
37
+ });
38
+ it("should accept empty retryableErrors array", () => {
39
+ const result = RetryPolicySchema.safeParse({
40
+ ...validPolicy,
41
+ retryableErrors: [],
42
+ });
43
+ expect(result.success).toBe(true);
44
+ });
45
+ it("should reject negative maxAttempts", () => {
46
+ const result = RetryPolicySchema.safeParse({
47
+ ...validPolicy,
48
+ maxAttempts: -1,
49
+ });
50
+ expect(result.success).toBe(false);
51
+ });
52
+ it("should reject zero maxAttempts", () => {
53
+ const result = RetryPolicySchema.safeParse({
54
+ ...validPolicy,
55
+ maxAttempts: 0,
56
+ });
57
+ expect(result.success).toBe(false);
58
+ });
59
+ it("should reject non-integer maxAttempts", () => {
60
+ const result = RetryPolicySchema.safeParse({
61
+ ...validPolicy,
62
+ maxAttempts: 1.5,
63
+ });
64
+ expect(result.success).toBe(false);
65
+ });
66
+ it("should reject negative delays", () => {
67
+ const result = RetryPolicySchema.safeParse({
68
+ ...validPolicy,
69
+ baseDelayMs: -1,
70
+ });
71
+ expect(result.success).toBe(false);
72
+ });
73
+ it("should reject invalid backoff strategy", () => {
74
+ const result = RetryPolicySchema.safeParse({
75
+ ...validPolicy,
76
+ backoff: "invalid",
77
+ });
78
+ expect(result.success).toBe(false);
79
+ });
80
+ it("should reject missing required fields", () => {
81
+ expect(RetryPolicySchema.safeParse({}).success).toBe(false);
82
+ expect(RetryPolicySchema.safeParse({ maxAttempts: 3 }).success).toBe(false);
83
+ });
84
+ });
85
+ describe("PartialRetryPolicySchema", () => {
86
+ it("should accept empty object", () => {
87
+ const result = PartialRetryPolicySchema.safeParse({});
88
+ expect(result.success).toBe(true);
89
+ });
90
+ it("should accept partial policy", () => {
91
+ const result = PartialRetryPolicySchema.safeParse({
92
+ maxAttempts: 5,
93
+ });
94
+ expect(result.success).toBe(true);
95
+ });
96
+ it("should accept full policy", () => {
97
+ const result = PartialRetryPolicySchema.safeParse({
98
+ maxAttempts: 3,
99
+ backoff: "exponential",
100
+ baseDelayMs: 1000,
101
+ maxDelayMs: 10000,
102
+ retryableErrors: ["NETWORK_ERROR"],
103
+ });
104
+ expect(result.success).toBe(true);
105
+ });
106
+ it("should still validate values when present", () => {
107
+ const result = PartialRetryPolicySchema.safeParse({
108
+ maxAttempts: -1,
109
+ });
110
+ expect(result.success).toBe(false);
111
+ });
112
+ });
113
+ describe("TinyCloudConfigSchema", () => {
114
+ it("should accept empty config", () => {
115
+ const result = TinyCloudConfigSchema.safeParse({});
116
+ expect(result.success).toBe(true);
117
+ });
118
+ it("should accept minimal config", () => {
119
+ const result = TinyCloudConfigSchema.safeParse({
120
+ hosts: ["https://node.tinycloud.xyz"],
121
+ });
122
+ expect(result.success).toBe(true);
123
+ });
124
+ it("should accept full config", () => {
125
+ const result = TinyCloudConfigSchema.safeParse({
126
+ resolveEns: true,
127
+ hosts: ["https://node.tinycloud.xyz"],
128
+ invoke: () => { },
129
+ fetch: () => { },
130
+ services: {
131
+ kv: class KVService {
132
+ },
133
+ custom: class CustomService {
134
+ },
135
+ },
136
+ serviceConfigs: {
137
+ kv: { prefix: "myapp" },
138
+ custom: { maxSize: 1000 },
139
+ },
140
+ retryPolicy: {
141
+ maxAttempts: 5,
142
+ backoff: "linear",
143
+ },
144
+ });
145
+ expect(result.success).toBe(true);
146
+ });
147
+ it("should accept resolveEns boolean", () => {
148
+ expect(TinyCloudConfigSchema.safeParse({ resolveEns: true }).success).toBe(true);
149
+ expect(TinyCloudConfigSchema.safeParse({ resolveEns: false }).success).toBe(true);
150
+ });
151
+ it("should reject non-boolean resolveEns", () => {
152
+ const result = TinyCloudConfigSchema.safeParse({
153
+ resolveEns: "true",
154
+ });
155
+ expect(result.success).toBe(false);
156
+ });
157
+ it("should accept hosts array", () => {
158
+ const result = TinyCloudConfigSchema.safeParse({
159
+ hosts: ["https://a.com", "https://b.com"],
160
+ });
161
+ expect(result.success).toBe(true);
162
+ });
163
+ it("should reject non-array hosts", () => {
164
+ const result = TinyCloudConfigSchema.safeParse({
165
+ hosts: "https://node.tinycloud.xyz",
166
+ });
167
+ expect(result.success).toBe(false);
168
+ });
169
+ it("should accept function invoke", () => {
170
+ const result = TinyCloudConfigSchema.safeParse({
171
+ invoke: () => { },
172
+ });
173
+ expect(result.success).toBe(true);
174
+ });
175
+ it("should accept async function invoke", () => {
176
+ const result = TinyCloudConfigSchema.safeParse({
177
+ invoke: async () => { },
178
+ });
179
+ expect(result.success).toBe(true);
180
+ });
181
+ it("should reject non-function invoke", () => {
182
+ const result = TinyCloudConfigSchema.safeParse({
183
+ invoke: "not a function",
184
+ });
185
+ expect(result.success).toBe(false);
186
+ });
187
+ it("should accept function fetch", () => {
188
+ const result = TinyCloudConfigSchema.safeParse({
189
+ fetch: () => { },
190
+ });
191
+ expect(result.success).toBe(true);
192
+ });
193
+ it("should reject non-function fetch", () => {
194
+ const result = TinyCloudConfigSchema.safeParse({
195
+ fetch: "not a function",
196
+ });
197
+ expect(result.success).toBe(false);
198
+ });
199
+ it("should accept services record with constructors", () => {
200
+ class MyService {
201
+ }
202
+ const result = TinyCloudConfigSchema.safeParse({
203
+ services: { myService: MyService },
204
+ });
205
+ expect(result.success).toBe(true);
206
+ });
207
+ it("should reject services with non-function values", () => {
208
+ const result = TinyCloudConfigSchema.safeParse({
209
+ services: { myService: "not a constructor" },
210
+ });
211
+ expect(result.success).toBe(false);
212
+ });
213
+ it("should accept serviceConfigs record", () => {
214
+ const result = TinyCloudConfigSchema.safeParse({
215
+ serviceConfigs: {
216
+ kv: { prefix: "test", nested: { deep: true } },
217
+ },
218
+ });
219
+ expect(result.success).toBe(true);
220
+ });
221
+ it("should accept partial retryPolicy", () => {
222
+ const result = TinyCloudConfigSchema.safeParse({
223
+ retryPolicy: { maxAttempts: 5 },
224
+ });
225
+ expect(result.success).toBe(true);
226
+ });
227
+ it("should reject invalid retryPolicy values", () => {
228
+ const result = TinyCloudConfigSchema.safeParse({
229
+ retryPolicy: { maxAttempts: -1 },
230
+ });
231
+ expect(result.success).toBe(false);
232
+ });
233
+ });
234
+ describe("validateTinyCloudConfig", () => {
235
+ it("should return ok result for valid config", () => {
236
+ const result = validateTinyCloudConfig({
237
+ hosts: ["https://node.tinycloud.xyz"],
238
+ resolveEns: true,
239
+ });
240
+ expect(result.ok).toBe(true);
241
+ if (result.ok) {
242
+ expect(result.data.hosts).toEqual(["https://node.tinycloud.xyz"]);
243
+ expect(result.data.resolveEns).toBe(true);
244
+ }
245
+ });
246
+ it("should return ok result for empty config", () => {
247
+ const result = validateTinyCloudConfig({});
248
+ expect(result.ok).toBe(true);
249
+ });
250
+ it("should return error result for invalid config", () => {
251
+ const result = validateTinyCloudConfig({
252
+ hosts: "not an array",
253
+ });
254
+ expect(result.ok).toBe(false);
255
+ if (!result.ok) {
256
+ expect(result.error.code).toBe("VALIDATION_ERROR");
257
+ expect(result.error.service).toBe("tinycloud");
258
+ expect(result.error.meta?.issues).toBeDefined();
259
+ }
260
+ });
261
+ });
262
+ describe("validateRetryPolicy", () => {
263
+ it("should return ok result for valid policy", () => {
264
+ const result = validateRetryPolicy({
265
+ maxAttempts: 3,
266
+ backoff: "exponential",
267
+ baseDelayMs: 1000,
268
+ maxDelayMs: 10000,
269
+ retryableErrors: ["NETWORK_ERROR"],
270
+ });
271
+ expect(result.ok).toBe(true);
272
+ if (result.ok) {
273
+ expect(result.data.maxAttempts).toBe(3);
274
+ expect(result.data.backoff).toBe("exponential");
275
+ }
276
+ });
277
+ it("should return error result for invalid policy", () => {
278
+ const result = validateRetryPolicy({});
279
+ expect(result.ok).toBe(false);
280
+ if (!result.ok) {
281
+ expect(result.error.code).toBe("VALIDATION_ERROR");
282
+ expect(result.error.service).toBe("tinycloud");
283
+ }
284
+ });
285
+ });
286
+ //# sourceMappingURL=TinyCloud.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TinyCloud.schema.test.js","sourceRoot":"","sources":["../src/TinyCloud.schema.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,317 @@
1
+ /**
2
+ * CapabilityKeyRegistry - Tracks keys and their capabilities for automatic key selection.
3
+ *
4
+ * The registry maintains mappings between:
5
+ * - Keys and their associated delegations
6
+ * - Capabilities (resource/action pairs) and the keys that can exercise them
7
+ *
8
+ * This enables automatic key selection when performing operations, choosing
9
+ * the most appropriate key based on priority and validity.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import type { Result, ServiceError } from "@tinycloudlabs/sdk-services";
14
+ import type { KeyInfo, CapabilityEntry, Delegation, IngestOptions } from "../delegations/types";
15
+ /**
16
+ * Error codes specific to CapabilityKeyRegistry operations.
17
+ */
18
+ export declare const CapabilityKeyRegistryErrorCodes: {
19
+ /** Key not found in registry */
20
+ readonly KEY_NOT_FOUND: "KEY_NOT_FOUND";
21
+ /** No key available for the requested capability */
22
+ readonly NO_CAPABLE_KEY: "NO_CAPABLE_KEY";
23
+ /** Delegation has expired */
24
+ readonly DELEGATION_EXPIRED: "DELEGATION_EXPIRED";
25
+ /** Delegation has been revoked */
26
+ readonly DELEGATION_REVOKED: "DELEGATION_REVOKED";
27
+ /** Invalid delegation data */
28
+ readonly INVALID_DELEGATION: "INVALID_DELEGATION";
29
+ /** Key already registered */
30
+ readonly KEY_EXISTS: "KEY_EXISTS";
31
+ };
32
+ export type CapabilityKeyRegistryErrorCode = (typeof CapabilityKeyRegistryErrorCodes)[keyof typeof CapabilityKeyRegistryErrorCodes];
33
+ /**
34
+ * Stored delegation with chain information.
35
+ */
36
+ export interface StoredDelegationChain {
37
+ /** The delegation itself */
38
+ delegation: Delegation;
39
+ /** Parent delegation CID if this is a sub-delegation */
40
+ parentCid?: string;
41
+ /** Key ID used to sign/exercise this delegation */
42
+ keyId: string;
43
+ /** When this was stored */
44
+ storedAt: Date;
45
+ }
46
+ /**
47
+ * Interface for the CapabilityKeyRegistry.
48
+ *
49
+ * Tracks keys and their capabilities for automatic key selection.
50
+ */
51
+ export interface ICapabilityKeyRegistry {
52
+ /**
53
+ * Register a key with its associated delegations.
54
+ *
55
+ * @param key - Key information
56
+ * @param delegations - Delegations granted to this key
57
+ */
58
+ registerKey(key: KeyInfo, delegations: Delegation[]): void;
59
+ /**
60
+ * Remove a key and all its associated delegations.
61
+ *
62
+ * @param keyId - The key ID to remove
63
+ */
64
+ removeKey(keyId: string): void;
65
+ /**
66
+ * Get a key that can exercise the specified capability.
67
+ *
68
+ * Uses the key selection algorithm:
69
+ * 1. Filter keys that have the required capability
70
+ * 2. Check delegation validity (not expired, not revoked)
71
+ * 3. Sort by priority (session=0, main=1, ingested=2)
72
+ * 4. Return highest priority valid key
73
+ *
74
+ * @param resource - Resource URI (e.g., "tinycloud://space-id/kv/my-data")
75
+ * @param action - Action to perform (e.g., "tinycloud.kv/get")
76
+ * @returns The best matching key, or null if none available
77
+ */
78
+ getKeyForCapability(resource: string, action: string): KeyInfo | null;
79
+ /**
80
+ * Get all registered capabilities.
81
+ *
82
+ * @returns All capability entries in the registry
83
+ */
84
+ getAllCapabilities(): CapabilityEntry[];
85
+ /**
86
+ * Get all delegations for a specific key.
87
+ *
88
+ * @param keyId - The key ID
89
+ * @returns Array of delegations for this key
90
+ */
91
+ getDelegationsForKey(keyId: string): Delegation[];
92
+ /**
93
+ * Ingest a key and delegation from an external source (e.g., sharing link).
94
+ *
95
+ * @param key - Key information to ingest
96
+ * @param delegation - Delegation to associate with the key
97
+ * @param options - Ingestion options
98
+ */
99
+ ingestKey(key: KeyInfo, delegation: Delegation, options?: IngestOptions): void;
100
+ /**
101
+ * Check if a delegation is currently valid.
102
+ *
103
+ * @param delegation - The delegation to check
104
+ * @returns true if valid, false if expired or revoked
105
+ */
106
+ isDelegationValid(delegation: Delegation): boolean;
107
+ /**
108
+ * Get a key by its ID.
109
+ *
110
+ * @param keyId - The key ID
111
+ * @returns The key info, or undefined if not found
112
+ */
113
+ getKey(keyId: string): KeyInfo | undefined;
114
+ /**
115
+ * Get all registered keys.
116
+ *
117
+ * @returns Array of all registered keys
118
+ */
119
+ getAllKeys(): KeyInfo[];
120
+ /**
121
+ * Clear all registered keys and delegations.
122
+ */
123
+ clear(): void;
124
+ /**
125
+ * Revoke a delegation by CID.
126
+ *
127
+ * @param cid - The delegation CID to revoke
128
+ * @returns Result indicating success or failure
129
+ */
130
+ revokeDelegation(cid: string): Result<void, ServiceError>;
131
+ /**
132
+ * Find capabilities that match a resource path pattern.
133
+ *
134
+ * @param resourcePattern - Resource pattern (supports wildcards)
135
+ * @param action - Optional action filter
136
+ * @returns Matching capability entries
137
+ */
138
+ findCapabilities(resourcePattern: string, action?: string): CapabilityEntry[];
139
+ }
140
+ /**
141
+ * CapabilityKeyRegistry - Tracks keys and their capabilities for automatic key selection.
142
+ *
143
+ * @example
144
+ * ```typescript
145
+ * const registry = new CapabilityKeyRegistry();
146
+ *
147
+ * // Register a session key with its delegations
148
+ * registry.registerKey(sessionKey, [rootDelegation]);
149
+ *
150
+ * // Get the best key for an operation
151
+ * const key = registry.getKeyForCapability(
152
+ * "tinycloud://my-space/kv/data",
153
+ * "tinycloud.kv/get"
154
+ * );
155
+ *
156
+ * if (key) {
157
+ * // Use this key for the operation
158
+ * console.log("Using key:", key.id);
159
+ * }
160
+ * ```
161
+ */
162
+ export declare class CapabilityKeyRegistry implements ICapabilityKeyRegistry {
163
+ /**
164
+ * Registry of all keys indexed by ID.
165
+ */
166
+ private keys;
167
+ /**
168
+ * Delegation storage.
169
+ */
170
+ private store;
171
+ /**
172
+ * Register a key with its associated delegations.
173
+ *
174
+ * @param key - Key information
175
+ * @param delegations - Delegations granted to this key
176
+ */
177
+ registerKey(key: KeyInfo, delegations: Delegation[]): void;
178
+ /**
179
+ * Remove a key and all its associated delegations.
180
+ *
181
+ * @param keyId - The key ID to remove
182
+ */
183
+ removeKey(keyId: string): void;
184
+ /**
185
+ * Get a key that can exercise the specified capability.
186
+ *
187
+ * Key selection algorithm:
188
+ * 1. Filter keys that have the required capability
189
+ * 2. Check delegation validity (not expired, not revoked)
190
+ * 3. Sort by priority (session=0, main=1, ingested=2)
191
+ * 4. Return highest priority valid key
192
+ *
193
+ * @param resource - Resource URI
194
+ * @param action - Action to perform
195
+ * @returns The best matching key, or null if none available
196
+ */
197
+ getKeyForCapability(resource: string, action: string): KeyInfo | null;
198
+ /**
199
+ * Get all registered capabilities.
200
+ *
201
+ * @returns All capability entries in the registry
202
+ */
203
+ getAllCapabilities(): CapabilityEntry[];
204
+ /**
205
+ * Get all delegations for a specific key.
206
+ *
207
+ * @param keyId - The key ID
208
+ * @returns Array of delegations for this key
209
+ */
210
+ getDelegationsForKey(keyId: string): Delegation[];
211
+ /**
212
+ * Ingest a key and delegation from an external source.
213
+ *
214
+ * @param key - Key information to ingest
215
+ * @param delegation - Delegation to associate with the key
216
+ * @param options - Ingestion options
217
+ */
218
+ ingestKey(key: KeyInfo, delegation: Delegation, options?: IngestOptions): void;
219
+ /**
220
+ * Check if a delegation is currently valid.
221
+ *
222
+ * @param delegation - The delegation to check
223
+ * @returns true if valid, false if expired or revoked
224
+ */
225
+ isDelegationValid(delegation: Delegation): boolean;
226
+ /**
227
+ * Get a key by its ID.
228
+ *
229
+ * @param keyId - The key ID
230
+ * @returns The key info, or undefined if not found
231
+ */
232
+ getKey(keyId: string): KeyInfo | undefined;
233
+ /**
234
+ * Get all registered keys.
235
+ *
236
+ * @returns Array of all registered keys
237
+ */
238
+ getAllKeys(): KeyInfo[];
239
+ /**
240
+ * Clear all registered keys and delegations.
241
+ */
242
+ clear(): void;
243
+ /**
244
+ * Revoke a delegation by CID.
245
+ *
246
+ * @param cid - The delegation CID to revoke
247
+ * @returns Result indicating success or failure
248
+ */
249
+ revokeDelegation(cid: string): Result<void, ServiceError>;
250
+ /**
251
+ * Find capabilities that match a resource path pattern.
252
+ *
253
+ * @param resourcePattern - Resource pattern (supports wildcards)
254
+ * @param action - Optional action filter
255
+ * @returns Matching capability entries
256
+ */
257
+ findCapabilities(resourcePattern: string, action?: string): CapabilityEntry[];
258
+ /**
259
+ * Add a delegation to the store.
260
+ *
261
+ * @param key - The key associated with this delegation
262
+ * @param delegation - The delegation to add
263
+ */
264
+ private addDelegation;
265
+ /**
266
+ * Create a capability key for indexing.
267
+ *
268
+ * @param resource - Resource path
269
+ * @param action - Action
270
+ * @returns Combined key string
271
+ */
272
+ private makeCapabilityKey;
273
+ /**
274
+ * Find capability entries that match a resource and action.
275
+ *
276
+ * @param resource - Resource to match
277
+ * @param action - Action to match
278
+ * @returns Matching entries
279
+ */
280
+ private findMatchingEntries;
281
+ /**
282
+ * Check if an action pattern matches a specific action.
283
+ *
284
+ * @param pattern - Action pattern (may include wildcard like "tinycloud.kv/*")
285
+ * @param action - Specific action to check
286
+ * @returns true if pattern matches action
287
+ */
288
+ private actionMatches;
289
+ /**
290
+ * Check if a resource matches a pattern.
291
+ *
292
+ * Patterns support:
293
+ * - Exact match: "/kv/data" matches "/kv/data"
294
+ * - Wildcard suffix: "/kv/*" matches "/kv/anything"
295
+ * - Double wildcard: "/kv/**" matches "/kv/any/nested/path"
296
+ *
297
+ * @param resource - The specific resource being accessed
298
+ * @param pattern - The pattern from the delegation
299
+ * @returns true if resource matches pattern
300
+ */
301
+ private resourceMatchesPattern;
302
+ /**
303
+ * Check if a specific resource matches a resource pattern for searching.
304
+ *
305
+ * @param entryResource - The resource from a capability entry
306
+ * @param searchPattern - The pattern to search for
307
+ * @returns true if entry resource matches search pattern
308
+ */
309
+ private matchesResourcePattern;
310
+ }
311
+ /**
312
+ * Create a new CapabilityKeyRegistry instance.
313
+ *
314
+ * @returns A new registry instance
315
+ */
316
+ export declare function createCapabilityKeyRegistry(): ICapabilityKeyRegistry;
317
+ //# sourceMappingURL=CapabilityKeyRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CapabilityKeyRegistry.d.ts","sourceRoot":"","sources":["../../src/authorization/CapabilityKeyRegistry.ts"],"names":[],"mappings":"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"}