@touchcastllc/napster-companion-api-dev 1.6.0-alpha.4 → 1.6.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.
- package/lib/index.esm.js +1 -1
- package/lib/index.js +1 -1
- package/lib/index.standalone.js +1 -1
- package/lib/services/transport/index.d.ts +2 -0
- package/lib/services/transport/types.d.ts +25 -0
- package/lib/services/transport/webrtcTransport.d.ts +12 -0
- package/lib/stores/index.d.ts +1 -1
- package/lib/stores/selectors.d.ts +2 -1
- package/lib/stores/slices/avatarSlice.d.ts +3 -2
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { DataChannelCommand } from "../../types";
|
|
2
|
+
/**
|
|
3
|
+
* The control plane of a session: the channel that carries client commands.
|
|
4
|
+
*
|
|
5
|
+
* Deliberately narrow. It knows nothing about media and nothing about how a
|
|
6
|
+
* session is established — WebRTC implements it over an RTCDataChannel, and a
|
|
7
|
+
* WebSocket session will implement it over the socket itself, carrying the
|
|
8
|
+
* identical command payloads.
|
|
9
|
+
*
|
|
10
|
+
* Session policy (e.g. `stopInteraction`) lives in `sendCommand`, NOT here, so
|
|
11
|
+
* a future implementation cannot forget to honour it.
|
|
12
|
+
*
|
|
13
|
+
* Ownership: whoever creates a transport owns its lifecycle and is responsible
|
|
14
|
+
* for clearing the store slot (`setTransport(null)`) when the underlying
|
|
15
|
+
* connection closes. An implementation must not register its own close handler
|
|
16
|
+
* to do that — it would compete with the owner's.
|
|
17
|
+
*/
|
|
18
|
+
export interface Transport {
|
|
19
|
+
/** Send a command. Returns false when the channel cannot carry it. */
|
|
20
|
+
send(command: DataChannelCommand): boolean;
|
|
21
|
+
/** Whether the control channel is ready to accept commands. */
|
|
22
|
+
isOpen(): boolean;
|
|
23
|
+
/** Close the control channel. */
|
|
24
|
+
close(): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Transport } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Wrap an RTCDataChannel as a {@link Transport}.
|
|
4
|
+
*
|
|
5
|
+
* Framing belongs to the transport, not the caller: a WebSocket session may
|
|
6
|
+
* need a different envelope, and callers should not know which one they are on.
|
|
7
|
+
*
|
|
8
|
+
* The adapter deliberately attaches no event handlers — the WebRTC controller
|
|
9
|
+
* owns the channel's lifecycle and clears the store slot from its own
|
|
10
|
+
* `onclose`. See the spec's "Lifecycle and ownership" section.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createWebRtcTransport(dc: RTCDataChannel): Transport;
|
package/lib/stores/index.d.ts
CHANGED
|
@@ -2,5 +2,5 @@ export { store } from "./store";
|
|
|
2
2
|
export type { RootState } from "./store";
|
|
3
3
|
export { setOnFeaturesUpdateCallback } from "./middleware/featuresUpdateMiddleware";
|
|
4
4
|
export * from "./selectors";
|
|
5
|
-
export { setSessionId,
|
|
5
|
+
export { setSessionId, setTransport, setStopInteraction, setMuted, setAutoMicActive, setVolume, setAvatarSpeaking, setScreenSharing, setUserTalking, setConnectionToken, setCloseConnectionHandler, setSessionTerminatedByServer, resetAvatar, } from "./slices/avatarSlice";
|
|
6
6
|
export { setFeatures, resetFeatures, setDebugMode } from "./slices/appSlice";
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { RootState } from "./index";
|
|
2
2
|
import { FeatureConfig } from "../types";
|
|
3
|
+
import type { Transport } from "../services/transport";
|
|
3
4
|
/**
|
|
4
5
|
* Avatar state selectors
|
|
5
6
|
*/
|
|
6
7
|
export declare const selectSessionId: (state: RootState) => string | undefined;
|
|
7
|
-
export declare const
|
|
8
|
+
export declare const selectTransport: (state: RootState) => Transport | null;
|
|
8
9
|
export declare const selectMuted: (state: RootState) => boolean;
|
|
9
10
|
export declare const selectAutoMicActive: (state: RootState) => boolean;
|
|
10
11
|
export declare const selectAvatarSpeaking: (state: RootState) => boolean;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { Transport } from "../../services/transport";
|
|
1
2
|
export interface AvatarState {
|
|
2
3
|
sessionId?: string;
|
|
3
|
-
|
|
4
|
+
transport: Transport | null;
|
|
4
5
|
stopInteraction: boolean;
|
|
5
6
|
muted: boolean;
|
|
6
7
|
autoMicActive: boolean;
|
|
@@ -12,5 +13,5 @@ export interface AvatarState {
|
|
|
12
13
|
closeConnectionHandler?: () => void;
|
|
13
14
|
sessionTerminatedByServer: boolean;
|
|
14
15
|
}
|
|
15
|
-
export declare const setSessionId: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<string | undefined, "avatar/setSessionId">,
|
|
16
|
+
export declare const setSessionId: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<string | undefined, "avatar/setSessionId">, setTransport: import("@reduxjs/toolkit").ActionCreatorWithPayload<Transport | null, "avatar/setTransport">, setStopInteraction: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setStopInteraction">, setMuted: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setMuted">, setAutoMicActive: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setAutoMicActive">, setVolume: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "avatar/setVolume">, setAvatarSpeaking: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setAvatarSpeaking">, setScreenSharing: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setScreenSharing">, setUserTalking: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setUserTalking">, setConnectionToken: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<string | undefined, "avatar/setConnectionToken">, setCloseConnectionHandler: import("@reduxjs/toolkit").ActionCreatorWithOptionalPayload<(() => void) | undefined, "avatar/setCloseConnectionHandler">, setSessionTerminatedByServer: import("@reduxjs/toolkit").ActionCreatorWithPayload<boolean, "avatar/setSessionTerminatedByServer">, resetAvatar: import("@reduxjs/toolkit").ActionCreatorWithoutPayload<"avatar/resetAvatar">;
|
|
16
17
|
export declare const avatarReducer: import("redux").Reducer<AvatarState>;
|