@smoregg/sdk 2.0.0 → 2.2.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/cjs/controller.cjs +260 -113
- package/dist/cjs/controller.cjs.map +1 -1
- package/dist/cjs/errors.cjs +1 -0
- package/dist/cjs/errors.cjs.map +1 -1
- package/dist/cjs/events.cjs +26 -3
- package/dist/cjs/events.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -7
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/screen.cjs +244 -128
- package/dist/cjs/screen.cjs.map +1 -1
- package/dist/cjs/shared.cjs +34 -0
- package/dist/cjs/shared.cjs.map +1 -0
- package/dist/cjs/testing.cjs +181 -73
- package/dist/cjs/testing.cjs.map +1 -1
- package/dist/cjs/transport/PostMessageTransport.cjs +12 -0
- package/dist/cjs/transport/PostMessageTransport.cjs.map +1 -1
- package/dist/cjs/transport/protocol.cjs +2 -0
- package/dist/cjs/transport/protocol.cjs.map +1 -1
- package/dist/cjs/types.cjs +16 -0
- package/dist/cjs/types.cjs.map +1 -0
- package/dist/esm/controller.js +262 -115
- package/dist/esm/controller.js.map +1 -1
- package/dist/esm/errors.js +1 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/events.js +25 -4
- package/dist/esm/events.js.map +1 -1
- package/dist/esm/index.js +1 -3
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/screen.js +246 -130
- package/dist/esm/screen.js.map +1 -1
- package/dist/esm/shared.js +30 -0
- package/dist/esm/shared.js.map +1 -0
- package/dist/esm/testing.js +181 -73
- package/dist/esm/testing.js.map +1 -1
- package/dist/esm/transport/PostMessageTransport.js +12 -0
- package/dist/esm/transport/PostMessageTransport.js.map +1 -1
- package/dist/esm/transport/protocol.js +2 -1
- package/dist/esm/transport/protocol.js.map +1 -1
- package/dist/esm/types.js +14 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/types/controller.d.ts +1 -1
- package/dist/types/controller.d.ts.map +1 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/events.d.ts +14 -1
- package/dist/types/events.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/screen.d.ts +3 -3
- package/dist/types/screen.d.ts.map +1 -1
- package/dist/types/shared.d.ts +21 -0
- package/dist/types/shared.d.ts.map +1 -0
- package/dist/types/testing.d.ts +65 -4
- package/dist/types/testing.d.ts.map +1 -1
- package/dist/types/transport/PostMessageTransport.d.ts +1 -0
- package/dist/types/transport/PostMessageTransport.d.ts.map +1 -1
- package/dist/types/transport/protocol.d.ts +5 -0
- package/dist/types/transport/protocol.d.ts.map +1 -1
- package/dist/types/types.d.ts +254 -345
- package/dist/types/types.d.ts.map +1 -1
- package/dist/umd/smore-sdk.umd.js +575 -784
- package/dist/umd/smore-sdk.umd.js.map +1 -1
- package/dist/umd/smore-sdk.umd.min.js +1 -1
- package/dist/umd/smore-sdk.umd.min.js.map +1 -1
- package/package.json +7 -1
- package/dist/cjs/config.cjs +0 -13
- package/dist/cjs/config.cjs.map +0 -1
- package/dist/esm/config.js +0 -10
- package/dist/esm/config.js.map +0 -1
- package/dist/types/config.d.ts +0 -35
- package/dist/types/config.d.ts.map +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared utilities for Screen and Controller implementations.
|
|
3
|
+
* Centralizes common logic to eliminate duplication.
|
|
4
|
+
*/
|
|
5
|
+
import type { ControllerInfo } from './types';
|
|
6
|
+
/** Maximum payload size in bytes (64KB). Server silently drops larger payloads. */
|
|
7
|
+
export declare const MAX_PAYLOAD_SIZE = 65536;
|
|
8
|
+
/**
|
|
9
|
+
* Map raw player data from server/bridge to ControllerInfo.
|
|
10
|
+
* Centralizes the name->nickname and character->appearance field mapping.
|
|
11
|
+
*
|
|
12
|
+
* Server sends: { playerIndex, name, connected, character }
|
|
13
|
+
* SDK exposes: { playerIndex, nickname, connected, appearance }
|
|
14
|
+
*/
|
|
15
|
+
export declare function mapPlayerDTO(raw: Record<string, unknown>, fallbackIndex: number): ControllerInfo;
|
|
16
|
+
/**
|
|
17
|
+
* Validate that event payload does not exceed the 64KB server limit.
|
|
18
|
+
* Throws PAYLOAD_TOO_LARGE error if exceeded.
|
|
19
|
+
*/
|
|
20
|
+
export declare function validatePayloadSize(data: unknown): void;
|
|
21
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,mFAAmF;AACnF,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,EAAE,MAAM,GAAG,cAAc,CAOhG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAiBvD"}
|
package/dist/types/testing.d.ts
CHANGED
|
@@ -10,7 +10,69 @@
|
|
|
10
10
|
*
|
|
11
11
|
* @packageDocumentation
|
|
12
12
|
*/
|
|
13
|
-
import type { EventMap,
|
|
13
|
+
import type { EventMap, EventNames, EventData, CharacterAppearance, ControllerInfo, PlayerIndex, GameResults, Screen, Controller, RoomCode } from './types';
|
|
14
|
+
/**
|
|
15
|
+
* Options for creating mock instances.
|
|
16
|
+
*/
|
|
17
|
+
export interface MockOptions {
|
|
18
|
+
/** Initial room code */
|
|
19
|
+
roomCode?: RoomCode;
|
|
20
|
+
/** Initial controllers for Screen mock */
|
|
21
|
+
controllers?: ControllerInfo[];
|
|
22
|
+
/** My index for Controller mock */
|
|
23
|
+
myPlayerIndex?: PlayerIndex;
|
|
24
|
+
/** Auto-trigger ready state */
|
|
25
|
+
autoReady?: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Mock Screen for testing.
|
|
29
|
+
* Extends Screen with additional test utilities.
|
|
30
|
+
*/
|
|
31
|
+
export interface MockScreen<TEvents extends EventMap = EventMap> extends Screen<TEvents> {
|
|
32
|
+
simulateEvent<K extends EventNames<TEvents>>(playerIndex: PlayerIndex, event: K, data: EventData<TEvents, K>): void;
|
|
33
|
+
simulateControllerJoin(info: ControllerInfo): void;
|
|
34
|
+
simulateControllerLeave(playerIndex: PlayerIndex): void;
|
|
35
|
+
simulateControllerDisconnect(playerIndex: PlayerIndex): void;
|
|
36
|
+
simulateControllerReconnect(playerIndex: PlayerIndex): void;
|
|
37
|
+
getBroadcasts(): Array<{
|
|
38
|
+
event: string;
|
|
39
|
+
data: unknown;
|
|
40
|
+
}>;
|
|
41
|
+
getSentToController(playerIndex: PlayerIndex): Array<{
|
|
42
|
+
event: string;
|
|
43
|
+
data: unknown;
|
|
44
|
+
}>;
|
|
45
|
+
clearRecordedEvents(): void;
|
|
46
|
+
triggerReady(): void;
|
|
47
|
+
simulateCharacterUpdate(playerIndex: PlayerIndex, appearance: CharacterAppearance | null): void;
|
|
48
|
+
simulateAllReady(): void;
|
|
49
|
+
simulateError(error: any): void;
|
|
50
|
+
simulateConnectionChange(connected: boolean): void;
|
|
51
|
+
simulateStateChange(playerIndex: number, state: Record<string, any>): void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Mock Controller for testing.
|
|
55
|
+
* Extends Controller with additional test utilities.
|
|
56
|
+
*/
|
|
57
|
+
export interface MockController<TEvents extends EventMap = EventMap> extends Controller<TEvents> {
|
|
58
|
+
simulateEvent<K extends EventNames<TEvents>>(event: K, data: EventData<TEvents, K>): void;
|
|
59
|
+
getSentEvents(): Array<{
|
|
60
|
+
event: string;
|
|
61
|
+
data: unknown;
|
|
62
|
+
}>;
|
|
63
|
+
clearRecordedEvents(): void;
|
|
64
|
+
triggerReady(): void;
|
|
65
|
+
simulatePlayerJoin(playerIndex: PlayerIndex, info: ControllerInfo): void;
|
|
66
|
+
simulatePlayerLeave(playerIndex: PlayerIndex): void;
|
|
67
|
+
simulatePlayerDisconnect(playerIndex: PlayerIndex): void;
|
|
68
|
+
simulatePlayerReconnect(playerIndex: PlayerIndex, info: ControllerInfo): void;
|
|
69
|
+
simulateCharacterUpdate(playerIndex: PlayerIndex, appearance: CharacterAppearance | null): void;
|
|
70
|
+
simulateAllReady(): void;
|
|
71
|
+
simulateError(error: any): void;
|
|
72
|
+
simulateGameOver(results?: GameResults): void;
|
|
73
|
+
simulateConnectionChange(connected: boolean): void;
|
|
74
|
+
simulateStateChange(playerIndex: number, state: Record<string, any>): void;
|
|
75
|
+
}
|
|
14
76
|
/**
|
|
15
77
|
* Create a mock Screen for testing game logic.
|
|
16
78
|
*
|
|
@@ -29,7 +91,7 @@ import type { EventMap, MockScreen, MockController, MockOptions } from './types'
|
|
|
29
91
|
* ],
|
|
30
92
|
* });
|
|
31
93
|
*
|
|
32
|
-
* screen.on('tap', (
|
|
94
|
+
* screen.on('tap', (playerIndex, data) => handleTap(playerIndex, data));
|
|
33
95
|
* screen.onAllReady(() => startGame());
|
|
34
96
|
*
|
|
35
97
|
* // Simulate player input
|
|
@@ -55,7 +117,7 @@ export declare function createMockScreen<TEvents extends EventMap = EventMap>(op
|
|
|
55
117
|
* @example
|
|
56
118
|
* ```ts
|
|
57
119
|
* const controller = createMockController<MyEvents>({
|
|
58
|
-
*
|
|
120
|
+
* myPlayerIndex: 0,
|
|
59
121
|
* });
|
|
60
122
|
*
|
|
61
123
|
* controller.on('your-turn', (data) => handleTurn(data));
|
|
@@ -72,5 +134,4 @@ export declare function createMockScreen<TEvents extends EventMap = EventMap>(op
|
|
|
72
134
|
* ```
|
|
73
135
|
*/
|
|
74
136
|
export declare function createMockController<TEvents extends EventMap = EventMap>(options?: MockOptions): MockController<TEvents>;
|
|
75
|
-
export type { MockScreen, MockController, MockOptions };
|
|
76
137
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,QAAQ,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/testing.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostMessageTransport.d.ts","sourceRoot":"","sources":["../../../src/transport/PostMessageTransport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIhE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,mBAAmB,CAA4B;gBAE3C,YAAY,GAAE,MAAY;IAMtC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"PostMessageTransport.d.ts","sourceRoot":"","sources":["../../../src/transport/PostMessageTransport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAIhE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,oBAAqB,YAAW,SAAS;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,YAAY,CAAmD;IACvE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,mBAAmB,CAA4B;gBAE3C,YAAY,GAAE,MAAY;IAMtC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAsC7C,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,qBAAqB,GAAG,IAAI;IASvD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAQzD,OAAO,IAAI,IAAI;IAMf,OAAO,CAAC,aAAa;CA6BtB"}
|
|
@@ -12,8 +12,11 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import type { CharacterAppearance } from '../types';
|
|
14
14
|
export declare const BRIDGE_MSG_PREFIX: "_bridge:";
|
|
15
|
+
/** Current SDK protocol version. Incremented on breaking protocol changes. */
|
|
16
|
+
export declare const PROTOCOL_VERSION = 1;
|
|
15
17
|
export interface BridgeReadyMessage {
|
|
16
18
|
type: '_bridge:ready';
|
|
19
|
+
protocolVersion?: number;
|
|
17
20
|
}
|
|
18
21
|
/**
|
|
19
22
|
* BridgeInitMessage contains player data sent from the platform to the game iframe.
|
|
@@ -36,6 +39,8 @@ export interface BridgeInitMessage {
|
|
|
36
39
|
character: CharacterAppearance | null;
|
|
37
40
|
}>;
|
|
38
41
|
myIndex?: number;
|
|
42
|
+
protocolVersion?: number;
|
|
43
|
+
gameInProgress?: boolean;
|
|
39
44
|
};
|
|
40
45
|
}
|
|
41
46
|
export interface BridgeEmitMessage {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/transport/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,iBAAiB,EAAG,UAAmB,CAAC;AAErD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../src/transport/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;;;GAIG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,eAAO,MAAM,iBAAiB,EAAG,UAAmB,CAAC;AAErD,8EAA8E;AAC9E,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE;QAEP,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,KAAK,CAAC;YACb,WAAW,EAAE,MAAM,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,OAAO,CAAC;YACnB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,WAAW,EAAE,MAAM,CAAC;YACpB,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,OAAO,CAAC;YACnB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;SACvC,CAAC,CAAC;KACJ,CAAC;CACH;AAED,MAAM,MAAM,aAAa,GACrB,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,mBAAmB,CAAC;AAExB,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAQpE;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC,CA4B7F"}
|