🏠 Home 

ankiconnect

A simple implementation of AnkiConnect client, with TypeScript typing (using // @ts-check in an IME.)

สคริปต์นี้ไม่ควรถูกติดตั้งโดยตรง มันเป็นคลังสำหรับสคริปต์อื่น ๆ เพื่อบรรจุด้วยคำสั่งเมทา // @require https://update.greasyfork.org/scripts/452285/1099556/ankiconnect.js

class AnkiConnect {
baseURL;
version;
constructor(baseURL = 'http://localhost:8765', version = 6) {
this.baseURL = baseURL;
this.version = version;
}
async send(action, params, version = this.version) {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.addEventListener('error', () => reject('failed to issue request'));
xhr.addEventListener('load', () => {
try {
const response = JSON.parse(xhr.responseText);
if (Object.getOwnPropertyNames(response).length != 2) {
throw 'response has an unexpected number of fields';
}
if (!response.hasOwnProperty('error')) {
throw 'response is missing required error field';
}
if (!response.hasOwnProperty('r###lt')) {
throw 'response is missing required r###lt field';
}
if (response.error) {
throw response.error;
}
resolve(response.r###lt);
} catch (e) {
reject(e);
}
});
xhr.open('POST', this.baseURL);
xhr.send(JSON.stringify({ action, version, params }));
});
}
chain(action, params, version = this.version) {
const actions = [{ action, params }];
const chainable = {
commit: async () => {
if (actions.length > 1) {
return this.send('multi', { actions }, version);
}
return this.send(action, params, version);
},
add: async (action, params) => {
actions.push({ action, params });
return chainable;
},
};
return chainable;
}
}