@tinycloud/sdk-core 2.0.0 → 2.0.2-beta.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 (188) hide show
  1. package/dist/index.cjs +3816 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +3867 -0
  4. package/dist/index.d.ts +3861 -21
  5. package/dist/index.js +3767 -61
  6. package/dist/index.js.map +1 -1
  7. package/package.json +6 -5
  8. package/dist/TinyCloud.d.ts +0 -271
  9. package/dist/TinyCloud.d.ts.map +0 -1
  10. package/dist/TinyCloud.js +0 -458
  11. package/dist/TinyCloud.js.map +0 -1
  12. package/dist/TinyCloud.schema.d.ts +0 -173
  13. package/dist/TinyCloud.schema.d.ts.map +0 -1
  14. package/dist/TinyCloud.schema.js +0 -136
  15. package/dist/TinyCloud.schema.js.map +0 -1
  16. package/dist/TinyCloud.schema.test.d.ts +0 -5
  17. package/dist/TinyCloud.schema.test.d.ts.map +0 -1
  18. package/dist/TinyCloud.schema.test.js +0 -286
  19. package/dist/TinyCloud.schema.test.js.map +0 -1
  20. package/dist/authorization/CapabilityKeyRegistry.d.ts +0 -317
  21. package/dist/authorization/CapabilityKeyRegistry.d.ts.map +0 -1
  22. package/dist/authorization/CapabilityKeyRegistry.js +0 -509
  23. package/dist/authorization/CapabilityKeyRegistry.js.map +0 -1
  24. package/dist/authorization/authorization.schema.d.ts +0 -233
  25. package/dist/authorization/authorization.schema.d.ts.map +0 -1
  26. package/dist/authorization/authorization.schema.js +0 -220
  27. package/dist/authorization/authorization.schema.js.map +0 -1
  28. package/dist/authorization/authorization.schema.test.d.ts +0 -5
  29. package/dist/authorization/authorization.schema.test.d.ts.map +0 -1
  30. package/dist/authorization/authorization.schema.test.js +0 -618
  31. package/dist/authorization/authorization.schema.test.js.map +0 -1
  32. package/dist/authorization/index.d.ts +0 -38
  33. package/dist/authorization/index.d.ts.map +0 -1
  34. package/dist/authorization/index.js +0 -52
  35. package/dist/authorization/index.js.map +0 -1
  36. package/dist/authorization/spaceCreation.d.ts +0 -96
  37. package/dist/authorization/spaceCreation.d.ts.map +0 -1
  38. package/dist/authorization/spaceCreation.js +0 -35
  39. package/dist/authorization/spaceCreation.js.map +0 -1
  40. package/dist/authorization/spaceCreation.schema.d.ts +0 -67
  41. package/dist/authorization/spaceCreation.schema.d.ts.map +0 -1
  42. package/dist/authorization/spaceCreation.schema.js +0 -95
  43. package/dist/authorization/spaceCreation.schema.js.map +0 -1
  44. package/dist/authorization/spaceCreation.schema.test.d.ts +0 -5
  45. package/dist/authorization/spaceCreation.schema.test.d.ts.map +0 -1
  46. package/dist/authorization/spaceCreation.schema.test.js +0 -168
  47. package/dist/authorization/spaceCreation.schema.test.js.map +0 -1
  48. package/dist/authorization/strategies.d.ts +0 -134
  49. package/dist/authorization/strategies.d.ts.map +0 -1
  50. package/dist/authorization/strategies.js +0 -15
  51. package/dist/authorization/strategies.js.map +0 -1
  52. package/dist/authorization/strategies.schema.d.ts +0 -185
  53. package/dist/authorization/strategies.schema.d.ts.map +0 -1
  54. package/dist/authorization/strategies.schema.js +0 -147
  55. package/dist/authorization/strategies.schema.js.map +0 -1
  56. package/dist/authorization/strategies.schema.test.d.ts +0 -5
  57. package/dist/authorization/strategies.schema.test.d.ts.map +0 -1
  58. package/dist/authorization/strategies.schema.test.js +0 -253
  59. package/dist/authorization/strategies.schema.test.js.map +0 -1
  60. package/dist/client-types.d.ts +0 -128
  61. package/dist/client-types.d.ts.map +0 -1
  62. package/dist/client-types.js +0 -40
  63. package/dist/client-types.js.map +0 -1
  64. package/dist/delegations/DelegationManager.d.ts +0 -164
  65. package/dist/delegations/DelegationManager.d.ts.map +0 -1
  66. package/dist/delegations/DelegationManager.js +0 -428
  67. package/dist/delegations/DelegationManager.js.map +0 -1
  68. package/dist/delegations/SharingService.d.ts +0 -341
  69. package/dist/delegations/SharingService.d.ts.map +0 -1
  70. package/dist/delegations/SharingService.js +0 -722
  71. package/dist/delegations/SharingService.js.map +0 -1
  72. package/dist/delegations/SharingService.schema.d.ts +0 -409
  73. package/dist/delegations/SharingService.schema.d.ts.map +0 -1
  74. package/dist/delegations/SharingService.schema.js +0 -222
  75. package/dist/delegations/SharingService.schema.js.map +0 -1
  76. package/dist/delegations/index.d.ts +0 -38
  77. package/dist/delegations/index.d.ts.map +0 -1
  78. package/dist/delegations/index.js +0 -42
  79. package/dist/delegations/index.js.map +0 -1
  80. package/dist/delegations/types.d.ts +0 -13
  81. package/dist/delegations/types.d.ts.map +0 -1
  82. package/dist/delegations/types.js +0 -42
  83. package/dist/delegations/types.js.map +0 -1
  84. package/dist/delegations/types.schema.d.ts +0 -1773
  85. package/dist/delegations/types.schema.d.ts.map +0 -1
  86. package/dist/delegations/types.schema.js +0 -535
  87. package/dist/delegations/types.schema.js.map +0 -1
  88. package/dist/delegations/types.schema.test.d.ts +0 -5
  89. package/dist/delegations/types.schema.test.d.ts.map +0 -1
  90. package/dist/delegations/types.schema.test.js +0 -627
  91. package/dist/delegations/types.schema.test.js.map +0 -1
  92. package/dist/ens.d.ts +0 -17
  93. package/dist/ens.d.ts.map +0 -1
  94. package/dist/ens.js +0 -10
  95. package/dist/ens.js.map +0 -1
  96. package/dist/index.d.ts.map +0 -1
  97. package/dist/json-schema.d.ts +0 -327
  98. package/dist/json-schema.d.ts.map +0 -1
  99. package/dist/json-schema.js +0 -703
  100. package/dist/json-schema.js.map +0 -1
  101. package/dist/json-schema.test.d.ts +0 -7
  102. package/dist/json-schema.test.d.ts.map +0 -1
  103. package/dist/json-schema.test.js +0 -365
  104. package/dist/json-schema.test.js.map +0 -1
  105. package/dist/notifications.d.ts +0 -33
  106. package/dist/notifications.d.ts.map +0 -1
  107. package/dist/notifications.js +0 -15
  108. package/dist/notifications.js.map +0 -1
  109. package/dist/signer.d.ts +0 -28
  110. package/dist/signer.d.ts.map +0 -1
  111. package/dist/signer.js +0 -2
  112. package/dist/signer.js.map +0 -1
  113. package/dist/space.d.ts +0 -57
  114. package/dist/space.d.ts.map +0 -1
  115. package/dist/space.js +0 -87
  116. package/dist/space.js.map +0 -1
  117. package/dist/space.schema.d.ts +0 -65
  118. package/dist/space.schema.d.ts.map +0 -1
  119. package/dist/space.schema.js +0 -65
  120. package/dist/space.schema.js.map +0 -1
  121. package/dist/space.schema.test.d.ts +0 -5
  122. package/dist/space.schema.test.d.ts.map +0 -1
  123. package/dist/space.schema.test.js +0 -148
  124. package/dist/space.schema.test.js.map +0 -1
  125. package/dist/space.test.d.ts +0 -5
  126. package/dist/space.test.d.ts.map +0 -1
  127. package/dist/space.test.js +0 -87
  128. package/dist/space.test.js.map +0 -1
  129. package/dist/spaces/Space.d.ts +0 -175
  130. package/dist/spaces/Space.d.ts.map +0 -1
  131. package/dist/spaces/Space.js +0 -84
  132. package/dist/spaces/Space.js.map +0 -1
  133. package/dist/spaces/SpaceService.d.ts +0 -291
  134. package/dist/spaces/SpaceService.d.ts.map +0 -1
  135. package/dist/spaces/SpaceService.js +0 -740
  136. package/dist/spaces/SpaceService.js.map +0 -1
  137. package/dist/spaces/index.d.ts +0 -11
  138. package/dist/spaces/index.d.ts.map +0 -1
  139. package/dist/spaces/index.js +0 -22
  140. package/dist/spaces/index.js.map +0 -1
  141. package/dist/spaces/spaces.schema.d.ts +0 -421
  142. package/dist/spaces/spaces.schema.d.ts.map +0 -1
  143. package/dist/spaces/spaces.schema.js +0 -342
  144. package/dist/spaces/spaces.schema.js.map +0 -1
  145. package/dist/spaces/spaces.schema.test.d.ts +0 -5
  146. package/dist/spaces/spaces.schema.test.d.ts.map +0 -1
  147. package/dist/spaces/spaces.schema.test.js +0 -471
  148. package/dist/spaces/spaces.schema.test.js.map +0 -1
  149. package/dist/storage.d.ts +0 -47
  150. package/dist/storage.d.ts.map +0 -1
  151. package/dist/storage.js +0 -14
  152. package/dist/storage.js.map +0 -1
  153. package/dist/storage.schema.d.ts +0 -291
  154. package/dist/storage.schema.d.ts.map +0 -1
  155. package/dist/storage.schema.js +0 -189
  156. package/dist/storage.schema.js.map +0 -1
  157. package/dist/storage.schema.test.d.ts +0 -5
  158. package/dist/storage.schema.test.d.ts.map +0 -1
  159. package/dist/storage.schema.test.js +0 -346
  160. package/dist/storage.schema.test.js.map +0 -1
  161. package/dist/userAuthorization.d.ts +0 -117
  162. package/dist/userAuthorization.d.ts.map +0 -1
  163. package/dist/userAuthorization.js +0 -3
  164. package/dist/userAuthorization.js.map +0 -1
  165. package/dist/userAuthorization.schema.d.ts +0 -260
  166. package/dist/userAuthorization.schema.d.ts.map +0 -1
  167. package/dist/userAuthorization.schema.js +0 -169
  168. package/dist/userAuthorization.schema.js.map +0 -1
  169. package/dist/userAuthorization.schema.test.d.ts +0 -5
  170. package/dist/userAuthorization.schema.test.d.ts.map +0 -1
  171. package/dist/userAuthorization.schema.test.js +0 -356
  172. package/dist/userAuthorization.schema.test.js.map +0 -1
  173. package/dist/version.d.ts +0 -32
  174. package/dist/version.d.ts.map +0 -1
  175. package/dist/version.js +0 -59
  176. package/dist/version.js.map +0 -1
  177. package/dist/wasm-validation.d.ts +0 -291
  178. package/dist/wasm-validation.d.ts.map +0 -1
  179. package/dist/wasm-validation.js +0 -221
  180. package/dist/wasm-validation.js.map +0 -1
  181. package/dist/wasm-validation.test.d.ts +0 -5
  182. package/dist/wasm-validation.test.d.ts.map +0 -1
  183. package/dist/wasm-validation.test.js +0 -233
  184. package/dist/wasm-validation.test.js.map +0 -1
  185. package/dist/wasm.d.ts +0 -66
  186. package/dist/wasm.d.ts.map +0 -1
  187. package/dist/wasm.js +0 -10
  188. package/dist/wasm.js.map +0 -1
@@ -1,428 +0,0 @@
1
- /**
2
- * DelegationManager - Handles delegation CRUD operations.
3
- *
4
- * This class manages the creation, revocation, listing, and querying
5
- * of delegations within TinyCloud. It extracts and improves upon the
6
- * delegation functionality previously in ITinyCloudStorage.
7
- *
8
- * @packageDocumentation
9
- */
10
- import { DelegationErrorCodes, } from "./types";
11
- /**
12
- * Delegation action constants.
13
- */
14
- const DelegationAction = {
15
- CREATE: "tinycloud.delegation/create",
16
- REVOKE: "tinycloud.delegation/revoke",
17
- LIST: "tinycloud.delegation/list",
18
- GET: "tinycloud.delegation/get",
19
- CHECK: "tinycloud.delegation/check",
20
- };
21
- /**
22
- * Creates a DelegationError with the given parameters.
23
- */
24
- function createError(code, message, cause, meta) {
25
- return {
26
- code,
27
- message,
28
- service: "delegation",
29
- cause,
30
- meta,
31
- };
32
- }
33
- /**
34
- * DelegationManager handles all delegation-related operations.
35
- *
36
- * @example
37
- * ```typescript
38
- * import { DelegationManager } from "@tinycloud/sdk-core/delegations";
39
- *
40
- * const delegations = new DelegationManager({
41
- * hosts: ["https://node.tinycloud.xyz"],
42
- * session,
43
- * invoke,
44
- * });
45
- *
46
- * // Create a delegation
47
- * const result = await delegations.create({
48
- * delegateDID: "did:pkh:eip155:1:0x...",
49
- * path: "shared/",
50
- * actions: ["tinycloud.kv/get", "tinycloud.kv/list"],
51
- * expiry: new Date(Date.now() + 24 * 60 * 60 * 1000), // 24 hours
52
- * });
53
- *
54
- * if (result.ok) {
55
- * console.log("Created delegation:", result.data.cid);
56
- * }
57
- * ```
58
- */
59
- export class DelegationManager {
60
- /**
61
- * Creates a new DelegationManager instance.
62
- *
63
- * @param config - Configuration including hosts, session, and invoke function
64
- */
65
- constructor(config) {
66
- this.hosts = config.hosts;
67
- this.session = config.session;
68
- this.invoke = config.invoke;
69
- this.fetchFn = config.fetch ?? globalThis.fetch.bind(globalThis);
70
- }
71
- /**
72
- * Updates the session (e.g., after re-authentication).
73
- *
74
- * @param session - New session to use for operations
75
- */
76
- updateSession(session) {
77
- this.session = session;
78
- }
79
- /**
80
- * Gets the primary host URL.
81
- */
82
- get host() {
83
- return this.hosts[0];
84
- }
85
- /**
86
- * Executes an invoke operation against the delegation API.
87
- */
88
- async invokeOperation(path, action, body) {
89
- const headers = this.invoke(this.session, "delegation", path, action);
90
- return this.fetchFn(`${this.host}/invoke`, {
91
- method: "POST",
92
- headers,
93
- body,
94
- });
95
- }
96
- /**
97
- * Creates a new delegation.
98
- *
99
- * Delegates specific permissions to another DID for a given path.
100
- * The delegatee can then use these permissions to access resources
101
- * within the specified scope.
102
- *
103
- * @param params - Parameters for the delegation
104
- * @returns Result containing the created Delegation or an error
105
- *
106
- * @example
107
- * ```typescript
108
- * const result = await manager.create({
109
- * delegateDID: bob.did,
110
- * path: "documents/shared/",
111
- * actions: ["tinycloud.kv/get", "tinycloud.kv/put"],
112
- * expiry: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000), // 7 days
113
- * });
114
- * ```
115
- */
116
- async create(params) {
117
- // Validate inputs
118
- if (!params.delegateDID) {
119
- return {
120
- ok: false,
121
- error: createError(DelegationErrorCodes.INVALID_INPUT, "delegateDID is required"),
122
- };
123
- }
124
- if (!params.path) {
125
- return {
126
- ok: false,
127
- error: createError(DelegationErrorCodes.INVALID_INPUT, "path is required"),
128
- };
129
- }
130
- if (!params.actions || params.actions.length === 0) {
131
- return {
132
- ok: false,
133
- error: createError(DelegationErrorCodes.INVALID_INPUT, "at least one action is required"),
134
- };
135
- }
136
- try {
137
- const body = JSON.stringify({
138
- delegateDID: params.delegateDID,
139
- path: params.path,
140
- actions: params.actions,
141
- expiry: params.expiry?.toISOString(),
142
- disableSubDelegation: params.disableSubDelegation ?? false,
143
- statement: params.statement,
144
- });
145
- const response = await this.invokeOperation(params.path, DelegationAction.CREATE, body);
146
- if (!response.ok) {
147
- const errorText = await response.text();
148
- return {
149
- ok: false,
150
- error: createError(DelegationErrorCodes.CREATION_FAILED, `Failed to create delegation: ${response.status} - ${errorText}`, undefined, { status: response.status, path: params.path }),
151
- };
152
- }
153
- const apiResponse = (await response.json());
154
- const delegation = {
155
- cid: apiResponse.cid ?? "",
156
- delegateDID: params.delegateDID,
157
- spaceId: this.session.spaceId,
158
- path: params.path,
159
- actions: params.actions,
160
- expiry: params.expiry ?? new Date(Date.now() + 24 * 60 * 60 * 1000),
161
- isRevoked: false,
162
- allowSubDelegation: !(params.disableSubDelegation ?? false),
163
- createdAt: new Date(),
164
- };
165
- return { ok: true, data: delegation };
166
- }
167
- catch (error) {
168
- if (error instanceof Error && error.name === "AbortError") {
169
- return {
170
- ok: false,
171
- error: createError(DelegationErrorCodes.ABORTED, "Request aborted", error),
172
- };
173
- }
174
- return {
175
- ok: false,
176
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Network error during delegation creation: ${String(error)}`, error instanceof Error ? error : undefined),
177
- };
178
- }
179
- }
180
- /**
181
- * Revokes an existing delegation.
182
- *
183
- * Once revoked, the delegation can no longer be used to access resources.
184
- * This also invalidates any sub-delegations derived from this delegation.
185
- *
186
- * @param cid - The CID of the delegation to revoke
187
- * @returns Result indicating success or an error
188
- *
189
- * @example
190
- * ```typescript
191
- * const result = await manager.revoke("bafy...");
192
- * if (result.ok) {
193
- * console.log("Delegation revoked successfully");
194
- * }
195
- * ```
196
- */
197
- async revoke(cid) {
198
- if (!cid) {
199
- return {
200
- ok: false,
201
- error: createError(DelegationErrorCodes.INVALID_INPUT, "cid is required"),
202
- };
203
- }
204
- try {
205
- const body = JSON.stringify({ cid });
206
- const response = await this.invokeOperation(cid, DelegationAction.REVOKE, body);
207
- if (!response.ok) {
208
- const errorText = await response.text();
209
- if (response.status === 404) {
210
- return {
211
- ok: false,
212
- error: createError(DelegationErrorCodes.NOT_FOUND, `Delegation not found: ${cid}`),
213
- };
214
- }
215
- return {
216
- ok: false,
217
- error: createError(DelegationErrorCodes.REVOCATION_FAILED, `Failed to revoke delegation: ${response.status} - ${errorText}`, undefined, { status: response.status, cid }),
218
- };
219
- }
220
- return { ok: true, data: undefined };
221
- }
222
- catch (error) {
223
- if (error instanceof Error && error.name === "AbortError") {
224
- return {
225
- ok: false,
226
- error: createError(DelegationErrorCodes.ABORTED, "Request aborted", error),
227
- };
228
- }
229
- return {
230
- ok: false,
231
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Network error during delegation revocation: ${String(error)}`, error instanceof Error ? error : undefined),
232
- };
233
- }
234
- }
235
- /**
236
- * Lists all delegations for the current session's space.
237
- *
238
- * Returns both delegations created by the current user (as delegator)
239
- * and delegations granted to the current user (as delegatee).
240
- *
241
- * @returns Result containing an array of Delegations or an error
242
- *
243
- * @example
244
- * ```typescript
245
- * const result = await manager.list();
246
- * if (result.ok) {
247
- * for (const delegation of result.data) {
248
- * console.log(`${delegation.cid}: ${delegation.path} -> ${delegation.delegateDID}`);
249
- * }
250
- * }
251
- * ```
252
- */
253
- async list() {
254
- try {
255
- const response = await this.invokeOperation("", DelegationAction.LIST);
256
- if (!response.ok) {
257
- const errorText = await response.text();
258
- return {
259
- ok: false,
260
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Failed to list delegations: ${response.status} - ${errorText}`, undefined, { status: response.status }),
261
- };
262
- }
263
- const data = (await response.json());
264
- const delegations = data.map((item) => ({
265
- cid: item.cid,
266
- delegateDID: item.delegateDID,
267
- delegatorDID: item.delegatorDID,
268
- spaceId: item.spaceId,
269
- path: item.path,
270
- actions: item.actions,
271
- expiry: new Date(item.expiry),
272
- isRevoked: item.isRevoked,
273
- createdAt: item.createdAt ? new Date(item.createdAt) : undefined,
274
- parentCid: item.parentCid,
275
- allowSubDelegation: item.allowSubDelegation,
276
- }));
277
- return { ok: true, data: delegations };
278
- }
279
- catch (error) {
280
- if (error instanceof Error && error.name === "AbortError") {
281
- return {
282
- ok: false,
283
- error: createError(DelegationErrorCodes.ABORTED, "Request aborted", error),
284
- };
285
- }
286
- return {
287
- ok: false,
288
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Network error during delegation list: ${String(error)}`, error instanceof Error ? error : undefined),
289
- };
290
- }
291
- }
292
- /**
293
- * Gets the full delegation chain for a given delegation.
294
- *
295
- * Returns the chain of delegations from the root (original delegator)
296
- * to the specified delegation, including all intermediate sub-delegations.
297
- *
298
- * @param cid - The CID of the delegation to get the chain for
299
- * @returns Result containing the DelegationChain or an error
300
- *
301
- * @example
302
- * ```typescript
303
- * const result = await manager.getChain("bafy...");
304
- * if (result.ok) {
305
- * console.log("Chain length:", result.data.length);
306
- * for (const delegation of result.data) {
307
- * console.log(`- ${delegation.delegatorDID} -> ${delegation.delegateDID}`);
308
- * }
309
- * }
310
- * ```
311
- */
312
- async getChain(cid) {
313
- if (!cid) {
314
- return {
315
- ok: false,
316
- error: createError(DelegationErrorCodes.INVALID_INPUT, "cid is required"),
317
- };
318
- }
319
- try {
320
- const body = JSON.stringify({ cid, includeChain: true });
321
- const response = await this.invokeOperation(cid, DelegationAction.GET, body);
322
- if (!response.ok) {
323
- const errorText = await response.text();
324
- if (response.status === 404) {
325
- return {
326
- ok: false,
327
- error: createError(DelegationErrorCodes.NOT_FOUND, `Delegation not found: ${cid}`),
328
- };
329
- }
330
- return {
331
- ok: false,
332
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Failed to get delegation chain: ${response.status} - ${errorText}`, undefined, { status: response.status, cid }),
333
- };
334
- }
335
- const data = (await response.json());
336
- const chain = data.chain.map((item) => ({
337
- cid: item.cid,
338
- delegateDID: item.delegateDID,
339
- delegatorDID: item.delegatorDID,
340
- spaceId: item.spaceId,
341
- path: item.path,
342
- actions: item.actions,
343
- expiry: new Date(item.expiry),
344
- isRevoked: item.isRevoked,
345
- createdAt: item.createdAt ? new Date(item.createdAt) : undefined,
346
- parentCid: item.parentCid,
347
- allowSubDelegation: item.allowSubDelegation,
348
- }));
349
- return { ok: true, data: chain };
350
- }
351
- catch (error) {
352
- if (error instanceof Error && error.name === "AbortError") {
353
- return {
354
- ok: false,
355
- error: createError(DelegationErrorCodes.ABORTED, "Request aborted", error),
356
- };
357
- }
358
- return {
359
- ok: false,
360
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Network error during chain retrieval: ${String(error)}`, error instanceof Error ? error : undefined),
361
- };
362
- }
363
- }
364
- /**
365
- * Checks if the current session has permission for a given path and action.
366
- *
367
- * This can be used to verify permissions before attempting an operation,
368
- * or to implement custom access control logic.
369
- *
370
- * @param path - The resource path to check
371
- * @param action - The action to check (e.g., "tinycloud.kv/get")
372
- * @returns Result containing a boolean indicating permission or an error
373
- *
374
- * @example
375
- * ```typescript
376
- * const result = await manager.checkPermission("documents/private/", "tinycloud.kv/put");
377
- * if (result.ok && result.data) {
378
- * console.log("Permission granted");
379
- * } else {
380
- * console.log("Permission denied");
381
- * }
382
- * ```
383
- */
384
- async checkPermission(path, action) {
385
- if (!path) {
386
- return {
387
- ok: false,
388
- error: createError(DelegationErrorCodes.INVALID_INPUT, "path is required"),
389
- };
390
- }
391
- if (!action) {
392
- return {
393
- ok: false,
394
- error: createError(DelegationErrorCodes.INVALID_INPUT, "action is required"),
395
- };
396
- }
397
- try {
398
- const body = JSON.stringify({ path, action });
399
- const response = await this.invokeOperation(path, DelegationAction.CHECK, body);
400
- if (!response.ok) {
401
- // 403 means permission denied, which is a valid result
402
- if (response.status === 403) {
403
- return { ok: true, data: false };
404
- }
405
- const errorText = await response.text();
406
- return {
407
- ok: false,
408
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Failed to check permission: ${response.status} - ${errorText}`, undefined, { status: response.status, path, action }),
409
- };
410
- }
411
- const data = (await response.json());
412
- return { ok: true, data: data.allowed };
413
- }
414
- catch (error) {
415
- if (error instanceof Error && error.name === "AbortError") {
416
- return {
417
- ok: false,
418
- error: createError(DelegationErrorCodes.ABORTED, "Request aborted", error),
419
- };
420
- }
421
- return {
422
- ok: false,
423
- error: createError(DelegationErrorCodes.NETWORK_ERROR, `Network error during permission check: ${String(error)}`, error instanceof Error ? error : undefined),
424
- };
425
- }
426
- }
427
- }
428
- //# sourceMappingURL=DelegationManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DelegationManager.js","sourceRoot":"","sources":["../../src/delegations/DelegationManager.ts"],"names":[],"mappings":"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"}