mirror of
https://github.com/hensm/fx_cast.git
synced 2026-06-10 17:49:58 +00:00
Convert shim to Typescript (#32)
This commit is contained in:
@@ -1,28 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
import { AutoJoinPolicy
|
||||
, DefaultActionPolicy } from "../enums";
|
||||
|
||||
export default class ApiConfig {
|
||||
constructor (
|
||||
sessionRequest
|
||||
, sessionListener
|
||||
, receiverListener
|
||||
, opt_autoJoinPolicy = AutoJoinPolicy.TAB_AND_ORIGIN_SCOPED
|
||||
, opt_defaultActionPolicy = DefaultActionPolicy.CREATE_SESSION
|
||||
// TODO: Remove awful hack for mirror casting
|
||||
, selectedMedia = "app") {
|
||||
|
||||
this.autoJoinPolicy = opt_autoJoinPolicy;
|
||||
this.defaultActionPolicy = opt_defaultActionPolicy;
|
||||
this.receiverListener = receiverListener;
|
||||
this.sessionListener = sessionListener;
|
||||
this.sessionRequest = sessionRequest;
|
||||
|
||||
this.additionalSessionRequests = [];
|
||||
this.customDialLaunchCallback = null;
|
||||
this.invisibleSender = false;
|
||||
|
||||
this._selectedMedia = selectedMedia;
|
||||
}
|
||||
};
|
||||
25
ext/src/shim/cast/classes/ApiConfig.ts
Executable file
25
ext/src/shim/cast/classes/ApiConfig.ts
Executable file
@@ -0,0 +1,25 @@
|
||||
"use strict";
|
||||
|
||||
import Session from "./Session";
|
||||
import SessionRequest from "./SessionRequest";
|
||||
|
||||
import { AutoJoinPolicy
|
||||
, DefaultActionPolicy } from "../enums";
|
||||
|
||||
|
||||
export default class ApiConfig {
|
||||
public additionalSessionRequests: any[] = [];
|
||||
public customDialLaunchCallback: any = null;
|
||||
public invisibleSender = false;
|
||||
|
||||
constructor (
|
||||
public sessionRequest: SessionRequest
|
||||
, public sessionListener: (session: Session) => void
|
||||
, public receiverListener: (availability: string) => void
|
||||
, public autoJoinPolicy: string = AutoJoinPolicy.TAB_AND_ORIGIN_SCOPED
|
||||
, public defaultActionPolicy: string = DefaultActionPolicy.CREATE_SESSION
|
||||
|
||||
// TODO: Remove awful hack for mirror casting
|
||||
, public _selectedMedia: string = "app") {
|
||||
}
|
||||
};
|
||||
@@ -1,12 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.DialRequest
|
||||
export default class DialRequest {
|
||||
constructor (
|
||||
appName
|
||||
, opt_launchParameter = null) {
|
||||
|
||||
this.appName = appName;
|
||||
this.launchParameter = opt_launchParameter;
|
||||
}
|
||||
};
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.DialRequest
|
||||
export default class DialRequest {
|
||||
constructor (
|
||||
public appName: string
|
||||
, public launchParameter: string = null) {
|
||||
}
|
||||
};
|
||||
@@ -1,14 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Error
|
||||
export default class Error {
|
||||
constructor (
|
||||
code
|
||||
, opt_description = null
|
||||
, opt_details = null) {
|
||||
|
||||
this.code = code;
|
||||
this.description = opt_description;
|
||||
this.details = opt_details;
|
||||
}
|
||||
};
|
||||
10
ext/src/shim/cast/classes/Error.ts
Executable file
10
ext/src/shim/cast/classes/Error.ts
Executable file
@@ -0,0 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Error
|
||||
export default class Error {
|
||||
constructor (
|
||||
public code: string
|
||||
, public description: string = null
|
||||
, public details: any = null) {
|
||||
}
|
||||
};
|
||||
@@ -1,11 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Image
|
||||
export default class Image {
|
||||
width = null;
|
||||
height = null;
|
||||
|
||||
constructor (url) {
|
||||
this.url = url;
|
||||
}
|
||||
};
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Image
|
||||
export default class Image {
|
||||
public width: number = null;
|
||||
public height: number = null;
|
||||
|
||||
constructor (public url: string) {}
|
||||
};
|
||||
@@ -1,22 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
import { Capability
|
||||
, ReceiverType } from "../enums";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Receiver
|
||||
export default class Receiver {
|
||||
constructor (
|
||||
label
|
||||
, friendlyName
|
||||
, opt_capabilities = []
|
||||
, opt_volume = null) {
|
||||
|
||||
this.capabilities = opt_capabilities;
|
||||
this.displayStatus = null;
|
||||
this.friendlyName = friendlyName;
|
||||
this.isActiveInput = null;
|
||||
this.label = label;
|
||||
this.receiverType = ReceiverType.CAST;
|
||||
this.volume = opt_volume;
|
||||
}
|
||||
};
|
||||
21
ext/src/shim/cast/classes/Receiver.ts
Executable file
21
ext/src/shim/cast/classes/Receiver.ts
Executable file
@@ -0,0 +1,21 @@
|
||||
"use strict";
|
||||
|
||||
import ReceiverDisplayStatus from "./ReceiverDisplayStatus";
|
||||
import Volume from "./Volume";
|
||||
|
||||
import { ReceiverType } from "../enums";
|
||||
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Receiver
|
||||
export default class Receiver {
|
||||
public displayStatus: ReceiverDisplayStatus = null;
|
||||
public isActiveInput: boolean = null;
|
||||
public receiverType: string = ReceiverType.CAST;
|
||||
|
||||
constructor (
|
||||
public label: string
|
||||
, public friendlyName: string
|
||||
, public capabilities: string[] = []
|
||||
, public volume: Volume = null) {
|
||||
}
|
||||
};
|
||||
@@ -1,10 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.ReceiverDisplayStatus
|
||||
export default class ReceiverDisplayStatus {
|
||||
constructor (statusText, appImages) {
|
||||
this.appImages = appImages;
|
||||
this.showStop = null;
|
||||
this.statusText = statusText;
|
||||
}
|
||||
};
|
||||
13
ext/src/shim/cast/classes/ReceiverDisplayStatus.ts
Executable file
13
ext/src/shim/cast/classes/ReceiverDisplayStatus.ts
Executable file
@@ -0,0 +1,13 @@
|
||||
"use strict";
|
||||
|
||||
import Image from "./Image";
|
||||
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.ReceiverDisplayStatus
|
||||
export default class ReceiverDisplayStatus {
|
||||
public showStop: boolean = null;
|
||||
|
||||
constructor (
|
||||
public statusText: string
|
||||
, public appImages: Image[]) {}
|
||||
};
|
||||
@@ -1,10 +1,9 @@
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SenderApplication
|
||||
export default class SenderApplication {
|
||||
constructor (platform) {
|
||||
this.packageId = null;
|
||||
this.platform = platform;
|
||||
this.url = null;
|
||||
}
|
||||
};
|
||||
"use strict";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SenderApplication
|
||||
export default class SenderApplication {
|
||||
public packageId: string = null;
|
||||
public url: string = null;
|
||||
|
||||
constructor (public platform: string) {}
|
||||
};
|
||||
@@ -1,8 +1,16 @@
|
||||
"use strict";
|
||||
|
||||
import _Error from "./Error";
|
||||
import Volume from "./Volume";
|
||||
import Media from "../../media/classes/Media";
|
||||
import uuid from "uuid/v1";
|
||||
|
||||
import _Error from "./Error";
|
||||
import Image from "./Image";
|
||||
import Receiver from "./Receiver";
|
||||
import SenderApplication from "./SenderApplication";
|
||||
import Volume from "./Volume";
|
||||
|
||||
import LoadRequest from "../../media/classes/LoadRequest";
|
||||
import Media from "../../media/classes/Media";
|
||||
import QueueLoadRequest from "../../media/classes/QueueLoadRequest";
|
||||
|
||||
import { SessionStatus
|
||||
, ErrorCode
|
||||
@@ -10,44 +18,53 @@ import { SessionStatus
|
||||
|
||||
import { onMessage, sendMessageResponse } from "../../messageBridge";
|
||||
|
||||
import uuid from "uuid/v1";
|
||||
import { SuccessCallback
|
||||
, ErrorCallback
|
||||
, MediaListener
|
||||
, MessageListener
|
||||
, UpdateListener
|
||||
, LoadSuccessCallback
|
||||
, Callbacks
|
||||
, CallbacksMap } from "../../types";
|
||||
|
||||
|
||||
export default class Session {
|
||||
private _id: string = uuid();
|
||||
private _messageListeners = new Map<string, Set<MessageListener>>();
|
||||
private _updateListeners = new Set<UpdateListener>();
|
||||
|
||||
private _leaveCallbacks: CallbacksMap = new Map();
|
||||
private _sendMessageCallbacks: CallbacksMap = new Map();
|
||||
private _setReceiverMutedCallbacks: CallbacksMap = new Map();
|
||||
private _setReceiverVolumeLevelCallbacks: CallbacksMap = new Map();
|
||||
private _stopCallbacks: CallbacksMap = new Map();
|
||||
|
||||
public media: Media[];
|
||||
public namespaces: { name: "string" }[];
|
||||
public senderApps: SenderApplication[];
|
||||
public status: string;
|
||||
public statusText: string;
|
||||
public transportId: string;
|
||||
|
||||
constructor (
|
||||
sessionId
|
||||
, appId
|
||||
, displayName
|
||||
, appImages
|
||||
, receiver
|
||||
, successCallback) {
|
||||
|
||||
this._id = uuid();
|
||||
this._messageListeners = new Map();
|
||||
this._updateListeners = new Set();
|
||||
|
||||
this._sendMessageCallbacks = new Map();
|
||||
this._setReceiverMutedCallbacks = new Map();
|
||||
this._setReceiverVolumeLevelCallbacks = new Map();
|
||||
this._stopCallbacks = new Map();
|
||||
|
||||
this.sessionId = sessionId;
|
||||
this.transportId = sessionId || "";
|
||||
this.appId = appId;
|
||||
this.appImages = appImages;
|
||||
this.displayName = displayName;
|
||||
this.receiver = receiver;
|
||||
public sessionId: string
|
||||
, public appId: string
|
||||
, public displayName: string
|
||||
, public appImages: Image[]
|
||||
, public receiver: Receiver
|
||||
, successCallback: (session: Session) => void) {
|
||||
|
||||
this.media = [];
|
||||
this.namespaces = [];
|
||||
this.senderApps = [];
|
||||
this.status = SessionStatus.CONNECTED;
|
||||
this.statusText = null;
|
||||
this.transportId = sessionId || "";
|
||||
|
||||
if (receiver) {
|
||||
this._sendMessage("bridge:/session/initialize", {
|
||||
address: receiver._address
|
||||
, port: receiver._port
|
||||
address: (receiver as any)._address
|
||||
, port: (receiver as any)._port
|
||||
, appId
|
||||
, sessionId
|
||||
});
|
||||
@@ -62,7 +79,10 @@ export default class Session {
|
||||
switch (message.subject) {
|
||||
case "shim:/session/stopped": {
|
||||
this.status = SessionStatus.STOPPED;
|
||||
this._updateListeners.forEach(listener => listener());
|
||||
|
||||
for (const listener of this._updateListeners) {
|
||||
listener(false);
|
||||
}
|
||||
|
||||
break;
|
||||
};
|
||||
@@ -82,19 +102,21 @@ export default class Session {
|
||||
};
|
||||
|
||||
case "shim:/session/updateStatus": {
|
||||
if (message.data.volume) {
|
||||
const volume: Volume = message.data.volume;
|
||||
|
||||
if (volume) {
|
||||
if (!this.receiver.volume) {
|
||||
const receiverVolume = new Volume(
|
||||
message.data.volume.level
|
||||
, message.data.volume.muted);
|
||||
volume.level
|
||||
, volume.muted);
|
||||
|
||||
receiverVolume.controlType = message.data.volume.controlType;
|
||||
receiverVolume.stepInterval = message.data.volume.stepInterval;
|
||||
receiverVolume.controlType = volume.controlType;
|
||||
receiverVolume.stepInterval = volume.stepInterval;
|
||||
|
||||
this.receiver.volume = receiverVolume;
|
||||
} else {
|
||||
this.receiver.volume.level = message.data.volume.level;
|
||||
this.receiver.volume.muted = message.data.volume.muted;
|
||||
this.receiver.volume.level = volume.level;
|
||||
this.receiver.volume.muted = volume.muted;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,8 +126,10 @@ export default class Session {
|
||||
|
||||
case "shim:/session/impl_addMessageListener": {
|
||||
const { namespace, data } = message.data;
|
||||
this._messageListeners.get(namespace).forEach(
|
||||
listener => listener(namespace, data));
|
||||
for (const listener of this._messageListeners.get(namespace)) {
|
||||
listener(namespace, data);
|
||||
}
|
||||
|
||||
break;
|
||||
};
|
||||
|
||||
@@ -166,7 +190,10 @@ export default class Session {
|
||||
errorCallback(new _Error(ErrorCode.SESSION_ERROR));
|
||||
} else {
|
||||
this.status = SessionStatus.STOPPED;
|
||||
this._updateListeners.forEach(listener => listener());
|
||||
|
||||
for (const listener of this._updateListeners) {
|
||||
listener(false);
|
||||
}
|
||||
|
||||
if (successCallback) {
|
||||
successCallback();
|
||||
@@ -181,20 +208,12 @@ export default class Session {
|
||||
});
|
||||
}
|
||||
|
||||
_sendMessage (subject, data = {}) {
|
||||
sendMessageResponse({
|
||||
subject
|
||||
, data
|
||||
, _id: this._id
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
addMediaListener (listener) {
|
||||
public addMediaListener (listener: MediaListener) {
|
||||
console.info("STUB :: Session#addMediaListener")
|
||||
}
|
||||
|
||||
addMessageListener (namespace, listener) {
|
||||
public addMessageListener (namespace: string, listener: MessageListener) {
|
||||
if (!this._messageListeners.has(namespace)) {
|
||||
this._messageListeners.set(namespace, new Set());
|
||||
}
|
||||
@@ -204,11 +223,14 @@ export default class Session {
|
||||
});
|
||||
}
|
||||
|
||||
addUpdateListener (listener) {
|
||||
public addUpdateListener (listener: UpdateListener) {
|
||||
this._updateListeners.add(listener);
|
||||
}
|
||||
|
||||
leave (successCallback, errorCallback) {
|
||||
public leave (
|
||||
successCallback: SuccessCallback
|
||||
, errorCallback: ErrorCallback): void {
|
||||
|
||||
const id = uuid();
|
||||
|
||||
this._sendMessage("bridge:/session/impl_leave", { id });
|
||||
@@ -219,8 +241,12 @@ export default class Session {
|
||||
]);
|
||||
}
|
||||
|
||||
loadMedia (loadRequest, successCallback, errorCallback) {
|
||||
this.sendMediaMessage({
|
||||
public loadMedia (
|
||||
loadRequest: LoadRequest
|
||||
, successCallback: LoadSuccessCallback
|
||||
, errorCallback: ErrorCallback): void {
|
||||
|
||||
this._sendMediaMessage({
|
||||
type: "LOAD"
|
||||
, requestId: 0
|
||||
, media: loadRequest.media
|
||||
@@ -233,8 +259,10 @@ export default class Session {
|
||||
|
||||
let hasResponded = false;
|
||||
|
||||
this.addMessageListener("urn:x-cast:com.google.cast.media"
|
||||
this.addMessageListener(
|
||||
"urn:x-cast:com.google.cast.media"
|
||||
, (namespace, data) => {
|
||||
|
||||
if (hasResponded) return;
|
||||
|
||||
const mediaObject = JSON.parse(data);
|
||||
@@ -258,28 +286,38 @@ export default class Session {
|
||||
})
|
||||
}
|
||||
|
||||
queueLoad () {
|
||||
public queueLoad (
|
||||
queueLoadRequest: QueueLoadRequest
|
||||
, successCallback: LoadSuccessCallback
|
||||
, errorCallback: ErrorCallback): void {
|
||||
|
||||
console.info("STUB :: Session#queueLoad");
|
||||
}
|
||||
removeMediaListener (listener) {
|
||||
|
||||
public removeMediaListener (listener: MediaListener): void {
|
||||
console.info("STUB :: Session#removeMediaListener");
|
||||
}
|
||||
removeMessageListener (namespace, listener) {
|
||||
|
||||
public removeMessageListener (
|
||||
namespace: string
|
||||
, listener: MessageListener): void {
|
||||
|
||||
this._messageListeners.get(namespace).delete(listener);
|
||||
}
|
||||
removeUpdateListener (namespace, listener) {
|
||||
|
||||
public removeUpdateListener (
|
||||
namespace: string
|
||||
, listener: UpdateListener): void {
|
||||
|
||||
this._updateListeners.delete(listener);
|
||||
}
|
||||
|
||||
sendMediaMessage (message) {
|
||||
this.sendMessage(
|
||||
"urn:x-cast:com.google.cast.media"
|
||||
, message
|
||||
, () => {}
|
||||
, () => {});
|
||||
}
|
||||
public sendMessage (
|
||||
namespace: string
|
||||
, message: {} | string
|
||||
, successCallback: SuccessCallback
|
||||
, errorCallback: ErrorCallback): void {
|
||||
|
||||
sendMessage (namespace, message, successCallback, errorCallback) {
|
||||
const messageId = uuid();
|
||||
|
||||
this._sendMessage("bridge:/session/impl_sendMessage", {
|
||||
@@ -294,7 +332,11 @@ export default class Session {
|
||||
]);
|
||||
}
|
||||
|
||||
setReceiverMuted (muted, successCallback, errorCallback) {
|
||||
public setReceiverMuted (
|
||||
muted: boolean
|
||||
, successCallback: SuccessCallback
|
||||
, errorCallback: ErrorCallback) {
|
||||
|
||||
const volumeId = uuid();
|
||||
|
||||
this._sendMessage("bridge:/session/impl_setReceiverMuted", {
|
||||
@@ -308,7 +350,11 @@ export default class Session {
|
||||
]);
|
||||
}
|
||||
|
||||
setReceiverVolumeLevel (newLevel, successCallback, errorCallback) {
|
||||
public setReceiverVolumeLevel (
|
||||
newLevel: number
|
||||
, successCallback: SuccessCallback
|
||||
, errorCallback: ErrorCallback): void {
|
||||
|
||||
const volumeId = uuid();
|
||||
this._sendMessage("bridge:/session/impl_setReceiverVolumeLevel", {
|
||||
newLevel
|
||||
@@ -321,7 +367,10 @@ export default class Session {
|
||||
]);
|
||||
}
|
||||
|
||||
stop (successCallback, errorCallback) {
|
||||
public stop (
|
||||
successCallback: SuccessCallback
|
||||
, errorCallback: ErrorCallback): void {
|
||||
|
||||
const stopId = uuid();
|
||||
this._sendMessage("bridge:/session/impl_stop", { stopId });
|
||||
|
||||
@@ -330,4 +379,20 @@ export default class Session {
|
||||
, errorCallback
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
private _sendMessage (subject: string, data = {}) {
|
||||
sendMessageResponse({
|
||||
subject
|
||||
, data
|
||||
, _id: this._id
|
||||
});
|
||||
}
|
||||
|
||||
private _sendMediaMessage (message: string | {}) {
|
||||
this.sendMessage(
|
||||
"urn:x-cast:com.google.cast.media"
|
||||
, message
|
||||
, null, null);
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
import { Capability } from "../enums";
|
||||
import { requestSession as requestSessionTimeout } from "../../timeout.js";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SessionRequest
|
||||
export default class SessionRequest {
|
||||
constructor (
|
||||
appId
|
||||
, opt_capabilities = [
|
||||
Capability.VIDEO_OUT
|
||||
, Capability.AUDIO_OUT ]
|
||||
, opt_timeout = requestSessionTimeout) {
|
||||
|
||||
this.appId = appId;
|
||||
this.capabilities = opt_capabilities;
|
||||
this.dialRequest = null;
|
||||
this.language = null;
|
||||
this.requestSessionTimeout = opt_timeout;
|
||||
}
|
||||
};
|
||||
17
ext/src/shim/cast/classes/SessionRequest.ts
Executable file
17
ext/src/shim/cast/classes/SessionRequest.ts
Executable file
@@ -0,0 +1,17 @@
|
||||
"use strict";
|
||||
|
||||
import { Capability } from "../enums";
|
||||
import { requestSession } from "../../timeout";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SessionRequest
|
||||
export default class SessionRequest {
|
||||
public language: string = null;
|
||||
public dialRequest: any = null;
|
||||
|
||||
constructor (
|
||||
public appId: string
|
||||
, public capabilities = [
|
||||
Capability.VIDEO_OUT
|
||||
, Capability.AUDIO_OUT ]
|
||||
, public requestSessionTimeout: number = requestSession) {}
|
||||
};
|
||||
@@ -1,10 +1,10 @@
|
||||
"use strict";
|
||||
|
||||
import * as timeouts from "../../timeout.js";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Timeout
|
||||
export default class Timeout {
|
||||
constructor () {
|
||||
Object.assign(this, timeouts);
|
||||
}
|
||||
};
|
||||
"use strict";
|
||||
|
||||
import * as timeouts from "../../timeout";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Timeout
|
||||
export default class Timeout {
|
||||
constructor () {
|
||||
Object.assign(this, timeouts);
|
||||
}
|
||||
};
|
||||
@@ -1,13 +1,15 @@
|
||||
"use strict";
|
||||
|
||||
import { VolumeControlType } from "../enums";
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Volume
|
||||
export default class Volume {
|
||||
constructor (
|
||||
opt_level = null
|
||||
, opt_muted = null) {
|
||||
this.level = opt_level;
|
||||
this.muted = opt_muted;
|
||||
}
|
||||
};
|
||||
"use strict";
|
||||
|
||||
import { VolumeControlType } from "../enums";
|
||||
|
||||
|
||||
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Volume
|
||||
export default class Volume {
|
||||
public controlType: string;
|
||||
public stepInterval: number;
|
||||
|
||||
constructor (
|
||||
public level: number = null
|
||||
, public muted: boolean = null) {
|
||||
}
|
||||
};
|
||||
@@ -1,28 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
import ApiConfig from "./ApiConfig";
|
||||
import DialRequest from "./DialRequest";
|
||||
import Error_ from "./Error";
|
||||
import Image_ from "./Image";
|
||||
import Receiver from "./Receiver";
|
||||
import ReceiverDisplayStatus from "./ReceiverDisplayStatus";
|
||||
import SenderApplication from "./SenderApplication";
|
||||
import Session from "./Session";
|
||||
import SessionRequest from "./SessionRequest";
|
||||
import Timeout from "./Timeout";
|
||||
import Volume from "./Volume";
|
||||
|
||||
|
||||
export default {
|
||||
AutoJoinPolicy
|
||||
, Capability
|
||||
, DefaultActionPolicy
|
||||
, DialAppState
|
||||
, ErrorCode
|
||||
, ReceiverAction
|
||||
, ReceiverAvailability
|
||||
, ReceiverType
|
||||
, SenderPlatform
|
||||
, SessionStatus
|
||||
, VolumeControlType
|
||||
};
|
||||
Reference in New Issue
Block a user