@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 +19 -0
- package/dist/index.cjs +125 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +109 -1
- package/dist/index.d.ts +109 -1
- package/dist/index.js +119 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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,
|