@tinycloud/sdk-core 2.0.1 → 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.
- package/dist/index.cjs +3816 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +3867 -0
- package/dist/index.d.ts +3861 -21
- package/dist/index.js +3767 -61
- package/dist/index.js.map +1 -1
- package/package.json +6 -5
- package/dist/TinyCloud.d.ts +0 -271
- package/dist/TinyCloud.d.ts.map +0 -1
- package/dist/TinyCloud.js +0 -458
- package/dist/TinyCloud.js.map +0 -1
- package/dist/TinyCloud.schema.d.ts +0 -173
- package/dist/TinyCloud.schema.d.ts.map +0 -1
- package/dist/TinyCloud.schema.js +0 -136
- package/dist/TinyCloud.schema.js.map +0 -1
- package/dist/TinyCloud.schema.test.d.ts +0 -5
- package/dist/TinyCloud.schema.test.d.ts.map +0 -1
- package/dist/TinyCloud.schema.test.js +0 -286
- package/dist/TinyCloud.schema.test.js.map +0 -1
- package/dist/authorization/CapabilityKeyRegistry.d.ts +0 -317
- package/dist/authorization/CapabilityKeyRegistry.d.ts.map +0 -1
- package/dist/authorization/CapabilityKeyRegistry.js +0 -509
- package/dist/authorization/CapabilityKeyRegistry.js.map +0 -1
- package/dist/authorization/authorization.schema.d.ts +0 -233
- package/dist/authorization/authorization.schema.d.ts.map +0 -1
- package/dist/authorization/authorization.schema.js +0 -220
- package/dist/authorization/authorization.schema.js.map +0 -1
- package/dist/authorization/authorization.schema.test.d.ts +0 -5
- package/dist/authorization/authorization.schema.test.d.ts.map +0 -1
- package/dist/authorization/authorization.schema.test.js +0 -618
- package/dist/authorization/authorization.schema.test.js.map +0 -1
- package/dist/authorization/index.d.ts +0 -38
- package/dist/authorization/index.d.ts.map +0 -1
- package/dist/authorization/index.js +0 -52
- package/dist/authorization/index.js.map +0 -1
- package/dist/authorization/spaceCreation.d.ts +0 -96
- package/dist/authorization/spaceCreation.d.ts.map +0 -1
- package/dist/authorization/spaceCreation.js +0 -35
- package/dist/authorization/spaceCreation.js.map +0 -1
- package/dist/authorization/spaceCreation.schema.d.ts +0 -67
- package/dist/authorization/spaceCreation.schema.d.ts.map +0 -1
- package/dist/authorization/spaceCreation.schema.js +0 -95
- package/dist/authorization/spaceCreation.schema.js.map +0 -1
- package/dist/authorization/spaceCreation.schema.test.d.ts +0 -5
- package/dist/authorization/spaceCreation.schema.test.d.ts.map +0 -1
- package/dist/authorization/spaceCreation.schema.test.js +0 -168
- package/dist/authorization/spaceCreation.schema.test.js.map +0 -1
- package/dist/authorization/strategies.d.ts +0 -134
- package/dist/authorization/strategies.d.ts.map +0 -1
- package/dist/authorization/strategies.js +0 -15
- package/dist/authorization/strategies.js.map +0 -1
- package/dist/authorization/strategies.schema.d.ts +0 -185
- package/dist/authorization/strategies.schema.d.ts.map +0 -1
- package/dist/authorization/strategies.schema.js +0 -147
- package/dist/authorization/strategies.schema.js.map +0 -1
- package/dist/authorization/strategies.schema.test.d.ts +0 -5
- package/dist/authorization/strategies.schema.test.d.ts.map +0 -1
- package/dist/authorization/strategies.schema.test.js +0 -253
- package/dist/authorization/strategies.schema.test.js.map +0 -1
- package/dist/client-types.d.ts +0 -128
- package/dist/client-types.d.ts.map +0 -1
- package/dist/client-types.js +0 -40
- package/dist/client-types.js.map +0 -1
- package/dist/delegations/DelegationManager.d.ts +0 -164
- package/dist/delegations/DelegationManager.d.ts.map +0 -1
- package/dist/delegations/DelegationManager.js +0 -428
- package/dist/delegations/DelegationManager.js.map +0 -1
- package/dist/delegations/SharingService.d.ts +0 -341
- package/dist/delegations/SharingService.d.ts.map +0 -1
- package/dist/delegations/SharingService.js +0 -722
- package/dist/delegations/SharingService.js.map +0 -1
- package/dist/delegations/SharingService.schema.d.ts +0 -409
- package/dist/delegations/SharingService.schema.d.ts.map +0 -1
- package/dist/delegations/SharingService.schema.js +0 -222
- package/dist/delegations/SharingService.schema.js.map +0 -1
- package/dist/delegations/index.d.ts +0 -38
- package/dist/delegations/index.d.ts.map +0 -1
- package/dist/delegations/index.js +0 -42
- package/dist/delegations/index.js.map +0 -1
- package/dist/delegations/types.d.ts +0 -13
- package/dist/delegations/types.d.ts.map +0 -1
- package/dist/delegations/types.js +0 -42
- package/dist/delegations/types.js.map +0 -1
- package/dist/delegations/types.schema.d.ts +0 -1773
- package/dist/delegations/types.schema.d.ts.map +0 -1
- package/dist/delegations/types.schema.js +0 -535
- package/dist/delegations/types.schema.js.map +0 -1
- package/dist/delegations/types.schema.test.d.ts +0 -5
- package/dist/delegations/types.schema.test.d.ts.map +0 -1
- package/dist/delegations/types.schema.test.js +0 -627
- package/dist/delegations/types.schema.test.js.map +0 -1
- package/dist/ens.d.ts +0 -17
- package/dist/ens.d.ts.map +0 -1
- package/dist/ens.js +0 -10
- package/dist/ens.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/json-schema.d.ts +0 -327
- package/dist/json-schema.d.ts.map +0 -1
- package/dist/json-schema.js +0 -703
- package/dist/json-schema.js.map +0 -1
- package/dist/json-schema.test.d.ts +0 -7
- package/dist/json-schema.test.d.ts.map +0 -1
- package/dist/json-schema.test.js +0 -365
- package/dist/json-schema.test.js.map +0 -1
- package/dist/notifications.d.ts +0 -33
- package/dist/notifications.d.ts.map +0 -1
- package/dist/notifications.js +0 -15
- package/dist/notifications.js.map +0 -1
- package/dist/signer.d.ts +0 -28
- package/dist/signer.d.ts.map +0 -1
- package/dist/signer.js +0 -2
- package/dist/signer.js.map +0 -1
- package/dist/space.d.ts +0 -57
- package/dist/space.d.ts.map +0 -1
- package/dist/space.js +0 -87
- package/dist/space.js.map +0 -1
- package/dist/space.schema.d.ts +0 -65
- package/dist/space.schema.d.ts.map +0 -1
- package/dist/space.schema.js +0 -65
- package/dist/space.schema.js.map +0 -1
- package/dist/space.schema.test.d.ts +0 -5
- package/dist/space.schema.test.d.ts.map +0 -1
- package/dist/space.schema.test.js +0 -148
- package/dist/space.schema.test.js.map +0 -1
- package/dist/space.test.d.ts +0 -5
- package/dist/space.test.d.ts.map +0 -1
- package/dist/space.test.js +0 -87
- package/dist/space.test.js.map +0 -1
- package/dist/spaces/Space.d.ts +0 -175
- package/dist/spaces/Space.d.ts.map +0 -1
- package/dist/spaces/Space.js +0 -84
- package/dist/spaces/Space.js.map +0 -1
- package/dist/spaces/SpaceService.d.ts +0 -291
- package/dist/spaces/SpaceService.d.ts.map +0 -1
- package/dist/spaces/SpaceService.js +0 -740
- package/dist/spaces/SpaceService.js.map +0 -1
- package/dist/spaces/index.d.ts +0 -11
- package/dist/spaces/index.d.ts.map +0 -1
- package/dist/spaces/index.js +0 -22
- package/dist/spaces/index.js.map +0 -1
- package/dist/spaces/spaces.schema.d.ts +0 -421
- package/dist/spaces/spaces.schema.d.ts.map +0 -1
- package/dist/spaces/spaces.schema.js +0 -342
- package/dist/spaces/spaces.schema.js.map +0 -1
- package/dist/spaces/spaces.schema.test.d.ts +0 -5
- package/dist/spaces/spaces.schema.test.d.ts.map +0 -1
- package/dist/spaces/spaces.schema.test.js +0 -471
- package/dist/spaces/spaces.schema.test.js.map +0 -1
- package/dist/storage.d.ts +0 -47
- package/dist/storage.d.ts.map +0 -1
- package/dist/storage.js +0 -14
- package/dist/storage.js.map +0 -1
- package/dist/storage.schema.d.ts +0 -291
- package/dist/storage.schema.d.ts.map +0 -1
- package/dist/storage.schema.js +0 -189
- package/dist/storage.schema.js.map +0 -1
- package/dist/storage.schema.test.d.ts +0 -5
- package/dist/storage.schema.test.d.ts.map +0 -1
- package/dist/storage.schema.test.js +0 -346
- package/dist/storage.schema.test.js.map +0 -1
- package/dist/userAuthorization.d.ts +0 -117
- package/dist/userAuthorization.d.ts.map +0 -1
- package/dist/userAuthorization.js +0 -3
- package/dist/userAuthorization.js.map +0 -1
- package/dist/userAuthorization.schema.d.ts +0 -260
- package/dist/userAuthorization.schema.d.ts.map +0 -1
- package/dist/userAuthorization.schema.js +0 -169
- package/dist/userAuthorization.schema.js.map +0 -1
- package/dist/userAuthorization.schema.test.d.ts +0 -5
- package/dist/userAuthorization.schema.test.d.ts.map +0 -1
- package/dist/userAuthorization.schema.test.js +0 -356
- package/dist/userAuthorization.schema.test.js.map +0 -1
- package/dist/version.d.ts +0 -32
- package/dist/version.d.ts.map +0 -1
- package/dist/version.js +0 -59
- package/dist/version.js.map +0 -1
- package/dist/wasm-validation.d.ts +0 -291
- package/dist/wasm-validation.d.ts.map +0 -1
- package/dist/wasm-validation.js +0 -221
- package/dist/wasm-validation.js.map +0 -1
- package/dist/wasm-validation.test.d.ts +0 -5
- package/dist/wasm-validation.test.d.ts.map +0 -1
- package/dist/wasm-validation.test.js +0 -233
- package/dist/wasm-validation.test.js.map +0 -1
- package/dist/wasm.d.ts +0 -66
- package/dist/wasm.d.ts.map +0 -1
- package/dist/wasm.js +0 -10
- package/dist/wasm.js.map +0 -1
package/dist/TinyCloud.js
DELETED
|
@@ -1,458 +0,0 @@
|
|
|
1
|
-
import { ServiceContext, KVService, SQLService, DuckDbService, ok, err, serviceError, ErrorCodes, } from "@tinycloud/sdk-services";
|
|
2
|
-
import { makePublicSpaceId } from "./spaces/SpaceService";
|
|
3
|
-
/**
|
|
4
|
-
* TinyCloud SDK - Unified entry point for web and node.
|
|
5
|
-
*
|
|
6
|
-
* This class provides the main SDK interface. Platform-specific behavior
|
|
7
|
-
* is injected through the IUserAuthorization implementation:
|
|
8
|
-
* - WebUserAuthorization for browser environments
|
|
9
|
-
* - NodeUserAuthorization for Node.js environments
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* // Web usage
|
|
14
|
-
* import { TinyCloud } from '@tinycloud/sdk-core';
|
|
15
|
-
* import { WebUserAuthorization } from '@tinycloud/web-sdk';
|
|
16
|
-
*
|
|
17
|
-
* const auth = new WebUserAuthorization({ ... });
|
|
18
|
-
* const tc = new TinyCloud(auth);
|
|
19
|
-
* await tc.signIn();
|
|
20
|
-
* const result = await tc.kv.put('key', 'value');
|
|
21
|
-
*
|
|
22
|
-
* // Node usage
|
|
23
|
-
* import { TinyCloud } from '@tinycloud/sdk-core';
|
|
24
|
-
* import { NodeUserAuthorization, PrivateKeySigner } from '@tinycloud/node-sdk';
|
|
25
|
-
*
|
|
26
|
-
* const signer = new PrivateKeySigner(process.env.PRIVATE_KEY);
|
|
27
|
-
* const auth = new NodeUserAuthorization({
|
|
28
|
-
* signStrategy: { type: 'auto-sign' },
|
|
29
|
-
* signer,
|
|
30
|
-
* domain: 'api.myapp.com'
|
|
31
|
-
* });
|
|
32
|
-
* const tc = new TinyCloud(auth);
|
|
33
|
-
* await tc.signIn();
|
|
34
|
-
* ```
|
|
35
|
-
*/
|
|
36
|
-
export class TinyCloud {
|
|
37
|
-
/**
|
|
38
|
-
* Create a new TinyCloud SDK instance.
|
|
39
|
-
*
|
|
40
|
-
* @param userAuthorization - Platform-specific authorization implementation
|
|
41
|
-
* @param config - Optional SDK configuration
|
|
42
|
-
*/
|
|
43
|
-
constructor(userAuthorization, config) {
|
|
44
|
-
/**
|
|
45
|
-
* Registered extensions.
|
|
46
|
-
*/
|
|
47
|
-
this.extensions = [];
|
|
48
|
-
/**
|
|
49
|
-
* Registered services by name.
|
|
50
|
-
*/
|
|
51
|
-
this._services = new Map();
|
|
52
|
-
/**
|
|
53
|
-
* Whether services have been initialized.
|
|
54
|
-
*/
|
|
55
|
-
this._servicesInitialized = false;
|
|
56
|
-
this.userAuthorization = userAuthorization;
|
|
57
|
-
this.config = config || {};
|
|
58
|
-
}
|
|
59
|
-
// === Service Management ===
|
|
60
|
-
/**
|
|
61
|
-
* Initialize services with platform dependencies.
|
|
62
|
-
* Must be called before using services.
|
|
63
|
-
*
|
|
64
|
-
* @param invoke - Platform-specific invoke function from WASM binding
|
|
65
|
-
* @param hosts - TinyCloud host URLs (optional, uses config.hosts)
|
|
66
|
-
* @param fetchFn - Custom fetch implementation (optional)
|
|
67
|
-
*/
|
|
68
|
-
initializeServices(invoke, hosts, fetchFn) {
|
|
69
|
-
const effectiveInvoke = invoke ?? this.config.invoke;
|
|
70
|
-
const effectiveHosts = hosts ?? this.config.hosts;
|
|
71
|
-
if (!effectiveInvoke) {
|
|
72
|
-
throw new Error("invoke function is required to initialize services. " +
|
|
73
|
-
"Provide it via config.invoke or initializeServices().");
|
|
74
|
-
}
|
|
75
|
-
if (!effectiveHosts || effectiveHosts.length === 0) {
|
|
76
|
-
throw new Error("hosts are required to initialize services. " +
|
|
77
|
-
"Provide them via config.hosts or initializeServices().");
|
|
78
|
-
}
|
|
79
|
-
// Create service context
|
|
80
|
-
this._serviceContext = new ServiceContext({
|
|
81
|
-
invoke: effectiveInvoke,
|
|
82
|
-
fetch: fetchFn ?? this.config.fetch ?? globalThis.fetch.bind(globalThis),
|
|
83
|
-
hosts: effectiveHosts,
|
|
84
|
-
retryPolicy: this.config.retryPolicy,
|
|
85
|
-
});
|
|
86
|
-
// Register default services (can be overridden via config.services)
|
|
87
|
-
const serviceConstructors = {
|
|
88
|
-
kv: KVService,
|
|
89
|
-
sql: SQLService,
|
|
90
|
-
duckdb: DuckDbService,
|
|
91
|
-
...this.config.services,
|
|
92
|
-
};
|
|
93
|
-
// Create and register services
|
|
94
|
-
for (const [name, ServiceClass] of Object.entries(serviceConstructors)) {
|
|
95
|
-
const serviceConfig = this.config.serviceConfigs?.[name] ?? {};
|
|
96
|
-
const service = new ServiceClass(serviceConfig);
|
|
97
|
-
service.initialize(this._serviceContext);
|
|
98
|
-
this._serviceContext.registerService(name, service);
|
|
99
|
-
this._services.set(name, service);
|
|
100
|
-
}
|
|
101
|
-
this._servicesInitialized = true;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Get the service context.
|
|
105
|
-
* @throws Error if services are not initialized
|
|
106
|
-
*/
|
|
107
|
-
get serviceContext() {
|
|
108
|
-
if (!this._serviceContext) {
|
|
109
|
-
throw new Error("Services not initialized. Call initializeServices() first.");
|
|
110
|
-
}
|
|
111
|
-
return this._serviceContext;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Get a registered service by name.
|
|
115
|
-
*
|
|
116
|
-
* @param name - Service name (e.g., 'kv')
|
|
117
|
-
* @returns The service instance or undefined
|
|
118
|
-
*/
|
|
119
|
-
getService(name) {
|
|
120
|
-
return this._services.get(name);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Get the KV service.
|
|
124
|
-
* @throws Error if services are not initialized
|
|
125
|
-
*/
|
|
126
|
-
get kv() {
|
|
127
|
-
if (!this._servicesInitialized) {
|
|
128
|
-
throw new Error("Services not initialized. Call initializeServices() first, " +
|
|
129
|
-
"or use TinyCloudWeb/TinyCloudNode which handles this automatically.");
|
|
130
|
-
}
|
|
131
|
-
const service = this._services.get("kv");
|
|
132
|
-
if (!service) {
|
|
133
|
-
throw new Error("KV service is not registered.");
|
|
134
|
-
}
|
|
135
|
-
return service;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Get the SQL service.
|
|
139
|
-
* @throws Error if services are not initialized
|
|
140
|
-
*/
|
|
141
|
-
get sql() {
|
|
142
|
-
if (!this._servicesInitialized) {
|
|
143
|
-
throw new Error("Services not initialized. Call initializeServices() first, " +
|
|
144
|
-
"or use TinyCloudWeb/TinyCloudNode which handles this automatically.");
|
|
145
|
-
}
|
|
146
|
-
const service = this._services.get("sql");
|
|
147
|
-
if (!service) {
|
|
148
|
-
throw new Error("SQL service is not registered.");
|
|
149
|
-
}
|
|
150
|
-
return service;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Get the DuckDB service.
|
|
154
|
-
* @throws Error if services are not initialized
|
|
155
|
-
*/
|
|
156
|
-
get duckdb() {
|
|
157
|
-
if (!this._servicesInitialized) {
|
|
158
|
-
throw new Error("Services not initialized. Call initializeServices() first, " +
|
|
159
|
-
"or use TinyCloudWeb/TinyCloudNode which handles this automatically.");
|
|
160
|
-
}
|
|
161
|
-
const service = this._services.get("duckdb");
|
|
162
|
-
if (!service) {
|
|
163
|
-
throw new Error("DuckDB service is not registered.");
|
|
164
|
-
}
|
|
165
|
-
return service;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Get the Data Vault service.
|
|
169
|
-
* @throws Error if services are not initialized or vault service is not registered
|
|
170
|
-
*/
|
|
171
|
-
get vault() {
|
|
172
|
-
if (!this._servicesInitialized) {
|
|
173
|
-
throw new Error("Services not initialized. Call initializeServices() first, " +
|
|
174
|
-
"or use TinyCloudWeb/TinyCloudNode which handles this automatically.");
|
|
175
|
-
}
|
|
176
|
-
const service = this._services.get("vault");
|
|
177
|
-
if (!service) {
|
|
178
|
-
throw new Error("Vault service is not registered.");
|
|
179
|
-
}
|
|
180
|
-
return service;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Notify services of session change.
|
|
184
|
-
* Called internally after sign-in and sign-out.
|
|
185
|
-
*
|
|
186
|
-
* @param session - The new session, or null if signed out
|
|
187
|
-
*/
|
|
188
|
-
notifyServicesOfSessionChange(session) {
|
|
189
|
-
if (this._serviceContext) {
|
|
190
|
-
this._serviceContext.setSession(session);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Abort all pending service operations.
|
|
195
|
-
* Called internally before sign-out.
|
|
196
|
-
*/
|
|
197
|
-
abortServiceOperations() {
|
|
198
|
-
if (this._serviceContext) {
|
|
199
|
-
this._serviceContext.abort();
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
/**
|
|
203
|
-
* Convert ClientSession to ServiceSession.
|
|
204
|
-
* Returns null if session lacks required fields.
|
|
205
|
-
*/
|
|
206
|
-
toServiceSession(clientSession) {
|
|
207
|
-
if (!clientSession)
|
|
208
|
-
return null;
|
|
209
|
-
// TinyCloudSession contains the required fields
|
|
210
|
-
const tcSession = clientSession.tinycloudSession;
|
|
211
|
-
if (!tcSession)
|
|
212
|
-
return null;
|
|
213
|
-
return {
|
|
214
|
-
delegationHeader: tcSession.delegationHeader,
|
|
215
|
-
delegationCid: tcSession.delegationCid,
|
|
216
|
-
spaceId: tcSession.spaceId,
|
|
217
|
-
verificationMethod: tcSession.verificationMethod,
|
|
218
|
-
jwk: tcSession.jwk,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Add an extension to the SDK.
|
|
223
|
-
* Extensions can add capabilities and lifecycle hooks.
|
|
224
|
-
*/
|
|
225
|
-
extend(extension) {
|
|
226
|
-
this.extensions.push(extension);
|
|
227
|
-
this.userAuthorization.extend(extension);
|
|
228
|
-
}
|
|
229
|
-
/**
|
|
230
|
-
* Check if an extension is enabled.
|
|
231
|
-
* @param namespace - The extension namespace to check
|
|
232
|
-
*/
|
|
233
|
-
isExtensionEnabled(namespace) {
|
|
234
|
-
return this.extensions.some((ext) => ext.namespace === namespace);
|
|
235
|
-
}
|
|
236
|
-
// === Authentication Methods (delegate to userAuthorization) ===
|
|
237
|
-
/**
|
|
238
|
-
* Get the current session, if signed in.
|
|
239
|
-
*/
|
|
240
|
-
get session() {
|
|
241
|
-
return this.userAuthorization.session;
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Check if the user is signed in.
|
|
245
|
-
*/
|
|
246
|
-
get isSignedIn() {
|
|
247
|
-
return !!this.userAuthorization.session;
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Sign in and create a new session.
|
|
251
|
-
* Notifies services of the new session after successful sign-in.
|
|
252
|
-
* @returns The new session
|
|
253
|
-
*/
|
|
254
|
-
async signIn() {
|
|
255
|
-
const session = await this.userAuthorization.signIn();
|
|
256
|
-
// Notify services of the new session
|
|
257
|
-
const serviceSession = this.toServiceSession(session);
|
|
258
|
-
this.notifyServicesOfSessionChange(serviceSession);
|
|
259
|
-
return session;
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Sign out and clear the current session.
|
|
263
|
-
* Aborts pending service operations and notifies services.
|
|
264
|
-
*/
|
|
265
|
-
async signOut() {
|
|
266
|
-
// Abort all pending operations before sign-out
|
|
267
|
-
this.abortServiceOperations();
|
|
268
|
-
await this.userAuthorization.signOut();
|
|
269
|
-
// Clear cached public KV service
|
|
270
|
-
this._publicKV = undefined;
|
|
271
|
-
// Clear session from services
|
|
272
|
-
this.notifyServicesOfSessionChange(null);
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Get the current wallet address.
|
|
276
|
-
*/
|
|
277
|
-
address() {
|
|
278
|
-
return this.userAuthorization.address();
|
|
279
|
-
}
|
|
280
|
-
/**
|
|
281
|
-
* Get the current chain ID.
|
|
282
|
-
*/
|
|
283
|
-
chainId() {
|
|
284
|
-
return this.userAuthorization.chainId();
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Sign a message with the connected wallet.
|
|
288
|
-
* @param message - Message to sign
|
|
289
|
-
*/
|
|
290
|
-
async signMessage(message) {
|
|
291
|
-
return this.userAuthorization.signMessage(message);
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Construct the deterministic public space ID for a given address and chain ID.
|
|
295
|
-
*
|
|
296
|
-
* @param address - Ethereum address (0x-prefixed)
|
|
297
|
-
* @param chainId - Chain ID (e.g., 1 for mainnet)
|
|
298
|
-
* @returns The public space ID
|
|
299
|
-
*/
|
|
300
|
-
static makePublicSpaceId(address, chainId) {
|
|
301
|
-
return makePublicSpaceId(address, chainId);
|
|
302
|
-
}
|
|
303
|
-
/**
|
|
304
|
-
* Ensure the user's public space exists.
|
|
305
|
-
* Creates it via spaces.create('public') if it doesn't.
|
|
306
|
-
* Called automatically by modules that need to publish data.
|
|
307
|
-
*
|
|
308
|
-
* Requires the user to be signed in and services to be initialized.
|
|
309
|
-
*/
|
|
310
|
-
async ensurePublicSpace() {
|
|
311
|
-
const address = this.address();
|
|
312
|
-
const chainId = this.chainId();
|
|
313
|
-
if (!address || !chainId) {
|
|
314
|
-
return err(serviceError(ErrorCodes.AUTH_REQUIRED, "Must be signed in to ensure public space", "public-space"));
|
|
315
|
-
}
|
|
316
|
-
if (!this._serviceContext) {
|
|
317
|
-
return err(serviceError(ErrorCodes.AUTH_REQUIRED, "Services not initialized. Call initializeServices() or signIn() first.", "public-space"));
|
|
318
|
-
}
|
|
319
|
-
const spaceId = makePublicSpaceId(address, chainId);
|
|
320
|
-
// Check if it already exists via invoke
|
|
321
|
-
try {
|
|
322
|
-
const session = this._serviceContext.session;
|
|
323
|
-
if (!session) {
|
|
324
|
-
return err(serviceError(ErrorCodes.AUTH_REQUIRED, "No active session", "public-space"));
|
|
325
|
-
}
|
|
326
|
-
const headers = this._serviceContext.invoke(session, "space", spaceId, "tinycloud.space/info");
|
|
327
|
-
const response = await this._serviceContext.fetch(`${this._serviceContext.hosts[0]}/invoke`, { method: "POST", headers, body: JSON.stringify({ spaceId }) });
|
|
328
|
-
if (response.ok) {
|
|
329
|
-
return ok(undefined);
|
|
330
|
-
}
|
|
331
|
-
if (response.status === 404) {
|
|
332
|
-
// Space doesn't exist — create it
|
|
333
|
-
const createHeaders = this._serviceContext.invoke(session, "space", "public", "tinycloud.space/create");
|
|
334
|
-
const createResponse = await this._serviceContext.fetch(`${this._serviceContext.hosts[0]}/invoke`, {
|
|
335
|
-
method: "POST",
|
|
336
|
-
headers: createHeaders,
|
|
337
|
-
body: JSON.stringify({ name: "public" }),
|
|
338
|
-
});
|
|
339
|
-
if (!createResponse.ok) {
|
|
340
|
-
// 409 means it already exists — that's fine
|
|
341
|
-
if (createResponse.status === 409) {
|
|
342
|
-
return ok(undefined);
|
|
343
|
-
}
|
|
344
|
-
const errorText = await createResponse.text();
|
|
345
|
-
return err(serviceError(ErrorCodes.NETWORK_ERROR, `Failed to create public space: ${createResponse.status} - ${errorText}`, "public-space"));
|
|
346
|
-
}
|
|
347
|
-
return ok(undefined);
|
|
348
|
-
}
|
|
349
|
-
// Other error from info check
|
|
350
|
-
const errorText = await response.text();
|
|
351
|
-
return err(serviceError(ErrorCodes.NETWORK_ERROR, `Failed to check public space: ${response.status} - ${errorText}`, "public-space"));
|
|
352
|
-
}
|
|
353
|
-
catch (error) {
|
|
354
|
-
return err(serviceError(ErrorCodes.NETWORK_ERROR, `Network error ensuring public space: ${String(error)}`, "public-space", { cause: error instanceof Error ? error : undefined }));
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
/**
|
|
358
|
-
* Get a KVService scoped to the user's own public space.
|
|
359
|
-
* Writes require authentication (owner/delegate).
|
|
360
|
-
*
|
|
361
|
-
* @throws Error if not signed in or services not initialized
|
|
362
|
-
*/
|
|
363
|
-
get publicKV() {
|
|
364
|
-
if (!this._servicesInitialized || !this._serviceContext) {
|
|
365
|
-
throw new Error("Services not initialized. Call initializeServices() first, " +
|
|
366
|
-
"or use TinyCloudWeb/TinyCloudNode which handles this automatically.");
|
|
367
|
-
}
|
|
368
|
-
const address = this.address();
|
|
369
|
-
const chainId = this.chainId();
|
|
370
|
-
if (!address || !chainId) {
|
|
371
|
-
throw new Error("Must be signed in to access publicKV.");
|
|
372
|
-
}
|
|
373
|
-
// Return cached instance if available
|
|
374
|
-
if (this._publicKV) {
|
|
375
|
-
return this._publicKV;
|
|
376
|
-
}
|
|
377
|
-
const publicSpaceId = makePublicSpaceId(address, chainId);
|
|
378
|
-
const session = this._serviceContext.session;
|
|
379
|
-
if (!session) {
|
|
380
|
-
throw new Error("No active session. Sign in first.");
|
|
381
|
-
}
|
|
382
|
-
// Create a KV service with a context that targets the public space
|
|
383
|
-
const publicKV = new KVService({ prefix: "" });
|
|
384
|
-
const publicContext = new ServiceContext({
|
|
385
|
-
invoke: this._serviceContext.invoke,
|
|
386
|
-
fetch: this._serviceContext.fetch,
|
|
387
|
-
hosts: this._serviceContext.hosts,
|
|
388
|
-
retryPolicy: this.config.retryPolicy,
|
|
389
|
-
});
|
|
390
|
-
publicContext.setSession({
|
|
391
|
-
...session,
|
|
392
|
-
spaceId: publicSpaceId,
|
|
393
|
-
});
|
|
394
|
-
publicKV.initialize(publicContext);
|
|
395
|
-
this._publicKV = publicKV;
|
|
396
|
-
return this._publicKV;
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Read from any user's public space (unauthenticated).
|
|
400
|
-
* Uses the public REST endpoint — no session needed.
|
|
401
|
-
*
|
|
402
|
-
* @param host - TinyCloud server URL (e.g., "https://node.tinycloud.xyz")
|
|
403
|
-
* @param spaceId - Full public space ID
|
|
404
|
-
* @param key - Key to read
|
|
405
|
-
* @param fetchFn - Optional custom fetch function
|
|
406
|
-
* @returns The data at the key
|
|
407
|
-
*/
|
|
408
|
-
static async readPublicSpace(host, spaceId, key, fetchFn) {
|
|
409
|
-
const doFetch = fetchFn ?? globalThis.fetch.bind(globalThis);
|
|
410
|
-
const encodedKey = key.split('/').map(encodeURIComponent).join('/');
|
|
411
|
-
const url = `${host}/public/${encodeURIComponent(spaceId)}/kv/${encodedKey}`;
|
|
412
|
-
try {
|
|
413
|
-
const response = await doFetch(url, { method: "GET" });
|
|
414
|
-
if (!response.ok) {
|
|
415
|
-
if (response.status === 404) {
|
|
416
|
-
return err(serviceError(ErrorCodes.NOT_FOUND, `Key not found: ${key} in space ${spaceId}`, "public-space"));
|
|
417
|
-
}
|
|
418
|
-
const errorText = await response.text();
|
|
419
|
-
return err(serviceError(ErrorCodes.NETWORK_ERROR, `Failed to read public space: ${response.status} - ${errorText}`, "public-space", { meta: { status: response.status } }));
|
|
420
|
-
}
|
|
421
|
-
const contentType = response.headers.get("content-type");
|
|
422
|
-
let data;
|
|
423
|
-
if (contentType?.includes("application/json")) {
|
|
424
|
-
data = (await response.json());
|
|
425
|
-
}
|
|
426
|
-
else {
|
|
427
|
-
const text = await response.text();
|
|
428
|
-
// Try parsing as JSON, fall back to raw text
|
|
429
|
-
try {
|
|
430
|
-
data = JSON.parse(text);
|
|
431
|
-
}
|
|
432
|
-
catch {
|
|
433
|
-
data = text;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
return ok(data);
|
|
437
|
-
}
|
|
438
|
-
catch (error) {
|
|
439
|
-
return err(serviceError(ErrorCodes.NETWORK_ERROR, `Network error reading public space: ${String(error)}`, "public-space", { cause: error instanceof Error ? error : undefined }));
|
|
440
|
-
}
|
|
441
|
-
}
|
|
442
|
-
/**
|
|
443
|
-
* Read from any user's public space by address (unauthenticated).
|
|
444
|
-
* Convenience method that constructs the space ID from address and chain ID.
|
|
445
|
-
*
|
|
446
|
-
* @param host - TinyCloud server URL
|
|
447
|
-
* @param address - Ethereum address (0x-prefixed)
|
|
448
|
-
* @param chainId - Chain ID (e.g., 1 for mainnet)
|
|
449
|
-
* @param key - Key to read
|
|
450
|
-
* @param fetchFn - Optional custom fetch function
|
|
451
|
-
* @returns The data at the key
|
|
452
|
-
*/
|
|
453
|
-
static async readPublicKey(host, address, chainId, key, fetchFn) {
|
|
454
|
-
const spaceId = makePublicSpaceId(address, chainId);
|
|
455
|
-
return TinyCloud.readPublicSpace(host, spaceId, key, fetchFn);
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
//# sourceMappingURL=TinyCloud.js.map
|
package/dist/TinyCloud.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TinyCloud.js","sourceRoot":"","sources":["../src/TinyCloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Zod schemas for TinyCloud SDK configuration types.
|
|
3
|
-
*
|
|
4
|
-
* These schemas provide runtime validation for TinyCloud configuration.
|
|
5
|
-
* Types are derived from schemas using z.infer<>.
|
|
6
|
-
*
|
|
7
|
-
* @packageDocumentation
|
|
8
|
-
*/
|
|
9
|
-
import { z } from "zod";
|
|
10
|
-
import type { Result } from "./delegations/types.schema";
|
|
11
|
-
import type { ValidationError } from "./storage.schema";
|
|
12
|
-
import type { InvokeFunction, FetchFunction, ServiceConstructor } from "@tinycloud/sdk-services";
|
|
13
|
-
/**
|
|
14
|
-
* Schema for backoff strategy.
|
|
15
|
-
*/
|
|
16
|
-
export declare const BackoffStrategySchema: z.ZodEnum<["none", "linear", "exponential"]>;
|
|
17
|
-
export type BackoffStrategy = z.infer<typeof BackoffStrategySchema>;
|
|
18
|
-
/**
|
|
19
|
-
* Schema for retry policy configuration.
|
|
20
|
-
*/
|
|
21
|
-
export declare const RetryPolicySchema: z.ZodObject<{
|
|
22
|
-
/** Maximum number of attempts (including initial) */
|
|
23
|
-
maxAttempts: z.ZodNumber;
|
|
24
|
-
/** Backoff strategy between retries */
|
|
25
|
-
backoff: z.ZodEnum<["none", "linear", "exponential"]>;
|
|
26
|
-
/** Base delay in milliseconds for backoff calculation */
|
|
27
|
-
baseDelayMs: z.ZodNumber;
|
|
28
|
-
/** Maximum delay in milliseconds between retries */
|
|
29
|
-
maxDelayMs: z.ZodNumber;
|
|
30
|
-
/** Error codes that should trigger a retry */
|
|
31
|
-
retryableErrors: z.ZodArray<z.ZodString, "many">;
|
|
32
|
-
}, "strip", z.ZodTypeAny, {
|
|
33
|
-
maxAttempts: number;
|
|
34
|
-
backoff: "none" | "linear" | "exponential";
|
|
35
|
-
baseDelayMs: number;
|
|
36
|
-
maxDelayMs: number;
|
|
37
|
-
retryableErrors: string[];
|
|
38
|
-
}, {
|
|
39
|
-
maxAttempts: number;
|
|
40
|
-
backoff: "none" | "linear" | "exponential";
|
|
41
|
-
baseDelayMs: number;
|
|
42
|
-
maxDelayMs: number;
|
|
43
|
-
retryableErrors: string[];
|
|
44
|
-
}>;
|
|
45
|
-
export type RetryPolicy = z.infer<typeof RetryPolicySchema>;
|
|
46
|
-
/**
|
|
47
|
-
* Schema for partial retry policy (all fields optional).
|
|
48
|
-
*/
|
|
49
|
-
export declare const PartialRetryPolicySchema: z.ZodObject<{
|
|
50
|
-
maxAttempts: z.ZodOptional<z.ZodNumber>;
|
|
51
|
-
backoff: z.ZodOptional<z.ZodEnum<["none", "linear", "exponential"]>>;
|
|
52
|
-
baseDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
53
|
-
maxDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
54
|
-
retryableErrors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
55
|
-
}, "strip", z.ZodTypeAny, {
|
|
56
|
-
maxAttempts?: number | undefined;
|
|
57
|
-
backoff?: "none" | "linear" | "exponential" | undefined;
|
|
58
|
-
baseDelayMs?: number | undefined;
|
|
59
|
-
maxDelayMs?: number | undefined;
|
|
60
|
-
retryableErrors?: string[] | undefined;
|
|
61
|
-
}, {
|
|
62
|
-
maxAttempts?: number | undefined;
|
|
63
|
-
backoff?: "none" | "linear" | "exponential" | undefined;
|
|
64
|
-
baseDelayMs?: number | undefined;
|
|
65
|
-
maxDelayMs?: number | undefined;
|
|
66
|
-
retryableErrors?: string[] | undefined;
|
|
67
|
-
}>;
|
|
68
|
-
export type PartialRetryPolicy = z.infer<typeof PartialRetryPolicySchema>;
|
|
69
|
-
/**
|
|
70
|
-
* Schema for TinyCloud SDK configuration.
|
|
71
|
-
*/
|
|
72
|
-
export declare const TinyCloudConfigSchema: z.ZodObject<{
|
|
73
|
-
/** Whether to automatically resolve ENS names */
|
|
74
|
-
resolveEns: z.ZodOptional<z.ZodBoolean>;
|
|
75
|
-
/**
|
|
76
|
-
* TinyCloud host URLs.
|
|
77
|
-
* Required when using services.
|
|
78
|
-
*/
|
|
79
|
-
hosts: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
80
|
-
/**
|
|
81
|
-
* Platform-specific invoke function from WASM binding.
|
|
82
|
-
* Required when using services.
|
|
83
|
-
*/
|
|
84
|
-
invoke: z.ZodOptional<z.ZodEffects<z.ZodUnknown, InvokeFunction, unknown>>;
|
|
85
|
-
/**
|
|
86
|
-
* Custom fetch implementation.
|
|
87
|
-
* Defaults to globalThis.fetch.
|
|
88
|
-
*/
|
|
89
|
-
fetch: z.ZodOptional<z.ZodEffects<z.ZodUnknown, FetchFunction, unknown>>;
|
|
90
|
-
/**
|
|
91
|
-
* Service constructors to register.
|
|
92
|
-
* Built-in services (like KVService) are registered by default unless overridden.
|
|
93
|
-
*/
|
|
94
|
-
services: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodUnknown, ServiceConstructor<Record<string, unknown>, import("@tinycloud/sdk-services").IService>, unknown>>>;
|
|
95
|
-
/**
|
|
96
|
-
* Per-service configuration.
|
|
97
|
-
*/
|
|
98
|
-
serviceConfigs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
|
|
99
|
-
/**
|
|
100
|
-
* Retry policy for service operations.
|
|
101
|
-
*/
|
|
102
|
-
retryPolicy: z.ZodOptional<z.ZodObject<{
|
|
103
|
-
maxAttempts: z.ZodOptional<z.ZodNumber>;
|
|
104
|
-
backoff: z.ZodOptional<z.ZodEnum<["none", "linear", "exponential"]>>;
|
|
105
|
-
baseDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
106
|
-
maxDelayMs: z.ZodOptional<z.ZodNumber>;
|
|
107
|
-
retryableErrors: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
108
|
-
}, "strip", z.ZodTypeAny, {
|
|
109
|
-
maxAttempts?: number | undefined;
|
|
110
|
-
backoff?: "none" | "linear" | "exponential" | undefined;
|
|
111
|
-
baseDelayMs?: number | undefined;
|
|
112
|
-
maxDelayMs?: number | undefined;
|
|
113
|
-
retryableErrors?: string[] | undefined;
|
|
114
|
-
}, {
|
|
115
|
-
maxAttempts?: number | undefined;
|
|
116
|
-
backoff?: "none" | "linear" | "exponential" | undefined;
|
|
117
|
-
baseDelayMs?: number | undefined;
|
|
118
|
-
maxDelayMs?: number | undefined;
|
|
119
|
-
retryableErrors?: string[] | undefined;
|
|
120
|
-
}>>;
|
|
121
|
-
}, "strip", z.ZodTypeAny, {
|
|
122
|
-
hosts?: string[] | undefined;
|
|
123
|
-
invoke?: InvokeFunction | undefined;
|
|
124
|
-
fetch?: FetchFunction | undefined;
|
|
125
|
-
resolveEns?: boolean | undefined;
|
|
126
|
-
services?: Record<string, ServiceConstructor<Record<string, unknown>, import("@tinycloud/sdk-services").IService>> | undefined;
|
|
127
|
-
serviceConfigs?: Record<string, Record<string, unknown>> | undefined;
|
|
128
|
-
retryPolicy?: {
|
|
129
|
-
maxAttempts?: number | undefined;
|
|
130
|
-
backoff?: "none" | "linear" | "exponential" | undefined;
|
|
131
|
-
baseDelayMs?: number | undefined;
|
|
132
|
-
maxDelayMs?: number | undefined;
|
|
133
|
-
retryableErrors?: string[] | undefined;
|
|
134
|
-
} | undefined;
|
|
135
|
-
}, {
|
|
136
|
-
hosts?: string[] | undefined;
|
|
137
|
-
invoke?: unknown;
|
|
138
|
-
fetch?: unknown;
|
|
139
|
-
resolveEns?: boolean | undefined;
|
|
140
|
-
services?: Record<string, unknown> | undefined;
|
|
141
|
-
serviceConfigs?: Record<string, Record<string, unknown>> | undefined;
|
|
142
|
-
retryPolicy?: {
|
|
143
|
-
maxAttempts?: number | undefined;
|
|
144
|
-
backoff?: "none" | "linear" | "exponential" | undefined;
|
|
145
|
-
baseDelayMs?: number | undefined;
|
|
146
|
-
maxDelayMs?: number | undefined;
|
|
147
|
-
retryableErrors?: string[] | undefined;
|
|
148
|
-
} | undefined;
|
|
149
|
-
}>;
|
|
150
|
-
export type TinyCloudConfig = z.infer<typeof TinyCloudConfigSchema>;
|
|
151
|
-
/**
|
|
152
|
-
* Validates a TinyCloudConfig object and returns a Result.
|
|
153
|
-
*
|
|
154
|
-
* @param data - Unknown data to validate
|
|
155
|
-
* @returns Result with validated data or validation error
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* ```typescript
|
|
159
|
-
* const result = validateTinyCloudConfig(rawConfig);
|
|
160
|
-
* if (result.ok) {
|
|
161
|
-
* // result.data is typed as TinyCloudConfig
|
|
162
|
-
* console.log(result.data.hosts);
|
|
163
|
-
* } else {
|
|
164
|
-
* console.error(result.error.message);
|
|
165
|
-
* }
|
|
166
|
-
* ```
|
|
167
|
-
*/
|
|
168
|
-
export declare function validateTinyCloudConfig(data: unknown): Result<TinyCloudConfig, ValidationError>;
|
|
169
|
-
/**
|
|
170
|
-
* Validates a RetryPolicy object and returns a Result.
|
|
171
|
-
*/
|
|
172
|
-
export declare function validateRetryPolicy(data: unknown): Result<RetryPolicy, ValidationError>;
|
|
173
|
-
//# sourceMappingURL=TinyCloud.schema.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TinyCloud.schema.d.ts","sourceRoot":"","sources":["../src/TinyCloud.schema.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAMjC;;GAEG;AACH,eAAO,MAAM,qBAAqB,8CAA4C,CAAC;AAC/E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,qDAAqD;;IAErD,uCAAuC;;IAEvC,yDAAyD;;IAEzD,oDAAoD;;IAEpD,8CAA8C;;;;;;;;;;;;;;EAE9C,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;EAA8B,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAM1E;;GAEG;AACH,eAAO,MAAM,qBAAqB;IAChC,iDAAiD;;IAKjD;;;OAGG;;IAGH;;;OAGG;;IAUH;;;OAGG;;IAUH;;;OAGG;;IAWH;;OAEG;;IAGH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAMpE;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,CAc1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,OAAO,GACZ,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CActC"}
|