@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/README.md CHANGED
@@ -30,6 +30,25 @@ uses `dist-cjs/*.js` with `type: module`, it must generate
30
30
 
31
31
  ---
32
32
 
33
+ ## Player-system event contracts
34
+
35
+ The package exports versioned contracts for a blob-backed, privacy-safe player
36
+ event pipeline:
37
+
38
+ ```ts
39
+ import {
40
+ PlayerSystemCuratedSnapshotSchema,
41
+ PlayerSystemNormalizedEventBatchSchema,
42
+ PlayerSystemObservedEventBatchSchema,
43
+ } from "@plasius/schema";
44
+ ```
45
+
46
+ The contracts cover raw observed-event ingress, normalized batches with
47
+ deterministic keys, and curated per-player Event Log/Achievement snapshots.
48
+ Only the stable `playerId` is treated as a personal identifier. It is retained
49
+ for storage partitioning and pseudonymized by `sanitizeForLog`; unknown fields
50
+ and hidden server truth are excluded by schema serialization.
51
+
33
52
  ## Demo
34
53
 
35
54
  ```bash
package/dist/index.cjs CHANGED
@@ -22,6 +22,12 @@ var index_exports = {};
22
22
  __export(index_exports, {
23
23
  FieldBuilder: () => FieldBuilder,
24
24
  IsoLanguageCode: () => IsoLanguageCode,
25
+ PLAYER_SYSTEM_ACHIEVEMENT_TIERS: () => PLAYER_SYSTEM_ACHIEVEMENT_TIERS,
26
+ PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES: () => PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES,
27
+ PLAYER_SYSTEM_EVENT_KINDS: () => PLAYER_SYSTEM_EVENT_KINDS,
28
+ PlayerSystemCuratedSnapshotSchema: () => PlayerSystemCuratedSnapshotSchema,
29
+ PlayerSystemNormalizedEventBatchSchema: () => PlayerSystemNormalizedEventBatchSchema,
30
+ PlayerSystemObservedEventBatchSchema: () => PlayerSystemObservedEventBatchSchema,
25
31
  createComponentSchema: () => createComponentSchema,
26
32
  createSchema: () => createSchema,
27
33
  field: () => field,
@@ -2559,10 +2565,129 @@ function getComponentSchema(type) {
2559
2565
  function getAllComponentSchemas() {
2560
2566
  return Array.from(componentSchemaRegistry.entries());
2561
2567
  }
2568
+
2569
+ // src/player-system-events.ts
2570
+ var PLAYER_SYSTEM_EVENT_KINDS = [
2571
+ "combat",
2572
+ "social",
2573
+ "mission",
2574
+ "crafting",
2575
+ "world"
2576
+ ];
2577
+ var PLAYER_SYSTEM_ACHIEVEMENT_TIERS = [
2578
+ "bronze",
2579
+ "silver",
2580
+ "gold"
2581
+ ];
2582
+ var PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES = [
2583
+ "tracking",
2584
+ "earned"
2585
+ ];
2586
+ var playerIdField = () => field.string().min(1).max(128).PID({
2587
+ classification: "low",
2588
+ action: "none",
2589
+ logHandling: "pseudonym",
2590
+ purpose: "a stable player-scoped storage identifier"
2591
+ }).description(
2592
+ "Stable player identifier; the only personal identifier retained in event projections"
2593
+ );
2594
+ var eventIdField = () => field.string().min(1).max(128);
2595
+ var eventKindField = () => field.string().enum(PLAYER_SYSTEM_EVENT_KINDS);
2596
+ var eventTitleField = () => field.generalText().min(1).max(120).description("Player-visible event title");
2597
+ var eventSummaryField = () => field.generalText().min(1).max(320).description("Player-visible event summary");
2598
+ var observedEventFields = (defaultHighlighted = true) => ({
2599
+ id: eventIdField(),
2600
+ playerId: playerIdField(),
2601
+ occurredAt: field.dateTimeISO(),
2602
+ kind: eventKindField(),
2603
+ title: eventTitleField(),
2604
+ summary: eventSummaryField(),
2605
+ highlighted: defaultHighlighted ? field.boolean().default(false) : field.boolean()
2606
+ });
2607
+ var eventHighlightFields = () => ({
2608
+ id: eventIdField(),
2609
+ title: eventTitleField(),
2610
+ summary: eventSummaryField(),
2611
+ occurredAt: field.dateTimeISO(),
2612
+ kind: eventKindField()
2613
+ });
2614
+ var eventEntryFields = () => ({
2615
+ id: eventIdField(),
2616
+ title: eventTitleField(),
2617
+ summary: eventSummaryField(),
2618
+ occurredAt: field.dateTimeISO(),
2619
+ kind: eventKindField(),
2620
+ highlighted: field.boolean()
2621
+ });
2622
+ var achievementFields = () => ({
2623
+ id: eventIdField(),
2624
+ title: eventTitleField(),
2625
+ tier: field.string().enum(PLAYER_SYSTEM_ACHIEVEMENT_TIERS),
2626
+ progressLabel: eventSummaryField(),
2627
+ earnedAt: field.dateTimeISO().optional()
2628
+ });
2629
+ var achievementTrackFields = () => ({
2630
+ id: eventIdField(),
2631
+ title: eventTitleField(),
2632
+ current: field.number().min(0).max(1e3),
2633
+ target: field.number().min(1).max(1e3),
2634
+ status: field.string().enum(PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES)
2635
+ });
2636
+ var PlayerSystemObservedEventBatchSchema = createSchema(
2637
+ {
2638
+ source: field.string().min(1).max(120),
2639
+ emittedAt: field.dateTimeISO(),
2640
+ events: field.array(field.object(observedEventFields()))
2641
+ },
2642
+ "player-system-observed-event-batch",
2643
+ {
2644
+ version: "1.0.0",
2645
+ piiEnforcement: "strict"
2646
+ }
2647
+ );
2648
+ var PlayerSystemNormalizedEventBatchSchema = createSchema(
2649
+ {
2650
+ sourceBlobName: field.string().min(1).max(512),
2651
+ processedAt: field.dateTimeISO(),
2652
+ events: field.array(
2653
+ field.object({
2654
+ ...observedEventFields(false),
2655
+ deterministicKey: field.string().min(1).max(256)
2656
+ })
2657
+ )
2658
+ },
2659
+ "player-system-normalized-event-batch",
2660
+ {
2661
+ version: "1.0.0",
2662
+ piiEnforcement: "strict"
2663
+ }
2664
+ );
2665
+ var PlayerSystemCuratedSnapshotSchema = createSchema(
2666
+ {
2667
+ playerId: playerIdField(),
2668
+ projectedAt: field.dateTimeISO(),
2669
+ lastObservedAt: field.dateTimeISO(),
2670
+ highlights: field.array(field.object(eventHighlightFields())),
2671
+ events: field.array(field.object(eventEntryFields())),
2672
+ achievements: field.array(field.object(achievementFields())),
2673
+ tracks: field.array(field.object(achievementTrackFields()))
2674
+ },
2675
+ "player-system-curated-snapshot",
2676
+ {
2677
+ version: "1.0.0",
2678
+ piiEnforcement: "strict"
2679
+ }
2680
+ );
2562
2681
  // Annotate the CommonJS export names for ESM import in node:
2563
2682
  0 && (module.exports = {
2564
2683
  FieldBuilder,
2565
2684
  IsoLanguageCode,
2685
+ PLAYER_SYSTEM_ACHIEVEMENT_TIERS,
2686
+ PLAYER_SYSTEM_ACHIEVEMENT_TRACK_STATUSES,
2687
+ PLAYER_SYSTEM_EVENT_KINDS,
2688
+ PlayerSystemCuratedSnapshotSchema,
2689
+ PlayerSystemNormalizedEventBatchSchema,
2690
+ PlayerSystemObservedEventBatchSchema,
2566
2691
  createComponentSchema,
2567
2692
  createSchema,
2568
2693
  field,