@plasius/schema 1.2.18 → 1.3.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.cts CHANGED
@@ -655,4 +655,112 @@ declare function isPrivateUseSubtag(value: string): boolean;
655
655
  */
656
656
  declare function validateLanguage(value: unknown): boolean;
657
657
 
658
- export { type DeepReadonly, FieldBuilder, type FieldDefinition, type FieldExposure, type FieldType, type FieldTypeMap, type FieldValidator, type FieldValidatorResult, type Infer, IsoLanguageCode, type PIIEnforcement, type RefEntityId, type Schema, type SchemaOptions, type SchemaShape, type SchemaUpgradeFunction, type SchemaUpgradeResult, type SchemaUpgradeSpec, type SchemaUpgradeStep, type SerializeOptions, type ValidateCompositionOptions, type ValidationIssue, type ValidationIssueInput, type ValidationResult, createComponentSchema, createSchema, field, getAllComponentSchemas, getAllSchemas, getComponentSchema, getSchemaForType, isExtensionSingleton, isExtensionSubtag, isIsoLanguageCode, isPrivateUseSingleton, isPrivateUseSubtag, isRegionSubtag, isScriptSubtag, isVariantSubtag, isoCountryCodes, isoCurrencyCodes, registerComponentSchema, renderSchemaDescription, validateCountryCode, validateCurrencyCode, validateDateTimeISO, validateEmail, validateLanguage, validateName, validatePercentage, validatePhone, validateRichText, validateSafeText, validateSemVer, validateUUID, validateUrl, validateUserId, validateUserIdArray };
658
+ /** Event classes that can be observed by a player. */
659
+ declare const PLAYER_SYSTEM_EVENT_KINDS: readonly ["combat", "social", "mission", "crafting", "world"];
660
+ type PlayerSystemEventKind = (typeof PLAYER_SYSTEM_EVENT_KINDS)[number];
661
+ /** Achievement tiers exposed by the curated player projection. */
662
+ declare const PLAYER_SYSTEM_ACHIEVEMENT_TIERS: readonly ["bronze", "silver", "gold"];
663
+ type PlayerSystemAchievementTier = (typeof PLAYER_SYSTEM_ACHIEVEMENT_TIERS)[number];
664
+ /** Projection states for an achievement progress track. */
665
+ declare const PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES: readonly ["tracking", "earned"];
666
+ type PlayerSystemAchievementTrackStatus = (typeof PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES)[number];
667
+ /** A player-observable event accepted at the ingestion boundary. */
668
+ interface PlayerSystemObservedEvent {
669
+ id: string;
670
+ playerId: string;
671
+ occurredAt: string;
672
+ kind: PlayerSystemEventKind;
673
+ title: string;
674
+ summary: string;
675
+ highlighted: boolean;
676
+ }
677
+ /** A raw event batch written to the blob-backed ingestion zone. */
678
+ interface PlayerSystemObservedEventBatch {
679
+ source: string;
680
+ emittedAt: string;
681
+ events: readonly PlayerSystemObservedEvent[];
682
+ }
683
+ /** A normalized event enriched with its deterministic deduplication key. */
684
+ interface PlayerSystemNormalizedObservedEvent extends PlayerSystemObservedEvent {
685
+ deterministicKey: string;
686
+ }
687
+ /** A normalized event batch written by the projection processor. */
688
+ interface PlayerSystemNormalizedEventBatch {
689
+ sourceBlobName: string;
690
+ processedAt: string;
691
+ events: readonly PlayerSystemNormalizedObservedEvent[];
692
+ }
693
+ /** A highlighted event shown in the curated player Event Log. */
694
+ interface PlayerSystemEventHighlight {
695
+ id: string;
696
+ title: string;
697
+ summary: string;
698
+ occurredAt: string;
699
+ kind: PlayerSystemEventKind;
700
+ }
701
+ /** A recent event shown in the curated player Event Log. */
702
+ interface PlayerSystemEventEntry extends PlayerSystemEventHighlight {
703
+ highlighted: boolean;
704
+ }
705
+ /** An earned or explainable achievement projected from observed events. */
706
+ interface PlayerSystemAchievementEntry {
707
+ id: string;
708
+ title: string;
709
+ tier: PlayerSystemAchievementTier;
710
+ progressLabel: string;
711
+ earnedAt?: string;
712
+ }
713
+ /** Progress toward an achievement projected from observed events. */
714
+ interface PlayerSystemAchievementTrack {
715
+ id: string;
716
+ title: string;
717
+ current: number;
718
+ target: number;
719
+ status: PlayerSystemAchievementTrackStatus;
720
+ }
721
+ /** Curated per-player Event Log and Achievement read model. */
722
+ interface PlayerSystemCuratedSnapshot {
723
+ playerId: string;
724
+ projectedAt: string;
725
+ lastObservedAt: string;
726
+ highlights: readonly PlayerSystemEventHighlight[];
727
+ events: readonly PlayerSystemEventEntry[];
728
+ achievements: readonly PlayerSystemAchievementEntry[];
729
+ tracks: readonly PlayerSystemAchievementTrack[];
730
+ }
731
+ /** Schema for raw player-observable event batches. */
732
+ declare const PlayerSystemObservedEventBatchSchema: Schema<{
733
+ source: FieldBuilder<string, string>;
734
+ emittedAt: FieldBuilder<string, string>;
735
+ events: FieldBuilder<unknown, unknown>;
736
+ }>;
737
+ /** Schema for normalized event batches used by projections and gossip sourcing. */
738
+ declare const PlayerSystemNormalizedEventBatchSchema: Schema<{
739
+ sourceBlobName: FieldBuilder<string, string>;
740
+ processedAt: FieldBuilder<string, string>;
741
+ events: FieldBuilder<unknown, unknown>;
742
+ }>;
743
+ /** Schema for curated per-player Event Log and Achievement read models. */
744
+ declare const PlayerSystemCuratedSnapshotSchema: Schema<{
745
+ playerId: FieldBuilder<string, string>;
746
+ projectedAt: FieldBuilder<string, string>;
747
+ lastObservedAt: FieldBuilder<string, string>;
748
+ highlights: FieldBuilder<unknown, unknown>;
749
+ events: FieldBuilder<unknown, unknown>;
750
+ achievements: FieldBuilder<unknown, unknown>;
751
+ tracks: FieldBuilder<unknown, unknown>;
752
+ }>;
753
+ type PlayerSystemObservedEventBatchEntity = PlayerSystemObservedEventBatch & {
754
+ type: "player-system-observed-event-batch";
755
+ version: "1.0.0";
756
+ };
757
+ type PlayerSystemNormalizedEventBatchEntity = PlayerSystemNormalizedEventBatch & {
758
+ type: "player-system-normalized-event-batch";
759
+ version: "1.0.0";
760
+ };
761
+ type PlayerSystemCuratedSnapshotEntity = PlayerSystemCuratedSnapshot & {
762
+ type: "player-system-curated-snapshot";
763
+ version: "1.0.0";
764
+ };
765
+
766
+ export { type DeepReadonly, FieldBuilder, type FieldDefinition, type FieldExposure, type FieldType, type FieldTypeMap, type FieldValidator, type FieldValidatorResult, type Infer, IsoLanguageCode, type PIIEnforcement, PLAYER_SYSTEM_ACHIEVEMENT_TIERS, PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES, PLAYER_SYSTEM_EVENT_KINDS, type PlayerSystemAchievementEntry, type PlayerSystemAchievementTier, type PlayerSystemAchievementTrack, type PlayerSystemAchievementTrackStatus, type PlayerSystemCuratedSnapshot, type PlayerSystemCuratedSnapshotEntity, PlayerSystemCuratedSnapshotSchema, type PlayerSystemEventEntry, type PlayerSystemEventHighlight, type PlayerSystemEventKind, type PlayerSystemNormalizedEventBatch, type PlayerSystemNormalizedEventBatchEntity, PlayerSystemNormalizedEventBatchSchema, type PlayerSystemNormalizedObservedEvent, type PlayerSystemObservedEvent, type PlayerSystemObservedEventBatch, type PlayerSystemObservedEventBatchEntity, PlayerSystemObservedEventBatchSchema, type RefEntityId, type Schema, type SchemaOptions, type SchemaShape, type SchemaUpgradeFunction, type SchemaUpgradeResult, type SchemaUpgradeSpec, type SchemaUpgradeStep, type SerializeOptions, type ValidateCompositionOptions, type ValidationIssue, type ValidationIssueInput, type ValidationResult, createComponentSchema, createSchema, field, getAllComponentSchemas, getAllSchemas, getComponentSchema, getSchemaForType, isExtensionSingleton, isExtensionSubtag, isIsoLanguageCode, isPrivateUseSingleton, isPrivateUseSubtag, isRegionSubtag, isScriptSubtag, isVariantSubtag, isoCountryCodes, isoCurrencyCodes, registerComponentSchema, renderSchemaDescription, validateCountryCode, validateCurrencyCode, validateDateTimeISO, validateEmail, validateLanguage, validateName, validatePercentage, validatePhone, validateRichText, validateSafeText, validateSemVer, validateUUID, validateUrl, validateUserId, validateUserIdArray };
package/dist/index.d.ts CHANGED
@@ -655,4 +655,112 @@ declare function isPrivateUseSubtag(value: string): boolean;
655
655
  */
656
656
  declare function validateLanguage(value: unknown): boolean;
657
657
 
658
- export { type DeepReadonly, FieldBuilder, type FieldDefinition, type FieldExposure, type FieldType, type FieldTypeMap, type FieldValidator, type FieldValidatorResult, type Infer, IsoLanguageCode, type PIIEnforcement, type RefEntityId, type Schema, type SchemaOptions, type SchemaShape, type SchemaUpgradeFunction, type SchemaUpgradeResult, type SchemaUpgradeSpec, type SchemaUpgradeStep, type SerializeOptions, type ValidateCompositionOptions, type ValidationIssue, type ValidationIssueInput, type ValidationResult, createComponentSchema, createSchema, field, getAllComponentSchemas, getAllSchemas, getComponentSchema, getSchemaForType, isExtensionSingleton, isExtensionSubtag, isIsoLanguageCode, isPrivateUseSingleton, isPrivateUseSubtag, isRegionSubtag, isScriptSubtag, isVariantSubtag, isoCountryCodes, isoCurrencyCodes, registerComponentSchema, renderSchemaDescription, validateCountryCode, validateCurrencyCode, validateDateTimeISO, validateEmail, validateLanguage, validateName, validatePercentage, validatePhone, validateRichText, validateSafeText, validateSemVer, validateUUID, validateUrl, validateUserId, validateUserIdArray };
658
+ /** Event classes that can be observed by a player. */
659
+ declare const PLAYER_SYSTEM_EVENT_KINDS: readonly ["combat", "social", "mission", "crafting", "world"];
660
+ type PlayerSystemEventKind = (typeof PLAYER_SYSTEM_EVENT_KINDS)[number];
661
+ /** Achievement tiers exposed by the curated player projection. */
662
+ declare const PLAYER_SYSTEM_ACHIEVEMENT_TIERS: readonly ["bronze", "silver", "gold"];
663
+ type PlayerSystemAchievementTier = (typeof PLAYER_SYSTEM_ACHIEVEMENT_TIERS)[number];
664
+ /** Projection states for an achievement progress track. */
665
+ declare const PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES: readonly ["tracking", "earned"];
666
+ type PlayerSystemAchievementTrackStatus = (typeof PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES)[number];
667
+ /** A player-observable event accepted at the ingestion boundary. */
668
+ interface PlayerSystemObservedEvent {
669
+ id: string;
670
+ playerId: string;
671
+ occurredAt: string;
672
+ kind: PlayerSystemEventKind;
673
+ title: string;
674
+ summary: string;
675
+ highlighted: boolean;
676
+ }
677
+ /** A raw event batch written to the blob-backed ingestion zone. */
678
+ interface PlayerSystemObservedEventBatch {
679
+ source: string;
680
+ emittedAt: string;
681
+ events: readonly PlayerSystemObservedEvent[];
682
+ }
683
+ /** A normalized event enriched with its deterministic deduplication key. */
684
+ interface PlayerSystemNormalizedObservedEvent extends PlayerSystemObservedEvent {
685
+ deterministicKey: string;
686
+ }
687
+ /** A normalized event batch written by the projection processor. */
688
+ interface PlayerSystemNormalizedEventBatch {
689
+ sourceBlobName: string;
690
+ processedAt: string;
691
+ events: readonly PlayerSystemNormalizedObservedEvent[];
692
+ }
693
+ /** A highlighted event shown in the curated player Event Log. */
694
+ interface PlayerSystemEventHighlight {
695
+ id: string;
696
+ title: string;
697
+ summary: string;
698
+ occurredAt: string;
699
+ kind: PlayerSystemEventKind;
700
+ }
701
+ /** A recent event shown in the curated player Event Log. */
702
+ interface PlayerSystemEventEntry extends PlayerSystemEventHighlight {
703
+ highlighted: boolean;
704
+ }
705
+ /** An earned or explainable achievement projected from observed events. */
706
+ interface PlayerSystemAchievementEntry {
707
+ id: string;
708
+ title: string;
709
+ tier: PlayerSystemAchievementTier;
710
+ progressLabel: string;
711
+ earnedAt?: string;
712
+ }
713
+ /** Progress toward an achievement projected from observed events. */
714
+ interface PlayerSystemAchievementTrack {
715
+ id: string;
716
+ title: string;
717
+ current: number;
718
+ target: number;
719
+ status: PlayerSystemAchievementTrackStatus;
720
+ }
721
+ /** Curated per-player Event Log and Achievement read model. */
722
+ interface PlayerSystemCuratedSnapshot {
723
+ playerId: string;
724
+ projectedAt: string;
725
+ lastObservedAt: string;
726
+ highlights: readonly PlayerSystemEventHighlight[];
727
+ events: readonly PlayerSystemEventEntry[];
728
+ achievements: readonly PlayerSystemAchievementEntry[];
729
+ tracks: readonly PlayerSystemAchievementTrack[];
730
+ }
731
+ /** Schema for raw player-observable event batches. */
732
+ declare const PlayerSystemObservedEventBatchSchema: Schema<{
733
+ source: FieldBuilder<string, string>;
734
+ emittedAt: FieldBuilder<string, string>;
735
+ events: FieldBuilder<unknown, unknown>;
736
+ }>;
737
+ /** Schema for normalized event batches used by projections and gossip sourcing. */
738
+ declare const PlayerSystemNormalizedEventBatchSchema: Schema<{
739
+ sourceBlobName: FieldBuilder<string, string>;
740
+ processedAt: FieldBuilder<string, string>;
741
+ events: FieldBuilder<unknown, unknown>;
742
+ }>;
743
+ /** Schema for curated per-player Event Log and Achievement read models. */
744
+ declare const PlayerSystemCuratedSnapshotSchema: Schema<{
745
+ playerId: FieldBuilder<string, string>;
746
+ projectedAt: FieldBuilder<string, string>;
747
+ lastObservedAt: FieldBuilder<string, string>;
748
+ highlights: FieldBuilder<unknown, unknown>;
749
+ events: FieldBuilder<unknown, unknown>;
750
+ achievements: FieldBuilder<unknown, unknown>;
751
+ tracks: FieldBuilder<unknown, unknown>;
752
+ }>;
753
+ type PlayerSystemObservedEventBatchEntity = PlayerSystemObservedEventBatch & {
754
+ type: "player-system-observed-event-batch";
755
+ version: "1.0.0";
756
+ };
757
+ type PlayerSystemNormalizedEventBatchEntity = PlayerSystemNormalizedEventBatch & {
758
+ type: "player-system-normalized-event-batch";
759
+ version: "1.0.0";
760
+ };
761
+ type PlayerSystemCuratedSnapshotEntity = PlayerSystemCuratedSnapshot & {
762
+ type: "player-system-curated-snapshot";
763
+ version: "1.0.0";
764
+ };
765
+
766
+ export { type DeepReadonly, FieldBuilder, type FieldDefinition, type FieldExposure, type FieldType, type FieldTypeMap, type FieldValidator, type FieldValidatorResult, type Infer, IsoLanguageCode, type PIIEnforcement, PLAYER_SYSTEM_ACHIEVEMENT_TIERS, PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES, PLAYER_SYSTEM_EVENT_KINDS, type PlayerSystemAchievementEntry, type PlayerSystemAchievementTier, type PlayerSystemAchievementTrack, type PlayerSystemAchievementTrackStatus, type PlayerSystemCuratedSnapshot, type PlayerSystemCuratedSnapshotEntity, PlayerSystemCuratedSnapshotSchema, type PlayerSystemEventEntry, type PlayerSystemEventHighlight, type PlayerSystemEventKind, type PlayerSystemNormalizedEventBatch, type PlayerSystemNormalizedEventBatchEntity, PlayerSystemNormalizedEventBatchSchema, type PlayerSystemNormalizedObservedEvent, type PlayerSystemObservedEvent, type PlayerSystemObservedEventBatch, type PlayerSystemObservedEventBatchEntity, PlayerSystemObservedEventBatchSchema, type RefEntityId, type Schema, type SchemaOptions, type SchemaShape, type SchemaUpgradeFunction, type SchemaUpgradeResult, type SchemaUpgradeSpec, type SchemaUpgradeStep, type SerializeOptions, type ValidateCompositionOptions, type ValidationIssue, type ValidationIssueInput, type ValidationResult, createComponentSchema, createSchema, field, getAllComponentSchemas, getAllSchemas, getComponentSchema, getSchemaForType, isExtensionSingleton, isExtensionSubtag, isIsoLanguageCode, isPrivateUseSingleton, isPrivateUseSubtag, isRegionSubtag, isScriptSubtag, isVariantSubtag, isoCountryCodes, isoCurrencyCodes, registerComponentSchema, renderSchemaDescription, validateCountryCode, validateCurrencyCode, validateDateTimeISO, validateEmail, validateLanguage, validateName, validatePercentage, validatePhone, validateRichText, validateSafeText, validateSemVer, validateUUID, validateUrl, validateUserId, validateUserIdArray };
package/dist/index.js CHANGED
@@ -2498,9 +2498,128 @@ function getComponentSchema(type) {
2498
2498
  function getAllComponentSchemas() {
2499
2499
  return Array.from(componentSchemaRegistry.entries());
2500
2500
  }
2501
+
2502
+ // src/player-system-events.ts
2503
+ var PLAYER_SYSTEM_EVENT_KINDS = [
2504
+ "combat",
2505
+ "social",
2506
+ "mission",
2507
+ "crafting",
2508
+ "world"
2509
+ ];
2510
+ var PLAYER_SYSTEM_ACHIEVEMENT_TIERS = [
2511
+ "bronze",
2512
+ "silver",
2513
+ "gold"
2514
+ ];
2515
+ var PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES = [
2516
+ "tracking",
2517
+ "earned"
2518
+ ];
2519
+ var playerIdField = () => field.string().min(1).max(128).PID({
2520
+ classification: "low",
2521
+ action: "none",
2522
+ logHandling: "pseudonym",
2523
+ purpose: "a stable player-scoped storage identifier"
2524
+ }).description(
2525
+ "Stable player identifier; the only personal identifier retained in event projections"
2526
+ );
2527
+ var eventIdField = () => field.string().min(1).max(128);
2528
+ var eventKindField = () => field.string().enum(PLAYER_SYSTEM_EVENT_KINDS);
2529
+ var eventTitleField = () => field.generalText().min(1).max(120).description("Player-visible event title");
2530
+ var eventSummaryField = () => field.generalText().min(1).max(320).description("Player-visible event summary");
2531
+ var observedEventFields = (defaultHighlighted = true) => ({
2532
+ id: eventIdField(),
2533
+ playerId: playerIdField(),
2534
+ occurredAt: field.dateTimeISO(),
2535
+ kind: eventKindField(),
2536
+ title: eventTitleField(),
2537
+ summary: eventSummaryField(),
2538
+ highlighted: defaultHighlighted ? field.boolean().default(false) : field.boolean()
2539
+ });
2540
+ var eventHighlightFields = () => ({
2541
+ id: eventIdField(),
2542
+ title: eventTitleField(),
2543
+ summary: eventSummaryField(),
2544
+ occurredAt: field.dateTimeISO(),
2545
+ kind: eventKindField()
2546
+ });
2547
+ var eventEntryFields = () => ({
2548
+ id: eventIdField(),
2549
+ title: eventTitleField(),
2550
+ summary: eventSummaryField(),
2551
+ occurredAt: field.dateTimeISO(),
2552
+ kind: eventKindField(),
2553
+ highlighted: field.boolean()
2554
+ });
2555
+ var achievementFields = () => ({
2556
+ id: eventIdField(),
2557
+ title: eventTitleField(),
2558
+ tier: field.string().enum(PLAYER_SYSTEM_ACHIEVEMENT_TIERS),
2559
+ progressLabel: eventSummaryField(),
2560
+ earnedAt: field.dateTimeISO().optional()
2561
+ });
2562
+ var achievementTrackFields = () => ({
2563
+ id: eventIdField(),
2564
+ title: eventTitleField(),
2565
+ current: field.number().min(0).max(1e3),
2566
+ target: field.number().min(1).max(1e3),
2567
+ status: field.string().enum(PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES)
2568
+ });
2569
+ var PlayerSystemObservedEventBatchSchema = createSchema(
2570
+ {
2571
+ source: field.string().min(1).max(120),
2572
+ emittedAt: field.dateTimeISO(),
2573
+ events: field.array(field.object(observedEventFields()))
2574
+ },
2575
+ "player-system-observed-event-batch",
2576
+ {
2577
+ version: "1.0.0",
2578
+ piiEnforcement: "strict"
2579
+ }
2580
+ );
2581
+ var PlayerSystemNormalizedEventBatchSchema = createSchema(
2582
+ {
2583
+ sourceBlobName: field.string().min(1).max(512),
2584
+ processedAt: field.dateTimeISO(),
2585
+ events: field.array(
2586
+ field.object({
2587
+ ...observedEventFields(false),
2588
+ deterministicKey: field.string().min(1).max(256)
2589
+ })
2590
+ )
2591
+ },
2592
+ "player-system-normalized-event-batch",
2593
+ {
2594
+ version: "1.0.0",
2595
+ piiEnforcement: "strict"
2596
+ }
2597
+ );
2598
+ var PlayerSystemCuratedSnapshotSchema = createSchema(
2599
+ {
2600
+ playerId: playerIdField(),
2601
+ projectedAt: field.dateTimeISO(),
2602
+ lastObservedAt: field.dateTimeISO(),
2603
+ highlights: field.array(field.object(eventHighlightFields())),
2604
+ events: field.array(field.object(eventEntryFields())),
2605
+ achievements: field.array(field.object(achievementFields())),
2606
+ tracks: field.array(field.object(achievementTrackFields()))
2607
+ },
2608
+ "player-system-curated-snapshot",
2609
+ {
2610
+ version: "1.0.0",
2611
+ piiEnforcement: "strict"
2612
+ }
2613
+ );
2501
2614
  export {
2502
2615
  FieldBuilder,
2503
2616
  IsoLanguageCode,
2617
+ PLAYER_SYSTEM_ACHIEVEMENT_TIERS,
2618
+ PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES,
2619
+ PLAYER_SYSTEM_EVENT_KINDS,
2620
+ PlayerSystemCuratedSnapshotSchema,
2621
+ PlayerSystemNormalizedEventBatchSchema,
2622
+ PlayerSystemObservedEventBatchSchema,
2504
2623
  createComponentSchema,
2505
2624
  createSchema,
2506
2625
  field,