@dreamboard-games/sdk 0.5.0-alpha.4 → 0.5.0-alpha.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/runtime-json.ts","../src/shared/interaction-schema.ts","../src/shared/runtime-schema.ts","../src/shared/hex-board.ts","../src/shared/protocol/json.ts"],"sourcesContent":["import { z } from \"zod\";\n\n/** JSON values shared by protocol and game-owned runtime state. */\nexport const RuntimeJsonSchema = z.json();\nexport type RuntimeJson = z.infer<typeof RuntimeJsonSchema>;\n","import { z } from \"zod\";\nimport { PlayerBoardSpaceTargetSchema } from \"./board-target.js\";\nimport { RuntimeJsonSchema } from \"./runtime-json.js\";\n\nexport const InteractionCommitPolicySchema = z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"manual\") }).strict(),\n z.object({ mode: z.literal(\"autoWhenReady\") }).strict(),\n]);\n\nexport const InputSelectionSchema = z.discriminatedUnion(\"mode\", [\n z.object({ mode: z.literal(\"single\") }).strict(),\n z\n .object({\n mode: z.literal(\"many\"),\n min: z.number().int(),\n max: z.number().int().optional(),\n distinct: z.boolean().optional(),\n })\n .strict(),\n]);\n\nexport const InteractionChoiceOptionSchema = z\n .object({\n value: z.string().nullable(),\n label: z.string(),\n icon: z.string().optional(),\n badge: z.string().optional(),\n description: z.string().optional(),\n disabled: z.boolean().optional(),\n disabledReason: z.string().optional(),\n })\n .strict();\n\nconst selection = { selection: InputSelectionSchema.optional() };\nexport const InputDomainSchema = z.discriminatedUnion(\"type\", [\n z.strictObject({\n type: z.literal(\"cardTarget\"),\n projection: z.literal(\"resolved\"),\n targetKind: z.literal(\"card\"),\n zoneIds: z.array(z.string()),\n eligibleTargets: z.array(z.string()),\n ...selection,\n }),\n z.discriminatedUnion(\"valueKind\", [\n z.strictObject({\n type: z.literal(\"boardTarget\"),\n projection: z.literal(\"resolved\"),\n targetKind: z.enum([\"edge\", \"vertex\", \"space\", \"tile\"]),\n boardId: z.string(),\n valueKind: z.literal(\"board-id\"),\n eligibleTargets: z.array(z.string()),\n ...selection,\n }),\n z.strictObject({\n type: z.literal(\"boardTarget\"),\n projection: z.literal(\"resolved\"),\n targetKind: z.literal(\"space\"),\n boardId: z.string(),\n valueKind: z.literal(\"player-board-space\"),\n eligibleTargets: z.array(PlayerBoardSpaceTargetSchema),\n ...selection,\n }),\n ]),\n z.strictObject({\n type: z.literal(\"resourceMap\"),\n resources: z.array(\n z.strictObject({\n resourceId: z.string(),\n label: z.string().optional(),\n icon: z.string().optional(),\n min: z.number(),\n max: z.number(),\n }),\n ),\n ...selection,\n }),\n z.strictObject({\n type: z.literal(\"boundedNumber\"),\n min: z.number(),\n max: z.number(),\n step: z.number().optional(),\n ...selection,\n }),\n z.strictObject({\n type: z.literal(\"choice\"),\n choices: z.array(InteractionChoiceOptionSchema),\n ...selection,\n }),\n z.strictObject({\n type: z.literal(\"choiceList\"),\n choices: z.array(\n InteractionChoiceOptionSchema.extend({ value: z.string() }),\n ),\n min: z.number().int().optional(),\n max: z.number().int().optional(),\n ...selection,\n }),\n]);\n\nexport const InteractionInputDescriptorSchema = z\n .object({\n key: z.string().min(1),\n kind: z.enum([\n \"form\",\n \"board-vertex\",\n \"board-edge\",\n \"board-tile\",\n \"board-space\",\n \"card\",\n \"rng\",\n ]),\n domain: InputDomainSchema,\n defaultValue: RuntimeJsonSchema.optional(),\n })\n .strict();\n\nexport const InteractionAvailabilitySchema = z.discriminatedUnion(\"status\", [\n z.object({ status: z.literal(\"available\") }).strict(),\n z.object({ status: z.literal(\"notYourTurn\"), reason: z.string() }).strict(),\n z\n .object({\n status: z.literal(\"blocked\"),\n reason: z.string(),\n code: z.string().optional(),\n })\n .strict(),\n]);\n\nconst InteractionBaseSchema = z\n .object({\n phaseName: z.string().min(1),\n interactionKey: z.string().min(1),\n interactionId: z.string().min(1),\n label: z.string().min(1),\n help: z.string().optional(),\n zoneId: z.string().optional(),\n zoneIds: z.array(z.string()).optional(),\n commit: InteractionCommitPolicySchema,\n descriptorDigest: z.string().optional(),\n actorSeat: z.number().int().optional(),\n draftDigest: z.string().optional(),\n inputs: z.array(InteractionInputDescriptorSchema),\n step: z\n .object({\n index: z.number().int().nonnegative(),\n total: z.number().int().positive(),\n selected: z.record(z.string(), RuntimeJsonSchema),\n canCancel: z.boolean(),\n })\n .strict()\n .optional(),\n availability: InteractionAvailabilitySchema,\n reasons: z\n .array(\n z\n .object({\n ruleId: z.string(),\n errorCode: z.string(),\n })\n .strict(),\n )\n .optional(),\n })\n .strict();\n\nexport const InteractionDescriptorSchema = InteractionBaseSchema.extend({\n kind: z.literal(\"action\"),\n}).strict();\n\nexport const ZoneInteractionRefsSchema = z.strictObject({\n cardIds: z.array(z.string()),\n cardViewsById: z.record(z.string(), z.string()),\n cardBacksById: z.record(z.string(), z.string()),\n playableByCardId: z.record(z.string(), z.array(z.string())),\n});\n\ntype DeepReadonly<T> = T extends readonly (infer Item)[]\n ? readonly DeepReadonly<Item>[]\n : T extends object\n ? { readonly [K in keyof T]: DeepReadonly<T[K]> }\n : T;\nexport type InputDomain = DeepReadonly<z.infer<typeof InputDomainSchema>>;\nexport type InputSelection = DeepReadonly<z.infer<typeof InputSelectionSchema>>;\nexport type InteractionCommitPolicy = z.infer<\n typeof InteractionCommitPolicySchema\n>;\nexport type InteractionChoiceOption = DeepReadonly<\n z.infer<typeof InteractionChoiceOptionSchema>\n>;\nexport type InteractionInputDescriptor = Readonly<\n Omit<z.infer<typeof InteractionInputDescriptorSchema>, \"domain\">\n> & { readonly domain: InputDomain };\nexport type InteractionAvailability = DeepReadonly<\n z.infer<typeof InteractionAvailabilitySchema>\n>;\ntype DescriptorData = z.infer<typeof InteractionDescriptorSchema>;\nexport type InteractionDescriptor = Readonly<\n Omit<DescriptorData, \"inputs\" | \"step\" | \"zoneIds\" | \"reasons\">\n> & {\n readonly inputs: readonly InteractionInputDescriptor[];\n readonly zoneIds?: readonly string[];\n readonly reasons?: readonly Readonly<\n NonNullable<DescriptorData[\"reasons\"]>[number]\n >[];\n readonly step?: Readonly<\n Omit<NonNullable<DescriptorData[\"step\"]>, \"selected\">\n > & {\n readonly selected: Readonly<\n NonNullable<DescriptorData[\"step\"]>[\"selected\"]\n >;\n };\n};\nexport type InteractionDiagnosticReason = NonNullable<\n InteractionDescriptor[\"reasons\"]\n>[number];\nexport type ZoneInteractionRefs = DeepReadonly<\n z.infer<typeof ZoneInteractionRefsSchema>\n>;\n","import {\n InteractionDescriptorSchema,\n ZoneInteractionRefsSchema,\n} from \"./interaction-schema\";\nimport { z } from \"zod\";\nimport { RuntimeJsonSchema } from \"./runtime-json.js\";\n\n// Canonical wire schemas: no coercion, defaults, or game-authored refinements.\n// Intentional hard cut: session meta.contractFingerprint is no longer admitted.\nexport const ReducerContractVersionSchema = z\n .string()\n .regex(new RegExp(\"^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\"));\n\nexport const RngOperationParameterSchema = z.union([\n z.string(),\n z.number().finite(),\n z.boolean(),\n]);\n\nexport const RngOperationSchema = z.strictObject({\n kind: z.string().min(1),\n parameters: z.record(z.string(), RngOperationParameterSchema),\n});\n\nexport const RngDrawSchema = z.strictObject({\n index: z.number().int().gte(0),\n cursorBefore: z.number().int().gte(0),\n cursorAfter: z.number().int().gte(0),\n operation: RngOperationSchema,\n});\n\nexport const RngStateSchema = z.strictObject({\n seed: z.union([\n z.number().refine(Number.isInteger, { message: \"Expected integer\" }),\n z.null(),\n ]),\n cursor: z.number().int(),\n trace: z.array(z.string()),\n draws: z.array(RngDrawSchema).optional(),\n});\n\nexport const ReducerFlowStateSchema = z.strictObject({\n currentPhase: z.string().min(1),\n turn: z.number().int(),\n round: z.number().int(),\n activePlayers: z.array(z.string().min(1)),\n});\n\nexport const RuntimeSimultaneousSubmissionSchema = z.strictObject({\n interactionId: z.string().min(1),\n params: RuntimeJsonSchema,\n});\n\nexport const RuntimeSimultaneousCurrentSchema = z.strictObject({\n phaseName: z.string().min(1),\n actors: z.array(z.string().min(1)),\n submissions: z.record(z.string(), RuntimeSimultaneousSubmissionSchema),\n});\n\nexport const RuntimeSimultaneousStateSchema = z.strictObject({\n current: z.union([RuntimeSimultaneousCurrentSchema, z.null()]),\n});\n\nexport const TransitionRecordSchema = z.strictObject({\n from: z.string().min(1),\n to: z.string().min(1),\n});\n\nexport const RuntimePendingInteractionSchema = z.strictObject({\n phaseName: z.string().min(1),\n interactionId: z.string().min(1),\n values: z.array(RuntimeJsonSchema).min(1),\n});\n\nexport const GameEventDetailSchema = z.strictObject({\n label: z.string().min(1),\n value: z.union([z.string(), z.number().finite(), z.boolean()]),\n});\n\nexport const SystemActionEventSchema = z.strictObject({\n kind: z.literal(\"systemAction\"),\n procedureId: z.string().min(1),\n title: z.string().min(1),\n summary: z.string().min(1).optional(),\n details: z.array(GameEventDetailSchema).max(16).optional(),\n});\n\nexport const GameEventSchema = z.discriminatedUnion(\"kind\", [\n SystemActionEventSchema,\n]);\n\nexport const ReducerRuntimeStateSchema = z.strictObject({\n events: z.array(GameEventSchema).max(32),\n rng: RngStateSchema,\n pending: z.record(z.string(), RuntimePendingInteractionSchema),\n simultaneous: RuntimeSimultaneousStateSchema,\n lastTransition: z.union([TransitionRecordSchema, z.null()]),\n options: z.record(z.string(), RuntimeJsonSchema),\n});\n\nexport const ReducerDomainStateSchema = z.strictObject({\n table: RuntimeJsonSchema,\n publicState: RuntimeJsonSchema,\n privateState: z.record(z.string(), RuntimeJsonSchema),\n hiddenState: RuntimeJsonSchema,\n flow: ReducerFlowStateSchema,\n phase: RuntimeJsonSchema,\n});\n\nexport const ReducerSessionStateSchema = z.strictObject({\n domain: ReducerDomainStateSchema,\n runtime: ReducerRuntimeStateSchema,\n});\n\nexport const GameInputInteractionSchema = z.strictObject({\n kind: z.literal(\"interaction\"),\n playerId: z.string().min(1),\n interactionId: z.string().min(1),\n params: RuntimeJsonSchema,\n});\n\nexport const GameInputCancelSchema = z.strictObject({\n kind: z.literal(\"interaction.cancel\"),\n playerId: z.string().min(1),\n interactionId: z.string().min(1),\n});\n\nexport const GameInputSchema = z.discriminatedUnion(\"kind\", [\n GameInputInteractionSchema,\n GameInputCancelSchema,\n]);\n\nexport const GameOutcomeReasonSchema = z.strictObject({\n code: z.string().min(1),\n message: z.string().min(1).optional(),\n});\n\nexport const OutcomeResultSchema = z.enum([\n \"win\",\n \"draw\",\n \"loss\",\n \"eliminated\",\n]);\n\nexport const OutcomeScoreComponentSchema = z.strictObject({\n id: z.string().min(1),\n label: z.string().min(1),\n value: z.number().finite(),\n});\n\nexport const OutcomeTieBreakSchema = z.strictObject({\n id: z.string().min(1),\n label: z.string().min(1),\n value: z.union([z.number().finite(), z.string()]),\n});\n\nexport const OutcomeStandingSchema = z.strictObject({\n playerId: z.string().min(1),\n rank: z.number().int().gte(1),\n result: OutcomeResultSchema,\n score: z.number().finite().optional(),\n scoreBreakdown: z.array(OutcomeScoreComponentSchema).optional(),\n tieBreaks: z.array(OutcomeTieBreakSchema).optional(),\n});\n\nexport const GameOutcomeSchema = z.strictObject({\n reason: GameOutcomeReasonSchema,\n standings: z.array(OutcomeStandingSchema).min(1),\n});\n\nexport const InitializeResultSchema = z.strictObject({\n state: ReducerSessionStateSchema,\n terminal: GameOutcomeSchema.optional(),\n events: z.array(GameEventSchema).optional(),\n});\n\nexport const InitializeRequestSchema = z.strictObject({\n table: RuntimeJsonSchema,\n playerIds: z.array(z.string().min(1)),\n rngSeed: z\n .union([\n z.number().refine(Number.isInteger, { message: \"Expected integer\" }),\n z.null(),\n ])\n .optional(),\n options: z.record(z.string(), RuntimeJsonSchema).optional(),\n});\n\nexport const DispatchRequestSchema = z.strictObject({\n state: ReducerSessionStateSchema,\n input: GameInputSchema,\n});\n\nexport const DispatchTraceAcceptedClientInputSchema = z.strictObject({\n kind: z.literal(\"acceptedClientInput\"),\n input: GameInputSchema,\n});\n\nexport const DispatchTracePhaseEnteredSchema = z.strictObject({\n kind: z.literal(\"phaseEntered\"),\n from: z.string(),\n to: z.string(),\n});\n\nexport const DispatchTraceRngConsumptionSchema = z.strictObject({\n kind: z.literal(\"rngConsumption\"),\n version: z.literal(2),\n operation: z.string().min(1),\n drawIndex: z.number().int().gte(0),\n traceEntry: z.string(),\n});\n\nexport const DispatchTraceSchema = z.discriminatedUnion(\"kind\", [\n DispatchTraceAcceptedClientInputSchema,\n DispatchTracePhaseEnteredSchema,\n DispatchTraceRngConsumptionSchema,\n]);\n\nexport const DispatchResultRejectSchema = z.strictObject({\n kind: z.literal(\"reject\"),\n errorCode: z.string().min(1),\n message: z.string().optional(),\n});\n\nexport const DispatchResultAcceptSchema = z.strictObject({\n kind: z.literal(\"accept\"),\n state: ReducerSessionStateSchema,\n terminal: GameOutcomeSchema.optional(),\n trace: z.array(DispatchTraceSchema),\n events: z.array(GameEventSchema).max(32),\n});\n\nexport const DispatchResultSchema = z.discriminatedUnion(\"kind\", [\n DispatchResultRejectSchema,\n DispatchResultAcceptSchema,\n]);\n\nexport const ReducerRuntimeLogEntryAcceptedClientInputSchema = z.strictObject({\n kind: z.literal(\"acceptedClientInput\"),\n version: z.number().int(),\n input: GameInputSchema,\n});\n\nexport const ReducerRuntimeLogEntryPhaseEnteredSchema = z.strictObject({\n kind: z.literal(\"phaseEntered\"),\n from: z.string(),\n to: z.string(),\n version: z.number().int(),\n});\n\nexport const ReducerRuntimeLogEntryRngConsumptionSchema = z.strictObject({\n kind: z.literal(\"rngConsumption\"),\n version: z.number().int(),\n operation: z.string().min(1),\n drawIndex: z.number().int().gte(0).optional(),\n traceEntry: z.string(),\n});\n\nexport const ReducerRuntimeLogEntryStateCommitSchema = z.strictObject({\n kind: z.literal(\"stateCommit\"),\n version: z.number().int(),\n state: ReducerSessionStateSchema,\n});\n\nexport const ReducerRuntimeLogEntrySchema = z.discriminatedUnion(\"kind\", [\n ReducerRuntimeLogEntryAcceptedClientInputSchema,\n ReducerRuntimeLogEntryPhaseEnteredSchema,\n ReducerRuntimeLogEntryRngConsumptionSchema,\n ReducerRuntimeLogEntryStateCommitSchema,\n]);\n\n/** Authored views are records; boards is reserved for manifest geometry. */\nexport const AuthoredViewSchema = z\n .object({\n boards: z\n .never({\n error: \"The view field 'boards' is reserved for manifest geometry.\",\n })\n .optional(),\n })\n .catchall(RuntimeJsonSchema);\n\nexport const SeatProjectionSchema = z.strictObject({\n view: AuthoredViewSchema.nullable().optional(),\n availableInteractionRefs: z.array(z.string()).optional(),\n zones: z.record(z.string(), ZoneInteractionRefsSchema).optional(),\n /** Resource balances by player that this seat may see. */\n resources: z\n .record(z.string(), z.record(z.string(), z.number().int()))\n .optional(),\n});\n\nexport const SimultaneousPhaseProjectionSchema = z.strictObject({\n phaseName: z.string().min(1),\n interactionId: z.string().min(1),\n actorIds: z.array(z.string().min(1)),\n sealedPlayerIds: z.array(z.string().min(1)),\n pendingPlayerIds: z.array(z.string().min(1)),\n});\n\nexport const SchedulerContinuationDependencySchema = z.strictObject({\n waiterPlayerId: z.string().min(1),\n blockerPlayerIds: z.array(z.string().min(1)),\n});\n\nexport const SchedulerFlowAuthorityProjectionSchema = z.strictObject({\n version: z.literal(1),\n activePlayerIds: z.array(z.string().min(1)),\n pendingPlayerIds: z.array(z.string().min(1)),\n continuationDependencies: z.array(SchedulerContinuationDependencySchema),\n});\n\nexport const ProjectionTimingMetadataSchema = z.strictObject({\n resolveAvailableInteractionsMs: z.number().finite().gte(0),\n resolveViewMs: z.number().finite().gte(0),\n resolveZoneHandlesMs: z.number().finite().gte(0),\n descriptorHashMs: z.number().finite().gte(0),\n});\n\nexport const SeatProjectionBundleSchema = z.strictObject({\n events: z.array(GameEventSchema).max(32),\n simultaneousPhase: z\n .union([SimultaneousPhaseProjectionSchema, z.null()])\n .optional(),\n schedulerFlow: SchedulerFlowAuthorityProjectionSchema.optional(),\n interactionsByRef: z\n .record(z.string(), InteractionDescriptorSchema)\n .optional(),\n seats: z.record(z.string(), SeatProjectionSchema),\n timing: ProjectionTimingMetadataSchema.optional(),\n});\n\nexport const ProjectRequestSchema = z.strictObject({\n state: ReducerSessionStateSchema,\n playerIds: z.array(z.string().min(1)),\n});\n\nexport const BoardStaticProjectionSchema = z.strictObject({\n view: z.record(z.string(), RuntimeJsonSchema),\n hash: z.string().min(1),\n manifestVersion: z.string(),\n});\n","import type { HexEdgeId, HexVertexId } from \"./domain/board-identities.js\";\nimport type {\n HexShape,\n HexCoordinate,\n HexOrientation,\n} from \"./domain/contracts.js\";\nimport {\n defineHex,\n Grid,\n Orientation,\n fromCoordinates as coordinatesTraversal,\n rectangle as rectangleTraversal,\n ring as ringTraversal,\n spiral as spiralTraversal,\n line as lineTraversal,\n type Point,\n} from \"honeycomb-grid\";\n\nexport type { HexShape } from \"./domain/contracts.js\";\nexport type AxialCoordinate = Readonly<HexCoordinate>;\nexport const hexagon = (\n options: Omit<Extract<HexShape, { kind: \"hexagon\" | \"spiral\" }>, \"kind\">,\n) => ({ kind: \"hexagon\" as const, ...options });\nexport const spiral = (\n options: Omit<Extract<HexShape, { kind: \"hexagon\" | \"spiral\" }>, \"kind\">,\n) => ({ kind: \"spiral\" as const, ...options });\nexport const ring = (\n options: Omit<Extract<HexShape, { kind: \"ring\" }>, \"kind\">,\n) => ({ kind: \"ring\" as const, ...options });\nexport const rectangle = (\n options: Omit<Extract<HexShape, { kind: \"rectangle\" }>, \"kind\">,\n) => ({ kind: \"rectangle\" as const, ...options });\nexport const fromCoordinates = <\n const Coordinates extends readonly AxialCoordinate[],\n>(\n coordinates: Coordinates,\n) => ({ kind: \"coordinates\" as const, coordinates });\n\nexport type HexBoardOrientation = HexOrientation;\nexport type HexBoardSpace<Id extends string = string> = AxialCoordinate & {\n id: Id;\n};\nconst coordinateKey = ({ q, r }: AxialCoordinate) => `${q},${r}`;\nconst pointKey = ({ x, y }: Point) =>\n `${Math.round(x * 1e9)},${Math.round(y * 1e9)}`;\nconst compare = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0);\n\nfunction hexClass(orientation: HexBoardOrientation, dimensions = 1) {\n return defineHex({\n dimensions,\n orientation: orientation === \"flat\" ? Orientation.FLAT : Orientation.POINTY,\n origin: { x: 0, y: 0 },\n });\n}\n\n/** Generate axial coordinates with the library's traversers. Shapes remain JSON. */\nexport function hexShapeCoordinates(\n shape: HexShape,\n orientation: HexBoardOrientation = \"pointy\",\n): AxialCoordinate[] {\n const integer = (value: number, name: string, minimum: number) => {\n if (!Number.isSafeInteger(value) || value < minimum)\n throw new Error(`${name} must be a safe integer >= ${minimum}.`);\n };\n const coordinate = (value: AxialCoordinate) => {\n integer(value.q, \"q\", Number.MIN_SAFE_INTEGER);\n integer(value.r, \"r\", Number.MIN_SAFE_INTEGER);\n };\n if (shape.kind === \"coordinates\") {\n shape.coordinates.forEach(coordinate);\n if (\n new Set(shape.coordinates.map(coordinateKey)).size !==\n shape.coordinates.length\n )\n throw new Error(\"Hex shape contains duplicate coordinates.\");\n } else if (shape.kind === \"rectangle\") {\n integer(shape.width, \"width\", 1);\n integer(shape.height, \"height\", 1);\n if (shape.start) coordinate(shape.start);\n } else {\n integer(shape.radius, \"radius\", 0);\n if (shape.center) coordinate(shape.center);\n }\n const Tile = hexClass(orientation);\n const traversal =\n shape.kind === \"coordinates\"\n ? coordinatesTraversal(...shape.coordinates)\n : shape.kind === \"rectangle\"\n ? rectangleTraversal(shape)\n : shape.kind === \"ring\"\n ? ringTraversal({\n radius: shape.radius,\n center: shape.center ?? { q: 0, r: 0 },\n })\n : spiralTraversal({ radius: shape.radius, start: shape.center });\n return new Grid(Tile, traversal).toArray().map(({ q, r }) => ({ q, r }));\n}\n\nexport type HexTopologyEdge<BoardId extends string> = {\n id: HexEdgeId<BoardId>;\n spaceIds: string[];\n vertexIds: [HexVertexId<BoardId>, HexVertexId<BoardId>];\n};\nexport type HexTopologyVertex<BoardId extends string> = {\n id: HexVertexId<BoardId>;\n spaceIds: string[];\n edgeIds: HexEdgeId<BoardId>[];\n};\n\n/** One immutable topology for materialization, rules, layout, and hit testing. */\nexport function createHexBoardGeometry<\n const BoardId extends string,\n SpaceId extends string,\n>(board: {\n id: BoardId;\n orientation?: HexBoardOrientation;\n spaces: readonly HexBoardSpace<SpaceId>[];\n}) {\n const spaces = board.spaces\n .map(({ id, q, r }) => ({ id, q, r }))\n .sort((a, b) => compare(a.id, b.id));\n const orientation = board.orientation ?? \"pointy\";\n const grid = new Grid(hexClass(orientation), spaces);\n const spacesById = new Map(spaces.map((space) => [space.id, space]));\n if (spacesById.size !== spaces.length || grid.size !== spaces.length)\n throw new Error(\n `Hex board '${board.id}' contains duplicate space IDs or coordinates.`,\n );\n const spacesByCoordinate = new Map(\n spaces.map((space) => [coordinateKey(space), space]),\n );\n const cornerOwners = new Map<\n string,\n { point: Point; owners: { id: SpaceId; corner: number }[] }\n >();\n const edgeOwners = new Map<\n string,\n { corners: [string, string]; owners: { id: SpaceId; side: number }[] }\n >();\n const cornersBySpace = new Map<SpaceId, string[]>();\n const edgesBySpace = new Map<SpaceId, string[]>();\n for (const space of spaces) {\n const corners = grid.getHex(space)!.corners;\n const cornerKeys = corners.map(pointKey);\n cornersBySpace.set(space.id, cornerKeys);\n const edgeKeys: string[] = [];\n corners.forEach((point, corner) => {\n const key = cornerKeys[corner];\n const vertex = cornerOwners.get(key) ?? { point, owners: [] };\n vertex.owners.push({ id: space.id, corner });\n cornerOwners.set(key, vertex);\n const pair = [key, cornerKeys[(corner + 1) % 6]] as [string, string];\n const edgeKey = [...pair].sort(compare).join(\"|\");\n const edge = edgeOwners.get(edgeKey) ?? { corners: pair, owners: [] };\n edge.owners.push({ id: space.id, side: corner });\n edgeOwners.set(edgeKey, edge);\n edgeKeys.push(edgeKey);\n });\n edgesBySpace.set(space.id, edgeKeys);\n }\n // Boundary IDs include an owner's corner/side to distinguish multiple boundary\n // elements incident to the same set of spaces. Interior IDs use all owners.\n const vertexIds = new Map(\n [...cornerOwners].map(([key, vertex]) => {\n const owners = [...vertex.owners].sort((a, b) => compare(a.id, b.id));\n return [\n key,\n `${board.id}:vertex:${owners.map((owner) => encodeURIComponent(owner.id)).join(\"|\")}${owners.length < 3 ? `:${owners[0].corner}` : \"\"}` as HexVertexId<BoardId>,\n ];\n }),\n );\n const edgeIds = new Map(\n [...edgeOwners].map(([key, edge]) => {\n const owners = [...edge.owners].sort((a, b) => compare(a.id, b.id));\n return [\n key,\n `${board.id}:edge:${owners.map((owner) => encodeURIComponent(owner.id)).join(\"|\")}${owners.length === 1 ? `:${owners[0].side}` : \"\"}` as HexEdgeId<BoardId>,\n ];\n }),\n );\n const edges: HexTopologyEdge<BoardId>[] = [...edgeOwners]\n .map(([key, edge]) => ({\n id: edgeIds.get(key)!,\n spaceIds: edge.owners.map((owner) => owner.id).sort(compare),\n vertexIds: edge.corners\n .map((key) => vertexIds.get(key)!)\n .sort(compare) as [HexVertexId<BoardId>, HexVertexId<BoardId>],\n }))\n .sort((a, b) => compare(a.id, b.id));\n const vertices: HexTopologyVertex<BoardId>[] = [...cornerOwners]\n .map(([key, vertex]) => ({\n id: vertexIds.get(key)!,\n spaceIds: vertex.owners.map((owner) => owner.id).sort(compare),\n edgeIds: edges\n .filter((edge) => edge.vertexIds.includes(vertexIds.get(key)!))\n .map((edge) => edge.id),\n }))\n .sort((a, b) => compare(a.id, b.id));\n const requireSpace = (id: SpaceId) => {\n const space = spacesById.get(id);\n if (!space)\n throw new Error(`Unknown space '${id}' on board '${board.id}'.`);\n return space;\n };\n const selectedIds = (coordinates: Iterable<AxialCoordinate>): SpaceId[] =>\n Array.from(coordinates).flatMap((coordinate) => {\n const space = spacesByCoordinate.get(coordinateKey(coordinate));\n return space ? [space.id] : [];\n });\n return {\n edges,\n vertices,\n neighbors(id: SpaceId) {\n requireSpace(id);\n return edges\n .filter((edge) => edge.spaceIds.includes(id))\n .flatMap((edge) =>\n edge.spaceIds.filter((other) => other !== id),\n ) as SpaceId[];\n },\n distance(from: SpaceId, to: SpaceId) {\n return grid.distance(requireSpace(from), requireSpace(to));\n },\n ring(id: SpaceId, radius: number) {\n return selectedIds(\n new Grid(\n hexClass(orientation),\n ringTraversal({ center: requireSpace(id), radius }),\n ),\n );\n },\n line(from: SpaceId, to: SpaceId) {\n return selectedIds(\n new Grid(\n hexClass(orientation),\n lineTraversal({ start: requireSpace(from), stop: requireSpace(to) }),\n ),\n );\n },\n edgesOf(id: SpaceId) {\n requireSpace(id);\n return edgesBySpace.get(id)!.map((key) => edgeIds.get(key)!);\n },\n verticesOf(id: SpaceId) {\n requireSpace(id);\n return cornersBySpace.get(id)!.map((key) => vertexIds.get(key)!);\n },\n edgeAt(id: SpaceId, side: 0 | 1 | 2 | 3 | 4 | 5) {\n requireSpace(id);\n const key = edgesBySpace.get(id)![side];\n if (!key)\n throw new Error(\"Hex side must be an integer from 0 through 5.\");\n return edgeIds.get(key)!;\n },\n vertexAt(id: SpaceId, corner: 0 | 1 | 2 | 3 | 4 | 5) {\n requireSpace(id);\n const key = cornersBySpace.get(id)![corner];\n if (!key)\n throw new Error(\"Hex corner must be an integer from 0 through 5.\");\n return vertexIds.get(key)!;\n },\n edge(a: SpaceId, b: SpaceId) {\n requireSpace(a);\n requireSpace(b);\n const edge = edges.find(\n (edge) =>\n edge.spaceIds.length === 2 &&\n edge.spaceIds.includes(a) &&\n edge.spaceIds.includes(b),\n );\n if (!edge || a === b)\n throw new Error(`Spaces '${a}' and '${b}' do not share an edge.`);\n return edge.id;\n },\n vertex(a: SpaceId, b: SpaceId, c: SpaceId) {\n requireSpace(a);\n requireSpace(b);\n requireSpace(c);\n const vertex = vertices.find(\n (vertex) =>\n vertex.spaceIds.length === 3 &&\n [a, b, c].every((id) => vertex.spaceIds.includes(id)),\n );\n if (!vertex || new Set([a, b, c]).size !== 3)\n throw new Error(\"Spaces do not share exactly one vertex.\");\n return vertex.id;\n },\n incidentEdges(vertexId: HexVertexId<BoardId>) {\n const vertex = vertices.find((vertex) => vertex.id === vertexId);\n if (!vertex) throw new Error(`Unknown vertex '${vertexId}'.`);\n return vertex.edgeIds;\n },\n incidentVertices(edgeId: HexEdgeId<BoardId>) {\n const edge = edges.find((edge) => edge.id === edgeId);\n if (!edge) throw new Error(`Unknown edge '${edgeId}'.`);\n return edge.vertexIds;\n },\n spacesAt(vertexId: HexVertexId<BoardId>) {\n const vertex = vertices.find((vertex) => vertex.id === vertexId);\n if (!vertex) throw new Error(`Unknown vertex '${vertexId}'.`);\n return vertex.spaceIds as SpaceId[];\n },\n spacesAlong(edgeId: HexEdgeId<BoardId>) {\n const edge = edges.find((edge) => edge.id === edgeId);\n if (!edge) throw new Error(`Unknown edge '${edgeId}'.`);\n return edge.spaceIds as SpaceId[];\n },\n getLayout({\n hexSize,\n origin = { x: 0, y: 0 },\n }: {\n hexSize: number;\n origin?: Point;\n }) {\n if (!Number.isFinite(hexSize) || hexSize <= 0)\n throw new Error(\"hexSize must be positive and finite.\");\n const scaled = new Grid(hexClass(orientation, hexSize), spaces);\n const layoutSpaces = spaces.map((space) => {\n const hex = scaled.getHex(space)!;\n return {\n id: space.id,\n center: { x: hex.x + origin.x, y: hex.y + origin.y },\n corners: hex.corners.map((point) => ({\n x: point.x + origin.x,\n y: point.y + origin.y,\n })),\n };\n });\n const points = layoutSpaces.flatMap((space) => space.corners);\n const minX = points.length\n ? Math.min(...points.map((point) => point.x))\n : 0;\n const minY = points.length\n ? Math.min(...points.map((point) => point.y))\n : 0;\n const maxX = points.length\n ? Math.max(...points.map((point) => point.x))\n : 0;\n const maxY = points.length\n ? Math.max(...points.map((point) => point.y))\n : 0;\n const vertexPoints = new Map(\n [...cornerOwners].map(([key, vertex]) => [\n vertexIds.get(key)!,\n {\n x: vertex.point.x * hexSize + origin.x,\n y: vertex.point.y * hexSize + origin.y,\n },\n ]),\n );\n return {\n viewBox: { x: minX, y: minY, width: maxX - minX, height: maxY - minY },\n spaces: layoutSpaces,\n edges: edges.map((edge) => ({\n id: edge.id,\n from: vertexPoints.get(edge.vertexIds[0])!,\n to: vertexPoints.get(edge.vertexIds[1])!,\n })),\n vertices: vertices.map((vertex) => ({\n id: vertex.id,\n center: vertexPoints.get(vertex.id)!,\n })),\n pointToSpace(point: Point) {\n const hex = scaled.pointToHex(\n { x: point.x - origin.x, y: point.y - origin.y },\n { allowOutside: false },\n );\n return hex\n ? spacesByCoordinate.get(coordinateKey(hex))?.id\n : undefined;\n },\n };\n },\n };\n}\n\nexport function resolveHexSpaces(\n board: import(\"./domain/contracts.js\").HexBoardSpec,\n): import(\"./domain/contracts.js\").HexSpaceSpec[] {\n const excluded = new Set((board.exclude ?? []).map(coordinateKey));\n const coordinates = hexShapeCoordinates(\n board.shape,\n board.orientation,\n ).filter((coordinate) => !excluded.has(coordinateKey(coordinate)));\n const known = new Set(coordinates.map(coordinateKey));\n for (const key of Object.keys(board.spaces ?? {})) {\n if (!known.has(key))\n throw new Error(\n `Hex board '${board.id}' overrides coordinate '${key}' outside its shape.`,\n );\n }\n return coordinates\n .map((coordinate) => {\n const key = coordinateKey(coordinate) as `${number},${number}`;\n return {\n ...coordinate,\n ...board.spaces?.[key],\n id: board.spaces?.[key]?.id ?? key,\n };\n })\n .sort((a, b) => compare(a.id, b.id));\n}\n","import { sha256 } from \"@noble/hashes/sha2.js\";\nimport { bytesToHex, utf8ToBytes } from \"@noble/hashes/utils.js\";\n\nimport { RuntimeJsonSchema, type RuntimeJson } from \"../runtime-json.js\";\n\nexport function canonicalizePluginRuntimeJson(value: unknown): RuntimeJson {\n return canonicalizeJson(\n RuntimeJsonSchema.parse(omitOptionalProperties(value)),\n );\n}\n\nexport function encodeCanonicalPluginRuntimeJson(value: unknown): string {\n return JSON.stringify(canonicalizePluginRuntimeJson(value));\n}\n\nexport function digestPluginRuntimeJson(value: unknown): string {\n return `sha256:${sha256Hex(encodeCanonicalPluginRuntimeJson(value))}`;\n}\n\nfunction canonicalizeJson(value: RuntimeJson): RuntimeJson {\n if (\n value === null ||\n typeof value === \"boolean\" ||\n typeof value === \"string\"\n ) {\n return value;\n }\n if (typeof value === \"number\") return value;\n if (Array.isArray(value)) {\n return value.map((item) => canonicalizeJson(item));\n }\n return Object.fromEntries(\n Object.entries(value)\n .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))\n .map(([key, item]) => [key, canonicalizeJson(item)]),\n );\n}\n\n// Authored descriptors may explicitly carry undefined optional properties.\n// Omit only those JSON object fields; z.json rejects every other unsupported value.\nfunction omitOptionalProperties(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(omitOptionalProperties);\n if (\n value !== null &&\n typeof value === \"object\" &&\n (Object.getPrototypeOf(value) === Object.prototype ||\n Object.getPrototypeOf(value) === null)\n ) {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, item]) => item !== undefined)\n .map(([key, item]) => [key, omitOptionalProperties(item)]),\n );\n }\n return value;\n}\n\nfunction sha256Hex(input: string): string {\n return bytesToHex(sha256(utf8ToBytes(input)));\n}\n"],"mappings":"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","names":["z","z","z","z","key","edge","vertex"]}
@@ -13,11 +13,11 @@ import {
13
13
  SystemActionEventSchema,
14
14
  canonicalizePluginRuntimeJson,
15
15
  digestPluginRuntimeJson
16
- } from "./chunk-XU6WJW6K.js";
16
+ } from "./chunk-K75F5UIJ.js";
17
17
 
18
18
  // src/shared/protocol/protocol.ts
19
19
  var DREAMBOARD_PLUGIN_PROTOCOL = "dreamboard-plugin";
20
- var DREAMBOARD_PLUGIN_PROTOCOL_VERSION = 6;
20
+ var DREAMBOARD_PLUGIN_PROTOCOL_VERSION = 7;
21
21
 
22
22
  // src/shared/protocol/schema.ts
23
23
  import { z } from "zod";
@@ -40,6 +40,7 @@ var PluginSessionDescriptorSchema = z.object({
40
40
  var ZoneHandlesSnapshotSchema = z.object({
41
41
  cardIds: z.array(z.string()),
42
42
  cardViewsById: z.record(z.string(), z.string()),
43
+ cardBacksById: z.record(z.string(), z.string()),
43
44
  playableByCardId: z.record(
44
45
  z.string(),
45
46
  z.array(InteractionDescriptorSchema)
@@ -252,6 +253,7 @@ function hydrateZones(registry, value, path) {
252
253
  {
253
254
  cardIds: zone.cardIds,
254
255
  cardViewsById: zone.cardViewsById,
256
+ cardBacksById: zone.cardBacksById,
255
257
  playableByCardId: Object.fromEntries(
256
258
  Object.entries(zone.playableByCardId).map(([cardId, refs]) => [
257
259
  cardId,
@@ -544,6 +546,12 @@ function withCardImageUrls(frame, urls) {
544
546
  cardId,
545
547
  resolve(encoded)
546
548
  ])
549
+ ),
550
+ cardBacksById: Object.fromEntries(
551
+ Object.entries(zone.cardBacksById).map(([cardId, path]) => [
552
+ cardId,
553
+ urls[path] ?? path
554
+ ])
547
555
  )
548
556
  }
549
557
  ])
@@ -587,4 +595,4 @@ export {
587
595
  digestPluginCommandRequest,
588
596
  materializePluginGameplayFrame
589
597
  };
590
- //# sourceMappingURL=chunk-UG2Q4NLG.js.map
598
+ //# sourceMappingURL=chunk-N37D7NPB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/shared/protocol/protocol.ts","../src/shared/protocol/schema.ts","../src/headless/sources/static.ts","../src/shared/protocol/digest.ts","../src/shared/protocol/projection.ts","../src/headless/sources/lifecycle.ts"],"sourcesContent":["import type {\n GameplayBasis,\n InteractionDescriptor,\n PluginGameplayFrame,\n PluginSessionDescriptor,\n} from \"./frame.js\";\nimport type { RuntimeJson } from \"../runtime-json.js\";\n\nexport const DREAMBOARD_PLUGIN_PROTOCOL = \"dreamboard-plugin\" as const;\nexport const DREAMBOARD_PLUGIN_PROTOCOL_VERSION = 7 as const;\n\nexport type InteractionResult =\n | {\n readonly type: \"interaction.result\";\n readonly clientActionId: string;\n readonly accepted: true;\n }\n | {\n readonly type: \"interaction.result\";\n readonly clientActionId: string;\n readonly accepted: false;\n readonly errorCode: string;\n readonly message?: string;\n };\n\nexport interface SubmitInteractionCommand {\n readonly type: \"interaction.submit\";\n readonly clientActionId: string;\n readonly basis: GameplayBasis;\n readonly interactionId: string;\n readonly params: RuntimeJson;\n}\n\nexport interface CancelInteractionCommand {\n readonly type: \"interaction.cancel\";\n readonly clientActionId: string;\n readonly basis: GameplayBasis;\n readonly interactionId: string;\n}\n\nexport type HostToPluginPayload =\n | {\n readonly type: \"runtime.init\";\n readonly session: PluginSessionDescriptor;\n }\n | {\n readonly type: \"gameplay.frame\";\n readonly frame: PluginGameplayFrame;\n }\n | InteractionResult;\n\nexport type PluginToHostPayload =\n | { readonly type: \"runtime.ready\" }\n | { readonly type: \"runtime.resume\" }\n | {\n readonly type: \"runtime.ack\";\n /** Echoes the host envelope sequence. It is delivery order only. */\n readonly sequence: number;\n readonly clientReceivedAtMs?: number;\n readonly clientRenderedAtMs?: number;\n }\n | SubmitInteractionCommand\n | CancelInteractionCommand\n | {\n readonly type: \"runtime.error\";\n readonly message: string;\n readonly code?: string;\n };\n\nexport interface PluginProtocolEnvelope<Payload> {\n readonly protocol: typeof DREAMBOARD_PLUGIN_PROTOCOL;\n readonly version: typeof DREAMBOARD_PLUGIN_PROTOCOL_VERSION;\n readonly channelId: string;\n /** Delivery order only. It is not a game revision. */\n readonly sequence: number;\n readonly payload: Payload;\n}\n\nexport type HostToPluginEnvelope = PluginProtocolEnvelope<HostToPluginPayload>;\nexport type PluginToHostEnvelope = PluginProtocolEnvelope<PluginToHostPayload>;\n\nexport type ActionSetVersionInput = {\n readonly version: number;\n readonly availableInteractions: readonly InteractionDescriptor[];\n};\n","import * as ReducerWireZod from \"../runtime-schema\";\nimport { z } from \"zod\";\nimport {\n DREAMBOARD_PLUGIN_PROTOCOL,\n DREAMBOARD_PLUGIN_PROTOCOL_VERSION,\n} from \"./protocol.js\";\nimport { RuntimeJsonSchema } from \"../runtime-json.js\";\nimport type {\n GameOutcome,\n GameplayBasis,\n PluginGameplayFrame,\n PluginSessionDescriptor,\n ZoneHandlesSnapshot,\n} from \"./frame.js\";\nimport type {\n HostToPluginPayload,\n InteractionResult,\n PluginProtocolEnvelope,\n PluginToHostPayload,\n} from \"./protocol.js\";\n\nexport const BoardStaticProjectionSchema =\n ReducerWireZod.BoardStaticProjectionSchema;\nexport const GameEventDetailSchema = ReducerWireZod.GameEventDetailSchema;\nexport const SystemActionEventSchema = ReducerWireZod.SystemActionEventSchema;\nexport const GameEventSchema = ReducerWireZod.GameEventSchema;\nexport const SeatProjectionBundleSchema =\n ReducerWireZod.SeatProjectionBundleSchema;\n\nexport const PlayerIdSchema = z.string().min(1);\n\nexport const PluginPlayerSummarySchema = z\n .object({\n playerId: PlayerIdSchema,\n displayName: z.string(),\n color: z.string().optional(),\n })\n .strict();\n\nexport const PluginSessionDescriptorSchema = z\n .object({\n sessionId: z.string().min(1),\n players: z.array(PluginPlayerSummarySchema),\n assets: z.record(z.string(), z.instanceof(Blob)).optional(),\n })\n .strict() satisfies z.ZodType<PluginSessionDescriptor>;\n\nexport {\n InteractionCommitPolicySchema,\n InputSelectionSchema,\n InputDomainSchema,\n InteractionChoiceOptionSchema,\n InteractionInputDescriptorSchema,\n InteractionAvailabilitySchema,\n InteractionDescriptorSchema,\n} from \"../interaction-schema.js\";\nimport { InteractionDescriptorSchema } from \"../interaction-schema.js\";\n\nexport const ZoneHandlesSnapshotSchema = z\n .object({\n cardIds: z.array(z.string()),\n cardViewsById: z.record(z.string(), z.string()),\n cardBacksById: z.record(z.string(), z.string()),\n playableByCardId: z.record(\n z.string(),\n z.array(InteractionDescriptorSchema),\n ),\n })\n .strict() satisfies z.ZodType<ZoneHandlesSnapshot>;\n\nexport const SimultaneousPhaseSnapshotSchema =\n ReducerWireZod.SimultaneousPhaseProjectionSchema;\n\nexport const GameplayBasisSchema = z\n .object({\n version: z.number().int().nonnegative(),\n actionSetVersion: z.string().min(1),\n perspectivePlayerId: PlayerIdSchema,\n })\n .strict() satisfies z.ZodType<GameplayBasis>;\n\nexport const GameOutcomeSchema =\n ReducerWireZod.GameOutcomeSchema satisfies z.ZodType<GameOutcome>;\n\nexport const SeatFrameSchema = z\n .object({\n events: z.array(GameEventSchema).max(32),\n view: z.record(z.string(), RuntimeJsonSchema).nullable(),\n flow: z\n .object({\n currentPhase: z.string().nullable(),\n activePlayers: z.array(PlayerIdSchema),\n simultaneousPhase: SimultaneousPhaseSnapshotSchema.nullable(),\n })\n .strict(),\n availableInteractions: z.array(InteractionDescriptorSchema),\n zones: z.record(z.string(), ZoneHandlesSnapshotSchema),\n })\n .strict();\n\nexport const PluginGameplayFrameSchema = SeatFrameSchema.extend({\n basis: GameplayBasisSchema,\n}) satisfies z.ZodType<PluginGameplayFrame>;\n\nexport const InteractionResultSchema = z.discriminatedUnion(\"accepted\", [\n z\n .object({\n type: z.literal(\"interaction.result\"),\n clientActionId: z.string().min(1),\n accepted: z.literal(true),\n })\n .strict(),\n z\n .object({\n type: z.literal(\"interaction.result\"),\n clientActionId: z.string().min(1),\n accepted: z.literal(false),\n errorCode: z.string().min(1),\n message: z.string().optional(),\n })\n .strict(),\n]) satisfies z.ZodType<InteractionResult>;\n\nexport const SubmitInteractionCommandSchema = z\n .object({\n type: z.literal(\"interaction.submit\"),\n clientActionId: z.string().min(1),\n basis: GameplayBasisSchema,\n interactionId: z.string().min(1),\n params: RuntimeJsonSchema,\n })\n .strict();\n\nexport const CancelInteractionCommandSchema =\n SubmitInteractionCommandSchema.omit({ params: true })\n .extend({ type: z.literal(\"interaction.cancel\") })\n .strict();\n\nexport const HostToPluginPayloadSchema = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"runtime.init\"),\n session: PluginSessionDescriptorSchema,\n })\n .strict(),\n z\n .object({\n type: z.literal(\"gameplay.frame\"),\n frame: PluginGameplayFrameSchema,\n })\n .strict(),\n InteractionResultSchema,\n]) satisfies z.ZodType<HostToPluginPayload>;\n\nexport const PluginToHostPayloadSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"runtime.ready\") }).strict(),\n z.object({ type: z.literal(\"runtime.resume\") }).strict(),\n z\n .object({\n type: z.literal(\"runtime.ack\"),\n sequence: z.number().int().nonnegative(),\n clientReceivedAtMs: z.number().finite().optional(),\n clientRenderedAtMs: z.number().finite().optional(),\n })\n .strict(),\n SubmitInteractionCommandSchema,\n CancelInteractionCommandSchema,\n z\n .object({\n type: z.literal(\"runtime.error\"),\n message: z.string(),\n code: z.string().optional(),\n })\n .strict(),\n]) satisfies z.ZodType<PluginToHostPayload>;\n\nexport function createPluginProtocolEnvelopeSchema<Payload>(\n payloadSchema: z.ZodType<Payload>,\n): z.ZodType<PluginProtocolEnvelope<Payload>> {\n return z\n .object({\n protocol: z.literal(DREAMBOARD_PLUGIN_PROTOCOL),\n version: z.literal(DREAMBOARD_PLUGIN_PROTOCOL_VERSION),\n channelId: z.string().min(1),\n sequence: z.number().int().nonnegative(),\n payload: payloadSchema,\n })\n .strict();\n}\n\nexport const HostToPluginEnvelopeSchema = createPluginProtocolEnvelopeSchema(\n HostToPluginPayloadSchema,\n);\n\nexport const PluginToHostEnvelopeSchema = createPluginProtocolEnvelopeSchema(\n PluginToHostPayloadSchema,\n);\n\nexport function parsePluginSessionDescriptor(\n value: unknown,\n): PluginSessionDescriptor {\n return PluginSessionDescriptorSchema.parse(value);\n}\n\nexport function parsePluginGameplayFrame(value: unknown): PluginGameplayFrame {\n return PluginGameplayFrameSchema.parse(value);\n}\n\nexport function parseHostToPluginEnvelope(\n value: unknown,\n): PluginProtocolEnvelope<HostToPluginPayload> {\n return HostToPluginEnvelopeSchema.parse(value);\n}\n\nexport function parsePluginToHostEnvelope(\n value: unknown,\n): PluginProtocolEnvelope<PluginToHostPayload> {\n return PluginToHostEnvelopeSchema.parse(value);\n}\n","import { createStore } from \"@tanstack/store\";\nimport { z } from \"zod\";\nimport {\n SeatFrameSchema,\n PluginPlayerSummarySchema,\n} from \"../../shared/protocol/schema.js\";\nimport { immutableCopy } from \"./immutable.js\";\nimport type { GameSource, SourceSnapshot, SourceState } from \"./types.js\";\n\nexport const SourceSnapshotSchema = z\n .object({\n me: z.string().min(1),\n players: z.array(PluginPlayerSummarySchema),\n frame: SeatFrameSchema,\n version: z.number().int().nonnegative(),\n })\n .strict();\n\n/** A read-only fixture source accepts the public seat snapshot, never wire basis. */\nexport function staticSource(input: SourceSnapshot): GameSource {\n const snapshot = immutableCopy(SourceSnapshotSchema.parse(input));\n if (!snapshot.players.some((player) => player.playerId === snapshot.me))\n throw new Error(\"Gameplay seat is absent from session.\");\n const store = createStore<SourceState>(\n Object.freeze({\n snapshot,\n connection: \"ready\",\n request: null,\n failure: null,\n }),\n );\n return {\n store: {\n get: () => store.get(),\n subscribe: (listener) => store.subscribe(listener),\n },\n dispose() {\n store.setState((state) =>\n Object.freeze({\n snapshot: state.snapshot,\n connection: \"closed\",\n request: null,\n failure: null,\n }),\n );\n },\n };\n}\n","import type { PluginGameplayFrame } from \"./frame.js\";\nimport {\n type ActionSetVersionInput,\n type SubmitInteractionCommand,\n type CancelInteractionCommand,\n} from \"./protocol.js\";\nimport {\n canonicalizePluginRuntimeJson,\n digestPluginRuntimeJson,\n encodeCanonicalPluginRuntimeJson,\n} from \"./json.js\";\n\nexport {\n canonicalizePluginRuntimeJson,\n digestPluginRuntimeJson,\n encodeCanonicalPluginRuntimeJson,\n};\n\nexport function computePluginActionSetVersion(\n input: ActionSetVersionInput,\n): string {\n return digestPluginRuntimeJson({\n digestVersion: \"plugin-action-set@5\",\n version: input.version,\n availableInteractions: input.availableInteractions,\n });\n}\n\nexport function digestPluginGameplayFrame(frame: PluginGameplayFrame): string {\n return digestPluginRuntimeJson({\n digestVersion: \"plugin-gameplay-frame@5\",\n frame,\n });\n}\n\nexport function digestPluginCommandRequest(\n command: SubmitInteractionCommand | CancelInteractionCommand,\n): string {\n return digestPluginRuntimeJson({\n digestVersion: \"plugin-command-request@5\",\n command,\n });\n}\n","import { canonicalizePluginRuntimeJson } from \"./json\";\nimport {\n BoardStaticProjectionSchema,\n PluginGameplayFrameSchema,\n SeatProjectionBundleSchema,\n} from \"./schema.js\";\nimport type {\n InteractionDescriptor,\n PlayerId,\n PluginGameplayFrame,\n ReducerBoardStaticProjection,\n ReducerSeatProjectionBundle,\n ZoneHandlesSnapshot,\n} from \"./frame.js\";\nimport type { RuntimeJson } from \"../runtime-json.js\";\n\nexport interface MaterializePluginGameplayFrameInput {\n readonly currentPhase: string | null;\n readonly activePlayers: readonly PlayerId[];\n readonly dynamicProjection: ReducerSeatProjectionBundle;\n readonly staticProjection?: ReducerBoardStaticProjection | null;\n readonly perspectivePlayerId: PlayerId;\n\n readonly version: number;\n readonly actionSetVersion: string;\n}\n\nexport function materializePluginGameplayFrame(\n input: MaterializePluginGameplayFrameInput,\n): PluginGameplayFrame {\n const dynamicProjection = SeatProjectionBundleSchema.parse(\n canonicalizePluginRuntimeJson(input.dynamicProjection),\n );\n const staticProjection =\n input.staticProjection == null\n ? null\n : BoardStaticProjectionSchema.parse(\n canonicalizePluginRuntimeJson(input.staticProjection),\n );\n\n const registry = dynamicProjection.interactionsByRef ?? {};\n const seat = dynamicProjection.seats[input.perspectivePlayerId] ?? null;\n\n const availableInteractions =\n seat == null\n ? []\n : hydrateInteractionRefs(\n registry,\n seat.availableInteractionRefs ?? [],\n \"availableInteractionRefs\",\n );\n const zones =\n seat?.zones == null ? {} : hydrateZones(registry, seat.zones, \"zones\");\n\n const frame = {\n events: dynamicProjection.events,\n basis: {\n version: input.version,\n actionSetVersion: input.actionSetVersion,\n perspectivePlayerId: input.perspectivePlayerId,\n },\n view: materializeView(staticProjection, seat?.view),\n flow: {\n currentPhase: input.currentPhase,\n activePlayers: [...input.activePlayers],\n simultaneousPhase: dynamicProjection.simultaneousPhase ?? null,\n },\n availableInteractions,\n zones,\n } satisfies PluginGameplayFrame;\n\n return PluginGameplayFrameSchema.parse(frame);\n}\n\nfunction materializeView(\n staticProjection: ReducerBoardStaticProjection | null,\n seatView: unknown,\n): RuntimeJson | null {\n const parts = [staticProjection?.view, seatView].filter(\n (part) => part !== undefined && part !== null,\n );\n if (parts.length === 0) return null;\n // Admitting schemas guarantee records and reject authored `boards` fields.\n return Object.assign({}, ...parts) as Record<string, RuntimeJson>;\n}\n\nfunction hydrateZones(\n registry: Readonly<Record<string, InteractionDescriptor>>,\n value: NonNullable<ReducerSeatProjectionBundle[\"seats\"][string][\"zones\"]>,\n path: string,\n): Record<string, ZoneHandlesSnapshot> {\n return Object.fromEntries(\n Object.entries(value).map(([zoneId, zone]) => [\n zoneId,\n {\n cardIds: zone.cardIds,\n cardViewsById: zone.cardViewsById,\n cardBacksById: zone.cardBacksById,\n playableByCardId: Object.fromEntries(\n Object.entries(zone.playableByCardId).map(([cardId, refs]) => [\n cardId,\n hydrateInteractionRefs(\n registry,\n refs,\n `${path}.${zoneId}.playableByCardId.${cardId}`,\n ),\n ]),\n ),\n },\n ]),\n );\n}\n\nfunction hydrateInteractionRefs(\n registry: Readonly<Record<string, InteractionDescriptor>>,\n value: readonly string[],\n path: string,\n): InteractionDescriptor[] {\n return value.map((ref, index) => {\n const descriptor = registry[ref];\n if (!descriptor) {\n throw new Error(\n `Seat projection ${path}[${index}] references '${ref}', which is missing from interactionsByRef.`,\n );\n }\n return descriptor;\n });\n}\n","import { createStore } from \"@tanstack/store\";\nimport { z } from \"zod\";\nimport type { ViewCard } from \"../../shared/domain/cards.js\";\nimport {\n PluginGameplayFrameSchema,\n PluginSessionDescriptorSchema,\n InteractionResultSchema,\n PluginToHostPayloadSchema,\n} from \"../../shared/protocol/schema.js\";\nimport type {\n GameplayBasis,\n PluginGameplayFrame,\n PluginSessionDescriptor,\n} from \"../../shared/protocol/frame.js\";\nimport { immutableCopy } from \"./immutable.js\";\nimport type {\n CommandSource,\n SourceCommand,\n SourceContext,\n SourceState,\n SubmitResult,\n} from \"./types.js\";\n\ninterface Pending {\n readonly command: SourceCommand;\n readonly resolve: (result: SubmitResult) => void;\n readonly reject: (error: Error) => void;\n accepted: boolean;\n}\n\nconst CardImageViewSchema = z.looseObject({\n frontImage: z.string().optional(),\n backImage: z.string().optional(),\n}) satisfies z.ZodType<Pick<ViewCard, \"frontImage\" | \"backImage\">>;\n\n/** Adapter-private lifecycle. Transport callbacks must belong to this lifetime. */\nexport function createSourceLifecycle(options: {\n context?: SourceContext;\n send(command: SourceCommand): void;\n recover(): void;\n close(): void;\n timeoutMs?: number;\n}) {\n let context = options.context ? immutableCopy(options.context) : null;\n const store = createStore<SourceState>(\n Object.freeze({\n snapshot: null,\n connection: \"connecting\",\n request: null,\n failure: null,\n }),\n );\n let session: Omit<PluginSessionDescriptor, \"assets\"> | null = null;\n let assetUrls: Readonly<Record<string, string>> | null = null;\n let basis: GameplayBasis | null = null;\n let pending: Pending | null = null;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let recovered = false;\n let closed = false;\n const clearTimer = () => {\n clearTimeout(timer);\n timer = undefined;\n };\n const publish = (state: SourceState) => {\n if (state.request) Object.freeze(state.request);\n store.setState(() => Object.freeze(state));\n };\n const recovering = () => {\n if (closed) return;\n publish({ ...store.get(), connection: \"recovering\", failure: null });\n };\n const close = (failure: Error | null) => {\n if (closed) return;\n closed = true;\n clearTimer();\n for (const url of Object.values(assetUrls ?? {})) URL.revokeObjectURL(url);\n pending?.reject(failure ?? new Error(\"Gameplay source disposed.\"));\n pending = null;\n options.close();\n const snapshot = store.get().snapshot;\n publish(\n failure\n ? {\n connection: \"failed\",\n snapshot,\n request: null,\n failure: Object.freeze(failure),\n }\n : { connection: \"closed\", snapshot, request: null, failure: null },\n );\n };\n const fail = (error: Error) => close(error);\n const arm = () => {\n clearTimer();\n timer = setTimeout(() => {\n if (recovered) {\n fail(new Error(\"Gameplay source recovery timed out.\"));\n return;\n }\n recovered = true;\n recovering();\n try {\n options.recover();\n if (pending && !pending.accepted) options.send(pending.command);\n arm();\n } catch (error) {\n fail(asError(error));\n }\n }, options.timeoutMs ?? 10_000);\n };\n const finishBarrier = () => {\n if (!pending?.accepted) return;\n const frame = store.get().snapshot;\n if (!frame || frame.version <= pending.command.basis.version) return;\n clearTimer();\n pending = null;\n publish({\n snapshot: frame,\n request: null,\n connection: \"ready\",\n failure: null,\n });\n };\n const start = async (\n operation: \"submit\" | \"cancel\",\n interactionId: string,\n params?: unknown,\n ) => {\n const state = store.get();\n if (closed || state.connection !== \"ready\" || !basis)\n return Promise.reject(new Error(\"Gameplay source is not open.\"));\n if (pending)\n return Promise.reject(\n new Error(\"A gameplay interaction is already pending.\"),\n );\n const command = immutableCopy(\n PluginToHostPayloadSchema.parse({\n type:\n operation === \"cancel\" ? \"interaction.cancel\" : \"interaction.submit\",\n clientActionId: crypto.randomUUID(),\n basis,\n interactionId,\n ...(operation === \"cancel\" ? {} : { params }),\n }) as SourceCommand,\n );\n recovered = false;\n const promise = new Promise<SubmitResult>((resolve, reject) => {\n pending = { command, resolve, reject, accepted: false };\n });\n publish({\n ...state,\n request: {\n interactionId,\n operation,\n phase: \"awaiting-result\",\n },\n });\n arm();\n try {\n options.send(command);\n } catch (error) {\n fail(asError(error));\n }\n return promise;\n };\n const source: CommandSource = {\n store: {\n get: () => store.get(),\n subscribe: (listener) => store.subscribe(listener),\n },\n submit: (interactionId, params) => start(\"submit\", interactionId, params),\n cancel: (interactionId) => start(\"cancel\", interactionId),\n dispose: () => close(null),\n };\n return {\n source,\n retry() {\n if (closed || !pending) return;\n try {\n if (pending.accepted) options.recover();\n else options.send(pending.command);\n } catch (error) {\n fail(asError(error));\n }\n },\n fail,\n recovering,\n session(value: unknown) {\n if (closed) return;\n const { assets, ...parsed } = PluginSessionDescriptorSchema.parse(value);\n if (\n (context?.sessionId ?? session?.sessionId) &&\n parsed.sessionId !== (context?.sessionId ?? session?.sessionId)\n ) {\n fail(new Error(\"Gameplay session changed.\"));\n return;\n }\n if (\n context &&\n !parsed.players.some((player) => player.playerId === context!.playerId)\n ) {\n fail(new Error(\"Gameplay seat is absent from session.\"));\n return;\n }\n session = immutableCopy(parsed);\n // Hosts repeat initialization until ready; the first delivery wins.\n assetUrls ??= Object.fromEntries(\n Object.entries(assets ?? {}).map(([path, blob]) => [\n path,\n URL.createObjectURL(blob),\n ]),\n );\n },\n frame(value: unknown) {\n if (closed) return;\n const parsed = PluginGameplayFrameSchema.parse(value);\n if (!session) {\n fail(new Error(\"Gameplay frame arrived before session metadata.\"));\n return;\n }\n context ??= {\n sessionId: session.sessionId,\n playerId: parsed.basis.perspectivePlayerId,\n };\n if (parsed.basis.perspectivePlayerId !== context.playerId) {\n fail(new Error(\"Gameplay perspective changed.\"));\n return;\n }\n if (\n !session.players.some((player) => player.playerId === context!.playerId)\n ) {\n fail(new Error(\"Gameplay seat is absent from session.\"));\n return;\n }\n if (basis && parsed.basis.version < basis.version) return;\n const { basis: nextBasis, ...frame } = immutableCopy(\n withCardImageUrls(parsed, assetUrls),\n );\n basis = nextBasis;\n publish({\n failure: null,\n request: store.get().request,\n snapshot: Object.freeze({\n me: context.playerId,\n players: session.players,\n frame: Object.freeze(frame),\n version: basis.version,\n }),\n connection: \"ready\",\n });\n finishBarrier();\n },\n result(value: unknown) {\n if (closed) return;\n const result = InteractionResultSchema.parse(value);\n if (\n !pending ||\n result.clientActionId !== pending.command.clientActionId ||\n pending.accepted\n )\n return;\n pending.resolve(\n immutableCopy(\n result.accepted\n ? { accepted: true }\n : {\n accepted: false,\n errorCode: result.errorCode,\n ...(result.message === undefined\n ? {}\n : { message: result.message }),\n },\n ),\n );\n if (!result.accepted) {\n clearTimer();\n pending = null;\n publish({\n snapshot: store.get().snapshot!,\n request: null,\n connection: \"ready\",\n failure: null,\n });\n return;\n }\n pending.accepted = true;\n recovered = false;\n const state = store.get();\n // A pending command was submitted from ready, so its snapshot exists.\n publish({\n connection: state.connection === \"recovering\" ? \"recovering\" : \"ready\",\n snapshot: state.snapshot!,\n failure: null,\n request: { ...state.request!, phase: \"awaiting-frame\" },\n });\n arm();\n finishBarrier();\n },\n };\n}\nfunction asError(error: unknown): Error {\n return error instanceof Error ? error : new Error(String(error));\n}\n\n/** Replaces card image paths in card views and hidden card backs with delivered URLs. */\nfunction withCardImageUrls(\n frame: PluginGameplayFrame,\n urls: Readonly<Record<string, string>> | null,\n): PluginGameplayFrame {\n if (urls === null || Object.keys(urls).length === 0) return frame;\n const resolve = (encoded: string) => {\n const card = CardImageViewSchema.parse(JSON.parse(encoded) as unknown);\n for (const key of [\"frontImage\", \"backImage\"] as const) {\n const path = card[key];\n const url = path === undefined ? undefined : urls[path];\n if (url !== undefined) card[key] = url;\n }\n return JSON.stringify(card);\n };\n return {\n ...frame,\n zones: Object.fromEntries(\n Object.entries(frame.zones).map(([zoneId, zone]) => [\n zoneId,\n {\n ...zone,\n cardViewsById: Object.fromEntries(\n Object.entries(zone.cardViewsById).map(([cardId, encoded]) => [\n cardId,\n resolve(encoded),\n ]),\n ),\n cardBacksById: Object.fromEntries(\n Object.entries(zone.cardBacksById).map(([cardId, path]) => [\n cardId,\n urls[path] ?? path,\n ]),\n ),\n },\n ]),\n ),\n };\n}\n"],"mappings":"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","names":["BoardStaticProjectionSchema","GameEventDetailSchema","SystemActionEventSchema","GameEventSchema","SeatProjectionBundleSchema","GameOutcomeSchema","z","z","SeatProjectionBundleSchema","BoardStaticProjectionSchema","createStore","z","z","createStore"]}