@onlyworlds/sdk 3.0.0 → 4.0.0-alpha.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.d.mts DELETED
@@ -1,3461 +0,0 @@
1
- /**
2
- * Modern branded types for type-safe element relationships
3
- * Provides compile-time safety while maintaining zero runtime overhead
4
- */
5
- declare const __brand: unique symbol;
6
- type Brand<B> = {
7
- [__brand]: B;
8
- };
9
- /**
10
- * Branded type for element IDs - ensures type safety for relationships
11
- * @template T The element type this ID references
12
- */
13
- type ElementId<T extends ElementType$1> = string & Brand<T>;
14
- /**
15
- * Branded type for arrays of element IDs
16
- * @template T The element type these IDs reference
17
- */
18
- type ElementIds<T extends ElementType$1> = ElementId<T>[];
19
- /**
20
- * Special type for IDs that can reference ANY element type
21
- * Used in cases like Pin.element_type where the target can be any OnlyWorlds element
22
- */
23
- type AnyElementId = ElementId<ElementType$1>;
24
- /**
25
- * Base fields shared by all OnlyWorlds elements
26
- */
27
- interface BaseElement {
28
- id?: string;
29
- name: string;
30
- description?: string;
31
- image_url?: string;
32
- supertype?: string;
33
- subtype?: string;
34
- world?: string;
35
- created_at?: string;
36
- updated_at?: string;
37
- }
38
- /**
39
- * World element type
40
- */
41
- interface World {
42
- id?: string;
43
- api_key: string;
44
- name: string;
45
- description?: string;
46
- version?: string;
47
- image_url?: string;
48
- time_format_equivalents?: any[];
49
- time_format_names?: any[];
50
- time_basic_unit?: string;
51
- time_range_min?: number;
52
- time_range_max?: number;
53
- time_current?: number;
54
- user?: string;
55
- created_at?: string;
56
- updated_at?: string;
57
- }
58
- /**
59
- * World input type for creation/updates
60
- */
61
- interface WorldInput {
62
- name: string;
63
- description?: string;
64
- version?: string;
65
- image_url?: string;
66
- time_format_equivalents?: any[];
67
- time_format_names?: any[];
68
- time_basic_unit?: string;
69
- time_range_min?: number;
70
- time_range_max?: number;
71
- time_current?: number;
72
- }
73
- /**
74
- * Ability element type
75
- * Fields organized by sections: Mechanics, World
76
- */
77
- interface Ability extends BaseElement {
78
- activation?: string;
79
- duration?: number;
80
- potency?: number;
81
- range?: number;
82
- effects?: ElementIds<ElementType$1.Phenomenon>;
83
- challenges?: string;
84
- talents?: ElementIds<ElementType$1.Trait>;
85
- requisites?: ElementIds<ElementType$1.Construct>;
86
- prevalence?: string;
87
- tradition?: ElementId<ElementType$1.Construct>;
88
- source?: ElementId<ElementType$1.Phenomenon>;
89
- locus?: ElementId<ElementType$1.Location>;
90
- instruments?: ElementIds<ElementType$1.Object>;
91
- systems?: ElementIds<ElementType$1.Construct>;
92
- }
93
- /**
94
- * Object element type
95
- * Fields organized by sections: Form, Function, World
96
- */
97
- interface Object$1 extends BaseElement {
98
- aesthetics?: string;
99
- weight?: number;
100
- amount?: number;
101
- parent_object?: ElementId<ElementType$1.Object>;
102
- materials?: ElementIds<ElementType$1.Construct>;
103
- technology?: ElementIds<ElementType$1.Construct>;
104
- utility?: string;
105
- effects?: ElementIds<ElementType$1.Phenomenon>;
106
- abilities?: ElementIds<ElementType$1.Ability>;
107
- consumes?: ElementIds<ElementType$1.Construct>;
108
- origins?: string;
109
- location?: ElementId<ElementType$1.Location>;
110
- language?: ElementId<ElementType$1.Language>;
111
- affinities?: ElementIds<ElementType$1.Trait>;
112
- }
113
- /**
114
- * Character element type
115
- * Fields organized by sections: Constitution, Origins, World, Personality, Social, TTRPG
116
- */
117
- interface Character extends BaseElement {
118
- physicality?: string;
119
- mentality?: string;
120
- height?: number;
121
- weight?: number;
122
- species?: ElementIds<ElementType$1.Species>;
123
- traits?: ElementIds<ElementType$1.Trait>;
124
- abilities?: ElementIds<ElementType$1.Ability>;
125
- background?: string;
126
- motivations?: string;
127
- birth_date?: number;
128
- birthplace?: ElementId<ElementType$1.Location>;
129
- languages?: ElementIds<ElementType$1.Language>;
130
- reputation?: string;
131
- location?: ElementId<ElementType$1.Location>;
132
- objects?: ElementIds<ElementType$1.Object>;
133
- institutions?: ElementIds<ElementType$1.Institution>;
134
- charisma?: number;
135
- coercion?: number;
136
- competence?: number;
137
- compassion?: number;
138
- creativity?: number;
139
- courage?: number;
140
- family?: ElementIds<ElementType$1.Family>;
141
- friends?: ElementIds<ElementType$1.Character>;
142
- rivals?: ElementIds<ElementType$1.Character>;
143
- level?: number;
144
- hit_points?: number;
145
- STR?: number;
146
- DEX?: number;
147
- CON?: number;
148
- INT?: number;
149
- WIS?: number;
150
- CHA?: number;
151
- }
152
- /**
153
- * Collective element type
154
- * Fields organized by sections: Formation, Dynamics, World
155
- */
156
- interface Collective extends BaseElement {
157
- composition?: string;
158
- count?: number;
159
- formation_date?: number;
160
- operator?: ElementId<ElementType$1.Institution>;
161
- equipment?: ElementIds<ElementType$1.Construct>;
162
- activity?: string;
163
- disposition?: string;
164
- state?: string;
165
- abilities?: ElementIds<ElementType$1.Ability>;
166
- symbolism?: ElementIds<ElementType$1.Construct>;
167
- species?: ElementIds<ElementType$1.Species>;
168
- characters?: ElementIds<ElementType$1.Character>;
169
- creatures?: ElementIds<ElementType$1.Creature>;
170
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
171
- }
172
- /**
173
- * Construct element type
174
- * Fields organized by sections: Nature, Involves
175
- */
176
- interface Construct extends BaseElement {
177
- rationale?: string;
178
- history?: string;
179
- status?: string;
180
- reach?: string;
181
- start_date?: number;
182
- end_date?: number;
183
- founder?: ElementId<ElementType$1.Character>;
184
- custodian?: ElementId<ElementType$1.Institution>;
185
- characters?: ElementIds<ElementType$1.Character>;
186
- objects?: ElementIds<ElementType$1.Object>;
187
- locations?: ElementIds<ElementType$1.Location>;
188
- species?: ElementIds<ElementType$1.Species>;
189
- creatures?: ElementIds<ElementType$1.Creature>;
190
- institutions?: ElementIds<ElementType$1.Institution>;
191
- traits?: ElementIds<ElementType$1.Trait>;
192
- collectives?: ElementIds<ElementType$1.Collective>;
193
- zones?: ElementIds<ElementType$1.Zone>;
194
- abilities?: ElementIds<ElementType$1.Ability>;
195
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
196
- languages?: ElementIds<ElementType$1.Language>;
197
- families?: ElementIds<ElementType$1.Family>;
198
- relations?: ElementIds<ElementType$1.Relation>;
199
- titles?: ElementIds<ElementType$1.Title>;
200
- constructs?: ElementIds<ElementType$1.Construct>;
201
- events?: ElementIds<ElementType$1.Event>;
202
- narratives?: ElementIds<ElementType$1.Narrative>;
203
- }
204
- /**
205
- * Creature element type
206
- * Fields organized by sections: Biology, Behaviour, World, TTRPG
207
- */
208
- interface Creature extends BaseElement {
209
- appearance?: string;
210
- weight?: number;
211
- height?: number;
212
- species?: ElementIds<ElementType$1.Species>;
213
- habits?: string;
214
- demeanor?: string;
215
- traits?: ElementIds<ElementType$1.Trait>;
216
- abilities?: ElementIds<ElementType$1.Ability>;
217
- languages?: ElementIds<ElementType$1.Language>;
218
- status?: string;
219
- birth_date?: number;
220
- location?: ElementId<ElementType$1.Location>;
221
- zone?: ElementId<ElementType$1.Zone>;
222
- challenge_rating?: number;
223
- hit_points?: number;
224
- armor_class?: number;
225
- speed?: number;
226
- actions?: ElementIds<ElementType$1.Ability>;
227
- }
228
- /**
229
- * Event element type
230
- * Fields organized by sections: Nature, Involves
231
- */
232
- interface Event extends BaseElement {
233
- history?: string;
234
- challenges?: string;
235
- consequences?: string;
236
- start_date?: number;
237
- end_date?: number;
238
- triggers?: ElementIds<ElementType$1.Event>;
239
- characters?: ElementIds<ElementType$1.Character>;
240
- objects?: ElementIds<ElementType$1.Object>;
241
- locations?: ElementIds<ElementType$1.Location>;
242
- species?: ElementIds<ElementType$1.Species>;
243
- creatures?: ElementIds<ElementType$1.Creature>;
244
- institutions?: ElementIds<ElementType$1.Institution>;
245
- traits?: ElementIds<ElementType$1.Trait>;
246
- collectives?: ElementIds<ElementType$1.Collective>;
247
- zones?: ElementIds<ElementType$1.Zone>;
248
- abilities?: ElementIds<ElementType$1.Ability>;
249
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
250
- languages?: ElementIds<ElementType$1.Language>;
251
- families?: ElementIds<ElementType$1.Family>;
252
- relations?: ElementIds<ElementType$1.Relation>;
253
- titles?: ElementIds<ElementType$1.Title>;
254
- constructs?: ElementIds<ElementType$1.Construct>;
255
- }
256
- /**
257
- * Family element type
258
- * Fields organized by sections: Identity, World
259
- */
260
- interface Family extends BaseElement {
261
- spirit?: string;
262
- history?: string;
263
- traditions?: ElementIds<ElementType$1.Construct>;
264
- traits?: ElementIds<ElementType$1.Trait>;
265
- abilities?: ElementIds<ElementType$1.Ability>;
266
- languages?: ElementIds<ElementType$1.Language>;
267
- ancestors?: ElementIds<ElementType$1.Character>;
268
- reputation?: string;
269
- estates?: ElementIds<ElementType$1.Location>;
270
- governs?: ElementIds<ElementType$1.Institution>;
271
- heirlooms?: ElementIds<ElementType$1.Object>;
272
- creatures?: ElementIds<ElementType$1.Creature>;
273
- }
274
- /**
275
- * Institution element type
276
- * Fields organized by sections: Foundation, Claims, World
277
- */
278
- interface Institution extends BaseElement {
279
- doctrine?: string;
280
- founding_date?: number;
281
- parent_institution?: ElementId<ElementType$1.Institution>;
282
- zones?: ElementIds<ElementType$1.Zone>;
283
- objects?: ElementIds<ElementType$1.Object>;
284
- creatures?: ElementIds<ElementType$1.Creature>;
285
- status?: string;
286
- allies?: ElementIds<ElementType$1.Institution>;
287
- adversaries?: ElementIds<ElementType$1.Institution>;
288
- constructs?: ElementIds<ElementType$1.Construct>;
289
- }
290
- /**
291
- * Language element type
292
- * Fields organized by sections: Structure, World
293
- */
294
- interface Language extends BaseElement {
295
- phonology?: string;
296
- grammar?: string;
297
- lexicon?: string;
298
- writing?: string;
299
- classification?: ElementId<ElementType$1.Construct>;
300
- status?: string;
301
- spread?: ElementIds<ElementType$1.Location>;
302
- dialects?: ElementIds<ElementType$1.Language>;
303
- }
304
- /**
305
- * Law element type
306
- * Fields organized by sections: Code, World
307
- */
308
- interface Law extends BaseElement {
309
- declaration?: string;
310
- purpose?: string;
311
- date?: number;
312
- parent_law?: ElementId<ElementType$1.Law>;
313
- penalties?: ElementIds<ElementType$1.Construct>;
314
- author?: ElementId<ElementType$1.Institution>;
315
- locations?: ElementIds<ElementType$1.Location>;
316
- zones?: ElementIds<ElementType$1.Zone>;
317
- prohibitions?: ElementIds<ElementType$1.Construct>;
318
- adjudicators?: ElementIds<ElementType$1.Title>;
319
- enforcers?: ElementIds<ElementType$1.Title>;
320
- }
321
- /**
322
- * Location element type
323
- * Fields organized by sections: Setting, Politics, World, Production, Commerce, Construction, Defense
324
- */
325
- interface Location extends BaseElement {
326
- form?: string;
327
- function?: string;
328
- founding_date?: number;
329
- parent_location?: ElementId<ElementType$1.Location>;
330
- populations?: ElementIds<ElementType$1.Collective>;
331
- political_climate?: string;
332
- primary_power?: ElementId<ElementType$1.Institution>;
333
- governing_title?: ElementId<ElementType$1.Title>;
334
- secondary_powers?: ElementIds<ElementType$1.Institution>;
335
- zone?: ElementId<ElementType$1.Zone>;
336
- rival?: ElementId<ElementType$1.Location>;
337
- partner?: ElementId<ElementType$1.Location>;
338
- customs?: string;
339
- founders?: ElementIds<ElementType$1.Character>;
340
- cults?: ElementIds<ElementType$1.Construct>;
341
- delicacies?: ElementIds<ElementType$1.Species>;
342
- extraction_methods?: ElementIds<ElementType$1.Construct>;
343
- extraction_goods?: ElementIds<ElementType$1.Construct>;
344
- industry_methods?: ElementIds<ElementType$1.Construct>;
345
- industry_goods?: ElementIds<ElementType$1.Construct>;
346
- infrastructure?: string;
347
- extraction_markets?: ElementIds<ElementType$1.Location>;
348
- industry_markets?: ElementIds<ElementType$1.Location>;
349
- currencies?: ElementIds<ElementType$1.Construct>;
350
- architecture?: string;
351
- buildings?: ElementIds<ElementType$1.Object>;
352
- building_methods?: ElementIds<ElementType$1.Construct>;
353
- defensibility?: string;
354
- elevation?: number;
355
- fighters?: ElementIds<ElementType$1.Construct>;
356
- defensive_objects?: ElementIds<ElementType$1.Object>;
357
- }
358
- /**
359
- * Phenomenon element type
360
- * Fields organized by sections: Mechanics, World
361
- */
362
- interface Phenomenon extends BaseElement {
363
- expression?: string;
364
- effects?: string;
365
- duration?: number;
366
- catalysts?: ElementIds<ElementType$1.Object>;
367
- empowerments?: ElementIds<ElementType$1.Ability>;
368
- mythology?: string;
369
- system?: ElementId<ElementType$1.Phenomenon>;
370
- triggers?: ElementIds<ElementType$1.Construct>;
371
- wielders?: ElementIds<ElementType$1.Character>;
372
- environments?: ElementIds<ElementType$1.Location>;
373
- }
374
- /**
375
- * Relation element type
376
- * Fields organized by sections: Nature, Involves
377
- */
378
- interface Relation extends BaseElement {
379
- background?: string;
380
- start_date?: number;
381
- end_date?: number;
382
- intensity?: number;
383
- actor?: ElementId<ElementType$1.Character>;
384
- events?: ElementIds<ElementType$1.Event>;
385
- characters?: ElementIds<ElementType$1.Character>;
386
- objects?: ElementIds<ElementType$1.Object>;
387
- locations?: ElementIds<ElementType$1.Location>;
388
- species?: ElementIds<ElementType$1.Species>;
389
- creatures?: ElementIds<ElementType$1.Creature>;
390
- institutions?: ElementIds<ElementType$1.Institution>;
391
- traits?: ElementIds<ElementType$1.Trait>;
392
- collectives?: ElementIds<ElementType$1.Collective>;
393
- zones?: ElementIds<ElementType$1.Zone>;
394
- abilities?: ElementIds<ElementType$1.Ability>;
395
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
396
- languages?: ElementIds<ElementType$1.Language>;
397
- families?: ElementIds<ElementType$1.Family>;
398
- titles?: ElementIds<ElementType$1.Title>;
399
- constructs?: ElementIds<ElementType$1.Construct>;
400
- narratives?: ElementIds<ElementType$1.Narrative>;
401
- }
402
- /**
403
- * Species element type
404
- * Fields organized by sections: Biology, Psychology, World
405
- */
406
- interface Species extends BaseElement {
407
- appearance?: string;
408
- life_span?: number;
409
- weight?: number;
410
- nourishment?: ElementIds<ElementType$1.Species>;
411
- reproduction?: ElementIds<ElementType$1.Construct>;
412
- adaptations?: ElementIds<ElementType$1.Ability>;
413
- instincts?: string;
414
- sociality?: string;
415
- temperament?: string;
416
- communication?: string;
417
- aggression?: number;
418
- traits?: ElementIds<ElementType$1.Trait>;
419
- role?: string;
420
- parent_species?: ElementId<ElementType$1.Species>;
421
- locations?: ElementIds<ElementType$1.Location>;
422
- zones?: ElementIds<ElementType$1.Zone>;
423
- affinities?: ElementIds<ElementType$1.Phenomenon>;
424
- }
425
- /**
426
- * Zone element type
427
- * Fields organized by sections: Scope, World
428
- */
429
- interface Zone extends BaseElement {
430
- role?: string;
431
- start_date?: number;
432
- end_date?: number;
433
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
434
- linked_zones?: ElementIds<ElementType$1.Zone>;
435
- context?: string;
436
- populations?: ElementIds<ElementType$1.Collective>;
437
- titles?: ElementIds<ElementType$1.Title>;
438
- principles?: ElementIds<ElementType$1.Construct>;
439
- }
440
- /**
441
- * Title element type
442
- * Fields organized by sections: Mandate, World
443
- */
444
- interface Title extends BaseElement {
445
- authority?: string;
446
- eligibility?: string;
447
- grant_date?: number;
448
- revoke_date?: number;
449
- issuer?: ElementId<ElementType$1.Institution>;
450
- body?: ElementId<ElementType$1.Institution>;
451
- superior_title?: ElementId<ElementType$1.Title>;
452
- holders?: ElementIds<ElementType$1.Character>;
453
- symbols?: ElementIds<ElementType$1.Object>;
454
- status?: string;
455
- history?: string;
456
- characters?: ElementIds<ElementType$1.Character>;
457
- institutions?: ElementIds<ElementType$1.Institution>;
458
- families?: ElementIds<ElementType$1.Family>;
459
- zones?: ElementIds<ElementType$1.Zone>;
460
- locations?: ElementIds<ElementType$1.Location>;
461
- objects?: ElementIds<ElementType$1.Object>;
462
- constructs?: ElementIds<ElementType$1.Construct>;
463
- laws?: ElementIds<ElementType$1.Law>;
464
- collectives?: ElementIds<ElementType$1.Collective>;
465
- creatures?: ElementIds<ElementType$1.Creature>;
466
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
467
- species?: ElementIds<ElementType$1.Species>;
468
- languages?: ElementIds<ElementType$1.Language>;
469
- }
470
- /**
471
- * Trait element type
472
- * Fields organized by sections: Qualitative, Quantitative, World
473
- */
474
- interface Trait extends BaseElement {
475
- social_effects?: string;
476
- physical_effects?: string;
477
- functional_effects?: string;
478
- personality_effects?: string;
479
- behaviour_effects?: string;
480
- charisma?: number;
481
- coercion?: number;
482
- competence?: number;
483
- compassion?: number;
484
- creativity?: number;
485
- courage?: number;
486
- significance?: string;
487
- anti_trait?: ElementId<ElementType$1.Trait>;
488
- empowered_abilities?: ElementIds<ElementType$1.Ability>;
489
- }
490
- /**
491
- * Narrative element type
492
- * Fields organized by sections: Context, Involves
493
- */
494
- interface Narrative extends BaseElement {
495
- story?: string;
496
- consequences?: string;
497
- start_date?: number;
498
- end_date?: number;
499
- order?: number;
500
- parent_narrative?: ElementId<ElementType$1.Narrative>;
501
- protagonist?: ElementId<ElementType$1.Character>;
502
- antagonist?: ElementId<ElementType$1.Character>;
503
- narrator?: ElementId<ElementType$1.Character>;
504
- conservator?: ElementId<ElementType$1.Institution>;
505
- events?: ElementIds<ElementType$1.Event>;
506
- characters?: ElementIds<ElementType$1.Character>;
507
- objects?: ElementIds<ElementType$1.Object>;
508
- locations?: ElementIds<ElementType$1.Location>;
509
- species?: ElementIds<ElementType$1.Species>;
510
- creatures?: ElementIds<ElementType$1.Creature>;
511
- institutions?: ElementIds<ElementType$1.Institution>;
512
- traits?: ElementIds<ElementType$1.Trait>;
513
- collectives?: ElementIds<ElementType$1.Collective>;
514
- zones?: ElementIds<ElementType$1.Zone>;
515
- abilities?: ElementIds<ElementType$1.Ability>;
516
- phenomena?: ElementIds<ElementType$1.Phenomenon>;
517
- languages?: ElementIds<ElementType$1.Language>;
518
- families?: ElementIds<ElementType$1.Family>;
519
- relations?: ElementIds<ElementType$1.Relation>;
520
- titles?: ElementIds<ElementType$1.Title>;
521
- constructs?: ElementIds<ElementType$1.Construct>;
522
- laws?: ElementIds<ElementType$1.Law>;
523
- }
524
- /**
525
- * Map element type
526
- * Fields organized by sections: Details
527
- */
528
- interface Map extends BaseElement {
529
- background_color?: string;
530
- hierarchy?: number;
531
- width?: number;
532
- height?: number;
533
- depth?: number;
534
- parent_map?: ElementId<ElementType$1.Map>;
535
- location?: ElementId<ElementType$1.Location>;
536
- }
537
- /**
538
- * Marker element type
539
- * Fields organized by sections: Details
540
- */
541
- interface Marker extends BaseElement {
542
- map?: ElementId<ElementType$1.Map>;
543
- zone?: ElementId<ElementType$1.Zone>;
544
- x?: number;
545
- y?: number;
546
- z?: number;
547
- order?: number;
548
- }
549
- /**
550
- * Pin element type
551
- * Fields organized by sections: Details
552
- */
553
- interface Pin extends BaseElement {
554
- map?: ElementId<ElementType$1.Map>;
555
- element_type?: ElementType$1;
556
- element_id?: AnyElementId;
557
- /**
558
- * X coordinate on map (must be integer)
559
- * The API requires integer values. Float coordinates from mouse events
560
- * or calculations should be rounded: Math.round(x)
561
- */
562
- x?: number;
563
- /**
564
- * Y coordinate on map (must be integer)
565
- * The API requires integer values. Float coordinates from mouse events
566
- * or calculations should be rounded: Math.round(y)
567
- */
568
- y?: number;
569
- /**
570
- * Z coordinate for 3D positioning (must be integer)
571
- * The API requires integer values. Float coordinates should be rounded: Math.round(z)
572
- */
573
- z?: number;
574
- }
575
- /**
576
- * Input types for API requests
577
- * Use field names without _id/_ids suffix - prepareRelations() handles conversion
578
- */
579
- interface AbilityInput extends Omit<Ability, 'tradition' | 'source' | 'locus' | 'effects' | 'talents' | 'requisites' | 'instruments' | 'systems'> {
580
- tradition?: string;
581
- source?: string;
582
- locus?: string;
583
- effects?: string[];
584
- talents?: string[];
585
- requisites?: string[];
586
- instruments?: string[];
587
- systems?: string[];
588
- }
589
- interface ObjectInput extends Omit<Object$1, 'parent_object' | 'location' | 'language' | 'materials' | 'technology' | 'effects' | 'abilities' | 'consumes' | 'affinities'> {
590
- parent_object?: string;
591
- location?: string;
592
- language?: string;
593
- materials?: string[];
594
- technology?: string[];
595
- effects?: string[];
596
- abilities?: string[];
597
- consumes?: string[];
598
- affinities?: string[];
599
- }
600
- interface CharacterInput extends Omit<Character, 'birthplace' | 'location' | 'species' | 'traits' | 'abilities' | 'languages' | 'objects' | 'institutions' | 'family' | 'friends' | 'rivals'> {
601
- birthplace?: string;
602
- location?: string;
603
- species?: string[];
604
- traits?: string[];
605
- abilities?: string[];
606
- languages?: string[];
607
- objects?: string[];
608
- institutions?: string[];
609
- family?: string[];
610
- friends?: string[];
611
- rivals?: string[];
612
- }
613
- interface CollectiveInput extends Omit<Collective, 'operator' | 'equipment' | 'abilities' | 'symbolism' | 'species' | 'characters' | 'creatures' | 'phenomena'> {
614
- operator?: string;
615
- equipment?: string[];
616
- abilities?: string[];
617
- symbolism?: string[];
618
- species?: string[];
619
- characters?: string[];
620
- creatures?: string[];
621
- phenomena?: string[];
622
- }
623
- interface ConstructInput extends Omit<Construct, 'founder' | 'custodian' | 'characters' | 'objects' | 'locations' | 'species' | 'creatures' | 'institutions' | 'traits' | 'collectives' | 'zones' | 'abilities' | 'phenomena' | 'languages' | 'families' | 'relations' | 'titles' | 'constructs' | 'events' | 'narratives'> {
624
- founder?: string;
625
- custodian?: string;
626
- characters?: string[];
627
- objects?: string[];
628
- locations?: string[];
629
- species?: string[];
630
- creatures?: string[];
631
- institutions?: string[];
632
- traits?: string[];
633
- collectives?: string[];
634
- zones?: string[];
635
- abilities?: string[];
636
- phenomena?: string[];
637
- languages?: string[];
638
- families?: string[];
639
- relations?: string[];
640
- titles?: string[];
641
- constructs?: string[];
642
- events?: string[];
643
- narratives?: string[];
644
- }
645
- interface CreatureInput extends Omit<Creature, 'location' | 'zone' | 'species' | 'traits' | 'abilities' | 'languages' | 'actions'> {
646
- location?: string;
647
- zone?: string;
648
- species?: string[];
649
- traits?: string[];
650
- abilities?: string[];
651
- languages?: string[];
652
- actions?: string[];
653
- }
654
- interface EventInput extends Omit<Event, 'triggers' | 'characters' | 'objects' | 'locations' | 'species' | 'creatures' | 'institutions' | 'traits' | 'collectives' | 'zones' | 'abilities' | 'phenomena' | 'languages' | 'families' | 'relations' | 'titles' | 'constructs'> {
655
- triggers?: string[];
656
- characters?: string[];
657
- objects?: string[];
658
- locations?: string[];
659
- species?: string[];
660
- creatures?: string[];
661
- institutions?: string[];
662
- traits?: string[];
663
- collectives?: string[];
664
- zones?: string[];
665
- abilities?: string[];
666
- phenomena?: string[];
667
- languages?: string[];
668
- families?: string[];
669
- relations?: string[];
670
- titles?: string[];
671
- constructs?: string[];
672
- }
673
- interface FamilyInput extends Omit<Family, 'traditions' | 'traits' | 'abilities' | 'languages' | 'ancestors' | 'estates' | 'governs' | 'heirlooms' | 'creatures'> {
674
- traditions?: string[];
675
- traits?: string[];
676
- abilities?: string[];
677
- languages?: string[];
678
- ancestors?: string[];
679
- estates?: string[];
680
- governs?: string[];
681
- heirlooms?: string[];
682
- creatures?: string[];
683
- }
684
- interface InstitutionInput extends Omit<Institution, 'parent_institution' | 'zones' | 'objects' | 'creatures' | 'allies' | 'adversaries' | 'constructs'> {
685
- parent_institution?: string;
686
- zones?: string[];
687
- objects?: string[];
688
- creatures?: string[];
689
- allies?: string[];
690
- adversaries?: string[];
691
- constructs?: string[];
692
- }
693
- interface LanguageInput extends Omit<Language, 'classification' | 'spread' | 'dialects'> {
694
- classification?: string;
695
- spread?: string[];
696
- dialects?: string[];
697
- }
698
- interface LawInput extends Omit<Law, 'parent_law' | 'author' | 'penalties' | 'locations' | 'zones' | 'prohibitions' | 'adjudicators' | 'enforcers'> {
699
- parent_law?: string;
700
- author?: string;
701
- penalties?: string[];
702
- locations?: string[];
703
- zones?: string[];
704
- prohibitions?: string[];
705
- adjudicators?: string[];
706
- enforcers?: string[];
707
- }
708
- interface LocationInput extends Omit<Location, 'parent_location' | 'primary_power' | 'governing_title' | 'zone' | 'rival' | 'partner' | 'populations' | 'secondary_powers' | 'founders' | 'cults' | 'delicacies' | 'extraction_methods' | 'extraction_goods' | 'industry_methods' | 'industry_goods' | 'extraction_markets' | 'industry_markets' | 'currencies' | 'buildings' | 'building_methods' | 'fighters' | 'defensive_objects'> {
709
- parent_location?: string;
710
- primary_power?: string;
711
- governing_title?: string;
712
- zone?: string;
713
- rival?: string;
714
- partner?: string;
715
- populations?: string[];
716
- secondary_powers?: string[];
717
- founders?: string[];
718
- cults?: string[];
719
- delicacies?: string[];
720
- extraction_methods?: string[];
721
- extraction_goods?: string[];
722
- industry_methods?: string[];
723
- industry_goods?: string[];
724
- extraction_markets?: string[];
725
- industry_markets?: string[];
726
- currencies?: string[];
727
- buildings?: string[];
728
- building_methods?: string[];
729
- fighters?: string[];
730
- defensive_objects?: string[];
731
- }
732
- interface PhenomenonInput extends Omit<Phenomenon, 'system' | 'catalysts' | 'empowerments' | 'triggers' | 'wielders' | 'environments'> {
733
- system?: string;
734
- catalysts?: string[];
735
- empowerments?: string[];
736
- triggers?: string[];
737
- wielders?: string[];
738
- environments?: string[];
739
- }
740
- interface RelationInput extends Omit<Relation, 'actor' | 'characters' | 'objects' | 'locations' | 'species' | 'creatures' | 'institutions' | 'traits' | 'collectives' | 'zones' | 'abilities' | 'phenomena' | 'languages' | 'families' | 'titles' | 'constructs' | 'events' | 'narratives'> {
741
- actor?: string;
742
- characters?: string[];
743
- objects?: string[];
744
- locations?: string[];
745
- species?: string[];
746
- creatures?: string[];
747
- institutions?: string[];
748
- traits?: string[];
749
- collectives?: string[];
750
- zones?: string[];
751
- abilities?: string[];
752
- phenomena?: string[];
753
- languages?: string[];
754
- families?: string[];
755
- titles?: string[];
756
- constructs?: string[];
757
- events?: string[];
758
- narratives?: string[];
759
- }
760
- interface SpeciesInput extends Omit<Species, 'parent_species' | 'nourishment' | 'reproduction' | 'adaptations' | 'traits' | 'locations' | 'zones' | 'affinities'> {
761
- parent_species?: string;
762
- nourishment?: string[];
763
- reproduction?: string[];
764
- adaptations?: string[];
765
- traits?: string[];
766
- locations?: string[];
767
- zones?: string[];
768
- affinities?: string[];
769
- }
770
- interface ZoneInput extends Omit<Zone, 'phenomena' | 'linked_zones' | 'populations' | 'titles' | 'principles'> {
771
- phenomena?: string[];
772
- linked_zones?: string[];
773
- populations?: string[];
774
- titles?: string[];
775
- principles?: string[];
776
- }
777
- interface TitleInput extends Omit<Title, 'issuer' | 'body' | 'superior_title' | 'holders' | 'symbols' | 'characters' | 'institutions' | 'families' | 'zones' | 'locations' | 'objects' | 'constructs' | 'laws' | 'collectives' | 'creatures' | 'phenomena' | 'species' | 'languages'> {
778
- issuer?: string;
779
- body?: string;
780
- superior_title?: string;
781
- holders?: string[];
782
- symbols?: string[];
783
- characters?: string[];
784
- institutions?: string[];
785
- families?: string[];
786
- zones?: string[];
787
- locations?: string[];
788
- objects?: string[];
789
- constructs?: string[];
790
- laws?: string[];
791
- collectives?: string[];
792
- creatures?: string[];
793
- phenomena?: string[];
794
- species?: string[];
795
- languages?: string[];
796
- }
797
- interface TraitInput extends Omit<Trait, 'anti_trait' | 'empowered_abilities'> {
798
- anti_trait?: string;
799
- empowered_abilities?: string[];
800
- }
801
- interface NarrativeInput extends Omit<Narrative, 'parent_narrative' | 'protagonist' | 'antagonist' | 'narrator' | 'conservator' | 'events' | 'characters' | 'objects' | 'locations' | 'species' | 'creatures' | 'institutions' | 'traits' | 'collectives' | 'zones' | 'abilities' | 'phenomena' | 'languages' | 'families' | 'relations' | 'titles' | 'constructs' | 'laws'> {
802
- parent_narrative?: string;
803
- protagonist?: string;
804
- antagonist?: string;
805
- narrator?: string;
806
- conservator?: string;
807
- events?: string[];
808
- characters?: string[];
809
- objects?: string[];
810
- locations?: string[];
811
- species?: string[];
812
- creatures?: string[];
813
- institutions?: string[];
814
- traits?: string[];
815
- collectives?: string[];
816
- zones?: string[];
817
- abilities?: string[];
818
- phenomena?: string[];
819
- languages?: string[];
820
- families?: string[];
821
- relations?: string[];
822
- titles?: string[];
823
- constructs?: string[];
824
- laws?: string[];
825
- }
826
- interface MapInput extends Omit<Map, 'parent_map' | 'location'> {
827
- parent_map?: string;
828
- location?: string;
829
- }
830
- interface MarkerInput extends Omit<Marker, 'map' | 'zone'> {
831
- map?: string;
832
- zone?: string;
833
- }
834
- interface PinInput extends Omit<Pin, 'map' | 'element_id'> {
835
- map?: string;
836
- element_id?: string;
837
- }
838
- /**
839
- * All available element types in OnlyWorlds
840
- */
841
- declare enum ElementType$1 {
842
- Ability = "ability",
843
- Character = "character",
844
- Collective = "collective",
845
- Construct = "construct",
846
- Creature = "creature",
847
- Event = "event",
848
- Family = "family",
849
- Institution = "institution",
850
- Language = "language",
851
- Law = "law",
852
- Location = "location",
853
- Map = "map",
854
- Marker = "marker",
855
- Narrative = "narrative",
856
- Object = "object",
857
- Phenomenon = "phenomenon",
858
- Pin = "pin",
859
- Relation = "relation",
860
- Species = "species",
861
- Title = "title",
862
- Trait = "trait",
863
- Zone = "zone"
864
- }
865
- /**
866
- * UI labels for element types - provides proper plural forms
867
- * Useful for displaying element type names in user interfaces
868
- */
869
- declare const ELEMENT_LABELS: Record<ElementType$1, string>;
870
- /**
871
- * Get the plural label for an element type
872
- * @param elementType The element type
873
- * @returns The plural label string
874
- */
875
- declare function getElementLabel(elementType: ElementType$1): string;
876
- /**
877
- * Section metadata for OnlyWorlds elements
878
- * Source: sectioned_schema.json
879
- */
880
- interface SectionInfo {
881
- name: string;
882
- order: number;
883
- fields: string[];
884
- }
885
- /**
886
- * Element section definitions - provides organized field groupings for each element type
887
- * Enables UI components to display fields in logical sections with proper ordering
888
- */
889
- declare const ELEMENT_SECTIONS: Record<ElementType$1, SectionInfo[]>;
890
- /**
891
- * Get sections for an element type
892
- * @param elementType The element type
893
- * @returns Array of section information for the element type
894
- */
895
- declare function getElementSections(elementType: ElementType$1): SectionInfo[];
896
- /**
897
- * Current OnlyWorlds version
898
- * Synced with https://github.com/OnlyWorlds/OnlyWorlds/blob/main/VERSION
899
- */
900
- declare const ONLYWORLDS_VERSION: "00.30.00";
901
- /**
902
- * Material Design icons for element types
903
- * These are the uniform, monochrome icons used in the OnlyWorlds frontend
904
- * Compatible with Google Material Icons font
905
- */
906
- declare const ELEMENT_ICONS: Record<ElementType$1, string>;
907
- /**
908
- * Field type definitions for OnlyWorlds elements
909
- */
910
- type FieldType = 'text' | 'integer' | 'integer_max' | 'single_link' | 'multi_link';
911
- /**
912
- * Field metadata structure
913
- */
914
- interface FieldInfo {
915
- type: FieldType;
916
- target?: string;
917
- max?: number;
918
- required?: boolean;
919
- }
920
- /**
921
- * Comprehensive field schema - provides complete metadata for all fields
922
- * Maps element types to their field definitions including types and cardinality
923
- */
924
- declare const FIELD_SCHEMA: {
925
- readonly ability: {
926
- readonly name: {
927
- readonly type: "text";
928
- readonly required: true;
929
- };
930
- readonly description: {
931
- readonly type: "text";
932
- readonly required: false;
933
- };
934
- readonly supertype: {
935
- readonly type: "text";
936
- readonly required: false;
937
- };
938
- readonly subtype: {
939
- readonly type: "text";
940
- readonly required: false;
941
- };
942
- readonly image_url: {
943
- readonly type: "text";
944
- readonly required: false;
945
- };
946
- readonly activation: {
947
- readonly type: "text";
948
- };
949
- readonly duration: {
950
- readonly type: "number";
951
- };
952
- readonly potency: {
953
- readonly type: "number";
954
- };
955
- readonly range: {
956
- readonly type: "number";
957
- };
958
- readonly effects: {
959
- readonly type: "multi_link";
960
- readonly target: "phenomenon";
961
- };
962
- readonly challenges: {
963
- readonly type: "text";
964
- };
965
- readonly talents: {
966
- readonly type: "multi_link";
967
- readonly target: "trait";
968
- };
969
- readonly requisites: {
970
- readonly type: "multi_link";
971
- readonly target: "construct";
972
- };
973
- readonly prevalence: {
974
- readonly type: "text";
975
- };
976
- readonly tradition: {
977
- readonly type: "single_link";
978
- readonly target: "construct";
979
- };
980
- readonly source: {
981
- readonly type: "single_link";
982
- readonly target: "phenomenon";
983
- };
984
- readonly locus: {
985
- readonly type: "single_link";
986
- readonly target: "location";
987
- };
988
- readonly instruments: {
989
- readonly type: "multi_link";
990
- readonly target: "object";
991
- };
992
- readonly systems: {
993
- readonly type: "multi_link";
994
- readonly target: "construct";
995
- };
996
- };
997
- readonly character: {
998
- readonly name: {
999
- readonly type: "text";
1000
- readonly required: true;
1001
- };
1002
- readonly description: {
1003
- readonly type: "text";
1004
- readonly required: false;
1005
- };
1006
- readonly supertype: {
1007
- readonly type: "text";
1008
- readonly required: false;
1009
- };
1010
- readonly subtype: {
1011
- readonly type: "text";
1012
- readonly required: false;
1013
- };
1014
- readonly image_url: {
1015
- readonly type: "text";
1016
- readonly required: false;
1017
- };
1018
- readonly physicality: {
1019
- readonly type: "text";
1020
- };
1021
- readonly mentality: {
1022
- readonly type: "text";
1023
- };
1024
- readonly height: {
1025
- readonly type: "number";
1026
- };
1027
- readonly weight: {
1028
- readonly type: "number";
1029
- };
1030
- readonly species: {
1031
- readonly type: "multi_link";
1032
- readonly target: "species";
1033
- };
1034
- readonly traits: {
1035
- readonly type: "multi_link";
1036
- readonly target: "trait";
1037
- };
1038
- readonly abilities: {
1039
- readonly type: "multi_link";
1040
- readonly target: "ability";
1041
- };
1042
- readonly background: {
1043
- readonly type: "text";
1044
- };
1045
- readonly motivations: {
1046
- readonly type: "text";
1047
- };
1048
- readonly birth_date: {
1049
- readonly type: "number";
1050
- };
1051
- readonly birthplace: {
1052
- readonly type: "single_link";
1053
- readonly target: "location";
1054
- };
1055
- readonly languages: {
1056
- readonly type: "multi_link";
1057
- readonly target: "language";
1058
- };
1059
- readonly reputation: {
1060
- readonly type: "text";
1061
- };
1062
- readonly location: {
1063
- readonly type: "single_link";
1064
- readonly target: "location";
1065
- };
1066
- readonly objects: {
1067
- readonly type: "multi_link";
1068
- readonly target: "object";
1069
- };
1070
- readonly institutions: {
1071
- readonly type: "multi_link";
1072
- readonly target: "institution";
1073
- };
1074
- readonly charisma: {
1075
- readonly type: "number";
1076
- };
1077
- readonly coercion: {
1078
- readonly type: "number";
1079
- };
1080
- readonly competence: {
1081
- readonly type: "number";
1082
- };
1083
- readonly compassion: {
1084
- readonly type: "number";
1085
- };
1086
- readonly creativity: {
1087
- readonly type: "number";
1088
- };
1089
- readonly courage: {
1090
- readonly type: "number";
1091
- };
1092
- readonly family: {
1093
- readonly type: "multi_link";
1094
- readonly target: "family";
1095
- };
1096
- readonly friends: {
1097
- readonly type: "multi_link";
1098
- readonly target: "character";
1099
- };
1100
- readonly rivals: {
1101
- readonly type: "multi_link";
1102
- readonly target: "character";
1103
- };
1104
- readonly level: {
1105
- readonly type: "number";
1106
- };
1107
- readonly hit_points: {
1108
- readonly type: "number";
1109
- };
1110
- readonly STR: {
1111
- readonly type: "number";
1112
- };
1113
- readonly DEX: {
1114
- readonly type: "number";
1115
- };
1116
- readonly CON: {
1117
- readonly type: "number";
1118
- };
1119
- readonly INT: {
1120
- readonly type: "number";
1121
- };
1122
- readonly WIS: {
1123
- readonly type: "number";
1124
- };
1125
- readonly CHA: {
1126
- readonly type: "number";
1127
- };
1128
- };
1129
- readonly collective: {
1130
- readonly name: {
1131
- readonly type: "text";
1132
- readonly required: true;
1133
- };
1134
- readonly description: {
1135
- readonly type: "text";
1136
- readonly required: false;
1137
- };
1138
- readonly supertype: {
1139
- readonly type: "text";
1140
- readonly required: false;
1141
- };
1142
- readonly subtype: {
1143
- readonly type: "text";
1144
- readonly required: false;
1145
- };
1146
- readonly image_url: {
1147
- readonly type: "text";
1148
- readonly required: false;
1149
- };
1150
- readonly composition: {
1151
- readonly type: "text";
1152
- };
1153
- readonly count: {
1154
- readonly type: "number";
1155
- };
1156
- readonly formation_date: {
1157
- readonly type: "number";
1158
- };
1159
- readonly operator: {
1160
- readonly type: "single_link";
1161
- readonly target: "institution";
1162
- };
1163
- readonly equipment: {
1164
- readonly type: "multi_link";
1165
- readonly target: "construct";
1166
- };
1167
- readonly activity: {
1168
- readonly type: "text";
1169
- };
1170
- readonly disposition: {
1171
- readonly type: "text";
1172
- };
1173
- readonly state: {
1174
- readonly type: "text";
1175
- };
1176
- readonly abilities: {
1177
- readonly type: "multi_link";
1178
- readonly target: "ability";
1179
- };
1180
- readonly symbolism: {
1181
- readonly type: "multi_link";
1182
- readonly target: "construct";
1183
- };
1184
- readonly species: {
1185
- readonly type: "multi_link";
1186
- readonly target: "species";
1187
- };
1188
- readonly characters: {
1189
- readonly type: "multi_link";
1190
- readonly target: "character";
1191
- };
1192
- readonly creatures: {
1193
- readonly type: "multi_link";
1194
- readonly target: "creature";
1195
- };
1196
- readonly phenomena: {
1197
- readonly type: "multi_link";
1198
- readonly target: "phenomenon";
1199
- };
1200
- };
1201
- readonly construct: {
1202
- readonly name: {
1203
- readonly type: "text";
1204
- readonly required: true;
1205
- };
1206
- readonly description: {
1207
- readonly type: "text";
1208
- readonly required: false;
1209
- };
1210
- readonly supertype: {
1211
- readonly type: "text";
1212
- readonly required: false;
1213
- };
1214
- readonly subtype: {
1215
- readonly type: "text";
1216
- readonly required: false;
1217
- };
1218
- readonly image_url: {
1219
- readonly type: "text";
1220
- readonly required: false;
1221
- };
1222
- readonly rationale: {
1223
- readonly type: "text";
1224
- };
1225
- readonly history: {
1226
- readonly type: "text";
1227
- };
1228
- readonly status: {
1229
- readonly type: "text";
1230
- };
1231
- readonly reach: {
1232
- readonly type: "text";
1233
- };
1234
- readonly start_date: {
1235
- readonly type: "number";
1236
- };
1237
- readonly end_date: {
1238
- readonly type: "number";
1239
- };
1240
- readonly founder: {
1241
- readonly type: "single_link";
1242
- readonly target: "character";
1243
- };
1244
- readonly custodian: {
1245
- readonly type: "single_link";
1246
- readonly target: "institution";
1247
- };
1248
- readonly characters: {
1249
- readonly type: "multi_link";
1250
- readonly target: "character";
1251
- };
1252
- readonly objects: {
1253
- readonly type: "multi_link";
1254
- readonly target: "object";
1255
- };
1256
- readonly locations: {
1257
- readonly type: "multi_link";
1258
- readonly target: "location";
1259
- };
1260
- readonly species: {
1261
- readonly type: "multi_link";
1262
- readonly target: "species";
1263
- };
1264
- readonly creatures: {
1265
- readonly type: "multi_link";
1266
- readonly target: "creature";
1267
- };
1268
- readonly institutions: {
1269
- readonly type: "multi_link";
1270
- readonly target: "institution";
1271
- };
1272
- readonly traits: {
1273
- readonly type: "multi_link";
1274
- readonly target: "trait";
1275
- };
1276
- readonly collectives: {
1277
- readonly type: "multi_link";
1278
- readonly target: "collective";
1279
- };
1280
- readonly zones: {
1281
- readonly type: "multi_link";
1282
- readonly target: "zone";
1283
- };
1284
- readonly abilities: {
1285
- readonly type: "multi_link";
1286
- readonly target: "ability";
1287
- };
1288
- readonly phenomena: {
1289
- readonly type: "multi_link";
1290
- readonly target: "phenomenon";
1291
- };
1292
- readonly languages: {
1293
- readonly type: "multi_link";
1294
- readonly target: "language";
1295
- };
1296
- readonly families: {
1297
- readonly type: "multi_link";
1298
- readonly target: "family";
1299
- };
1300
- readonly relations: {
1301
- readonly type: "multi_link";
1302
- readonly target: "relation";
1303
- };
1304
- readonly titles: {
1305
- readonly type: "multi_link";
1306
- readonly target: "title";
1307
- };
1308
- readonly constructs: {
1309
- readonly type: "multi_link";
1310
- readonly target: "construct";
1311
- };
1312
- readonly events: {
1313
- readonly type: "multi_link";
1314
- readonly target: "event";
1315
- };
1316
- readonly narratives: {
1317
- readonly type: "multi_link";
1318
- readonly target: "narrative";
1319
- };
1320
- };
1321
- readonly creature: {
1322
- readonly name: {
1323
- readonly type: "text";
1324
- readonly required: true;
1325
- };
1326
- readonly description: {
1327
- readonly type: "text";
1328
- readonly required: false;
1329
- };
1330
- readonly supertype: {
1331
- readonly type: "text";
1332
- readonly required: false;
1333
- };
1334
- readonly subtype: {
1335
- readonly type: "text";
1336
- readonly required: false;
1337
- };
1338
- readonly image_url: {
1339
- readonly type: "text";
1340
- readonly required: false;
1341
- };
1342
- readonly appearance: {
1343
- readonly type: "text";
1344
- };
1345
- readonly weight: {
1346
- readonly type: "number";
1347
- };
1348
- readonly height: {
1349
- readonly type: "number";
1350
- };
1351
- readonly species: {
1352
- readonly type: "multi_link";
1353
- readonly target: "species";
1354
- };
1355
- readonly habits: {
1356
- readonly type: "text";
1357
- };
1358
- readonly demeanor: {
1359
- readonly type: "text";
1360
- };
1361
- readonly traits: {
1362
- readonly type: "multi_link";
1363
- readonly target: "trait";
1364
- };
1365
- readonly abilities: {
1366
- readonly type: "multi_link";
1367
- readonly target: "ability";
1368
- };
1369
- readonly languages: {
1370
- readonly type: "multi_link";
1371
- readonly target: "language";
1372
- };
1373
- readonly status: {
1374
- readonly type: "text";
1375
- };
1376
- readonly birth_date: {
1377
- readonly type: "number";
1378
- };
1379
- readonly location: {
1380
- readonly type: "single_link";
1381
- readonly target: "location";
1382
- };
1383
- readonly zone: {
1384
- readonly type: "single_link";
1385
- readonly target: "zone";
1386
- };
1387
- readonly challenge_rating: {
1388
- readonly type: "number";
1389
- };
1390
- readonly hit_points: {
1391
- readonly type: "number";
1392
- };
1393
- readonly armor_class: {
1394
- readonly type: "number";
1395
- };
1396
- readonly speed: {
1397
- readonly type: "number";
1398
- };
1399
- readonly actions: {
1400
- readonly type: "multi_link";
1401
- readonly target: "ability";
1402
- };
1403
- };
1404
- readonly event: {
1405
- readonly name: {
1406
- readonly type: "text";
1407
- readonly required: true;
1408
- };
1409
- readonly description: {
1410
- readonly type: "text";
1411
- readonly required: false;
1412
- };
1413
- readonly supertype: {
1414
- readonly type: "text";
1415
- readonly required: false;
1416
- };
1417
- readonly subtype: {
1418
- readonly type: "text";
1419
- readonly required: false;
1420
- };
1421
- readonly image_url: {
1422
- readonly type: "text";
1423
- readonly required: false;
1424
- };
1425
- readonly history: {
1426
- readonly type: "text";
1427
- };
1428
- readonly challenges: {
1429
- readonly type: "text";
1430
- };
1431
- readonly consequences: {
1432
- readonly type: "text";
1433
- };
1434
- readonly start_date: {
1435
- readonly type: "number";
1436
- };
1437
- readonly end_date: {
1438
- readonly type: "number";
1439
- };
1440
- readonly triggers: {
1441
- readonly type: "multi_link";
1442
- readonly target: "event";
1443
- };
1444
- readonly characters: {
1445
- readonly type: "multi_link";
1446
- readonly target: "character";
1447
- };
1448
- readonly objects: {
1449
- readonly type: "multi_link";
1450
- readonly target: "object";
1451
- };
1452
- readonly locations: {
1453
- readonly type: "multi_link";
1454
- readonly target: "location";
1455
- };
1456
- readonly species: {
1457
- readonly type: "multi_link";
1458
- readonly target: "species";
1459
- };
1460
- readonly creatures: {
1461
- readonly type: "multi_link";
1462
- readonly target: "creature";
1463
- };
1464
- readonly institutions: {
1465
- readonly type: "multi_link";
1466
- readonly target: "institution";
1467
- };
1468
- readonly traits: {
1469
- readonly type: "multi_link";
1470
- readonly target: "trait";
1471
- };
1472
- readonly collectives: {
1473
- readonly type: "multi_link";
1474
- readonly target: "collective";
1475
- };
1476
- readonly zones: {
1477
- readonly type: "multi_link";
1478
- readonly target: "zone";
1479
- };
1480
- readonly abilities: {
1481
- readonly type: "multi_link";
1482
- readonly target: "ability";
1483
- };
1484
- readonly phenomena: {
1485
- readonly type: "multi_link";
1486
- readonly target: "phenomenon";
1487
- };
1488
- readonly languages: {
1489
- readonly type: "multi_link";
1490
- readonly target: "language";
1491
- };
1492
- readonly families: {
1493
- readonly type: "multi_link";
1494
- readonly target: "family";
1495
- };
1496
- readonly relations: {
1497
- readonly type: "multi_link";
1498
- readonly target: "relation";
1499
- };
1500
- readonly titles: {
1501
- readonly type: "multi_link";
1502
- readonly target: "title";
1503
- };
1504
- readonly constructs: {
1505
- readonly type: "multi_link";
1506
- readonly target: "construct";
1507
- };
1508
- };
1509
- readonly family: {
1510
- readonly name: {
1511
- readonly type: "text";
1512
- readonly required: true;
1513
- };
1514
- readonly description: {
1515
- readonly type: "text";
1516
- readonly required: false;
1517
- };
1518
- readonly supertype: {
1519
- readonly type: "text";
1520
- readonly required: false;
1521
- };
1522
- readonly subtype: {
1523
- readonly type: "text";
1524
- readonly required: false;
1525
- };
1526
- readonly image_url: {
1527
- readonly type: "text";
1528
- readonly required: false;
1529
- };
1530
- readonly spirit: {
1531
- readonly type: "text";
1532
- };
1533
- readonly history: {
1534
- readonly type: "text";
1535
- };
1536
- readonly traditions: {
1537
- readonly type: "multi_link";
1538
- readonly target: "construct";
1539
- };
1540
- readonly traits: {
1541
- readonly type: "multi_link";
1542
- readonly target: "trait";
1543
- };
1544
- readonly abilities: {
1545
- readonly type: "multi_link";
1546
- readonly target: "ability";
1547
- };
1548
- readonly languages: {
1549
- readonly type: "multi_link";
1550
- readonly target: "language";
1551
- };
1552
- readonly ancestors: {
1553
- readonly type: "multi_link";
1554
- readonly target: "character";
1555
- };
1556
- readonly reputation: {
1557
- readonly type: "text";
1558
- };
1559
- readonly estates: {
1560
- readonly type: "multi_link";
1561
- readonly target: "location";
1562
- };
1563
- readonly governs: {
1564
- readonly type: "multi_link";
1565
- readonly target: "institution";
1566
- };
1567
- readonly heirlooms: {
1568
- readonly type: "multi_link";
1569
- readonly target: "object";
1570
- };
1571
- readonly creatures: {
1572
- readonly type: "multi_link";
1573
- readonly target: "creature";
1574
- };
1575
- };
1576
- readonly institution: {
1577
- readonly name: {
1578
- readonly type: "text";
1579
- readonly required: true;
1580
- };
1581
- readonly description: {
1582
- readonly type: "text";
1583
- readonly required: false;
1584
- };
1585
- readonly supertype: {
1586
- readonly type: "text";
1587
- readonly required: false;
1588
- };
1589
- readonly subtype: {
1590
- readonly type: "text";
1591
- readonly required: false;
1592
- };
1593
- readonly image_url: {
1594
- readonly type: "text";
1595
- readonly required: false;
1596
- };
1597
- readonly doctrine: {
1598
- readonly type: "text";
1599
- };
1600
- readonly founding_date: {
1601
- readonly type: "number";
1602
- };
1603
- readonly parent_institution: {
1604
- readonly type: "single_link";
1605
- readonly target: "institution";
1606
- };
1607
- readonly zones: {
1608
- readonly type: "multi_link";
1609
- readonly target: "zone";
1610
- };
1611
- readonly objects: {
1612
- readonly type: "multi_link";
1613
- readonly target: "object";
1614
- };
1615
- readonly creatures: {
1616
- readonly type: "multi_link";
1617
- readonly target: "creature";
1618
- };
1619
- readonly status: {
1620
- readonly type: "text";
1621
- };
1622
- readonly allies: {
1623
- readonly type: "multi_link";
1624
- readonly target: "institution";
1625
- };
1626
- readonly adversaries: {
1627
- readonly type: "multi_link";
1628
- readonly target: "institution";
1629
- };
1630
- readonly constructs: {
1631
- readonly type: "multi_link";
1632
- readonly target: "construct";
1633
- };
1634
- };
1635
- readonly language: {
1636
- readonly name: {
1637
- readonly type: "text";
1638
- readonly required: true;
1639
- };
1640
- readonly description: {
1641
- readonly type: "text";
1642
- readonly required: false;
1643
- };
1644
- readonly supertype: {
1645
- readonly type: "text";
1646
- readonly required: false;
1647
- };
1648
- readonly subtype: {
1649
- readonly type: "text";
1650
- readonly required: false;
1651
- };
1652
- readonly image_url: {
1653
- readonly type: "text";
1654
- readonly required: false;
1655
- };
1656
- readonly phonology: {
1657
- readonly type: "text";
1658
- };
1659
- readonly grammar: {
1660
- readonly type: "text";
1661
- };
1662
- readonly lexicon: {
1663
- readonly type: "text";
1664
- };
1665
- readonly writing: {
1666
- readonly type: "text";
1667
- };
1668
- readonly classification: {
1669
- readonly type: "single_link";
1670
- readonly target: "construct";
1671
- };
1672
- readonly status: {
1673
- readonly type: "text";
1674
- };
1675
- readonly spread: {
1676
- readonly type: "multi_link";
1677
- readonly target: "location";
1678
- };
1679
- readonly dialects: {
1680
- readonly type: "multi_link";
1681
- readonly target: "language";
1682
- };
1683
- };
1684
- readonly law: {
1685
- readonly name: {
1686
- readonly type: "text";
1687
- readonly required: true;
1688
- };
1689
- readonly description: {
1690
- readonly type: "text";
1691
- readonly required: false;
1692
- };
1693
- readonly supertype: {
1694
- readonly type: "text";
1695
- readonly required: false;
1696
- };
1697
- readonly subtype: {
1698
- readonly type: "text";
1699
- readonly required: false;
1700
- };
1701
- readonly image_url: {
1702
- readonly type: "text";
1703
- readonly required: false;
1704
- };
1705
- readonly declaration: {
1706
- readonly type: "text";
1707
- };
1708
- readonly purpose: {
1709
- readonly type: "text";
1710
- };
1711
- readonly date: {
1712
- readonly type: "number";
1713
- };
1714
- readonly parent_law: {
1715
- readonly type: "single_link";
1716
- readonly target: "law";
1717
- };
1718
- readonly penalties: {
1719
- readonly type: "multi_link";
1720
- readonly target: "construct";
1721
- };
1722
- readonly author: {
1723
- readonly type: "single_link";
1724
- readonly target: "institution";
1725
- };
1726
- readonly locations: {
1727
- readonly type: "multi_link";
1728
- readonly target: "location";
1729
- };
1730
- readonly zones: {
1731
- readonly type: "multi_link";
1732
- readonly target: "zone";
1733
- };
1734
- readonly prohibitions: {
1735
- readonly type: "multi_link";
1736
- readonly target: "construct";
1737
- };
1738
- readonly adjudicators: {
1739
- readonly type: "multi_link";
1740
- readonly target: "title";
1741
- };
1742
- readonly enforcers: {
1743
- readonly type: "multi_link";
1744
- readonly target: "title";
1745
- };
1746
- };
1747
- readonly location: {
1748
- readonly name: {
1749
- readonly type: "text";
1750
- readonly required: true;
1751
- };
1752
- readonly description: {
1753
- readonly type: "text";
1754
- readonly required: false;
1755
- };
1756
- readonly supertype: {
1757
- readonly type: "text";
1758
- readonly required: false;
1759
- };
1760
- readonly subtype: {
1761
- readonly type: "text";
1762
- readonly required: false;
1763
- };
1764
- readonly image_url: {
1765
- readonly type: "text";
1766
- readonly required: false;
1767
- };
1768
- readonly form: {
1769
- readonly type: "text";
1770
- };
1771
- readonly function: {
1772
- readonly type: "text";
1773
- };
1774
- readonly founding_date: {
1775
- readonly type: "number";
1776
- };
1777
- readonly parent_location: {
1778
- readonly type: "single_link";
1779
- readonly target: "location";
1780
- };
1781
- readonly populations: {
1782
- readonly type: "multi_link";
1783
- readonly target: "collective";
1784
- };
1785
- readonly political_climate: {
1786
- readonly type: "text";
1787
- };
1788
- readonly primary_power: {
1789
- readonly type: "single_link";
1790
- readonly target: "institution";
1791
- };
1792
- readonly governing_title: {
1793
- readonly type: "single_link";
1794
- readonly target: "title";
1795
- };
1796
- readonly secondary_powers: {
1797
- readonly type: "multi_link";
1798
- readonly target: "institution";
1799
- };
1800
- readonly zone: {
1801
- readonly type: "single_link";
1802
- readonly target: "zone";
1803
- };
1804
- readonly rival: {
1805
- readonly type: "single_link";
1806
- readonly target: "location";
1807
- };
1808
- readonly partner: {
1809
- readonly type: "single_link";
1810
- readonly target: "location";
1811
- };
1812
- readonly customs: {
1813
- readonly type: "text";
1814
- };
1815
- readonly founders: {
1816
- readonly type: "multi_link";
1817
- readonly target: "character";
1818
- };
1819
- readonly cults: {
1820
- readonly type: "multi_link";
1821
- readonly target: "construct";
1822
- };
1823
- readonly delicacies: {
1824
- readonly type: "multi_link";
1825
- readonly target: "species";
1826
- };
1827
- readonly extraction_methods: {
1828
- readonly type: "multi_link";
1829
- readonly target: "construct";
1830
- };
1831
- readonly extraction_goods: {
1832
- readonly type: "multi_link";
1833
- readonly target: "construct";
1834
- };
1835
- readonly industry_methods: {
1836
- readonly type: "multi_link";
1837
- readonly target: "construct";
1838
- };
1839
- readonly industry_goods: {
1840
- readonly type: "multi_link";
1841
- readonly target: "construct";
1842
- };
1843
- readonly infrastructure: {
1844
- readonly type: "text";
1845
- };
1846
- readonly extraction_markets: {
1847
- readonly type: "multi_link";
1848
- readonly target: "location";
1849
- };
1850
- readonly industry_markets: {
1851
- readonly type: "multi_link";
1852
- readonly target: "location";
1853
- };
1854
- readonly currencies: {
1855
- readonly type: "multi_link";
1856
- readonly target: "construct";
1857
- };
1858
- readonly architecture: {
1859
- readonly type: "text";
1860
- };
1861
- readonly buildings: {
1862
- readonly type: "multi_link";
1863
- readonly target: "object";
1864
- };
1865
- readonly building_methods: {
1866
- readonly type: "multi_link";
1867
- readonly target: "construct";
1868
- };
1869
- readonly defensibility: {
1870
- readonly type: "text";
1871
- };
1872
- readonly elevation: {
1873
- readonly type: "number";
1874
- };
1875
- readonly fighters: {
1876
- readonly type: "multi_link";
1877
- readonly target: "construct";
1878
- };
1879
- readonly defensive_objects: {
1880
- readonly type: "multi_link";
1881
- readonly target: "object";
1882
- };
1883
- };
1884
- readonly map: {
1885
- readonly name: {
1886
- readonly type: "text";
1887
- readonly required: true;
1888
- };
1889
- readonly description: {
1890
- readonly type: "text";
1891
- readonly required: false;
1892
- };
1893
- readonly supertype: {
1894
- readonly type: "text";
1895
- readonly required: false;
1896
- };
1897
- readonly subtype: {
1898
- readonly type: "text";
1899
- readonly required: false;
1900
- };
1901
- readonly image_url: {
1902
- readonly type: "text";
1903
- readonly required: false;
1904
- };
1905
- readonly background_color: {
1906
- readonly type: "text";
1907
- };
1908
- readonly hierarchy: {
1909
- readonly type: "number";
1910
- };
1911
- readonly width: {
1912
- readonly type: "number";
1913
- };
1914
- readonly height: {
1915
- readonly type: "number";
1916
- };
1917
- readonly depth: {
1918
- readonly type: "number";
1919
- };
1920
- readonly parent_map: {
1921
- readonly type: "single_link";
1922
- readonly target: "map";
1923
- };
1924
- readonly location: {
1925
- readonly type: "single_link";
1926
- readonly target: "location";
1927
- };
1928
- };
1929
- readonly marker: {
1930
- readonly name: {
1931
- readonly type: "text";
1932
- readonly required: true;
1933
- };
1934
- readonly description: {
1935
- readonly type: "text";
1936
- readonly required: false;
1937
- };
1938
- readonly supertype: {
1939
- readonly type: "text";
1940
- readonly required: false;
1941
- };
1942
- readonly subtype: {
1943
- readonly type: "text";
1944
- readonly required: false;
1945
- };
1946
- readonly image_url: {
1947
- readonly type: "text";
1948
- readonly required: false;
1949
- };
1950
- readonly map: {
1951
- readonly type: "single_link";
1952
- readonly target: "map";
1953
- readonly required: true;
1954
- };
1955
- readonly zone: {
1956
- readonly type: "single_link";
1957
- readonly target: "zone";
1958
- readonly required: true;
1959
- };
1960
- readonly x: {
1961
- readonly type: "number";
1962
- readonly required: true;
1963
- };
1964
- readonly y: {
1965
- readonly type: "number";
1966
- readonly required: true;
1967
- };
1968
- readonly z: {
1969
- readonly type: "number";
1970
- };
1971
- readonly order: {
1972
- readonly type: "number";
1973
- readonly required: true;
1974
- };
1975
- };
1976
- readonly narrative: {
1977
- readonly name: {
1978
- readonly type: "text";
1979
- readonly required: true;
1980
- };
1981
- readonly description: {
1982
- readonly type: "text";
1983
- readonly required: false;
1984
- };
1985
- readonly supertype: {
1986
- readonly type: "text";
1987
- readonly required: false;
1988
- };
1989
- readonly subtype: {
1990
- readonly type: "text";
1991
- readonly required: false;
1992
- };
1993
- readonly image_url: {
1994
- readonly type: "text";
1995
- readonly required: false;
1996
- };
1997
- readonly story: {
1998
- readonly type: "text";
1999
- };
2000
- readonly consequences: {
2001
- readonly type: "text";
2002
- };
2003
- readonly start_date: {
2004
- readonly type: "number";
2005
- };
2006
- readonly end_date: {
2007
- readonly type: "number";
2008
- };
2009
- readonly order: {
2010
- readonly type: "number";
2011
- };
2012
- readonly parent_narrative: {
2013
- readonly type: "single_link";
2014
- readonly target: "narrative";
2015
- };
2016
- readonly protagonist: {
2017
- readonly type: "single_link";
2018
- readonly target: "character";
2019
- };
2020
- readonly antagonist: {
2021
- readonly type: "single_link";
2022
- readonly target: "character";
2023
- };
2024
- readonly narrator: {
2025
- readonly type: "single_link";
2026
- readonly target: "character";
2027
- };
2028
- readonly conservator: {
2029
- readonly type: "single_link";
2030
- readonly target: "institution";
2031
- };
2032
- readonly events: {
2033
- readonly type: "multi_link";
2034
- readonly target: "event";
2035
- };
2036
- readonly characters: {
2037
- readonly type: "multi_link";
2038
- readonly target: "character";
2039
- };
2040
- readonly objects: {
2041
- readonly type: "multi_link";
2042
- readonly target: "object";
2043
- };
2044
- readonly locations: {
2045
- readonly type: "multi_link";
2046
- readonly target: "location";
2047
- };
2048
- readonly species: {
2049
- readonly type: "multi_link";
2050
- readonly target: "species";
2051
- };
2052
- readonly creatures: {
2053
- readonly type: "multi_link";
2054
- readonly target: "creature";
2055
- };
2056
- readonly institutions: {
2057
- readonly type: "multi_link";
2058
- readonly target: "institution";
2059
- };
2060
- readonly traits: {
2061
- readonly type: "multi_link";
2062
- readonly target: "trait";
2063
- };
2064
- readonly collectives: {
2065
- readonly type: "multi_link";
2066
- readonly target: "collective";
2067
- };
2068
- readonly zones: {
2069
- readonly type: "multi_link";
2070
- readonly target: "zone";
2071
- };
2072
- readonly abilities: {
2073
- readonly type: "multi_link";
2074
- readonly target: "ability";
2075
- };
2076
- readonly phenomena: {
2077
- readonly type: "multi_link";
2078
- readonly target: "phenomenon";
2079
- };
2080
- readonly languages: {
2081
- readonly type: "multi_link";
2082
- readonly target: "language";
2083
- };
2084
- readonly families: {
2085
- readonly type: "multi_link";
2086
- readonly target: "family";
2087
- };
2088
- readonly relations: {
2089
- readonly type: "multi_link";
2090
- readonly target: "relation";
2091
- };
2092
- readonly titles: {
2093
- readonly type: "multi_link";
2094
- readonly target: "title";
2095
- };
2096
- readonly constructs: {
2097
- readonly type: "multi_link";
2098
- readonly target: "construct";
2099
- };
2100
- readonly laws: {
2101
- readonly type: "multi_link";
2102
- readonly target: "law";
2103
- };
2104
- };
2105
- readonly object: {
2106
- readonly name: {
2107
- readonly type: "text";
2108
- readonly required: true;
2109
- };
2110
- readonly description: {
2111
- readonly type: "text";
2112
- readonly required: false;
2113
- };
2114
- readonly supertype: {
2115
- readonly type: "text";
2116
- readonly required: false;
2117
- };
2118
- readonly subtype: {
2119
- readonly type: "text";
2120
- readonly required: false;
2121
- };
2122
- readonly image_url: {
2123
- readonly type: "text";
2124
- readonly required: false;
2125
- };
2126
- readonly aesthetics: {
2127
- readonly type: "text";
2128
- };
2129
- readonly weight: {
2130
- readonly type: "number";
2131
- };
2132
- readonly amount: {
2133
- readonly type: "number";
2134
- };
2135
- readonly parent_object: {
2136
- readonly type: "single_link";
2137
- readonly target: "object";
2138
- };
2139
- readonly materials: {
2140
- readonly type: "multi_link";
2141
- readonly target: "construct";
2142
- };
2143
- readonly technology: {
2144
- readonly type: "multi_link";
2145
- readonly target: "construct";
2146
- };
2147
- readonly utility: {
2148
- readonly type: "text";
2149
- };
2150
- readonly effects: {
2151
- readonly type: "multi_link";
2152
- readonly target: "phenomenon";
2153
- };
2154
- readonly abilities: {
2155
- readonly type: "multi_link";
2156
- readonly target: "ability";
2157
- };
2158
- readonly consumes: {
2159
- readonly type: "multi_link";
2160
- readonly target: "construct";
2161
- };
2162
- readonly origins: {
2163
- readonly type: "text";
2164
- };
2165
- readonly location: {
2166
- readonly type: "single_link";
2167
- readonly target: "location";
2168
- };
2169
- readonly language: {
2170
- readonly type: "single_link";
2171
- readonly target: "language";
2172
- };
2173
- readonly affinities: {
2174
- readonly type: "multi_link";
2175
- readonly target: "trait";
2176
- };
2177
- };
2178
- readonly phenomenon: {
2179
- readonly name: {
2180
- readonly type: "text";
2181
- readonly required: true;
2182
- };
2183
- readonly description: {
2184
- readonly type: "text";
2185
- readonly required: false;
2186
- };
2187
- readonly supertype: {
2188
- readonly type: "text";
2189
- readonly required: false;
2190
- };
2191
- readonly subtype: {
2192
- readonly type: "text";
2193
- readonly required: false;
2194
- };
2195
- readonly image_url: {
2196
- readonly type: "text";
2197
- readonly required: false;
2198
- };
2199
- readonly expression: {
2200
- readonly type: "text";
2201
- };
2202
- readonly effects: {
2203
- readonly type: "text";
2204
- };
2205
- readonly duration: {
2206
- readonly type: "number";
2207
- };
2208
- readonly catalysts: {
2209
- readonly type: "multi_link";
2210
- readonly target: "object";
2211
- };
2212
- readonly empowerments: {
2213
- readonly type: "multi_link";
2214
- readonly target: "ability";
2215
- };
2216
- readonly mythology: {
2217
- readonly type: "text";
2218
- };
2219
- readonly system: {
2220
- readonly type: "single_link";
2221
- readonly target: "phenomenon";
2222
- };
2223
- readonly triggers: {
2224
- readonly type: "multi_link";
2225
- readonly target: "construct";
2226
- };
2227
- readonly wielders: {
2228
- readonly type: "multi_link";
2229
- readonly target: "character";
2230
- };
2231
- readonly environments: {
2232
- readonly type: "multi_link";
2233
- readonly target: "location";
2234
- };
2235
- };
2236
- readonly pin: {
2237
- readonly name: {
2238
- readonly type: "text";
2239
- readonly required: true;
2240
- };
2241
- readonly description: {
2242
- readonly type: "text";
2243
- readonly required: false;
2244
- };
2245
- readonly supertype: {
2246
- readonly type: "text";
2247
- readonly required: false;
2248
- };
2249
- readonly subtype: {
2250
- readonly type: "text";
2251
- readonly required: false;
2252
- };
2253
- readonly image_url: {
2254
- readonly type: "text";
2255
- readonly required: false;
2256
- };
2257
- readonly map: {
2258
- readonly type: "single_link";
2259
- readonly target: "map";
2260
- readonly required: true;
2261
- };
2262
- readonly element_type: {
2263
- readonly type: "text";
2264
- readonly required: true;
2265
- };
2266
- readonly element_id: {
2267
- readonly type: "single_link";
2268
- readonly target: "any";
2269
- readonly required: true;
2270
- };
2271
- readonly x: {
2272
- readonly type: "number";
2273
- readonly required: true;
2274
- };
2275
- readonly y: {
2276
- readonly type: "number";
2277
- readonly required: true;
2278
- };
2279
- readonly z: {
2280
- readonly type: "number";
2281
- };
2282
- };
2283
- readonly relation: {
2284
- readonly name: {
2285
- readonly type: "text";
2286
- readonly required: true;
2287
- };
2288
- readonly description: {
2289
- readonly type: "text";
2290
- readonly required: false;
2291
- };
2292
- readonly supertype: {
2293
- readonly type: "text";
2294
- readonly required: false;
2295
- };
2296
- readonly subtype: {
2297
- readonly type: "text";
2298
- readonly required: false;
2299
- };
2300
- readonly image_url: {
2301
- readonly type: "text";
2302
- readonly required: false;
2303
- };
2304
- readonly background: {
2305
- readonly type: "text";
2306
- };
2307
- readonly start_date: {
2308
- readonly type: "number";
2309
- };
2310
- readonly end_date: {
2311
- readonly type: "number";
2312
- };
2313
- readonly intensity: {
2314
- readonly type: "number";
2315
- };
2316
- readonly actor: {
2317
- readonly type: "single_link";
2318
- readonly target: "character";
2319
- };
2320
- readonly events: {
2321
- readonly type: "multi_link";
2322
- readonly target: "event";
2323
- };
2324
- readonly characters: {
2325
- readonly type: "multi_link";
2326
- readonly target: "character";
2327
- };
2328
- readonly objects: {
2329
- readonly type: "multi_link";
2330
- readonly target: "object";
2331
- };
2332
- readonly locations: {
2333
- readonly type: "multi_link";
2334
- readonly target: "location";
2335
- };
2336
- readonly species: {
2337
- readonly type: "multi_link";
2338
- readonly target: "species";
2339
- };
2340
- readonly creatures: {
2341
- readonly type: "multi_link";
2342
- readonly target: "creature";
2343
- };
2344
- readonly institutions: {
2345
- readonly type: "multi_link";
2346
- readonly target: "institution";
2347
- };
2348
- readonly traits: {
2349
- readonly type: "multi_link";
2350
- readonly target: "trait";
2351
- };
2352
- readonly collectives: {
2353
- readonly type: "multi_link";
2354
- readonly target: "collective";
2355
- };
2356
- readonly zones: {
2357
- readonly type: "multi_link";
2358
- readonly target: "zone";
2359
- };
2360
- readonly abilities: {
2361
- readonly type: "multi_link";
2362
- readonly target: "ability";
2363
- };
2364
- readonly phenomena: {
2365
- readonly type: "multi_link";
2366
- readonly target: "phenomenon";
2367
- };
2368
- readonly languages: {
2369
- readonly type: "multi_link";
2370
- readonly target: "language";
2371
- };
2372
- readonly families: {
2373
- readonly type: "multi_link";
2374
- readonly target: "family";
2375
- };
2376
- readonly relations: {
2377
- readonly type: "multi_link";
2378
- readonly target: "relation";
2379
- };
2380
- readonly titles: {
2381
- readonly type: "multi_link";
2382
- readonly target: "title";
2383
- };
2384
- readonly constructs: {
2385
- readonly type: "multi_link";
2386
- readonly target: "construct";
2387
- };
2388
- readonly narratives: {
2389
- readonly type: "multi_link";
2390
- readonly target: "narrative";
2391
- };
2392
- };
2393
- readonly species: {
2394
- readonly name: {
2395
- readonly type: "text";
2396
- readonly required: true;
2397
- };
2398
- readonly description: {
2399
- readonly type: "text";
2400
- readonly required: false;
2401
- };
2402
- readonly supertype: {
2403
- readonly type: "text";
2404
- readonly required: false;
2405
- };
2406
- readonly subtype: {
2407
- readonly type: "text";
2408
- readonly required: false;
2409
- };
2410
- readonly image_url: {
2411
- readonly type: "text";
2412
- readonly required: false;
2413
- };
2414
- readonly appearance: {
2415
- readonly type: "text";
2416
- };
2417
- readonly life_span: {
2418
- readonly type: "number";
2419
- };
2420
- readonly weight: {
2421
- readonly type: "number";
2422
- };
2423
- readonly nourishment: {
2424
- readonly type: "multi_link";
2425
- readonly target: "species";
2426
- };
2427
- readonly reproduction: {
2428
- readonly type: "multi_link";
2429
- readonly target: "construct";
2430
- };
2431
- readonly adaptations: {
2432
- readonly type: "multi_link";
2433
- readonly target: "ability";
2434
- };
2435
- readonly instincts: {
2436
- readonly type: "text";
2437
- };
2438
- readonly sociality: {
2439
- readonly type: "text";
2440
- };
2441
- readonly temperament: {
2442
- readonly type: "text";
2443
- };
2444
- readonly communication: {
2445
- readonly type: "text";
2446
- };
2447
- readonly aggression: {
2448
- readonly type: "number";
2449
- };
2450
- readonly traits: {
2451
- readonly type: "multi_link";
2452
- readonly target: "trait";
2453
- };
2454
- readonly role: {
2455
- readonly type: "text";
2456
- };
2457
- readonly parent_species: {
2458
- readonly type: "single_link";
2459
- readonly target: "species";
2460
- };
2461
- readonly locations: {
2462
- readonly type: "multi_link";
2463
- readonly target: "location";
2464
- };
2465
- readonly zones: {
2466
- readonly type: "multi_link";
2467
- readonly target: "zone";
2468
- };
2469
- readonly affinities: {
2470
- readonly type: "multi_link";
2471
- readonly target: "phenomenon";
2472
- };
2473
- };
2474
- readonly title: {
2475
- readonly name: {
2476
- readonly type: "text";
2477
- readonly required: true;
2478
- };
2479
- readonly description: {
2480
- readonly type: "text";
2481
- readonly required: false;
2482
- };
2483
- readonly supertype: {
2484
- readonly type: "text";
2485
- readonly required: false;
2486
- };
2487
- readonly subtype: {
2488
- readonly type: "text";
2489
- readonly required: false;
2490
- };
2491
- readonly image_url: {
2492
- readonly type: "text";
2493
- readonly required: false;
2494
- };
2495
- readonly authority: {
2496
- readonly type: "text";
2497
- };
2498
- readonly eligibility: {
2499
- readonly type: "text";
2500
- };
2501
- readonly grant_date: {
2502
- readonly type: "number";
2503
- };
2504
- readonly revoke_date: {
2505
- readonly type: "number";
2506
- };
2507
- readonly issuer: {
2508
- readonly type: "single_link";
2509
- readonly target: "institution";
2510
- };
2511
- readonly body: {
2512
- readonly type: "single_link";
2513
- readonly target: "institution";
2514
- };
2515
- readonly superior_title: {
2516
- readonly type: "single_link";
2517
- readonly target: "title";
2518
- };
2519
- readonly holders: {
2520
- readonly type: "multi_link";
2521
- readonly target: "character";
2522
- };
2523
- readonly symbols: {
2524
- readonly type: "multi_link";
2525
- readonly target: "object";
2526
- };
2527
- readonly status: {
2528
- readonly type: "text";
2529
- };
2530
- readonly history: {
2531
- readonly type: "text";
2532
- };
2533
- readonly characters: {
2534
- readonly type: "multi_link";
2535
- readonly target: "character";
2536
- };
2537
- readonly institutions: {
2538
- readonly type: "multi_link";
2539
- readonly target: "institution";
2540
- };
2541
- readonly families: {
2542
- readonly type: "multi_link";
2543
- readonly target: "family";
2544
- };
2545
- readonly zones: {
2546
- readonly type: "multi_link";
2547
- readonly target: "zone";
2548
- };
2549
- readonly locations: {
2550
- readonly type: "multi_link";
2551
- readonly target: "location";
2552
- };
2553
- readonly objects: {
2554
- readonly type: "multi_link";
2555
- readonly target: "object";
2556
- };
2557
- readonly constructs: {
2558
- readonly type: "multi_link";
2559
- readonly target: "construct";
2560
- };
2561
- readonly laws: {
2562
- readonly type: "multi_link";
2563
- readonly target: "law";
2564
- };
2565
- readonly collectives: {
2566
- readonly type: "multi_link";
2567
- readonly target: "collective";
2568
- };
2569
- readonly creatures: {
2570
- readonly type: "multi_link";
2571
- readonly target: "creature";
2572
- };
2573
- readonly phenomena: {
2574
- readonly type: "multi_link";
2575
- readonly target: "phenomenon";
2576
- };
2577
- readonly species: {
2578
- readonly type: "multi_link";
2579
- readonly target: "species";
2580
- };
2581
- readonly languages: {
2582
- readonly type: "multi_link";
2583
- readonly target: "language";
2584
- };
2585
- };
2586
- readonly trait: {
2587
- readonly name: {
2588
- readonly type: "text";
2589
- readonly required: true;
2590
- };
2591
- readonly description: {
2592
- readonly type: "text";
2593
- readonly required: false;
2594
- };
2595
- readonly supertype: {
2596
- readonly type: "text";
2597
- readonly required: false;
2598
- };
2599
- readonly subtype: {
2600
- readonly type: "text";
2601
- readonly required: false;
2602
- };
2603
- readonly image_url: {
2604
- readonly type: "text";
2605
- readonly required: false;
2606
- };
2607
- readonly social_effects: {
2608
- readonly type: "text";
2609
- };
2610
- readonly physical_effects: {
2611
- readonly type: "text";
2612
- };
2613
- readonly functional_effects: {
2614
- readonly type: "text";
2615
- };
2616
- readonly personality_effects: {
2617
- readonly type: "text";
2618
- };
2619
- readonly behaviour_effects: {
2620
- readonly type: "text";
2621
- };
2622
- readonly charisma: {
2623
- readonly type: "number";
2624
- };
2625
- readonly coercion: {
2626
- readonly type: "number";
2627
- };
2628
- readonly competence: {
2629
- readonly type: "number";
2630
- };
2631
- readonly compassion: {
2632
- readonly type: "number";
2633
- };
2634
- readonly creativity: {
2635
- readonly type: "number";
2636
- };
2637
- readonly courage: {
2638
- readonly type: "number";
2639
- };
2640
- readonly significance: {
2641
- readonly type: "text";
2642
- };
2643
- readonly anti_trait: {
2644
- readonly type: "single_link";
2645
- readonly target: "trait";
2646
- };
2647
- readonly empowered_abilities: {
2648
- readonly type: "multi_link";
2649
- readonly target: "ability";
2650
- };
2651
- };
2652
- readonly zone: {
2653
- readonly name: {
2654
- readonly type: "text";
2655
- readonly required: true;
2656
- };
2657
- readonly description: {
2658
- readonly type: "text";
2659
- readonly required: false;
2660
- };
2661
- readonly supertype: {
2662
- readonly type: "text";
2663
- readonly required: false;
2664
- };
2665
- readonly subtype: {
2666
- readonly type: "text";
2667
- readonly required: false;
2668
- };
2669
- readonly image_url: {
2670
- readonly type: "text";
2671
- readonly required: false;
2672
- };
2673
- readonly role: {
2674
- readonly type: "text";
2675
- };
2676
- readonly start_date: {
2677
- readonly type: "number";
2678
- };
2679
- readonly end_date: {
2680
- readonly type: "number";
2681
- };
2682
- readonly phenomena: {
2683
- readonly type: "multi_link";
2684
- readonly target: "phenomenon";
2685
- };
2686
- readonly linked_zones: {
2687
- readonly type: "multi_link";
2688
- readonly target: "zone";
2689
- };
2690
- readonly context: {
2691
- readonly type: "text";
2692
- };
2693
- readonly populations: {
2694
- readonly type: "multi_link";
2695
- readonly target: "collective";
2696
- };
2697
- readonly titles: {
2698
- readonly type: "multi_link";
2699
- readonly target: "title";
2700
- };
2701
- readonly principles: {
2702
- readonly type: "multi_link";
2703
- readonly target: "construct";
2704
- };
2705
- };
2706
- };
2707
- /**
2708
- * Creates a typed element ID from a string
2709
- * @param id The string ID to brand
2710
- * @returns Branded ElementId
2711
- */
2712
- declare function createElementId<T extends ElementType$1>(id: string): ElementId<T>;
2713
- /**
2714
- * Creates typed element IDs array from string array
2715
- * @param ids The string IDs to brand
2716
- * @returns Branded ElementIds array
2717
- */
2718
- declare function createElementIds<T extends ElementType$1>(ids: string[]): ElementIds<T>;
2719
- /**
2720
- * Creates an AnyElementId that can reference any element type
2721
- * @param id The string ID to brand
2722
- * @returns AnyElementId
2723
- */
2724
- declare function createAnyElementId(id: string): AnyElementId;
2725
-
2726
- /**
2727
- * OnlyWorlds Token Management API Types
2728
- *
2729
- * Types for the token rating system that provides daily token allowances
2730
- * for API usage and AI integration features.
2731
- */
2732
- /**
2733
- * Current token status for the authenticated user
2734
- */
2735
- interface TokenStatus {
2736
- /** Remaining tokens available for today */
2737
- tokens_available_today: number;
2738
- /** User's daily token allowance (default: 10000) */
2739
- token_rating: number;
2740
- /** Tokens consumed so far today */
2741
- tokens_used_today: number;
2742
- /** Date of last reset (ISO format) */
2743
- last_reset: string;
2744
- /** Number of active token sessions */
2745
- sessions_active: number;
2746
- }
2747
- /**
2748
- * Response from token consumption endpoint
2749
- */
2750
- interface TokenConsumeResponse {
2751
- /** Whether the consumption was successful */
2752
- success: boolean;
2753
- /** Actual tokens consumed */
2754
- tokens_consumed: number;
2755
- /** Updated token balance */
2756
- tokens_remaining: number;
2757
- /** User's daily allowance */
2758
- token_rating: number;
2759
- /** Warning message if insufficient tokens (consumption still succeeds but tracks debt) */
2760
- error?: string | null;
2761
- }
2762
- /**
2763
- * Parameters for consuming tokens
2764
- */
2765
- interface TokenConsumeParams {
2766
- /** Number of tokens to consume (required) */
2767
- amount: number;
2768
- /** Service identifier (default: "sdk_client") */
2769
- service?: string;
2770
- /** Session ID from access key response (optional) */
2771
- sessionId?: string | null;
2772
- /** Additional metadata for analytics (optional) */
2773
- metadata?: Record<string, any> | null;
2774
- }
2775
- /**
2776
- * Response from getting encrypted access key (advanced use case)
2777
- */
2778
- interface AccessKeyResponse {
2779
- /** Base64 encoded encrypted OpenAI key */
2780
- encrypted_key: string;
2781
- /** Key expiration timestamp (ISO format) */
2782
- expires_at: string;
2783
- /** Session ID for tracking usage */
2784
- session_id: string;
2785
- /** Current token balance */
2786
- tokens_available: number;
2787
- /** User's token allowance */
2788
- token_rating: number;
2789
- /** Encryption algorithm used */
2790
- encryption_method: string;
2791
- }
2792
- /**
2793
- * Public encryption information for client-side decryption
2794
- */
2795
- interface EncryptionInfo {
2796
- /** Encryption algorithm (e.g., "Fernet") */
2797
- algorithm: string;
2798
- /** Key derivation method (e.g., "SHA256") */
2799
- key_derivation: string;
2800
- /** Public salt used in key derivation */
2801
- salt: string;
2802
- /** Format description */
2803
- format: string;
2804
- /** Human-readable description */
2805
- description: string;
2806
- /** Example JavaScript implementation */
2807
- javascript_example: string;
2808
- }
2809
- /**
2810
- * Response from session revocation
2811
- */
2812
- interface RevokeSessionResponse {
2813
- /** Whether revocation was successful */
2814
- success: boolean;
2815
- /** Status message */
2816
- message: string;
2817
- }
2818
- /**
2819
- * Response from revoking all sessions
2820
- */
2821
- interface RevokeAllSessionsResponse {
2822
- /** Whether revocation was successful */
2823
- success: boolean;
2824
- /** Number of sessions revoked */
2825
- sessions_revoked: number;
2826
- }
2827
- /**
2828
- * Game tier / subscription level
2829
- * (affects future features, currently all tiers get same token rating)
2830
- */
2831
- declare enum GameTier {
2832
- FREE = "free",
2833
- SILVER = "silver",
2834
- GOLD = "gold",
2835
- PLATINUM = "platinum",
2836
- DIAMOND = "diamond",
2837
- DELUXE = "deluxe"
2838
- }
2839
-
2840
- /**
2841
- * Token Management Resource
2842
- *
2843
- * Provides access to the OnlyWorlds token rating system API.
2844
- * Based on the working implementation in base-tool/src/llm/token-service.ts
2845
- */
2846
-
2847
- /**
2848
- * Token Management Resource
2849
- *
2850
- * Handles token status checking, consumption tracking, and encrypted key access
2851
- * for AI integration features.
2852
- *
2853
- * All endpoints require authentication (API-Key + API-Pin headers).
2854
- *
2855
- * Example usage:
2856
- * ```typescript
2857
- * const client = new OnlyWorldsClient({ apiKey, apiPin });
2858
- *
2859
- * // Check token status
2860
- * const status = await client.tokens.getStatus();
2861
- * console.log(`${status.tokens_available_today}/${status.token_rating} tokens available`);
2862
- *
2863
- * // Consume tokens
2864
- * await client.tokens.consume({
2865
- * amount: 500,
2866
- * service: 'my_tool',
2867
- * metadata: { feature: 'chat', model: 'gpt-4' }
2868
- * });
2869
- * ```
2870
- */
2871
- declare class TokenResource {
2872
- private client;
2873
- constructor(client: OnlyWorldsClient);
2874
- /**
2875
- * Get current token status for authenticated user
2876
- *
2877
- * Returns daily token allowance, usage, and availability.
2878
- * Matches base-tool's checkStatus() pattern.
2879
- *
2880
- * @returns Current token status
2881
- * @example
2882
- * ```typescript
2883
- * const status = await client.tokens.getStatus();
2884
- * console.log(`Available: ${status.tokens_available_today}/${status.token_rating}`);
2885
- * console.log(`Used today: ${status.tokens_used_today}`);
2886
- * console.log(`Active sessions: ${status.sessions_active}`);
2887
- * ```
2888
- */
2889
- getStatus(): Promise<TokenStatus>;
2890
- /**
2891
- * Consume tokens for service usage
2892
- *
2893
- * Reports token consumption to track daily usage. Allows consumption even if
2894
- * exceeds available tokens (tracks as debt), but warns via error field.
2895
- * Matches base-tool's reportUsage() pattern.
2896
- *
2897
- * @param params - Token consumption parameters
2898
- * @returns Consumption result with updated balance
2899
- * @example
2900
- * ```typescript
2901
- * const result = await client.tokens.consume({
2902
- * amount: 500,
2903
- * service: 'worldbuilding_tool',
2904
- * metadata: {
2905
- * feature: 'character_generation',
2906
- * model: 'gpt-4',
2907
- * prompt_tokens: 300,
2908
- * completion_tokens: 200
2909
- * }
2910
- * });
2911
- *
2912
- * if (result.error) {
2913
- * console.warn('Token warning:', result.error);
2914
- * }
2915
- * console.log(`${result.tokens_remaining} tokens remaining`);
2916
- * ```
2917
- */
2918
- consume(params: TokenConsumeParams): Promise<TokenConsumeResponse>;
2919
- /**
2920
- * Get encrypted OpenAI API key (advanced use case)
2921
- *
2922
- * Requires minimum 100 tokens available. Creates a 1-hour session for tracking.
2923
- * Returns encrypted key that must be decrypted client-side using Fernet.
2924
- *
2925
- * See base-tool/src/llm/token-service.ts:99-155 for full implementation example
2926
- * including client-side decryption with the 'fernet' npm package.
2927
- *
2928
- * @returns Encrypted access key and session info
2929
- * @throws Error if insufficient tokens (< 100)
2930
- * @example
2931
- * ```typescript
2932
- * // Get encrypted key
2933
- * const access = await client.tokens.getAccessKey();
2934
- *
2935
- * // Decrypt using fernet library (see base-tool for full example)
2936
- * // 1. Derive key from world ID using SHA-256
2937
- * // 2. Use 'fernet' npm package to decrypt
2938
- * // 3. Use decrypted OpenAI key for direct API calls
2939
- * // 4. Report usage with access.session_id
2940
- *
2941
- * console.log('Session:', access.session_id);
2942
- * console.log('Expires:', access.expires_at);
2943
- * ```
2944
- */
2945
- getAccessKey(): Promise<AccessKeyResponse>;
2946
- /**
2947
- * Revoke a specific token session
2948
- *
2949
- * Invalidates the session ID obtained from getAccessKey().
2950
- * Use when cleaning up or on logout.
2951
- *
2952
- * @param sessionId - Session ID to revoke
2953
- * @returns Revocation result
2954
- * @example
2955
- * ```typescript
2956
- * await client.tokens.revokeSession('session-id-here');
2957
- * ```
2958
- */
2959
- revokeSession(sessionId: string): Promise<RevokeSessionResponse>;
2960
- /**
2961
- * Revoke all active sessions (emergency use)
2962
- *
2963
- * Invalidates all token sessions for the authenticated user.
2964
- * Use for security cleanup or when sessions are stuck.
2965
- *
2966
- * @returns Revocation result with count of revoked sessions
2967
- * @example
2968
- * ```typescript
2969
- * const result = await client.tokens.revokeAllSessions();
2970
- * console.log(`Revoked ${result.sessions_revoked} sessions`);
2971
- * ```
2972
- */
2973
- revokeAllSessions(): Promise<RevokeAllSessionsResponse>;
2974
- /**
2975
- * Get public encryption info (no auth required)
2976
- *
2977
- * Returns algorithm details and example code for client-side decryption.
2978
- * Public endpoint - can be called without authentication.
2979
- *
2980
- * @returns Encryption algorithm and implementation details
2981
- * @example
2982
- * ```typescript
2983
- * const info = await client.tokens.getEncryptionInfo();
2984
- * console.log('Algorithm:', info.algorithm);
2985
- * console.log('Key derivation:', info.key_derivation);
2986
- * console.log(info.javascript_example);
2987
- * ```
2988
- */
2989
- getEncryptionInfo(): Promise<EncryptionInfo>;
2990
- }
2991
-
2992
- interface OnlyWorldsConfig {
2993
- apiKey: string;
2994
- apiPin: string;
2995
- baseUrl?: string;
2996
- }
2997
- interface ListOptions {
2998
- limit?: number;
2999
- offset?: number;
3000
- ordering?: string;
3001
- search?: string;
3002
- [key: string]: any;
3003
- }
3004
- interface ApiResponse<T> {
3005
- count: number;
3006
- next: string | null;
3007
- previous: string | null;
3008
- results: T[];
3009
- }
3010
- /**
3011
- * Base resource class for CRUD operations
3012
- */
3013
- declare class Resource<T, TInput> {
3014
- private client;
3015
- private elementType;
3016
- constructor(client: OnlyWorldsClient, elementType: string);
3017
- list(options?: ListOptions): Promise<ApiResponse<T>>;
3018
- get(id: string): Promise<T>;
3019
- create(data: TInput): Promise<T>;
3020
- update(id: string, data: Partial<TInput>): Promise<T>;
3021
- delete(id: string): Promise<void>;
3022
- /**
3023
- * Round Pin coordinates to integers (API requirement)
3024
- * @private
3025
- */
3026
- private roundPinCoordinates;
3027
- }
3028
- /**
3029
- * Special resource class for World endpoint
3030
- * The /world/ endpoint returns a single World object directly (not paginated)
3031
- * because API keys are world-scoped (one key = one world)
3032
- */
3033
- declare class WorldResource {
3034
- private client;
3035
- constructor(client: OnlyWorldsClient);
3036
- /**
3037
- * Get the world associated with the current API key
3038
- * Returns the world directly (not wrapped in pagination)
3039
- */
3040
- get(): Promise<World>;
3041
- /**
3042
- * Update the current world
3043
- */
3044
- update(data: Partial<WorldInput>): Promise<World>;
3045
- }
3046
- /**
3047
- * Main OnlyWorlds API client
3048
- */
3049
- declare class OnlyWorldsClient {
3050
- private baseUrl;
3051
- private headers;
3052
- worlds: WorldResource;
3053
- tokens: TokenResource;
3054
- abilities: Resource<Ability, AbilityInput>;
3055
- characters: Resource<Character, CharacterInput>;
3056
- collectives: Resource<Collective, CollectiveInput>;
3057
- constructs: Resource<Construct, ConstructInput>;
3058
- creatures: Resource<Creature, CreatureInput>;
3059
- events: Resource<Event, EventInput>;
3060
- families: Resource<Family, FamilyInput>;
3061
- institutions: Resource<Institution, InstitutionInput>;
3062
- languages: Resource<Language, LanguageInput>;
3063
- laws: Resource<Law, LawInput>;
3064
- locations: Resource<Location, LocationInput>;
3065
- maps: Resource<Map, MapInput>;
3066
- markers: Resource<Marker, MarkerInput>;
3067
- narratives: Resource<Narrative, NarrativeInput>;
3068
- objects: Resource<Object$1, ObjectInput>;
3069
- phenomena: Resource<Phenomenon, PhenomenonInput>;
3070
- pins: Resource<Pin, PinInput>;
3071
- relations: Resource<Relation, RelationInput>;
3072
- species: Resource<Species, SpeciesInput>;
3073
- titles: Resource<Title, TitleInput>;
3074
- traits: Resource<Trait, TraitInput>;
3075
- zones: Resource<Zone, ZoneInput>;
3076
- constructor(config: OnlyWorldsConfig);
3077
- /**
3078
- * Make a request to the OnlyWorlds API
3079
- */
3080
- request<T>(method: string, path: string, options?: {
3081
- params?: Record<string, any>;
3082
- body?: any;
3083
- }): Promise<T>;
3084
- /**
3085
- * Helper to convert nested objects to _id/_ids format (legacy method)
3086
- * @deprecated Use prepareRelations instead - it's called automatically in create/update
3087
- */
3088
- static prepareInput<T extends Record<string, any>>(data: T): any;
3089
- /**
3090
- * Convert relation fields to API format (_id/_ids suffix)
3091
- *
3092
- * The OnlyWorlds API expects:
3093
- * - single_link fields: fieldname_id (e.g., birthplace_id)
3094
- * - multi_link fields: fieldname_ids (e.g., species_ids)
3095
- *
3096
- * This method auto-converts based on FIELD_SCHEMA:
3097
- * - { species: ["id1", "id2"] } → { species_ids: ["id1", "id2"] }
3098
- * - { birthplace: "location-id" } → { birthplace_id: "location-id" }
3099
- * - { species: [{id: "id1", name: "X"}] } → { species_ids: ["id1"] }
3100
- *
3101
- * Called automatically by create() and update() methods.
3102
- */
3103
- static prepareRelations<T extends Record<string, any>>(data: T, elementType: string): any;
3104
- }
3105
-
3106
- /**
3107
- * Get Material Design icon name for an element type
3108
- * Accepts multiple formats: 'character', 'characters', 'Character', etc.
3109
- *
3110
- * @param type - Element type in any format (singular, plural, any case)
3111
- * @returns Material icon name (e.g., 'person', 'castle', 'thunderstorm')
3112
- *
3113
- * @example
3114
- * getElementIcon('character') // 'person'
3115
- * getElementIcon('characters') // 'person'
3116
- * getElementIcon('Character') // 'person'
3117
- * getElementIcon('phenomena') // 'thunderstorm'
3118
- */
3119
- declare function getElementIcon(type: string): string;
3120
-
3121
- /** Every element carries these. The extension index signature admits namespaced
3122
- * pass-through fields (atlas_* / shadow_* / x_*) returned verbatim by the server. */
3123
- interface OwElementBase {
3124
- /** Element type slug (server-managed, read-only). */
3125
- type: string;
3126
- /** Unique identifier, uuidv7 format. */
3127
- id: string;
3128
- /** Name of the element. */
3129
- name: string;
3130
- /** Any kind of details about the element. */
3131
- description?: string;
3132
- /** The top level category to which the element belongs. */
3133
- supertype?: string;
3134
- /** The sub level category through which the element is further classified. */
3135
- subtype?: string;
3136
- /** URL to an image representing the element. */
3137
- image_url?: string;
3138
- /** Creation timestamp (server-managed, read-only). */
3139
- created_at?: string;
3140
- /** Last-update timestamp (server-managed, read-only). */
3141
- updated_at?: string;
3142
- /** Per-world change cursor, stamped on every write (server-managed, read-only). */
3143
- change_seq?: number;
3144
- /** Namespaced extension fields (atlas_* / shadow_* / x_*), returned verbatim. */
3145
- [ext: string]: unknown;
3146
- }
3147
- type ElementType = 'ability' | 'character' | 'collective' | 'construct' | 'creature' | 'event' | 'family' | 'institution' | 'language' | 'law' | 'location' | 'map' | 'marker' | 'narrative' | 'object' | 'phenomenon' | 'pin' | 'relation' | 'species' | 'title' | 'trait' | 'zone';
3148
- declare const ELEMENT_TYPES: ElementType[];
3149
-
3150
- /**
3151
- * keel v2 engine absorbed from Assembly's ow-v2-client v0.9.0 (Kael),
3152
- * wire-corrected against live staging fixtures 2026-07-18.
3153
- *
3154
- * OnlyWorlds v2 (keel) wire types -- the NON-generated, hand-owned wire shapes
3155
- * (envelopes, pages, bulk, changes, config). Per-type element field typing is
3156
- * generated (types.generated.ts). One-shape principle: a field reads the way it
3157
- * writes -- links are UUID arrays (or UUID/null), same name both directions.
3158
- * No `_ids` suffix in v2.
3159
- */
3160
-
3161
- /** An element as read from / written to the v2 API. Loose base + extension keys. */
3162
- type OwElement = OwElementBase;
3163
- /** Spatial types live under spatial/ in the OW Folder Format. */
3164
- declare const SPATIAL_TYPES: readonly ElementType[];
3165
- interface OwWorldMeta {
3166
- id: string;
3167
- name: string;
3168
- updated_at?: string;
3169
- public_read?: boolean;
3170
- [field: string]: unknown;
3171
- }
3172
- /** List envelope: cursor-paginated. */
3173
- interface OwPage<T = OwElement> {
3174
- data: T[];
3175
- has_more: boolean;
3176
- next_cursor: string | null;
3177
- }
3178
- /** /changes feed -- discriminated union on `op`. Apply in order -> convergence. */
3179
- type OwChange = {
3180
- op: 'upsert';
3181
- id: string;
3182
- type: string;
3183
- element: OwElement;
3184
- updated_at: string;
3185
- [k: string]: unknown;
3186
- } | {
3187
- op: 'delete';
3188
- id: string;
3189
- type: string;
3190
- deleted_at: string;
3191
- [k: string]: unknown;
3192
- };
3193
- /**
3194
- * /changes response. Wire shape verified in keel source (core/changes.py) and
3195
- * pinned here: {cursor, changes, has_more, head}.
3196
- */
3197
- interface OwChangesPage {
3198
- /** Opaque compound cursor -- persist verbatim, never parse, never expires. */
3199
- cursor: string;
3200
- changes: OwChange[];
3201
- has_more: boolean;
3202
- /**
3203
- * World's current change_seq. If a persisted cursor is ever AHEAD of head,
3204
- * the server rewound (disaster restore) -- re-baseline from cursor zero
3205
- * instead of assuming caught-up.
3206
- */
3207
- head: number;
3208
- }
3209
- interface OwBulkItem {
3210
- type: ElementType | string;
3211
- element: OwElement | Record<string, unknown>;
3212
- }
3213
- /**
3214
- * One slot of a /bulk response. WIRE-CORRECTED (fixtures P2a/P2c): `status` is
3215
- * the NUMERIC HTTP status of that slot (201/400/...), success slots echo
3216
- * created_at/updated_at, error slots carry an OwErrorBody under `error`.
3217
- */
3218
- interface OwBulkItemResult {
3219
- status: number;
3220
- id?: string;
3221
- created_at?: string;
3222
- updated_at?: string;
3223
- error?: OwErrorBody;
3224
- }
3225
- /** The wire error envelope carried in error slots and thrown errors. */
3226
- interface OwErrorBody {
3227
- type?: string;
3228
- code?: string;
3229
- message?: string;
3230
- param?: string | null;
3231
- doc_url?: string;
3232
- }
3233
- /**
3234
- * /bulk response. WIRE-CORRECTED (fixtures P2a/P2c): the array key is `items`,
3235
- * not `results`. `wasReplay` is populated by the client from the (lowercase on
3236
- * the wire) Idempotent-Replay response header (fixture P2b) -- not a wire field.
3237
- */
3238
- interface OwBulkResponse {
3239
- errors: boolean;
3240
- items: OwBulkItemResult[];
3241
- /** Client-derived: true when the server replayed a prior Idempotency-Key. */
3242
- wasReplay?: boolean;
3243
- [k: string]: unknown;
3244
- }
3245
- interface OwLinkEdit {
3246
- add?: string[];
3247
- remove?: string[];
3248
- }
3249
- interface ListParams {
3250
- limit?: number;
3251
- cursor?: string;
3252
- /** One-level stub expansion, e.g. ['friends', 'location']. */
3253
- expand?: string[];
3254
- /** Sparse include-set of field names. */
3255
- fields?: string[];
3256
- /**
3257
- * Blessed Django-style filters: __icontains, __in, __gte, __lte, __isnull,
3258
- * supertype/subtype equality. Unknown params 422 loudly server-side -- the
3259
- * client passes them through and lets the platform name the typo.
3260
- */
3261
- filter?: Record<string, string | number | boolean>;
3262
- }
3263
- interface OwClientConfig {
3264
- /** ow_w_ / ow_r_ / ow_a_ prefixed key, or grandfathered 10-digit legacy key. */
3265
- apiKey: string;
3266
- /**
3267
- * Optional. Required for writes when the world has a PIN, and for legacy-key
3268
- * reads of private worlds. Prefixed keys read PIN-less. String, not number --
3269
- * '0123' !== 123.
3270
- */
3271
- apiPin?: string;
3272
- /** Default: https://www.onlyworlds.com/api/v2 */
3273
- baseUrl?: string;
3274
- /**
3275
- * Page size for element lists. Default 100 (server default; max 1000).
3276
- * Deliberately visible in config: page size is a citizenship property.
3277
- */
3278
- pageSize?: number;
3279
- /**
3280
- * Page size for /changes pulls. Default 100. Live precedents: Obsidian 100,
3281
- * Atlas 250, MCP 25. /changes is the platform's heaviest route -- be polite.
3282
- */
3283
- changesPageSize?: number;
3284
- /** Injectable for tests / fake-keel harnesses. Defaults to globalThis.fetch. */
3285
- fetch?: typeof globalThis.fetch;
3286
- }
3287
-
3288
- /**
3289
- * keel v2 engine absorbed from Assembly's ow-v2-client v0.9.0 (Kael),
3290
- * wire-corrected against live staging fixtures 2026-07-18.
3291
- *
3292
- * keel error envelope handling. The error contract is part of the contract:
3293
- * envelopes carry a machine `code` and a `doc_url` fragment anchored at
3294
- * onlyworlds.github.io/api/errors -- surface both, always. The live wire
3295
- * envelope also carries `type` and `param` (fixtures P4a/P2c); both are
3296
- * surfaced on the thrown error.
3297
- */
3298
- /** Auth codes are distinguishable by design; client recovery UX differs per code. */
3299
- type OwAuthErrorCode = 'invalid_credentials' | 'key_revoked' | 'world_gone';
3300
- declare class OwApiError extends Error {
3301
- readonly status: number;
3302
- /** Machine error code from the keel envelope, e.g. 'invalid_credentials'. */
3303
- readonly code: string | null;
3304
- /** Error family from the envelope, e.g. 'invalid_request', 'not_found'. */
3305
- readonly type: string | null;
3306
- /** Offending field/param named by the envelope (422/400), else null. */
3307
- readonly param: string | null;
3308
- /** Documentation link from the envelope -- show it to users/logs verbatim. */
3309
- readonly docUrl: string | null;
3310
- /** Raw parsed envelope (or body text when the body wasn't JSON). */
3311
- readonly detail: unknown;
3312
- constructor(status: number, code: string | null, message: string, docUrl: string | null, detail: unknown, type?: string | null, param?: string | null);
3313
- get isAuthError(): boolean;
3314
- /** 422s/400s name the offending param/field -- typos error loudly platform-wide. */
3315
- get isValidationError(): boolean;
3316
- /** Same Idempotency-Key replayed with a different payload. */
3317
- get isIdempotencyConflict(): boolean;
3318
- }
3319
- /** Network-level failure (fetch rejected) -- no envelope to parse. */
3320
- declare class OwNetworkError extends Error {
3321
- readonly cause2: unknown;
3322
- constructor(message: string, cause: unknown);
3323
- }
3324
- /** Parse a wire envelope into OwApiError parts (exported for the error type-tests). */
3325
- declare function parseEnvelope(status: number, body: unknown): OwApiError;
3326
- /** Build an OwApiError from a non-2xx response, tolerating non-JSON bodies. */
3327
- declare function errorFromResponse(res: Response): Promise<OwApiError>;
3328
-
3329
- /**
3330
- * keel v2 engine absorbed from Assembly's ow-v2-client v0.9.0 (Kael),
3331
- * wire-corrected against live staging fixtures 2026-07-18.
3332
- *
3333
- * OnlyWorlds key-kind detection. Prefixes make leaked keys grep-scannable
3334
- * (Stripe/GitHub precedent) -- and tell a client what auth shape to expect.
3335
- */
3336
- type OwKeyKind =
3337
- /** ow_w_ -- world key, read + write. Writes need the world's PIN if it has one. */
3338
- 'write'
3339
- /** ow_r_ -- world key, read-only, works bare (no PIN). The share-with-players primitive. */
3340
- | 'read'
3341
- /** ow_a_ -- account Bearer token for /account/* routes; can mint world keys. */
3342
- | 'account'
3343
- /** Grandfathered 10-digit key. Needs PIN to read private worlds. */
3344
- | 'legacy' | 'unknown';
3345
- /** Demo range 0000000000-0000000009: read-only aliases, safe as live read gates. */
3346
- declare function isDemoKey(key: string): boolean;
3347
- declare function detectKeyKind(key: string): OwKeyKind;
3348
- /** Can this key kind ever perform world writes? (PIN is a separate, per-world question.) */
3349
- declare function kindCanWrite(kind: OwKeyKind): boolean;
3350
- /**
3351
- * Should a credential UI ask for a PIN with this key?
3352
- * Prefixed keys read PIN-less; legacy keys may need it; writes on pinned
3353
- * worlds always need it. 'optional' means: show the field, don't require it.
3354
- */
3355
- declare function pinExpectation(kind: OwKeyKind): 'never' | 'optional' | 'required-for-private-reads';
3356
-
3357
- /**
3358
- * keel v2 engine absorbed from Assembly's ow-v2-client v0.9.0 (Kael),
3359
- * wire-corrected against live staging fixtures 2026-07-18.
3360
- *
3361
- * OwV2Client -- thin typed fetch client for the keel v2 API.
3362
- *
3363
- * Deliberately thin: no caching, no sync state, no retry policy -- those belong
3364
- * to callers (sync engines, tools, games). What IS encoded here is the wire
3365
- * contract and its safety rails: payload read-only-field stripping, opaque
3366
- * cursors, idempotency headers, doc_url-bearing errors, polite page sizes, and
3367
- * client-side UUID minting so idempotent retries are structurally safe.
3368
- */
3369
-
3370
- declare class OwV2Client {
3371
- readonly baseUrl: string;
3372
- readonly keyKind: OwKeyKind;
3373
- readonly pageSize: number;
3374
- readonly changesPageSize: number;
3375
- private readonly apiKey;
3376
- private readonly apiPin;
3377
- private readonly fetchImpl;
3378
- constructor(config: OwClientConfig);
3379
- /** GET /health -- unauthenticated liveness pulse. */
3380
- health(): Promise<unknown>;
3381
- /**
3382
- * GET /world -- world meta (name, calendar/time fields, public_read).
3383
- * GOTCHA (by server design): world-meta edits do NOT appear in /changes and
3384
- * do not bump change_seq. Poll getWorld().updated_at for meta freshness.
3385
- */
3386
- getWorld(): Promise<OwWorldMeta>;
3387
- /** PATCH /world -- partial world-meta update. */
3388
- patchWorld(partial: Record<string, unknown>): Promise<OwWorldMeta>;
3389
- /** GET /{type}/ -- one cursor page. */
3390
- list(type: ElementType | string, params?: ListParams): Promise<OwPage>;
3391
- /** Cursor-walk every page of a type. Politeness: uses config pageSize. */
3392
- listAll(type: ElementType | string, params?: Omit<ListParams, 'cursor'>): AsyncGenerator<OwElement>;
3393
- /** GET /{type}/{id}/ -- optional one-level stub expansion / sparse fields. */
3394
- get(type: ElementType | string, id: string, opts?: Pick<ListParams, 'expand' | 'fields'>): Promise<OwElement>;
3395
- /**
3396
- * POST /{type}/ -- create. Mints an RFC-4122 UUID for element.id when the
3397
- * caller omits one (design ruling D29d) so a retry carrying the same
3398
- * Idempotency-Key is structurally safe. Callers MAY still supply their own id.
3399
- */
3400
- create(type: ElementType | string, element: OwElement | Record<string, unknown>, opts?: {
3401
- idempotencyKey?: string;
3402
- }): Promise<OwElement>;
3403
- /** PUT /{type}/{id}/ -- upsert-by-client-id. The local-first write primitive. */
3404
- upsert(type: ElementType | string, id: string, element: OwElement | Record<string, unknown>): Promise<OwElement>;
3405
- /**
3406
- * PATCH /{type}/{id}/ -- partial update. DESTRUCTIVE on sent fields: arrays
3407
- * replace wholesale, omitted fields stay untouched. For link arrays prefer
3408
- * editLinks() -- atomic server-side merge, no read-before-write.
3409
- */
3410
- patch(type: ElementType | string, id: string, partial: Record<string, unknown>): Promise<OwElement>;
3411
- /**
3412
- * DELETE /{type}/{id}/ -- idempotent (204 on absent). Server writes a
3413
- * tombstone AND scrubs the id from every other element's links in the same
3414
- * transaction -- no client-side unlink pass needed, ever.
3415
- */
3416
- delete(type: ElementType | string, id: string): Promise<void>;
3417
- /**
3418
- * POST /{type}/{id}/links/{field} with {add, remove} -- atomic link merge.
3419
- * Dedupes, tolerates already-present/already-absent ids. Returns the FULL
3420
- * updated element (fixture P5). Use this for all relationship editing; it
3421
- * retires the read-merge-PATCH dance.
3422
- */
3423
- editLinks(type: ElementType | string, id: string, field: string, edit: OwLinkEdit): Promise<OwElement>;
3424
- /**
3425
- * POST /bulk -- up to ~1000 items. Partial success by default (HTTP 200
3426
- * always; inspect per-slot numeric `status` + top-level `errors` flag);
3427
- * atomic:true for all-or-nothing. Link validation runs against batch U
3428
- * database -- send in any order, cycles included; no client topo-sort.
3429
- * Success slots echo server-authoritative timestamps: set your sync baseline
3430
- * from this response alone. When an idempotencyKey is replayed, the returned
3431
- * response carries wasReplay:true (read from the Idempotent-Replay header).
3432
- */
3433
- bulk(items: OwBulkItem[], opts?: {
3434
- atomic?: boolean;
3435
- idempotencyKey?: string;
3436
- }): Promise<OwBulkResponse>;
3437
- /**
3438
- * GET /changes -- one page of the world's ordered change feed.
3439
- * Cursor is OPAQUE and never expires: persist verbatim, never parse.
3440
- * Zero/absent cursor = full export (byte-aligned with the Folder Format).
3441
- * Rewind rule: if your persisted position is ahead of page.head, the server
3442
- * was restored -- re-baseline from cursor zero; do not assume caught-up.
3443
- * Citizenship: heaviest route on the platform; default page size is polite.
3444
- */
3445
- changes(opts?: {
3446
- since?: string;
3447
- limit?: number;
3448
- }): Promise<OwChangesPage>;
3449
- /**
3450
- * Walk the feed from `since` (or from zero = full export) to the current
3451
- * tail, yielding ops in order. Returns the final cursor via the generator's
3452
- * return value; persist it for the next incremental pull.
3453
- */
3454
- changesAll(since?: string): AsyncGenerator<OwChange, {
3455
- cursor: string;
3456
- head: number;
3457
- }>;
3458
- private request;
3459
- }
3460
-
3461
- export { type Ability, type AbilityInput, type AccessKeyResponse, type AnyElementId, type ApiResponse, type BaseElement, type Character, type CharacterInput, type Collective, type CollectiveInput, type Construct, type ConstructInput, type Creature, type CreatureInput, ELEMENT_ICONS, ELEMENT_LABELS, ELEMENT_SECTIONS, ELEMENT_TYPES, type ElementId, type ElementIds, ElementType$1 as ElementType, type EncryptionInfo, type Event, type EventInput, FIELD_SCHEMA, type Family, type FamilyInput, type FieldInfo, type FieldType, GameTier, type Institution, type InstitutionInput, type Language, type LanguageInput, type Law, type LawInput, type ListOptions, type ListParams, type Location, type LocationInput, type Map, type MapInput, type Marker, type MarkerInput, type Narrative, type NarrativeInput, ONLYWORLDS_VERSION, type Object$1 as Object, type ObjectInput, OnlyWorldsClient, type OnlyWorldsConfig, OwApiError, type OwAuthErrorCode, type OwBulkItem, type OwBulkItemResult, type OwBulkResponse, type OwChange, type OwChangesPage, type OwClientConfig, type OwElement, type OwElementBase, type OwErrorBody, type OwKeyKind, type OwLinkEdit, OwNetworkError, type OwPage, OwV2Client, type OwWorldMeta, type Phenomenon, type PhenomenonInput, type Pin, type PinInput, type Relation, type RelationInput, type RevokeAllSessionsResponse, type RevokeSessionResponse, SPATIAL_TYPES, type SectionInfo, type Species, type SpeciesInput, type Title, type TitleInput, type TokenConsumeParams, type TokenConsumeResponse, type TokenStatus, type Trait, type TraitInput, type ElementType as V2ElementType, type World, type WorldInput, type Zone, type ZoneInput, createAnyElementId, createElementId, createElementIds, detectKeyKind, errorFromResponse, getElementIcon, getElementLabel, getElementSections, isDemoKey, kindCanWrite, parseEnvelope, pinExpectation };