@tinycloud/sdk-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/LICENSE.md +320 -0
  2. package/dist/TinyCloud.d.ts +206 -0
  3. package/dist/TinyCloud.d.ts.map +1 -0
  4. package/dist/TinyCloud.js +244 -0
  5. package/dist/TinyCloud.js.map +1 -0
  6. package/dist/TinyCloud.schema.d.ts +173 -0
  7. package/dist/TinyCloud.schema.d.ts.map +1 -0
  8. package/dist/TinyCloud.schema.js +136 -0
  9. package/dist/TinyCloud.schema.js.map +1 -0
  10. package/dist/TinyCloud.schema.test.d.ts +5 -0
  11. package/dist/TinyCloud.schema.test.d.ts.map +1 -0
  12. package/dist/TinyCloud.schema.test.js +286 -0
  13. package/dist/TinyCloud.schema.test.js.map +1 -0
  14. package/dist/authorization/CapabilityKeyRegistry.d.ts +317 -0
  15. package/dist/authorization/CapabilityKeyRegistry.d.ts.map +1 -0
  16. package/dist/authorization/CapabilityKeyRegistry.js +509 -0
  17. package/dist/authorization/CapabilityKeyRegistry.js.map +1 -0
  18. package/dist/authorization/authorization.schema.d.ts +233 -0
  19. package/dist/authorization/authorization.schema.d.ts.map +1 -0
  20. package/dist/authorization/authorization.schema.js +220 -0
  21. package/dist/authorization/authorization.schema.js.map +1 -0
  22. package/dist/authorization/authorization.schema.test.d.ts +5 -0
  23. package/dist/authorization/authorization.schema.test.d.ts.map +1 -0
  24. package/dist/authorization/authorization.schema.test.js +618 -0
  25. package/dist/authorization/authorization.schema.test.js.map +1 -0
  26. package/dist/authorization/index.d.ts +38 -0
  27. package/dist/authorization/index.d.ts.map +1 -0
  28. package/dist/authorization/index.js +52 -0
  29. package/dist/authorization/index.js.map +1 -0
  30. package/dist/authorization/spaceCreation.d.ts +96 -0
  31. package/dist/authorization/spaceCreation.d.ts.map +1 -0
  32. package/dist/authorization/spaceCreation.js +35 -0
  33. package/dist/authorization/spaceCreation.js.map +1 -0
  34. package/dist/authorization/spaceCreation.schema.d.ts +67 -0
  35. package/dist/authorization/spaceCreation.schema.d.ts.map +1 -0
  36. package/dist/authorization/spaceCreation.schema.js +95 -0
  37. package/dist/authorization/spaceCreation.schema.js.map +1 -0
  38. package/dist/authorization/spaceCreation.schema.test.d.ts +5 -0
  39. package/dist/authorization/spaceCreation.schema.test.d.ts.map +1 -0
  40. package/dist/authorization/spaceCreation.schema.test.js +168 -0
  41. package/dist/authorization/spaceCreation.schema.test.js.map +1 -0
  42. package/dist/authorization/strategies.d.ts +134 -0
  43. package/dist/authorization/strategies.d.ts.map +1 -0
  44. package/dist/authorization/strategies.js +15 -0
  45. package/dist/authorization/strategies.js.map +1 -0
  46. package/dist/authorization/strategies.schema.d.ts +185 -0
  47. package/dist/authorization/strategies.schema.d.ts.map +1 -0
  48. package/dist/authorization/strategies.schema.js +147 -0
  49. package/dist/authorization/strategies.schema.js.map +1 -0
  50. package/dist/authorization/strategies.schema.test.d.ts +5 -0
  51. package/dist/authorization/strategies.schema.test.d.ts.map +1 -0
  52. package/dist/authorization/strategies.schema.test.js +253 -0
  53. package/dist/authorization/strategies.schema.test.js.map +1 -0
  54. package/dist/delegations/DelegationManager.d.ts +164 -0
  55. package/dist/delegations/DelegationManager.d.ts.map +1 -0
  56. package/dist/delegations/DelegationManager.js +428 -0
  57. package/dist/delegations/DelegationManager.js.map +1 -0
  58. package/dist/delegations/SharingService.d.ts +279 -0
  59. package/dist/delegations/SharingService.d.ts.map +1 -0
  60. package/dist/delegations/SharingService.js +558 -0
  61. package/dist/delegations/SharingService.js.map +1 -0
  62. package/dist/delegations/SharingService.schema.d.ts +401 -0
  63. package/dist/delegations/SharingService.schema.d.ts.map +1 -0
  64. package/dist/delegations/SharingService.schema.js +211 -0
  65. package/dist/delegations/SharingService.schema.js.map +1 -0
  66. package/dist/delegations/index.d.ts +38 -0
  67. package/dist/delegations/index.d.ts.map +1 -0
  68. package/dist/delegations/index.js +42 -0
  69. package/dist/delegations/index.js.map +1 -0
  70. package/dist/delegations/types.d.ts +13 -0
  71. package/dist/delegations/types.d.ts.map +1 -0
  72. package/dist/delegations/types.js +42 -0
  73. package/dist/delegations/types.js.map +1 -0
  74. package/dist/delegations/types.schema.d.ts +1641 -0
  75. package/dist/delegations/types.schema.d.ts.map +1 -0
  76. package/dist/delegations/types.schema.js +535 -0
  77. package/dist/delegations/types.schema.js.map +1 -0
  78. package/dist/delegations/types.schema.test.d.ts +5 -0
  79. package/dist/delegations/types.schema.test.d.ts.map +1 -0
  80. package/dist/delegations/types.schema.test.js +627 -0
  81. package/dist/delegations/types.schema.test.js.map +1 -0
  82. package/dist/index.d.ts +22 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +52 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/json-schema.d.ts +327 -0
  87. package/dist/json-schema.d.ts.map +1 -0
  88. package/dist/json-schema.js +703 -0
  89. package/dist/json-schema.js.map +1 -0
  90. package/dist/json-schema.test.d.ts +7 -0
  91. package/dist/json-schema.test.d.ts.map +1 -0
  92. package/dist/json-schema.test.js +365 -0
  93. package/dist/json-schema.test.js.map +1 -0
  94. package/dist/signer.d.ts +28 -0
  95. package/dist/signer.d.ts.map +1 -0
  96. package/dist/signer.js +2 -0
  97. package/dist/signer.js.map +1 -0
  98. package/dist/space.d.ts +53 -0
  99. package/dist/space.d.ts.map +1 -0
  100. package/dist/space.js +67 -0
  101. package/dist/space.js.map +1 -0
  102. package/dist/space.schema.d.ts +65 -0
  103. package/dist/space.schema.d.ts.map +1 -0
  104. package/dist/space.schema.js +65 -0
  105. package/dist/space.schema.js.map +1 -0
  106. package/dist/space.schema.test.d.ts +5 -0
  107. package/dist/space.schema.test.d.ts.map +1 -0
  108. package/dist/space.schema.test.js +148 -0
  109. package/dist/space.schema.test.js.map +1 -0
  110. package/dist/spaces/Space.d.ts +175 -0
  111. package/dist/spaces/Space.d.ts.map +1 -0
  112. package/dist/spaces/Space.js +84 -0
  113. package/dist/spaces/Space.js.map +1 -0
  114. package/dist/spaces/SpaceService.d.ts +271 -0
  115. package/dist/spaces/SpaceService.d.ts.map +1 -0
  116. package/dist/spaces/SpaceService.js +715 -0
  117. package/dist/spaces/SpaceService.js.map +1 -0
  118. package/dist/spaces/index.d.ts +11 -0
  119. package/dist/spaces/index.d.ts.map +1 -0
  120. package/dist/spaces/index.js +20 -0
  121. package/dist/spaces/index.js.map +1 -0
  122. package/dist/spaces/spaces.schema.d.ts +421 -0
  123. package/dist/spaces/spaces.schema.d.ts.map +1 -0
  124. package/dist/spaces/spaces.schema.js +342 -0
  125. package/dist/spaces/spaces.schema.js.map +1 -0
  126. package/dist/spaces/spaces.schema.test.d.ts +5 -0
  127. package/dist/spaces/spaces.schema.test.d.ts.map +1 -0
  128. package/dist/spaces/spaces.schema.test.js +471 -0
  129. package/dist/spaces/spaces.schema.test.js.map +1 -0
  130. package/dist/storage.d.ts +47 -0
  131. package/dist/storage.d.ts.map +1 -0
  132. package/dist/storage.js +14 -0
  133. package/dist/storage.js.map +1 -0
  134. package/dist/storage.schema.d.ts +277 -0
  135. package/dist/storage.schema.d.ts.map +1 -0
  136. package/dist/storage.schema.js +185 -0
  137. package/dist/storage.schema.js.map +1 -0
  138. package/dist/storage.schema.test.d.ts +5 -0
  139. package/dist/storage.schema.test.d.ts.map +1 -0
  140. package/dist/storage.schema.test.js +346 -0
  141. package/dist/storage.schema.test.js.map +1 -0
  142. package/dist/userAuthorization.d.ts +99 -0
  143. package/dist/userAuthorization.d.ts.map +1 -0
  144. package/dist/userAuthorization.js +3 -0
  145. package/dist/userAuthorization.js.map +1 -0
  146. package/dist/userAuthorization.schema.d.ts +259 -0
  147. package/dist/userAuthorization.schema.d.ts.map +1 -0
  148. package/dist/userAuthorization.schema.js +175 -0
  149. package/dist/userAuthorization.schema.js.map +1 -0
  150. package/dist/userAuthorization.schema.test.d.ts +5 -0
  151. package/dist/userAuthorization.schema.test.d.ts.map +1 -0
  152. package/dist/userAuthorization.schema.test.js +356 -0
  153. package/dist/userAuthorization.schema.test.js.map +1 -0
  154. package/dist/version.d.ts +30 -0
  155. package/dist/version.d.ts.map +1 -0
  156. package/dist/version.js +54 -0
  157. package/dist/version.js.map +1 -0
  158. package/dist/wasm-validation.d.ts +287 -0
  159. package/dist/wasm-validation.d.ts.map +1 -0
  160. package/dist/wasm-validation.js +219 -0
  161. package/dist/wasm-validation.js.map +1 -0
  162. package/dist/wasm-validation.test.d.ts +5 -0
  163. package/dist/wasm-validation.test.d.ts.map +1 -0
  164. package/dist/wasm-validation.test.js +233 -0
  165. package/dist/wasm-validation.test.js.map +1 -0
  166. package/package.json +40 -0
@@ -0,0 +1,618 @@
1
+ /**
2
+ * Tests for authorization.schema.ts Zod schemas.
3
+ */
4
+ import { describe, expect, it } from "bun:test";
5
+ import {
6
+ // Schemas
7
+ SignTypeSchema, SignRequestSchema, SignResponseSchema, AutoSignStrategySchema, AutoRejectStrategySchema, CallbackStrategySchema, EventEmitterStrategySchema, SignStrategySchema, SpaceCreationContextSchema,
8
+ // Validation functions
9
+ validateSignRequest, validateSignResponse, validateSignStrategy, validateSpaceCreationContext, createAuthorizationValidator, } from "./authorization.schema";
10
+ // =============================================================================
11
+ // Test Fixtures
12
+ // =============================================================================
13
+ const validAddress = "0x1234567890123456789012345678901234567890";
14
+ const validSignRequest = {
15
+ address: validAddress,
16
+ chainId: 1,
17
+ message: "Sign this message to authenticate",
18
+ type: "siwe",
19
+ };
20
+ const validSignResponse = {
21
+ approved: true,
22
+ signature: "0xabcdef1234567890",
23
+ };
24
+ const validSpaceCreationContext = {
25
+ spaceId: "space-123",
26
+ address: validAddress,
27
+ chainId: 1,
28
+ host: "https://node.tinycloud.xyz",
29
+ };
30
+ // =============================================================================
31
+ // SignType Schema Tests
32
+ // =============================================================================
33
+ describe("SignTypeSchema", () => {
34
+ it("accepts 'siwe'", () => {
35
+ const result = SignTypeSchema.safeParse("siwe");
36
+ expect(result.success).toBe(true);
37
+ });
38
+ it("accepts 'message'", () => {
39
+ const result = SignTypeSchema.safeParse("message");
40
+ expect(result.success).toBe(true);
41
+ });
42
+ it("rejects invalid type", () => {
43
+ const result = SignTypeSchema.safeParse("invalid");
44
+ expect(result.success).toBe(false);
45
+ });
46
+ it("rejects non-string values", () => {
47
+ const result = SignTypeSchema.safeParse(123);
48
+ expect(result.success).toBe(false);
49
+ });
50
+ });
51
+ // =============================================================================
52
+ // SignRequest Schema Tests
53
+ // =============================================================================
54
+ describe("SignRequestSchema", () => {
55
+ it("accepts valid sign request", () => {
56
+ const result = SignRequestSchema.safeParse(validSignRequest);
57
+ expect(result.success).toBe(true);
58
+ if (result.success) {
59
+ expect(result.data.address).toBe(validAddress);
60
+ expect(result.data.chainId).toBe(1);
61
+ expect(result.data.type).toBe("siwe");
62
+ }
63
+ });
64
+ it("accepts sign request with message type", () => {
65
+ const result = SignRequestSchema.safeParse({
66
+ ...validSignRequest,
67
+ type: "message",
68
+ });
69
+ expect(result.success).toBe(true);
70
+ if (result.success) {
71
+ expect(result.data.type).toBe("message");
72
+ }
73
+ });
74
+ describe("address validation", () => {
75
+ it("rejects missing address", () => {
76
+ const { address, ...request } = validSignRequest;
77
+ const result = SignRequestSchema.safeParse(request);
78
+ expect(result.success).toBe(false);
79
+ });
80
+ it("accepts any string as address (schema does not validate format)", () => {
81
+ const result = SignRequestSchema.safeParse({
82
+ ...validSignRequest,
83
+ address: "any-string",
84
+ });
85
+ expect(result.success).toBe(true);
86
+ });
87
+ });
88
+ describe("chainId validation", () => {
89
+ it("rejects negative chainId", () => {
90
+ const result = SignRequestSchema.safeParse({
91
+ ...validSignRequest,
92
+ chainId: -1,
93
+ });
94
+ expect(result.success).toBe(false);
95
+ });
96
+ it("rejects zero chainId", () => {
97
+ const result = SignRequestSchema.safeParse({
98
+ ...validSignRequest,
99
+ chainId: 0,
100
+ });
101
+ expect(result.success).toBe(false);
102
+ });
103
+ it("rejects floating point chainId", () => {
104
+ const result = SignRequestSchema.safeParse({
105
+ ...validSignRequest,
106
+ chainId: 1.5,
107
+ });
108
+ expect(result.success).toBe(false);
109
+ });
110
+ it("accepts common chain IDs", () => {
111
+ const chainIds = [1, 5, 10, 137, 42161, 8453];
112
+ for (const chainId of chainIds) {
113
+ const result = SignRequestSchema.safeParse({
114
+ ...validSignRequest,
115
+ chainId,
116
+ });
117
+ expect(result.success).toBe(true);
118
+ }
119
+ });
120
+ });
121
+ describe("message validation", () => {
122
+ it("rejects missing message", () => {
123
+ const { message, ...request } = validSignRequest;
124
+ const result = SignRequestSchema.safeParse(request);
125
+ expect(result.success).toBe(false);
126
+ });
127
+ it("accepts empty message", () => {
128
+ const result = SignRequestSchema.safeParse({
129
+ ...validSignRequest,
130
+ message: "",
131
+ });
132
+ expect(result.success).toBe(true);
133
+ });
134
+ });
135
+ describe("type validation", () => {
136
+ it("rejects invalid type", () => {
137
+ const result = SignRequestSchema.safeParse({
138
+ ...validSignRequest,
139
+ type: "invalid",
140
+ });
141
+ expect(result.success).toBe(false);
142
+ });
143
+ it("rejects missing type", () => {
144
+ const { type, ...request } = validSignRequest;
145
+ const result = SignRequestSchema.safeParse(request);
146
+ expect(result.success).toBe(false);
147
+ });
148
+ });
149
+ it("rejects empty object", () => {
150
+ const result = SignRequestSchema.safeParse({});
151
+ expect(result.success).toBe(false);
152
+ });
153
+ it("rejects null", () => {
154
+ const result = SignRequestSchema.safeParse(null);
155
+ expect(result.success).toBe(false);
156
+ });
157
+ it("rejects undefined", () => {
158
+ const result = SignRequestSchema.safeParse(undefined);
159
+ expect(result.success).toBe(false);
160
+ });
161
+ });
162
+ // =============================================================================
163
+ // SignResponse Schema Tests
164
+ // =============================================================================
165
+ describe("SignResponseSchema", () => {
166
+ it("accepts valid approved response", () => {
167
+ const result = SignResponseSchema.safeParse(validSignResponse);
168
+ expect(result.success).toBe(true);
169
+ if (result.success) {
170
+ expect(result.data.approved).toBe(true);
171
+ expect(result.data.signature).toBe("0xabcdef1234567890");
172
+ }
173
+ });
174
+ it("accepts response without optional signature", () => {
175
+ const result = SignResponseSchema.safeParse({
176
+ approved: false,
177
+ });
178
+ expect(result.success).toBe(true);
179
+ if (result.success) {
180
+ expect(result.data.approved).toBe(false);
181
+ expect(result.data.signature).toBeUndefined();
182
+ }
183
+ });
184
+ it("accepts rejected response with reason", () => {
185
+ const result = SignResponseSchema.safeParse({
186
+ approved: false,
187
+ reason: "User cancelled the request",
188
+ });
189
+ expect(result.success).toBe(true);
190
+ if (result.success) {
191
+ expect(result.data.approved).toBe(false);
192
+ expect(result.data.reason).toBe("User cancelled the request");
193
+ }
194
+ });
195
+ it("accepts full response with all fields", () => {
196
+ const result = SignResponseSchema.safeParse({
197
+ approved: true,
198
+ signature: "0xsignature",
199
+ reason: "some reason",
200
+ });
201
+ expect(result.success).toBe(true);
202
+ });
203
+ it("rejects missing approved field", () => {
204
+ const result = SignResponseSchema.safeParse({
205
+ signature: "0xsignature",
206
+ });
207
+ expect(result.success).toBe(false);
208
+ });
209
+ it("rejects non-boolean approved", () => {
210
+ const result = SignResponseSchema.safeParse({
211
+ approved: "yes",
212
+ });
213
+ expect(result.success).toBe(false);
214
+ });
215
+ it("rejects empty object", () => {
216
+ const result = SignResponseSchema.safeParse({});
217
+ expect(result.success).toBe(false);
218
+ });
219
+ it("rejects null", () => {
220
+ const result = SignResponseSchema.safeParse(null);
221
+ expect(result.success).toBe(false);
222
+ });
223
+ });
224
+ // =============================================================================
225
+ // SignStrategy Schema Tests (Discriminated Union)
226
+ // =============================================================================
227
+ describe("AutoSignStrategySchema", () => {
228
+ it("accepts valid auto-sign strategy", () => {
229
+ const result = AutoSignStrategySchema.safeParse({ type: "auto-sign" });
230
+ expect(result.success).toBe(true);
231
+ if (result.success) {
232
+ expect(result.data.type).toBe("auto-sign");
233
+ }
234
+ });
235
+ it("rejects strategy with extra fields", () => {
236
+ // Note: Zod strips extra fields by default, so this passes
237
+ const result = AutoSignStrategySchema.safeParse({
238
+ type: "auto-sign",
239
+ extra: "field",
240
+ });
241
+ expect(result.success).toBe(true);
242
+ });
243
+ it("rejects wrong type literal", () => {
244
+ const result = AutoSignStrategySchema.safeParse({ type: "auto-reject" });
245
+ expect(result.success).toBe(false);
246
+ });
247
+ });
248
+ describe("AutoRejectStrategySchema", () => {
249
+ it("accepts valid auto-reject strategy", () => {
250
+ const result = AutoRejectStrategySchema.safeParse({ type: "auto-reject" });
251
+ expect(result.success).toBe(true);
252
+ if (result.success) {
253
+ expect(result.data.type).toBe("auto-reject");
254
+ }
255
+ });
256
+ it("rejects wrong type literal", () => {
257
+ const result = AutoRejectStrategySchema.safeParse({ type: "auto-sign" });
258
+ expect(result.success).toBe(false);
259
+ });
260
+ });
261
+ describe("CallbackStrategySchema", () => {
262
+ it("accepts valid callback strategy", () => {
263
+ const handler = async () => ({ approved: true });
264
+ const result = CallbackStrategySchema.safeParse({
265
+ type: "callback",
266
+ handler,
267
+ });
268
+ expect(result.success).toBe(true);
269
+ if (result.success) {
270
+ expect(result.data.type).toBe("callback");
271
+ expect(typeof result.data.handler).toBe("function");
272
+ }
273
+ });
274
+ it("rejects callback strategy without handler", () => {
275
+ const result = CallbackStrategySchema.safeParse({ type: "callback" });
276
+ expect(result.success).toBe(false);
277
+ });
278
+ it("rejects callback strategy with non-function handler", () => {
279
+ const result = CallbackStrategySchema.safeParse({
280
+ type: "callback",
281
+ handler: "not-a-function",
282
+ });
283
+ expect(result.success).toBe(false);
284
+ });
285
+ });
286
+ describe("EventEmitterStrategySchema", () => {
287
+ it("accepts valid event-emitter strategy", () => {
288
+ const emitter = new EventTarget();
289
+ const result = EventEmitterStrategySchema.safeParse({
290
+ type: "event-emitter",
291
+ emitter,
292
+ });
293
+ expect(result.success).toBe(true);
294
+ if (result.success) {
295
+ expect(result.data.type).toBe("event-emitter");
296
+ }
297
+ });
298
+ it("accepts event-emitter strategy with timeout", () => {
299
+ const emitter = new EventTarget();
300
+ const result = EventEmitterStrategySchema.safeParse({
301
+ type: "event-emitter",
302
+ emitter,
303
+ timeout: 30000,
304
+ });
305
+ expect(result.success).toBe(true);
306
+ if (result.success) {
307
+ expect(result.data.timeout).toBe(30000);
308
+ }
309
+ });
310
+ it("rejects event-emitter strategy without emitter", () => {
311
+ const result = EventEmitterStrategySchema.safeParse({
312
+ type: "event-emitter",
313
+ });
314
+ expect(result.success).toBe(false);
315
+ });
316
+ it("rejects event-emitter strategy with invalid emitter", () => {
317
+ const result = EventEmitterStrategySchema.safeParse({
318
+ type: "event-emitter",
319
+ emitter: "not-an-emitter",
320
+ });
321
+ expect(result.success).toBe(false);
322
+ });
323
+ it("rejects event-emitter strategy with null emitter", () => {
324
+ const result = EventEmitterStrategySchema.safeParse({
325
+ type: "event-emitter",
326
+ emitter: null,
327
+ });
328
+ expect(result.success).toBe(false);
329
+ });
330
+ it("rejects negative timeout", () => {
331
+ const emitter = new EventTarget();
332
+ const result = EventEmitterStrategySchema.safeParse({
333
+ type: "event-emitter",
334
+ emitter,
335
+ timeout: -1000,
336
+ });
337
+ expect(result.success).toBe(false);
338
+ });
339
+ it("rejects zero timeout", () => {
340
+ const emitter = new EventTarget();
341
+ const result = EventEmitterStrategySchema.safeParse({
342
+ type: "event-emitter",
343
+ emitter,
344
+ timeout: 0,
345
+ });
346
+ expect(result.success).toBe(false);
347
+ });
348
+ it("rejects floating point timeout", () => {
349
+ const emitter = new EventTarget();
350
+ const result = EventEmitterStrategySchema.safeParse({
351
+ type: "event-emitter",
352
+ emitter,
353
+ timeout: 1000.5,
354
+ });
355
+ expect(result.success).toBe(false);
356
+ });
357
+ });
358
+ describe("SignStrategySchema (discriminated union)", () => {
359
+ it("accepts auto-sign strategy", () => {
360
+ const result = SignStrategySchema.safeParse({ type: "auto-sign" });
361
+ expect(result.success).toBe(true);
362
+ if (result.success) {
363
+ expect(result.data.type).toBe("auto-sign");
364
+ }
365
+ });
366
+ it("accepts auto-reject strategy", () => {
367
+ const result = SignStrategySchema.safeParse({ type: "auto-reject" });
368
+ expect(result.success).toBe(true);
369
+ if (result.success) {
370
+ expect(result.data.type).toBe("auto-reject");
371
+ }
372
+ });
373
+ it("accepts callback strategy", () => {
374
+ const handler = async () => ({ approved: true });
375
+ const result = SignStrategySchema.safeParse({
376
+ type: "callback",
377
+ handler,
378
+ });
379
+ expect(result.success).toBe(true);
380
+ if (result.success) {
381
+ expect(result.data.type).toBe("callback");
382
+ }
383
+ });
384
+ it("accepts event-emitter strategy", () => {
385
+ const emitter = new EventTarget();
386
+ const result = SignStrategySchema.safeParse({
387
+ type: "event-emitter",
388
+ emitter,
389
+ });
390
+ expect(result.success).toBe(true);
391
+ if (result.success) {
392
+ expect(result.data.type).toBe("event-emitter");
393
+ }
394
+ });
395
+ it("rejects unknown strategy type", () => {
396
+ const result = SignStrategySchema.safeParse({ type: "unknown" });
397
+ expect(result.success).toBe(false);
398
+ });
399
+ it("rejects missing type", () => {
400
+ const result = SignStrategySchema.safeParse({});
401
+ expect(result.success).toBe(false);
402
+ });
403
+ it("rejects null", () => {
404
+ const result = SignStrategySchema.safeParse(null);
405
+ expect(result.success).toBe(false);
406
+ });
407
+ it("rejects undefined", () => {
408
+ const result = SignStrategySchema.safeParse(undefined);
409
+ expect(result.success).toBe(false);
410
+ });
411
+ });
412
+ // =============================================================================
413
+ // SpaceCreationContext Schema Tests
414
+ // =============================================================================
415
+ describe("SpaceCreationContextSchema", () => {
416
+ it("accepts valid space creation context", () => {
417
+ const result = SpaceCreationContextSchema.safeParse(validSpaceCreationContext);
418
+ expect(result.success).toBe(true);
419
+ if (result.success) {
420
+ expect(result.data.spaceId).toBe("space-123");
421
+ expect(result.data.address).toBe(validAddress);
422
+ expect(result.data.chainId).toBe(1);
423
+ expect(result.data.host).toBe("https://node.tinycloud.xyz");
424
+ }
425
+ });
426
+ describe("spaceId validation", () => {
427
+ it("rejects missing spaceId", () => {
428
+ const { spaceId, ...context } = validSpaceCreationContext;
429
+ const result = SpaceCreationContextSchema.safeParse(context);
430
+ expect(result.success).toBe(false);
431
+ });
432
+ it("accepts any non-empty string as spaceId", () => {
433
+ const result = SpaceCreationContextSchema.safeParse({
434
+ ...validSpaceCreationContext,
435
+ spaceId: "any-space-id",
436
+ });
437
+ expect(result.success).toBe(true);
438
+ });
439
+ });
440
+ describe("chainId validation", () => {
441
+ it("rejects negative chainId", () => {
442
+ const result = SpaceCreationContextSchema.safeParse({
443
+ ...validSpaceCreationContext,
444
+ chainId: -1,
445
+ });
446
+ expect(result.success).toBe(false);
447
+ });
448
+ it("rejects zero chainId", () => {
449
+ const result = SpaceCreationContextSchema.safeParse({
450
+ ...validSpaceCreationContext,
451
+ chainId: 0,
452
+ });
453
+ expect(result.success).toBe(false);
454
+ });
455
+ it("rejects floating point chainId", () => {
456
+ const result = SpaceCreationContextSchema.safeParse({
457
+ ...validSpaceCreationContext,
458
+ chainId: 1.5,
459
+ });
460
+ expect(result.success).toBe(false);
461
+ });
462
+ });
463
+ describe("host validation", () => {
464
+ it("rejects missing host", () => {
465
+ const { host, ...context } = validSpaceCreationContext;
466
+ const result = SpaceCreationContextSchema.safeParse(context);
467
+ expect(result.success).toBe(false);
468
+ });
469
+ it("rejects invalid URL", () => {
470
+ const result = SpaceCreationContextSchema.safeParse({
471
+ ...validSpaceCreationContext,
472
+ host: "not-a-url",
473
+ });
474
+ expect(result.success).toBe(false);
475
+ });
476
+ it("accepts various valid URLs", () => {
477
+ const hosts = [
478
+ "https://node.tinycloud.xyz",
479
+ "http://localhost:8000",
480
+ "https://api.example.com:3000/path",
481
+ ];
482
+ for (const host of hosts) {
483
+ const result = SpaceCreationContextSchema.safeParse({
484
+ ...validSpaceCreationContext,
485
+ host,
486
+ });
487
+ expect(result.success).toBe(true);
488
+ }
489
+ });
490
+ });
491
+ it("rejects empty object", () => {
492
+ const result = SpaceCreationContextSchema.safeParse({});
493
+ expect(result.success).toBe(false);
494
+ });
495
+ it("rejects null", () => {
496
+ const result = SpaceCreationContextSchema.safeParse(null);
497
+ expect(result.success).toBe(false);
498
+ });
499
+ it("rejects undefined", () => {
500
+ const result = SpaceCreationContextSchema.safeParse(undefined);
501
+ expect(result.success).toBe(false);
502
+ });
503
+ });
504
+ // =============================================================================
505
+ // Validation Helper Tests
506
+ // =============================================================================
507
+ describe("validateSignRequest", () => {
508
+ it("returns ok result for valid data", () => {
509
+ const result = validateSignRequest(validSignRequest);
510
+ expect(result.ok).toBe(true);
511
+ if (result.ok) {
512
+ expect(result.data.address).toBe(validAddress);
513
+ expect(result.data.chainId).toBe(1);
514
+ }
515
+ });
516
+ it("returns error result for invalid data", () => {
517
+ const result = validateSignRequest({});
518
+ expect(result.ok).toBe(false);
519
+ if (!result.ok) {
520
+ expect(result.error.code).toBe("VALIDATION_ERROR");
521
+ expect(result.error.service).toBe("authorization");
522
+ expect(result.error.meta?.issues).toBeDefined();
523
+ }
524
+ });
525
+ it("returns error with validation issues for invalid chainId", () => {
526
+ const result = validateSignRequest({
527
+ ...validSignRequest,
528
+ chainId: -1,
529
+ });
530
+ expect(result.ok).toBe(false);
531
+ if (!result.ok) {
532
+ expect(result.error.meta?.issues).toContainEqual(expect.objectContaining({ path: ["chainId"] }));
533
+ }
534
+ });
535
+ });
536
+ describe("validateSignResponse", () => {
537
+ it("returns ok result for valid data", () => {
538
+ const result = validateSignResponse(validSignResponse);
539
+ expect(result.ok).toBe(true);
540
+ if (result.ok) {
541
+ expect(result.data.approved).toBe(true);
542
+ }
543
+ });
544
+ it("returns error result for invalid data", () => {
545
+ const result = validateSignResponse({});
546
+ expect(result.ok).toBe(false);
547
+ if (!result.ok) {
548
+ expect(result.error.code).toBe("VALIDATION_ERROR");
549
+ }
550
+ });
551
+ });
552
+ describe("validateSignStrategy", () => {
553
+ it("returns ok result for valid auto-sign strategy", () => {
554
+ const result = validateSignStrategy({ type: "auto-sign" });
555
+ expect(result.ok).toBe(true);
556
+ if (result.ok) {
557
+ expect(result.data.type).toBe("auto-sign");
558
+ }
559
+ });
560
+ it("returns ok result for valid callback strategy", () => {
561
+ const handler = async () => ({ approved: true });
562
+ const result = validateSignStrategy({ type: "callback", handler });
563
+ expect(result.ok).toBe(true);
564
+ });
565
+ it("returns error result for invalid strategy type", () => {
566
+ const result = validateSignStrategy({ type: "invalid" });
567
+ expect(result.ok).toBe(false);
568
+ if (!result.ok) {
569
+ expect(result.error.code).toBe("VALIDATION_ERROR");
570
+ }
571
+ });
572
+ });
573
+ describe("validateSpaceCreationContext", () => {
574
+ it("returns ok result for valid data", () => {
575
+ const result = validateSpaceCreationContext(validSpaceCreationContext);
576
+ expect(result.ok).toBe(true);
577
+ if (result.ok) {
578
+ expect(result.data.spaceId).toBe("space-123");
579
+ }
580
+ });
581
+ it("returns error result for invalid data", () => {
582
+ const result = validateSpaceCreationContext({});
583
+ expect(result.ok).toBe(false);
584
+ if (!result.ok) {
585
+ expect(result.error.code).toBe("VALIDATION_ERROR");
586
+ }
587
+ });
588
+ it("returns error with validation issues for invalid host", () => {
589
+ const result = validateSpaceCreationContext({
590
+ ...validSpaceCreationContext,
591
+ host: "not-a-url",
592
+ });
593
+ expect(result.ok).toBe(false);
594
+ if (!result.ok) {
595
+ expect(result.error.meta?.issues).toContainEqual(expect.objectContaining({ path: ["host"] }));
596
+ }
597
+ });
598
+ });
599
+ describe("createAuthorizationValidator", () => {
600
+ it("creates a working validator for SignTypeSchema", () => {
601
+ const validateSignType = createAuthorizationValidator(SignTypeSchema);
602
+ const validResult = validateSignType("siwe");
603
+ expect(validResult.ok).toBe(true);
604
+ const invalidResult = validateSignType("invalid");
605
+ expect(invalidResult.ok).toBe(false);
606
+ if (!invalidResult.ok) {
607
+ expect(invalidResult.error.service).toBe("authorization");
608
+ }
609
+ });
610
+ it("creates a working validator for SignRequestSchema", () => {
611
+ const validateRequest = createAuthorizationValidator(SignRequestSchema);
612
+ const validResult = validateRequest(validSignRequest);
613
+ expect(validResult.ok).toBe(true);
614
+ const invalidResult = validateRequest({ address: "test" });
615
+ expect(invalidResult.ok).toBe(false);
616
+ });
617
+ });
618
+ //# sourceMappingURL=authorization.schema.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.schema.test.js","sourceRoot":"","sources":["../../src/authorization/authorization.schema.test.ts"],"names":[],"mappings":"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"}