mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-11-06 12:37:40 +00:00
* ci: drop dlltool from nodejs libs release * nodejs: download libsimplex into the user cache * nodejs: load libsimplex at runtime per backend * support bot: select db backend with --db * python: match backend switch error text * nodejs: download prebuilt add-on at runtime * ci: build nodejs add-on for libs release * calculator bot: load libs and add-on in image * support bot: document add-on override * nodejs: keep worker test output free of colors * nodejs: verify sha-256 of downloaded assets * python: pin core libs release with sha-256 * ci: add packages release script * ci: release nodejs add-on and open release PR * ci: publish packages after release PR * nodejs: keep npm from building the add-on * calculator bot: build the add-on in the image * ci: merge package release workflows * ci: open release PR when publishing fails * ci: build the add-on with node-addon-api only * ci: skip publishing in a called packages workflow * ci: update package release actions to Node 24 * nodejs: fix receive test timeout * ci: test packages on pull requests * nodejs: reuse the database in the close stress test * ci: keep failed package tests from hanging * ci: skip preset server tests * ci: plan package builds from the changes * ci: test packages with a given libsimplex * ci: test packages with libsimplex of core changes
23 lines
752 B
JavaScript
23 lines
752 B
JavaScript
// The add-on is downloaded from the libsimplex release, so it is loaded at runtime by core.loadLibrary.
|
|
const NOT_LOADED = "libsimplex is not loaded, call core.loadLibrary(backend) first"
|
|
const BINDINGS = ["chat_migrate_init", "chat_migrate_init_queue", "chat_close_store", "chat_send_cmd", "chat_recv_msg_wait",
|
|
"chat_write_file", "chat_read_file", "chat_encrypt_file", "chat_decrypt_file"]
|
|
|
|
let addon
|
|
|
|
exports.load = (addonPath, libPath) => {
|
|
if (!addon) {
|
|
const addonModule = {exports: {}}
|
|
process.dlopen(addonModule, addonPath)
|
|
addon = addonModule.exports
|
|
}
|
|
addon.load(libPath)
|
|
}
|
|
|
|
for (const name of BINDINGS) {
|
|
exports[name] = (...args) => {
|
|
if (!addon) throw new Error(NOT_LOADED)
|
|
return addon[name](...args)
|
|
}
|
|
}
|