96 lines
3.3 KiB
JavaScript
96 lines
3.3 KiB
JavaScript
// noinspection JSUnusedGlobalSymbols
|
|
|
|
/* Overwritten protection. */
|
|
|
|
let { http } = global;
|
|
|
|
/**
|
|
* @param {ScriptRuntime} scriptRuntime
|
|
* @param {org.mozilla.javascript.Scriptable | global} scope
|
|
* @return {Internal.Web}
|
|
*/
|
|
module.exports = function (scriptRuntime, scope) {
|
|
const Context = org.mozilla.javascript.Context;
|
|
const InjectableWebView = org.autojs.autojs.core.web.InjectableWebView;
|
|
const InjectableWebClient = org.autojs.autojs.core.web.InjectableWebClient;
|
|
|
|
let _ = {
|
|
Web: (/* @IIFE */ () => {
|
|
/**
|
|
* @implements Internal.Web
|
|
*/
|
|
const Web = function () {
|
|
/* Empty body. */
|
|
};
|
|
|
|
Web.prototype = {
|
|
constructor: Web,
|
|
newInjectableWebView(activity, url) {
|
|
if (arguments.length === 2) {
|
|
return new InjectableWebView(activity, Context.getCurrentContext(), scope, url);
|
|
}
|
|
if (arguments.length === 1) {
|
|
if (typeof arguments[0] === 'string') {
|
|
return this.newInjectableWebView(scope.activity, /* url = */ arguments[0]);
|
|
}
|
|
return this.newInjectableWebView(activity, /* url = */ null);
|
|
}
|
|
if (arguments.length === 0) {
|
|
return this.newInjectableWebView(scope.activity);
|
|
}
|
|
},
|
|
newInjectableWebClient() {
|
|
return new InjectableWebClient(Context.getCurrentContext(), scope);
|
|
},
|
|
newWebSocket(url) {
|
|
return new scope.WebSocket(url);
|
|
},
|
|
};
|
|
|
|
return Web;
|
|
})(),
|
|
scopeAugment() {
|
|
/**
|
|
* @type {(keyof Internal.Web)[]}
|
|
*/
|
|
let methods = [ 'newInjectableWebView', 'newInjectableWebClient', 'newWebSocket' ];
|
|
__asGlobal__(web, methods, scope);
|
|
|
|
const WebSocket = function () {
|
|
if (!(this instanceof WebSocket)) {
|
|
throw TypeError('WebSocket must be called as constructor');
|
|
}
|
|
if (arguments[0] instanceof MutableOkHttp) {
|
|
this.client = arguments[0];
|
|
this.url = arguments[1];
|
|
} else {
|
|
this.client = http.__okhttp__;
|
|
this.url = arguments[0];
|
|
}
|
|
if (typeof this.url !== 'string') {
|
|
throw TypeError(`Invalid url (value: ${this.url}, species: ${species(this.url)}) for WebSocket`);
|
|
}
|
|
return new org.autojs.autojs.core.web.WebSocket(this.client, this.url);
|
|
};
|
|
|
|
/* Append all primitive static fields. */
|
|
Object.keys(org.autojs.autojs.core.web.WebSocket).forEach((key) => {
|
|
let value = org.autojs.autojs.core.web.WebSocket[key]
|
|
if (isPrimitive(value)) {
|
|
WebSocket[key] = value;
|
|
}
|
|
});
|
|
|
|
scope.WebSocket = WebSocket;
|
|
},
|
|
};
|
|
|
|
/**
|
|
* @type {Internal.Web}
|
|
*/
|
|
const web = new _.Web();
|
|
|
|
_.scopeAugment();
|
|
|
|
return web;
|
|
}; |