@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.
- package/LICENSE.md +320 -0
- package/dist/TinyCloud.d.ts +206 -0
- package/dist/TinyCloud.d.ts.map +1 -0
- package/dist/TinyCloud.js +244 -0
- package/dist/TinyCloud.js.map +1 -0
- package/dist/TinyCloud.schema.d.ts +173 -0
- package/dist/TinyCloud.schema.d.ts.map +1 -0
- package/dist/TinyCloud.schema.js +136 -0
- package/dist/TinyCloud.schema.js.map +1 -0
- package/dist/TinyCloud.schema.test.d.ts +5 -0
- package/dist/TinyCloud.schema.test.d.ts.map +1 -0
- package/dist/TinyCloud.schema.test.js +286 -0
- package/dist/TinyCloud.schema.test.js.map +1 -0
- package/dist/authorization/CapabilityKeyRegistry.d.ts +317 -0
- package/dist/authorization/CapabilityKeyRegistry.d.ts.map +1 -0
- package/dist/authorization/CapabilityKeyRegistry.js +509 -0
- package/dist/authorization/CapabilityKeyRegistry.js.map +1 -0
- package/dist/authorization/authorization.schema.d.ts +233 -0
- package/dist/authorization/authorization.schema.d.ts.map +1 -0
- package/dist/authorization/authorization.schema.js +220 -0
- package/dist/authorization/authorization.schema.js.map +1 -0
- package/dist/authorization/authorization.schema.test.d.ts +5 -0
- package/dist/authorization/authorization.schema.test.d.ts.map +1 -0
- package/dist/authorization/authorization.schema.test.js +618 -0
- package/dist/authorization/authorization.schema.test.js.map +1 -0
- package/dist/authorization/index.d.ts +38 -0
- package/dist/authorization/index.d.ts.map +1 -0
- package/dist/authorization/index.js +52 -0
- package/dist/authorization/index.js.map +1 -0
- package/dist/authorization/spaceCreation.d.ts +96 -0
- package/dist/authorization/spaceCreation.d.ts.map +1 -0
- package/dist/authorization/spaceCreation.js +35 -0
- package/dist/authorization/spaceCreation.js.map +1 -0
- package/dist/authorization/spaceCreation.schema.d.ts +67 -0
- package/dist/authorization/spaceCreation.schema.d.ts.map +1 -0
- package/dist/authorization/spaceCreation.schema.js +95 -0
- package/dist/authorization/spaceCreation.schema.js.map +1 -0
- package/dist/authorization/spaceCreation.schema.test.d.ts +5 -0
- package/dist/authorization/spaceCreation.schema.test.d.ts.map +1 -0
- package/dist/authorization/spaceCreation.schema.test.js +168 -0
- package/dist/authorization/spaceCreation.schema.test.js.map +1 -0
- package/dist/authorization/strategies.d.ts +134 -0
- package/dist/authorization/strategies.d.ts.map +1 -0
- package/dist/authorization/strategies.js +15 -0
- package/dist/authorization/strategies.js.map +1 -0
- package/dist/authorization/strategies.schema.d.ts +185 -0
- package/dist/authorization/strategies.schema.d.ts.map +1 -0
- package/dist/authorization/strategies.schema.js +147 -0
- package/dist/authorization/strategies.schema.js.map +1 -0
- package/dist/authorization/strategies.schema.test.d.ts +5 -0
- package/dist/authorization/strategies.schema.test.d.ts.map +1 -0
- package/dist/authorization/strategies.schema.test.js +253 -0
- package/dist/authorization/strategies.schema.test.js.map +1 -0
- package/dist/delegations/DelegationManager.d.ts +164 -0
- package/dist/delegations/DelegationManager.d.ts.map +1 -0
- package/dist/delegations/DelegationManager.js +428 -0
- package/dist/delegations/DelegationManager.js.map +1 -0
- package/dist/delegations/SharingService.d.ts +279 -0
- package/dist/delegations/SharingService.d.ts.map +1 -0
- package/dist/delegations/SharingService.js +558 -0
- package/dist/delegations/SharingService.js.map +1 -0
- package/dist/delegations/SharingService.schema.d.ts +401 -0
- package/dist/delegations/SharingService.schema.d.ts.map +1 -0
- package/dist/delegations/SharingService.schema.js +211 -0
- package/dist/delegations/SharingService.schema.js.map +1 -0
- package/dist/delegations/index.d.ts +38 -0
- package/dist/delegations/index.d.ts.map +1 -0
- package/dist/delegations/index.js +42 -0
- package/dist/delegations/index.js.map +1 -0
- package/dist/delegations/types.d.ts +13 -0
- package/dist/delegations/types.d.ts.map +1 -0
- package/dist/delegations/types.js +42 -0
- package/dist/delegations/types.js.map +1 -0
- package/dist/delegations/types.schema.d.ts +1641 -0
- package/dist/delegations/types.schema.d.ts.map +1 -0
- package/dist/delegations/types.schema.js +535 -0
- package/dist/delegations/types.schema.js.map +1 -0
- package/dist/delegations/types.schema.test.d.ts +5 -0
- package/dist/delegations/types.schema.test.d.ts.map +1 -0
- package/dist/delegations/types.schema.test.js +627 -0
- package/dist/delegations/types.schema.test.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema.d.ts +327 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +703 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/json-schema.test.d.ts +7 -0
- package/dist/json-schema.test.d.ts.map +1 -0
- package/dist/json-schema.test.js +365 -0
- package/dist/json-schema.test.js.map +1 -0
- package/dist/signer.d.ts +28 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +2 -0
- package/dist/signer.js.map +1 -0
- package/dist/space.d.ts +53 -0
- package/dist/space.d.ts.map +1 -0
- package/dist/space.js +67 -0
- package/dist/space.js.map +1 -0
- package/dist/space.schema.d.ts +65 -0
- package/dist/space.schema.d.ts.map +1 -0
- package/dist/space.schema.js +65 -0
- package/dist/space.schema.js.map +1 -0
- package/dist/space.schema.test.d.ts +5 -0
- package/dist/space.schema.test.d.ts.map +1 -0
- package/dist/space.schema.test.js +148 -0
- package/dist/space.schema.test.js.map +1 -0
- package/dist/spaces/Space.d.ts +175 -0
- package/dist/spaces/Space.d.ts.map +1 -0
- package/dist/spaces/Space.js +84 -0
- package/dist/spaces/Space.js.map +1 -0
- package/dist/spaces/SpaceService.d.ts +271 -0
- package/dist/spaces/SpaceService.d.ts.map +1 -0
- package/dist/spaces/SpaceService.js +715 -0
- package/dist/spaces/SpaceService.js.map +1 -0
- package/dist/spaces/index.d.ts +11 -0
- package/dist/spaces/index.d.ts.map +1 -0
- package/dist/spaces/index.js +20 -0
- package/dist/spaces/index.js.map +1 -0
- package/dist/spaces/spaces.schema.d.ts +421 -0
- package/dist/spaces/spaces.schema.d.ts.map +1 -0
- package/dist/spaces/spaces.schema.js +342 -0
- package/dist/spaces/spaces.schema.js.map +1 -0
- package/dist/spaces/spaces.schema.test.d.ts +5 -0
- package/dist/spaces/spaces.schema.test.d.ts.map +1 -0
- package/dist/spaces/spaces.schema.test.js +471 -0
- package/dist/spaces/spaces.schema.test.js.map +1 -0
- package/dist/storage.d.ts +47 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +14 -0
- package/dist/storage.js.map +1 -0
- package/dist/storage.schema.d.ts +277 -0
- package/dist/storage.schema.d.ts.map +1 -0
- package/dist/storage.schema.js +185 -0
- package/dist/storage.schema.js.map +1 -0
- package/dist/storage.schema.test.d.ts +5 -0
- package/dist/storage.schema.test.d.ts.map +1 -0
- package/dist/storage.schema.test.js +346 -0
- package/dist/storage.schema.test.js.map +1 -0
- package/dist/userAuthorization.d.ts +99 -0
- package/dist/userAuthorization.d.ts.map +1 -0
- package/dist/userAuthorization.js +3 -0
- package/dist/userAuthorization.js.map +1 -0
- package/dist/userAuthorization.schema.d.ts +259 -0
- package/dist/userAuthorization.schema.d.ts.map +1 -0
- package/dist/userAuthorization.schema.js +175 -0
- package/dist/userAuthorization.schema.js.map +1 -0
- package/dist/userAuthorization.schema.test.d.ts +5 -0
- package/dist/userAuthorization.schema.test.d.ts.map +1 -0
- package/dist/userAuthorization.schema.test.js +356 -0
- package/dist/userAuthorization.schema.test.js.map +1 -0
- package/dist/version.d.ts +30 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +54 -0
- package/dist/version.js.map +1 -0
- package/dist/wasm-validation.d.ts +287 -0
- package/dist/wasm-validation.d.ts.map +1 -0
- package/dist/wasm-validation.js +219 -0
- package/dist/wasm-validation.js.map +1 -0
- package/dist/wasm-validation.test.d.ts +5 -0
- package/dist/wasm-validation.test.d.ts.map +1 -0
- package/dist/wasm-validation.test.js +233 -0
- package/dist/wasm-validation.test.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for storage.schema.ts Zod schemas.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, expect, it } from "bun:test";
|
|
5
|
+
import { PersistedSessionDataSchema, PersistedTinyCloudSessionSchema, TinyCloudSessionSchema, EnsDataSchema, validatePersistedSessionData, validateTinyCloudSession, validatePersistedTinyCloudSession, } from "./storage.schema";
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// Test Fixtures
|
|
8
|
+
// =============================================================================
|
|
9
|
+
const validAddress = "0x1234567890123456789012345678901234567890";
|
|
10
|
+
const validTimestamp = "2026-02-01T12:00:00.000Z";
|
|
11
|
+
const validPersistedTinyCloudSession = {
|
|
12
|
+
delegationHeader: { Authorization: "Bearer token123" },
|
|
13
|
+
delegationCid: "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
|
|
14
|
+
spaceId: "space123",
|
|
15
|
+
verificationMethod: "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
|
|
16
|
+
};
|
|
17
|
+
const validPersistedSessionData = {
|
|
18
|
+
address: validAddress,
|
|
19
|
+
chainId: 1,
|
|
20
|
+
sessionKey: '{"kty":"EC","crv":"P-256"}',
|
|
21
|
+
siwe: "example.com wants you to sign in...",
|
|
22
|
+
signature: "0xabcdef1234567890",
|
|
23
|
+
tinycloudSession: validPersistedTinyCloudSession,
|
|
24
|
+
expiresAt: validTimestamp,
|
|
25
|
+
createdAt: validTimestamp,
|
|
26
|
+
version: "1.0.0",
|
|
27
|
+
ens: {
|
|
28
|
+
domain: "example.eth",
|
|
29
|
+
avatarUrl: "https://example.com/avatar.png",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
const validTinyCloudSession = {
|
|
33
|
+
address: validAddress,
|
|
34
|
+
chainId: 1,
|
|
35
|
+
sessionKey: "session-key-id",
|
|
36
|
+
spaceId: "space123",
|
|
37
|
+
delegationCid: "bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
|
|
38
|
+
delegationHeader: { Authorization: "Bearer token123" },
|
|
39
|
+
verificationMethod: "did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK#z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK",
|
|
40
|
+
jwk: { kty: "EC", crv: "P-256" },
|
|
41
|
+
siwe: "example.com wants you to sign in...",
|
|
42
|
+
signature: "0xabcdef1234567890",
|
|
43
|
+
};
|
|
44
|
+
// =============================================================================
|
|
45
|
+
// EnsDataSchema Tests
|
|
46
|
+
// =============================================================================
|
|
47
|
+
describe("EnsDataSchema", () => {
|
|
48
|
+
it("accepts valid ENS data with all fields", () => {
|
|
49
|
+
const result = EnsDataSchema.safeParse({
|
|
50
|
+
domain: "example.eth",
|
|
51
|
+
avatarUrl: "https://example.com/avatar.png",
|
|
52
|
+
});
|
|
53
|
+
expect(result.success).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
it("accepts ENS data with null values", () => {
|
|
56
|
+
const result = EnsDataSchema.safeParse({
|
|
57
|
+
domain: null,
|
|
58
|
+
avatarUrl: null,
|
|
59
|
+
});
|
|
60
|
+
expect(result.success).toBe(true);
|
|
61
|
+
});
|
|
62
|
+
it("accepts empty object", () => {
|
|
63
|
+
const result = EnsDataSchema.safeParse({});
|
|
64
|
+
expect(result.success).toBe(true);
|
|
65
|
+
});
|
|
66
|
+
it("accepts ENS data with only domain", () => {
|
|
67
|
+
const result = EnsDataSchema.safeParse({
|
|
68
|
+
domain: "vitalik.eth",
|
|
69
|
+
});
|
|
70
|
+
expect(result.success).toBe(true);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
// =============================================================================
|
|
74
|
+
// PersistedTinyCloudSessionSchema Tests
|
|
75
|
+
// =============================================================================
|
|
76
|
+
describe("PersistedTinyCloudSessionSchema", () => {
|
|
77
|
+
it("accepts valid persisted TinyCloud session", () => {
|
|
78
|
+
const result = PersistedTinyCloudSessionSchema.safeParse(validPersistedTinyCloudSession);
|
|
79
|
+
expect(result.success).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
it("rejects missing delegationHeader", () => {
|
|
82
|
+
const data = { ...validPersistedTinyCloudSession };
|
|
83
|
+
delete data.delegationHeader;
|
|
84
|
+
const result = PersistedTinyCloudSessionSchema.safeParse(data);
|
|
85
|
+
expect(result.success).toBe(false);
|
|
86
|
+
});
|
|
87
|
+
it("rejects missing spaceId", () => {
|
|
88
|
+
const data = { ...validPersistedTinyCloudSession };
|
|
89
|
+
delete data.spaceId;
|
|
90
|
+
const result = PersistedTinyCloudSessionSchema.safeParse(data);
|
|
91
|
+
expect(result.success).toBe(false);
|
|
92
|
+
});
|
|
93
|
+
it("rejects invalid delegationHeader structure", () => {
|
|
94
|
+
const data = {
|
|
95
|
+
...validPersistedTinyCloudSession,
|
|
96
|
+
delegationHeader: { InvalidKey: "value" },
|
|
97
|
+
};
|
|
98
|
+
const result = PersistedTinyCloudSessionSchema.safeParse(data);
|
|
99
|
+
expect(result.success).toBe(false);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
// =============================================================================
|
|
103
|
+
// PersistedSessionDataSchema Tests
|
|
104
|
+
// =============================================================================
|
|
105
|
+
describe("PersistedSessionDataSchema", () => {
|
|
106
|
+
it("accepts valid persisted session data", () => {
|
|
107
|
+
const result = PersistedSessionDataSchema.safeParse(validPersistedSessionData);
|
|
108
|
+
expect(result.success).toBe(true);
|
|
109
|
+
if (result.success) {
|
|
110
|
+
expect(result.data.address).toBe(validAddress);
|
|
111
|
+
expect(result.data.chainId).toBe(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it("accepts session data without optional tinycloudSession", () => {
|
|
115
|
+
const data = { ...validPersistedSessionData };
|
|
116
|
+
delete data.tinycloudSession;
|
|
117
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
118
|
+
expect(result.success).toBe(true);
|
|
119
|
+
});
|
|
120
|
+
it("accepts session data without optional ens", () => {
|
|
121
|
+
const data = { ...validPersistedSessionData };
|
|
122
|
+
delete data.ens;
|
|
123
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
124
|
+
expect(result.success).toBe(true);
|
|
125
|
+
});
|
|
126
|
+
describe("address validation", () => {
|
|
127
|
+
it("rejects address without 0x prefix", () => {
|
|
128
|
+
const data = {
|
|
129
|
+
...validPersistedSessionData,
|
|
130
|
+
address: "1234567890123456789012345678901234567890",
|
|
131
|
+
};
|
|
132
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
133
|
+
expect(result.success).toBe(false);
|
|
134
|
+
if (!result.success) {
|
|
135
|
+
expect(result.error.issues[0].message).toContain("Invalid Ethereum address");
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
it("rejects address with wrong length", () => {
|
|
139
|
+
const data = {
|
|
140
|
+
...validPersistedSessionData,
|
|
141
|
+
address: "0x123456789",
|
|
142
|
+
};
|
|
143
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
144
|
+
expect(result.success).toBe(false);
|
|
145
|
+
});
|
|
146
|
+
it("rejects address with invalid characters", () => {
|
|
147
|
+
const data = {
|
|
148
|
+
...validPersistedSessionData,
|
|
149
|
+
address: "0xGGGG567890123456789012345678901234567890",
|
|
150
|
+
};
|
|
151
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
152
|
+
expect(result.success).toBe(false);
|
|
153
|
+
});
|
|
154
|
+
it("accepts lowercase address", () => {
|
|
155
|
+
const data = {
|
|
156
|
+
...validPersistedSessionData,
|
|
157
|
+
address: "0xabcdef7890123456789012345678901234567890",
|
|
158
|
+
};
|
|
159
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
160
|
+
expect(result.success).toBe(true);
|
|
161
|
+
});
|
|
162
|
+
it("accepts checksummed address", () => {
|
|
163
|
+
const data = {
|
|
164
|
+
...validPersistedSessionData,
|
|
165
|
+
address: "0xAbCdEf7890123456789012345678901234567890",
|
|
166
|
+
};
|
|
167
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
168
|
+
expect(result.success).toBe(true);
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
describe("chainId validation", () => {
|
|
172
|
+
it("rejects negative chainId", () => {
|
|
173
|
+
const data = {
|
|
174
|
+
...validPersistedSessionData,
|
|
175
|
+
chainId: -1,
|
|
176
|
+
};
|
|
177
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
178
|
+
expect(result.success).toBe(false);
|
|
179
|
+
});
|
|
180
|
+
it("rejects zero chainId", () => {
|
|
181
|
+
const data = {
|
|
182
|
+
...validPersistedSessionData,
|
|
183
|
+
chainId: 0,
|
|
184
|
+
};
|
|
185
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
186
|
+
expect(result.success).toBe(false);
|
|
187
|
+
});
|
|
188
|
+
it("rejects floating point chainId", () => {
|
|
189
|
+
const data = {
|
|
190
|
+
...validPersistedSessionData,
|
|
191
|
+
chainId: 1.5,
|
|
192
|
+
};
|
|
193
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
194
|
+
expect(result.success).toBe(false);
|
|
195
|
+
});
|
|
196
|
+
it("accepts common chain IDs", () => {
|
|
197
|
+
const chainIds = [1, 5, 10, 137, 42161, 8453];
|
|
198
|
+
for (const chainId of chainIds) {
|
|
199
|
+
const data = { ...validPersistedSessionData, chainId };
|
|
200
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
201
|
+
expect(result.success).toBe(true);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
describe("timestamp validation", () => {
|
|
206
|
+
it("rejects invalid expiresAt timestamp", () => {
|
|
207
|
+
const data = {
|
|
208
|
+
...validPersistedSessionData,
|
|
209
|
+
expiresAt: "not-a-date",
|
|
210
|
+
};
|
|
211
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
212
|
+
expect(result.success).toBe(false);
|
|
213
|
+
});
|
|
214
|
+
it("rejects invalid createdAt timestamp", () => {
|
|
215
|
+
const data = {
|
|
216
|
+
...validPersistedSessionData,
|
|
217
|
+
createdAt: "2026/02/01",
|
|
218
|
+
};
|
|
219
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
220
|
+
expect(result.success).toBe(false);
|
|
221
|
+
});
|
|
222
|
+
it("accepts various ISO 8601 formats", () => {
|
|
223
|
+
const timestamps = [
|
|
224
|
+
"2026-02-01T00:00:00Z",
|
|
225
|
+
"2026-02-01T12:30:45.123Z",
|
|
226
|
+
"2026-02-01T12:30:45+00:00",
|
|
227
|
+
"2026-02-01T12:30:45-05:00",
|
|
228
|
+
];
|
|
229
|
+
for (const timestamp of timestamps) {
|
|
230
|
+
const data = {
|
|
231
|
+
...validPersistedSessionData,
|
|
232
|
+
expiresAt: timestamp,
|
|
233
|
+
createdAt: timestamp,
|
|
234
|
+
};
|
|
235
|
+
const result = PersistedSessionDataSchema.safeParse(data);
|
|
236
|
+
expect(result.success).toBe(true);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
it("rejects empty object", () => {
|
|
241
|
+
const result = PersistedSessionDataSchema.safeParse({});
|
|
242
|
+
expect(result.success).toBe(false);
|
|
243
|
+
});
|
|
244
|
+
it("rejects null", () => {
|
|
245
|
+
const result = PersistedSessionDataSchema.safeParse(null);
|
|
246
|
+
expect(result.success).toBe(false);
|
|
247
|
+
});
|
|
248
|
+
it("rejects undefined", () => {
|
|
249
|
+
const result = PersistedSessionDataSchema.safeParse(undefined);
|
|
250
|
+
expect(result.success).toBe(false);
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
// =============================================================================
|
|
254
|
+
// TinyCloudSessionSchema Tests
|
|
255
|
+
// =============================================================================
|
|
256
|
+
describe("TinyCloudSessionSchema", () => {
|
|
257
|
+
it("accepts valid TinyCloud session", () => {
|
|
258
|
+
const result = TinyCloudSessionSchema.safeParse(validTinyCloudSession);
|
|
259
|
+
expect(result.success).toBe(true);
|
|
260
|
+
if (result.success) {
|
|
261
|
+
expect(result.data.spaceId).toBe("space123");
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
it("rejects missing spaceId", () => {
|
|
265
|
+
const data = { ...validTinyCloudSession };
|
|
266
|
+
delete data.spaceId;
|
|
267
|
+
const result = TinyCloudSessionSchema.safeParse(data);
|
|
268
|
+
expect(result.success).toBe(false);
|
|
269
|
+
});
|
|
270
|
+
it("rejects missing jwk", () => {
|
|
271
|
+
const data = { ...validTinyCloudSession };
|
|
272
|
+
delete data.jwk;
|
|
273
|
+
const result = TinyCloudSessionSchema.safeParse(data);
|
|
274
|
+
expect(result.success).toBe(false);
|
|
275
|
+
});
|
|
276
|
+
it("accepts jwk with various structures", () => {
|
|
277
|
+
const jwks = [
|
|
278
|
+
{ kty: "EC", crv: "P-256" },
|
|
279
|
+
{ kty: "OKP", crv: "Ed25519", x: "abc" },
|
|
280
|
+
{ kty: "RSA", n: "...", e: "AQAB" },
|
|
281
|
+
];
|
|
282
|
+
for (const jwk of jwks) {
|
|
283
|
+
const data = { ...validTinyCloudSession, jwk };
|
|
284
|
+
const result = TinyCloudSessionSchema.safeParse(data);
|
|
285
|
+
expect(result.success).toBe(true);
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
// =============================================================================
|
|
290
|
+
// Validation Function Tests
|
|
291
|
+
// =============================================================================
|
|
292
|
+
describe("validatePersistedSessionData", () => {
|
|
293
|
+
it("returns ok result for valid data", () => {
|
|
294
|
+
const result = validatePersistedSessionData(validPersistedSessionData);
|
|
295
|
+
expect(result.ok).toBe(true);
|
|
296
|
+
if (result.ok) {
|
|
297
|
+
expect(result.data.address).toBe(validAddress);
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
it("returns error result for invalid data", () => {
|
|
301
|
+
const result = validatePersistedSessionData({});
|
|
302
|
+
expect(result.ok).toBe(false);
|
|
303
|
+
if (!result.ok) {
|
|
304
|
+
expect(result.error.code).toBe("VALIDATION_ERROR");
|
|
305
|
+
expect(result.error.service).toBe("session");
|
|
306
|
+
expect(result.error.meta?.issues).toBeDefined();
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
it("returns error with validation issues for invalid address", () => {
|
|
310
|
+
const result = validatePersistedSessionData({
|
|
311
|
+
...validPersistedSessionData,
|
|
312
|
+
address: "invalid",
|
|
313
|
+
});
|
|
314
|
+
expect(result.ok).toBe(false);
|
|
315
|
+
if (!result.ok) {
|
|
316
|
+
expect(result.error.meta?.issues).toContainEqual(expect.objectContaining({ path: ["address"] }));
|
|
317
|
+
}
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
describe("validateTinyCloudSession", () => {
|
|
321
|
+
it("returns ok result for valid data", () => {
|
|
322
|
+
const result = validateTinyCloudSession(validTinyCloudSession);
|
|
323
|
+
expect(result.ok).toBe(true);
|
|
324
|
+
});
|
|
325
|
+
it("returns error result for invalid data", () => {
|
|
326
|
+
const result = validateTinyCloudSession({});
|
|
327
|
+
expect(result.ok).toBe(false);
|
|
328
|
+
if (!result.ok) {
|
|
329
|
+
expect(result.error.code).toBe("VALIDATION_ERROR");
|
|
330
|
+
}
|
|
331
|
+
});
|
|
332
|
+
});
|
|
333
|
+
describe("validatePersistedTinyCloudSession", () => {
|
|
334
|
+
it("returns ok result for valid data", () => {
|
|
335
|
+
const result = validatePersistedTinyCloudSession(validPersistedTinyCloudSession);
|
|
336
|
+
expect(result.ok).toBe(true);
|
|
337
|
+
});
|
|
338
|
+
it("returns error result for invalid data", () => {
|
|
339
|
+
const result = validatePersistedTinyCloudSession({});
|
|
340
|
+
expect(result.ok).toBe(false);
|
|
341
|
+
if (!result.ok) {
|
|
342
|
+
expect(result.error.code).toBe("VALIDATION_ERROR");
|
|
343
|
+
}
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
//# sourceMappingURL=storage.schema.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.schema.test.js","sourceRoot":"","sources":["../src/storage.schema.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { ISigner } from "./signer";
|
|
2
|
+
import { ISessionStorage } from "./storage";
|
|
3
|
+
import { SignStrategy, ISpaceCreationHandler } from "./authorization";
|
|
4
|
+
export { ClientSession, Extension, SiweConfig, ConfigOverrides, } from "@tinycloudlabs/web-core/client";
|
|
5
|
+
export { EnsData, SiweMessage } from "@tinycloudlabs/web-core";
|
|
6
|
+
import type { ClientSession, Extension, SiweConfig } from "@tinycloudlabs/web-core/client";
|
|
7
|
+
/**
|
|
8
|
+
* Partial SIWE message for overrides.
|
|
9
|
+
*/
|
|
10
|
+
export interface PartialSiweMessage extends Partial<SiweConfig> {
|
|
11
|
+
address?: string;
|
|
12
|
+
chainId?: number;
|
|
13
|
+
uri?: string;
|
|
14
|
+
version?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Platform-agnostic user authorization interface.
|
|
18
|
+
*
|
|
19
|
+
* This interface defines how users authenticate and manage sessions.
|
|
20
|
+
* Implementations differ by platform:
|
|
21
|
+
* - WebUserAuthorization: Browser with wallet popups
|
|
22
|
+
* - NodeUserAuthorization: Node.js with configurable sign strategies
|
|
23
|
+
*/
|
|
24
|
+
export interface IUserAuthorization {
|
|
25
|
+
/**
|
|
26
|
+
* The current active session, if signed in.
|
|
27
|
+
*/
|
|
28
|
+
session?: ClientSession;
|
|
29
|
+
/**
|
|
30
|
+
* Add an extension to the authorization flow.
|
|
31
|
+
* Extensions can add capabilities and lifecycle hooks.
|
|
32
|
+
*/
|
|
33
|
+
extend(extension: Extension): void;
|
|
34
|
+
/**
|
|
35
|
+
* Sign in and create a new session.
|
|
36
|
+
* This will prompt for wallet signature (browser) or use configured strategy (node).
|
|
37
|
+
* @returns The new session
|
|
38
|
+
*/
|
|
39
|
+
signIn(): Promise<ClientSession>;
|
|
40
|
+
/**
|
|
41
|
+
* Sign out and clear the current session.
|
|
42
|
+
*/
|
|
43
|
+
signOut(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Get the current wallet/signer address.
|
|
46
|
+
* @returns Address or undefined if not connected
|
|
47
|
+
*/
|
|
48
|
+
address(): string | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* Get the current chain ID.
|
|
51
|
+
* @returns Chain ID or undefined if not connected
|
|
52
|
+
*/
|
|
53
|
+
chainId(): number | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Sign a message with the connected wallet/signer.
|
|
56
|
+
* @param message - Message to sign
|
|
57
|
+
* @returns Signature hex string
|
|
58
|
+
*/
|
|
59
|
+
signMessage(message: string): Promise<string>;
|
|
60
|
+
/**
|
|
61
|
+
* Get the current space ID.
|
|
62
|
+
* @returns Space ID or undefined if not available
|
|
63
|
+
*/
|
|
64
|
+
getSpaceId?(): string | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Ensure the user's space exists on the TinyCloud server.
|
|
67
|
+
* Creates the space if it doesn't exist (when autoCreateSpace is true).
|
|
68
|
+
* This is called automatically during sign-in but can be invoked manually.
|
|
69
|
+
*/
|
|
70
|
+
ensureSpaceExists?(): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Configuration for creating a UserAuthorization instance.
|
|
74
|
+
*/
|
|
75
|
+
export interface UserAuthorizationConfig {
|
|
76
|
+
/** The signer to use for signing */
|
|
77
|
+
signer: ISigner;
|
|
78
|
+
/** Session storage implementation */
|
|
79
|
+
sessionStorage?: ISessionStorage;
|
|
80
|
+
/** Default SIWE configuration */
|
|
81
|
+
siweConfig?: SiweConfig;
|
|
82
|
+
/** Domain for SIWE messages */
|
|
83
|
+
domain?: string;
|
|
84
|
+
/** Extensions to apply */
|
|
85
|
+
extensions?: Extension[];
|
|
86
|
+
/** Strategy for handling sign requests (default: auto-sign for node, callback for web) */
|
|
87
|
+
signStrategy?: SignStrategy;
|
|
88
|
+
/** Handler for space creation confirmation (default: AutoApproveSpaceCreationHandler) */
|
|
89
|
+
spaceCreationHandler?: ISpaceCreationHandler;
|
|
90
|
+
/** Whether to automatically create space if it doesn't exist */
|
|
91
|
+
autoCreateSpace?: boolean;
|
|
92
|
+
/** Space name prefix (default: "default") */
|
|
93
|
+
spacePrefix?: string;
|
|
94
|
+
/** TinyCloud host URLs */
|
|
95
|
+
tinycloudHosts?: string[];
|
|
96
|
+
/** Session expiration in milliseconds */
|
|
97
|
+
sessionExpirationMs?: number;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=userAuthorization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userAuthorization.d.ts","sourceRoot":"","sources":["../src/userAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,eAAe,EAAwB,MAAM,WAAW,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAItE,OAAO,EACL,aAAa,EACb,SAAS,EACT,UAAU,EACV,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACX,MAAM,gCAAgC,CAAC;AAGxC;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,UAAU,CAAC;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC;IAExB;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAEnC;;;;OAIG;IACH,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAEjC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzB;;;OAGG;IACH,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC;IAE9B;;;OAGG;IACH,OAAO,IAAI,MAAM,GAAG,SAAS,CAAC;IAE9B;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9C;;;OAGG;IACH,UAAU,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;IAElC;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,qCAAqC;IACrC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,iCAAiC;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IAGzB,0FAA0F;IAC1F,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,yFAAyF;IACzF,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,gEAAgE;IAChE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,yCAAyC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userAuthorization.js","sourceRoot":"","sources":["../src/userAuthorization.ts"],"names":[],"mappings":"AAaA,iEAAiE;AACjE,OAAO,EAAW,WAAW,EAAE,MAAM,yBAAyB,CAAC"}
|