@anweather/plugin-board-kit 1.20.0 → 1.22.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 +4 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/telemetry.d.ts +17 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +33 -0
- package/dist/telemetry.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -45,6 +45,10 @@ cross-directory import produced ("Cannot read properties of null (reading
|
|
|
45
45
|
- `useCanvasCamera`: pinch/wheel zoom and two-finger pan for a
|
|
46
46
|
canvas-rendered board, renderer-agnostic (Canvas2D via `applyTransform`,
|
|
47
47
|
or drive a Pixi container from `.zoom`/`.offsetX`/`.offsetY`).
|
|
48
|
+
- `boardTelemetry(props)`: the host's `BoardProps.telemetry` reporter
|
|
49
|
+
(`event(name, attrs)`, `error(err, context)`, into the platform's Faro,
|
|
50
|
+
rate-limited and stamped with game type/id/participant by the platform),
|
|
51
|
+
or `NOOP_BOARD_TELEMETRY` on a host without one. Never throws.
|
|
48
52
|
|
|
49
53
|
Not here on purpose: `nameplateAccent.ts` (this repo's
|
|
50
54
|
`frontend/src/plugins/`) hardcodes per-`gameType` colours across the native
|
package/dist/index.d.ts
CHANGED
|
@@ -10,4 +10,6 @@ export type { TurnClockState } from './turnClock';
|
|
|
10
10
|
export { ClockBadge, StartTurnGate } from './TurnClockViews';
|
|
11
11
|
export { useCanvasCamera } from './useCanvasCamera';
|
|
12
12
|
export type { Vec2, UseCanvasCameraOptions, CanvasCamera } from './useCanvasCamera';
|
|
13
|
+
export { boardTelemetry, NOOP_BOARD_TELEMETRY } from './telemetry';
|
|
14
|
+
export type { BoardTelemetry } from './telemetry';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACjD,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9G,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,IAAI,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACjD,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC9G,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,IAAI,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -9,4 +9,5 @@ export { teamOf, teamMembers } from './teamUtils';
|
|
|
9
9
|
export { useClockNow, useClockTimeout, formatClock, liveUsedMs, remainingMs, clockReading } from './turnClock';
|
|
10
10
|
export { ClockBadge, StartTurnGate } from './TurnClockViews';
|
|
11
11
|
export { useCanvasCamera } from './useCanvasCamera';
|
|
12
|
+
export { boardTelemetry, NOOP_BOARD_TELEMETRY } from './telemetry';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,4CAA4C;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEpF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9G,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,0EAA0E;AAC1E,0EAA0E;AAC1E,4CAA4C;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAEpF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEjD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE9G,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** `BoardProps.telemetry`, as a board sees it. Both calls never throw. */
|
|
2
|
+
export interface BoardTelemetry {
|
|
3
|
+
/** A named event, e.g. `event('resync', { reason: 'gap' })`. */
|
|
4
|
+
event(name: string, attrs?: Record<string, unknown>): void;
|
|
5
|
+
/** A caught error, with where it happened (`{ where: 'mount' }`). */
|
|
6
|
+
error(error: unknown, context?: Record<string, unknown>): void;
|
|
7
|
+
}
|
|
8
|
+
/** Accepts every call and does nothing: what a board gets from a host without the hook. */
|
|
9
|
+
export declare const NOOP_BOARD_TELEMETRY: BoardTelemetry;
|
|
10
|
+
/**
|
|
11
|
+
* The host's reporter if it passed one, else the no-op -- so a board can
|
|
12
|
+
* call `boardTelemetry(props).event(...)` unconditionally on any host,
|
|
13
|
+
* including a platform deploy older than the hook. Read structurally: props
|
|
14
|
+
* cross the ShadowMount boundary untyped.
|
|
15
|
+
*/
|
|
16
|
+
export declare function boardTelemetry(props: unknown): BoardTelemetry;
|
|
17
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAMA,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1D,qEAAqE;IACrE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC/D;AAED,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,EAAE,cAGjC,CAAA;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAQ7D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// The board half of BoardProps.telemetry (web-boardgame-platform
|
|
2
|
+
// frontend/src/observability/boardTelemetry.ts): what a board may report
|
|
3
|
+
// into the platform's Faro. The platform rate-limits, size-caps and stamps
|
|
4
|
+
// every report with the game type, game id and participant; a board only
|
|
5
|
+
// names what happened.
|
|
6
|
+
/** Accepts every call and does nothing: what a board gets from a host without the hook. */
|
|
7
|
+
export const NOOP_BOARD_TELEMETRY = Object.freeze({
|
|
8
|
+
event() { },
|
|
9
|
+
error() { },
|
|
10
|
+
});
|
|
11
|
+
/**
|
|
12
|
+
* The host's reporter if it passed one, else the no-op -- so a board can
|
|
13
|
+
* call `boardTelemetry(props).event(...)` unconditionally on any host,
|
|
14
|
+
* including a platform deploy older than the hook. Read structurally: props
|
|
15
|
+
* cross the ShadowMount boundary untyped.
|
|
16
|
+
*/
|
|
17
|
+
export function boardTelemetry(props) {
|
|
18
|
+
const t = props?.telemetry;
|
|
19
|
+
if (!t || typeof t.event !== 'function' || typeof t.error !== 'function')
|
|
20
|
+
return NOOP_BOARD_TELEMETRY;
|
|
21
|
+
// A misbehaving host must not break the board either.
|
|
22
|
+
return {
|
|
23
|
+
event(name, attrs) { try {
|
|
24
|
+
t.event(name, attrs);
|
|
25
|
+
}
|
|
26
|
+
catch { /* telemetry never throws */ } },
|
|
27
|
+
error(error, context) { try {
|
|
28
|
+
t.error(error, context);
|
|
29
|
+
}
|
|
30
|
+
catch { /* as above */ } },
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,uBAAuB;AAUvB,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAmB,MAAM,CAAC,MAAM,CAAC;IAChE,KAAK,KAAI,CAAC;IACV,KAAK,KAAI,CAAC;CACX,CAAC,CAAA;AAEF;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,MAAM,CAAC,GAAI,KAAoD,EAAE,SAAgD,CAAA;IACjH,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,UAAU;QAAE,OAAO,oBAAoB,CAAA;IACrG,sDAAsD;IACtD,OAAO;QACL,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;YAAC,CAAC,CAAC,KAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,IAAI,CAAC;YAAC,CAAC,CAAC,KAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;KACpF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anweather/plugin-board-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.22.0",
|
|
4
4
|
"description": "Board-UI primitives for a web-boardgame-platform game board: the mount/update/unmount handle a remote plugin's bundle exports, BoardShell/TurnIdentity layout, turn/spectator/team helpers, the TurnClock display half, and the pinch/wheel canvas camera. React is a peer dependency, so a plugin's bundle carries exactly one React.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|