sdk

Radroots SDK and bindings
git clone https://radroots.dev/git/sdk.git
Log | Files | Refs | README

wasm_impl.rs (38623B)


      1 use crate::{
      2     snapshot::{EXPORT_DB_BYTES_FIELD, EXPORT_MANIFEST_FIELD, synced_export_error},
      3     utils::value_to_js,
      4 };
      5 use radroots_replica_db::migrations;
      6 use radroots_replica_db::{ReplicaDbExportManifestRs, export_manifest};
      7 use radroots_replica_sync::radroots_replica_sync_status;
      8 use radroots_sdk_sql_wasm_runtime::parse_json;
      9 use radroots_sdk_sql_wasm_runtime::{
     10     WasmSqlExecutor, err_js, export_bytes, export_lock_begin, export_lock_end,
     11     with_export_lock_bypass,
     12 };
     13 use wasm_bindgen::JsValue;
     14 use wasm_bindgen::prelude::*;
     15 
     16 use radroots_replica_db_schema::farm::{
     17     IFarmCreate, IFarmDelete, IFarmFindMany, IFarmFindOne, IFarmUpdate,
     18 };
     19 
     20 use radroots_replica_db_schema::farm_gcs_location::{
     21     IFarmGcsLocationCreate, IFarmGcsLocationDelete, IFarmGcsLocationFindMany,
     22     IFarmGcsLocationFindOne, IFarmGcsLocationUpdate,
     23 };
     24 
     25 use radroots_replica_db_schema::farm_member::{
     26     IFarmMemberCreate, IFarmMemberDelete, IFarmMemberFindMany, IFarmMemberFindOne,
     27     IFarmMemberUpdate,
     28 };
     29 
     30 use radroots_replica_db_schema::farm_member_claim::{
     31     IFarmMemberClaimCreate, IFarmMemberClaimDelete, IFarmMemberClaimFindMany,
     32     IFarmMemberClaimFindOne, IFarmMemberClaimUpdate,
     33 };
     34 
     35 use radroots_replica_db_schema::farm_tag::{
     36     IFarmTagCreate, IFarmTagDelete, IFarmTagFindMany, IFarmTagFindOne, IFarmTagUpdate,
     37 };
     38 
     39 use radroots_replica_db_schema::gcs_location::{
     40     IGcsLocationCreate, IGcsLocationDelete, IGcsLocationFindMany, IGcsLocationFindOne,
     41     IGcsLocationUpdate,
     42 };
     43 
     44 use radroots_replica_db_schema::log_error::{
     45     ILogErrorCreate, ILogErrorDelete, ILogErrorFindMany, ILogErrorFindOne, ILogErrorUpdate,
     46 };
     47 
     48 use radroots_replica_db_schema::media_image::{
     49     IMediaImageCreate, IMediaImageDelete, IMediaImageFindMany, IMediaImageFindOne,
     50     IMediaImageUpdate,
     51 };
     52 
     53 use radroots_replica_db_schema::nostr_profile::{
     54     INostrProfileCreate, INostrProfileDelete, INostrProfileFindMany, INostrProfileFindOne,
     55     INostrProfileUpdate,
     56 };
     57 
     58 use radroots_replica_db_schema::nostr_event_head::{
     59     INostrEventHeadCreate, INostrEventHeadDelete, INostrEventHeadFindMany, INostrEventHeadFindOne,
     60     INostrEventHeadUpdate,
     61 };
     62 
     63 use radroots_replica_db_schema::nostr_relay::{
     64     INostrRelayCreate, INostrRelayDelete, INostrRelayFindMany, INostrRelayFindOne,
     65     INostrRelayUpdate,
     66 };
     67 
     68 use radroots_replica_db_schema::trade_product::{
     69     ITradeProductCreate, ITradeProductDelete, ITradeProductFindMany, ITradeProductFindOne,
     70     ITradeProductUpdate,
     71 };
     72 
     73 use radroots_replica_db_schema::plot::{
     74     IPlotCreate, IPlotDelete, IPlotFindMany, IPlotFindOne, IPlotUpdate,
     75 };
     76 
     77 use radroots_replica_db_schema::plot_gcs_location::{
     78     IPlotGcsLocationCreate, IPlotGcsLocationDelete, IPlotGcsLocationFindMany,
     79     IPlotGcsLocationFindOne, IPlotGcsLocationUpdate,
     80 };
     81 
     82 use radroots_replica_db_schema::plot_tag::{
     83     IPlotTagCreate, IPlotTagDelete, IPlotTagFindMany, IPlotTagFindOne, IPlotTagUpdate,
     84 };
     85 
     86 use radroots_replica_db_schema::nostr_profile_relay::INostrProfileRelayRelation;
     87 
     88 use radroots_replica_db_schema::trade_product_location::ITradeProductLocationRelation;
     89 
     90 use radroots_replica_db_schema::trade_product_media::ITradeProductMediaRelation;
     91 
     92 #[wasm_bindgen(js_name = replica_db_run_migrations)]
     93 pub fn replica_db_run_migrations() -> Result<(), JsValue> {
     94     let exec = WasmSqlExecutor::new();
     95     migrations::run_all_up(&exec).map_err(err_js)
     96 }
     97 
     98 #[wasm_bindgen(js_name = replica_db_reset_database)]
     99 pub fn replica_db_reset_database() -> Result<(), JsValue> {
    100     let exec = WasmSqlExecutor::new();
    101     migrations::run_all_down(&exec).map_err(err_js)
    102 }
    103 
    104 #[wasm_bindgen(js_name = replica_db_export_json)]
    105 pub fn replica_db_export_json() -> Result<JsValue, JsValue> {
    106     let exec = WasmSqlExecutor::new();
    107     let dump = radroots_replica_db::backup::export_database_backup(&exec).map_err(err_js)?;
    108     value_to_js(dump)
    109 }
    110 
    111 #[wasm_bindgen(js_name = replica_db_import_json)]
    112 pub fn replica_db_import_json(dump_json: &str) -> Result<(), JsValue> {
    113     let exec = WasmSqlExecutor::new();
    114     radroots_replica_db::backup::restore_database_backup_json(&exec, dump_json).map_err(err_js)
    115 }
    116 
    117 #[wasm_bindgen(js_name = replica_db_export_begin)]
    118 pub fn replica_db_export_begin() -> Result<JsValue, JsValue> {
    119     export_lock_begin().map_err(err_js)?;
    120     let exec = WasmSqlExecutor::new();
    121     let result = with_export_lock_bypass(|| export_snapshot(&exec));
    122     match result {
    123         Ok(value) => Ok(value),
    124         Err(err) => {
    125             export_lock_end();
    126             Err(err)
    127         }
    128     }
    129 }
    130 
    131 #[wasm_bindgen(js_name = replica_db_export_finish)]
    132 pub fn replica_db_export_finish() -> Result<(), JsValue> {
    133     export_lock_end();
    134     Ok(())
    135 }
    136 
    137 fn export_snapshot(exec: &WasmSqlExecutor) -> Result<JsValue, JsValue> {
    138     let status = radroots_replica_sync_status(exec).map_err(|err| {
    139         err_js(radroots_sql_core::SqlError::InvalidArgument(
    140             err.to_string(),
    141         ))
    142     })?;
    143     if let Some(message) = synced_export_error(status.pending_count, status.expected_count) {
    144         return Err(err_js(radroots_sql_core::SqlError::InvalidArgument(
    145             message,
    146         )));
    147     }
    148     let manifest = export_manifest(exec).map_err(err_js)?;
    149     export_snapshot_value(manifest)
    150 }
    151 
    152 fn export_snapshot_value(manifest: ReplicaDbExportManifestRs) -> Result<JsValue, JsValue> {
    153     let bytes_js = export_bytes();
    154     export_snapshot_value_with_bytes(manifest, bytes_js)
    155 }
    156 
    157 fn export_snapshot_value_with_bytes(
    158     manifest: ReplicaDbExportManifestRs,
    159     bytes_js: JsValue,
    160 ) -> Result<JsValue, JsValue> {
    161     let manifest_js = serde_wasm_bindgen::to_value(&manifest).map_err(|err| {
    162         err_js(radroots_sql_core::SqlError::SerializationError(
    163             err.to_string(),
    164         ))
    165     })?;
    166     let obj = js_sys::Object::new();
    167     js_sys::Reflect::set(
    168         &obj,
    169         &JsValue::from_str(EXPORT_MANIFEST_FIELD),
    170         &manifest_js,
    171     )
    172     .map_err(|_| err_js(radroots_sql_core::SqlError::Internal))?;
    173     js_sys::Reflect::set(&obj, &JsValue::from_str(EXPORT_DB_BYTES_FIELD), &bytes_js)
    174         .map_err(|_| err_js(radroots_sql_core::SqlError::Internal))?;
    175     Ok(JsValue::from(obj))
    176 }
    177 
    178 #[cfg(all(test, target_arch = "wasm32"))]
    179 mod tests {
    180     use super::export_snapshot_value_with_bytes;
    181     use js_sys::{Reflect, Uint8Array};
    182     use wasm_bindgen::JsValue;
    183 
    184     #[wasm_bindgen_test::wasm_bindgen_test]
    185     fn export_snapshot_value_includes_fields() {
    186         let manifest = radroots_replica_db::ReplicaDbExportManifestRs {
    187             export_version: "1".to_string(),
    188             replica_db_version: "0.0.0".to_string(),
    189             backup_format_version: "0.0.0".to_string(),
    190             schema_hash: "hash".to_string(),
    191             schema: Vec::new(),
    192             migrations: Vec::new(),
    193             table_counts: Vec::new(),
    194         };
    195         let bytes = Uint8Array::new_with_length(2);
    196         let js =
    197             export_snapshot_value_with_bytes(manifest, JsValue::from(bytes)).expect("snapshot");
    198         let manifest_rs =
    199             Reflect::get(&js, &JsValue::from_str("manifest_rs")).expect("manifest_rs");
    200         let db_bytes = Reflect::get(&js, &JsValue::from_str("db_bytes")).expect("db_bytes");
    201         assert!(manifest_rs.is_object());
    202         assert!(db_bytes.is_object());
    203     }
    204 }
    205 
    206 #[wasm_bindgen(js_name = replica_db_farm_create)]
    207 pub fn replica_db_farm_create(opts_json: &str) -> Result<JsValue, JsValue> {
    208     let opts: IFarmCreate = parse_json(opts_json).map_err(err_js)?;
    209     let exec = WasmSqlExecutor::new();
    210     let out = radroots_replica_db::farm::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    211     value_to_js(out)
    212 }
    213 
    214 #[wasm_bindgen(js_name = replica_db_farm_find_one)]
    215 pub fn replica_db_farm_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    216     let opts: IFarmFindOne = parse_json(opts_json).map_err(err_js)?;
    217     let exec = WasmSqlExecutor::new();
    218     let out = radroots_replica_db::farm::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    219     value_to_js(out)
    220 }
    221 
    222 #[wasm_bindgen(js_name = replica_db_farm_find_many)]
    223 pub fn replica_db_farm_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    224     let opts: IFarmFindMany = parse_json(opts_json).map_err(err_js)?;
    225     let exec = WasmSqlExecutor::new();
    226     let out = radroots_replica_db::farm::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    227     value_to_js(out)
    228 }
    229 
    230 #[wasm_bindgen(js_name = replica_db_farm_update)]
    231 pub fn replica_db_farm_update(opts_json: &str) -> Result<JsValue, JsValue> {
    232     let opts: IFarmUpdate = parse_json(opts_json).map_err(err_js)?;
    233     let exec = WasmSqlExecutor::new();
    234     let out = radroots_replica_db::farm::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    235     value_to_js(out)
    236 }
    237 
    238 #[wasm_bindgen(js_name = replica_db_farm_delete)]
    239 pub fn replica_db_farm_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    240     let opts: IFarmDelete = parse_json(opts_json).map_err(err_js)?;
    241     let exec = WasmSqlExecutor::new();
    242     let out = radroots_replica_db::farm::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    243     value_to_js(out)
    244 }
    245 
    246 #[wasm_bindgen(js_name = replica_db_plot_create)]
    247 pub fn replica_db_plot_create(opts_json: &str) -> Result<JsValue, JsValue> {
    248     let opts: IPlotCreate = parse_json(opts_json).map_err(err_js)?;
    249     let exec = WasmSqlExecutor::new();
    250     let out = radroots_replica_db::plot::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    251     value_to_js(out)
    252 }
    253 
    254 #[wasm_bindgen(js_name = replica_db_plot_find_one)]
    255 pub fn replica_db_plot_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    256     let opts: IPlotFindOne = parse_json(opts_json).map_err(err_js)?;
    257     let exec = WasmSqlExecutor::new();
    258     let out = radroots_replica_db::plot::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    259     value_to_js(out)
    260 }
    261 
    262 #[wasm_bindgen(js_name = replica_db_plot_find_many)]
    263 pub fn replica_db_plot_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    264     let opts: IPlotFindMany = parse_json(opts_json).map_err(err_js)?;
    265     let exec = WasmSqlExecutor::new();
    266     let out = radroots_replica_db::plot::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    267     value_to_js(out)
    268 }
    269 
    270 #[wasm_bindgen(js_name = replica_db_plot_update)]
    271 pub fn replica_db_plot_update(opts_json: &str) -> Result<JsValue, JsValue> {
    272     let opts: IPlotUpdate = parse_json(opts_json).map_err(err_js)?;
    273     let exec = WasmSqlExecutor::new();
    274     let out = radroots_replica_db::plot::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    275     value_to_js(out)
    276 }
    277 
    278 #[wasm_bindgen(js_name = replica_db_plot_delete)]
    279 pub fn replica_db_plot_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    280     let opts: IPlotDelete = parse_json(opts_json).map_err(err_js)?;
    281     let exec = WasmSqlExecutor::new();
    282     let out = radroots_replica_db::plot::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    283     value_to_js(out)
    284 }
    285 
    286 #[wasm_bindgen(js_name = replica_db_gcs_location_create)]
    287 pub fn replica_db_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> {
    288     let opts: IGcsLocationCreate = parse_json(opts_json).map_err(err_js)?;
    289     let exec = WasmSqlExecutor::new();
    290     let out = radroots_replica_db::gcs_location::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    291     value_to_js(out)
    292 }
    293 
    294 #[wasm_bindgen(js_name = replica_db_gcs_location_find_one)]
    295 pub fn replica_db_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    296     let opts: IGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?;
    297     let exec = WasmSqlExecutor::new();
    298     let out =
    299         radroots_replica_db::gcs_location::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    300     value_to_js(out)
    301 }
    302 
    303 #[wasm_bindgen(js_name = replica_db_gcs_location_find_many)]
    304 pub fn replica_db_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    305     let opts: IGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?;
    306     let exec = WasmSqlExecutor::new();
    307     let out =
    308         radroots_replica_db::gcs_location::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    309     value_to_js(out)
    310 }
    311 
    312 #[wasm_bindgen(js_name = replica_db_gcs_location_update)]
    313 pub fn replica_db_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> {
    314     let opts: IGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?;
    315     let exec = WasmSqlExecutor::new();
    316     let out = radroots_replica_db::gcs_location::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    317     value_to_js(out)
    318 }
    319 
    320 #[wasm_bindgen(js_name = replica_db_gcs_location_delete)]
    321 pub fn replica_db_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    322     let opts: IGcsLocationDelete = parse_json(opts_json).map_err(err_js)?;
    323     let exec = WasmSqlExecutor::new();
    324     let out = radroots_replica_db::gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    325     value_to_js(out)
    326 }
    327 
    328 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_create)]
    329 pub fn replica_db_farm_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> {
    330     let opts: IFarmGcsLocationCreate = parse_json(opts_json).map_err(err_js)?;
    331     let exec = WasmSqlExecutor::new();
    332     let out =
    333         radroots_replica_db::farm_gcs_location::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    334     value_to_js(out)
    335 }
    336 
    337 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_find_one)]
    338 pub fn replica_db_farm_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    339     let opts: IFarmGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?;
    340     let exec = WasmSqlExecutor::new();
    341     let out = radroots_replica_db::farm_gcs_location::find_one(&exec, &opts)
    342         .map_err(|e| err_js(e.err))?;
    343     value_to_js(out)
    344 }
    345 
    346 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_find_many)]
    347 pub fn replica_db_farm_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    348     let opts: IFarmGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?;
    349     let exec = WasmSqlExecutor::new();
    350     let out = radroots_replica_db::farm_gcs_location::find_many(&exec, &opts)
    351         .map_err(|e| err_js(e.err))?;
    352     value_to_js(out)
    353 }
    354 
    355 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_update)]
    356 pub fn replica_db_farm_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> {
    357     let opts: IFarmGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?;
    358     let exec = WasmSqlExecutor::new();
    359     let out =
    360         radroots_replica_db::farm_gcs_location::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    361     value_to_js(out)
    362 }
    363 
    364 #[wasm_bindgen(js_name = replica_db_farm_gcs_location_delete)]
    365 pub fn replica_db_farm_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    366     let opts: IFarmGcsLocationDelete = parse_json(opts_json).map_err(err_js)?;
    367     let exec = WasmSqlExecutor::new();
    368     let out =
    369         radroots_replica_db::farm_gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    370     value_to_js(out)
    371 }
    372 
    373 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_create)]
    374 pub fn replica_db_plot_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> {
    375     let opts: IPlotGcsLocationCreate = parse_json(opts_json).map_err(err_js)?;
    376     let exec = WasmSqlExecutor::new();
    377     let out =
    378         radroots_replica_db::plot_gcs_location::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    379     value_to_js(out)
    380 }
    381 
    382 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_find_one)]
    383 pub fn replica_db_plot_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    384     let opts: IPlotGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?;
    385     let exec = WasmSqlExecutor::new();
    386     let out = radroots_replica_db::plot_gcs_location::find_one(&exec, &opts)
    387         .map_err(|e| err_js(e.err))?;
    388     value_to_js(out)
    389 }
    390 
    391 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_find_many)]
    392 pub fn replica_db_plot_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    393     let opts: IPlotGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?;
    394     let exec = WasmSqlExecutor::new();
    395     let out = radroots_replica_db::plot_gcs_location::find_many(&exec, &opts)
    396         .map_err(|e| err_js(e.err))?;
    397     value_to_js(out)
    398 }
    399 
    400 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_update)]
    401 pub fn replica_db_plot_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> {
    402     let opts: IPlotGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?;
    403     let exec = WasmSqlExecutor::new();
    404     let out =
    405         radroots_replica_db::plot_gcs_location::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    406     value_to_js(out)
    407 }
    408 
    409 #[wasm_bindgen(js_name = replica_db_plot_gcs_location_delete)]
    410 pub fn replica_db_plot_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    411     let opts: IPlotGcsLocationDelete = parse_json(opts_json).map_err(err_js)?;
    412     let exec = WasmSqlExecutor::new();
    413     let out =
    414         radroots_replica_db::plot_gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    415     value_to_js(out)
    416 }
    417 
    418 #[wasm_bindgen(js_name = replica_db_farm_tag_create)]
    419 pub fn replica_db_farm_tag_create(opts_json: &str) -> Result<JsValue, JsValue> {
    420     let opts: IFarmTagCreate = parse_json(opts_json).map_err(err_js)?;
    421     let exec = WasmSqlExecutor::new();
    422     let out = radroots_replica_db::farm_tag::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    423     value_to_js(out)
    424 }
    425 
    426 #[wasm_bindgen(js_name = replica_db_farm_tag_find_one)]
    427 pub fn replica_db_farm_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    428     let opts: IFarmTagFindOne = parse_json(opts_json).map_err(err_js)?;
    429     let exec = WasmSqlExecutor::new();
    430     let out = radroots_replica_db::farm_tag::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    431     value_to_js(out)
    432 }
    433 
    434 #[wasm_bindgen(js_name = replica_db_farm_tag_find_many)]
    435 pub fn replica_db_farm_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    436     let opts: IFarmTagFindMany = parse_json(opts_json).map_err(err_js)?;
    437     let exec = WasmSqlExecutor::new();
    438     let out = radroots_replica_db::farm_tag::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    439     value_to_js(out)
    440 }
    441 
    442 #[wasm_bindgen(js_name = replica_db_farm_tag_update)]
    443 pub fn replica_db_farm_tag_update(opts_json: &str) -> Result<JsValue, JsValue> {
    444     let opts: IFarmTagUpdate = parse_json(opts_json).map_err(err_js)?;
    445     let exec = WasmSqlExecutor::new();
    446     let out = radroots_replica_db::farm_tag::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    447     value_to_js(out)
    448 }
    449 
    450 #[wasm_bindgen(js_name = replica_db_farm_tag_delete)]
    451 pub fn replica_db_farm_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    452     let opts: IFarmTagDelete = parse_json(opts_json).map_err(err_js)?;
    453     let exec = WasmSqlExecutor::new();
    454     let out = radroots_replica_db::farm_tag::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    455     value_to_js(out)
    456 }
    457 
    458 #[wasm_bindgen(js_name = replica_db_plot_tag_create)]
    459 pub fn replica_db_plot_tag_create(opts_json: &str) -> Result<JsValue, JsValue> {
    460     let opts: IPlotTagCreate = parse_json(opts_json).map_err(err_js)?;
    461     let exec = WasmSqlExecutor::new();
    462     let out = radroots_replica_db::plot_tag::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    463     value_to_js(out)
    464 }
    465 
    466 #[wasm_bindgen(js_name = replica_db_plot_tag_find_one)]
    467 pub fn replica_db_plot_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    468     let opts: IPlotTagFindOne = parse_json(opts_json).map_err(err_js)?;
    469     let exec = WasmSqlExecutor::new();
    470     let out = radroots_replica_db::plot_tag::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    471     value_to_js(out)
    472 }
    473 
    474 #[wasm_bindgen(js_name = replica_db_plot_tag_find_many)]
    475 pub fn replica_db_plot_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    476     let opts: IPlotTagFindMany = parse_json(opts_json).map_err(err_js)?;
    477     let exec = WasmSqlExecutor::new();
    478     let out = radroots_replica_db::plot_tag::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    479     value_to_js(out)
    480 }
    481 
    482 #[wasm_bindgen(js_name = replica_db_plot_tag_update)]
    483 pub fn replica_db_plot_tag_update(opts_json: &str) -> Result<JsValue, JsValue> {
    484     let opts: IPlotTagUpdate = parse_json(opts_json).map_err(err_js)?;
    485     let exec = WasmSqlExecutor::new();
    486     let out = radroots_replica_db::plot_tag::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    487     value_to_js(out)
    488 }
    489 
    490 #[wasm_bindgen(js_name = replica_db_plot_tag_delete)]
    491 pub fn replica_db_plot_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    492     let opts: IPlotTagDelete = parse_json(opts_json).map_err(err_js)?;
    493     let exec = WasmSqlExecutor::new();
    494     let out = radroots_replica_db::plot_tag::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    495     value_to_js(out)
    496 }
    497 
    498 #[wasm_bindgen(js_name = replica_db_farm_member_create)]
    499 pub fn replica_db_farm_member_create(opts_json: &str) -> Result<JsValue, JsValue> {
    500     let opts: IFarmMemberCreate = parse_json(opts_json).map_err(err_js)?;
    501     let exec = WasmSqlExecutor::new();
    502     let out = radroots_replica_db::farm_member::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    503     value_to_js(out)
    504 }
    505 
    506 #[wasm_bindgen(js_name = replica_db_farm_member_find_one)]
    507 pub fn replica_db_farm_member_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    508     let opts: IFarmMemberFindOne = parse_json(opts_json).map_err(err_js)?;
    509     let exec = WasmSqlExecutor::new();
    510     let out =
    511         radroots_replica_db::farm_member::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    512     value_to_js(out)
    513 }
    514 
    515 #[wasm_bindgen(js_name = replica_db_farm_member_find_many)]
    516 pub fn replica_db_farm_member_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    517     let opts: IFarmMemberFindMany = parse_json(opts_json).map_err(err_js)?;
    518     let exec = WasmSqlExecutor::new();
    519     let out =
    520         radroots_replica_db::farm_member::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    521     value_to_js(out)
    522 }
    523 
    524 #[wasm_bindgen(js_name = replica_db_farm_member_update)]
    525 pub fn replica_db_farm_member_update(opts_json: &str) -> Result<JsValue, JsValue> {
    526     let opts: IFarmMemberUpdate = parse_json(opts_json).map_err(err_js)?;
    527     let exec = WasmSqlExecutor::new();
    528     let out = radroots_replica_db::farm_member::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    529     value_to_js(out)
    530 }
    531 
    532 #[wasm_bindgen(js_name = replica_db_farm_member_delete)]
    533 pub fn replica_db_farm_member_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    534     let opts: IFarmMemberDelete = parse_json(opts_json).map_err(err_js)?;
    535     let exec = WasmSqlExecutor::new();
    536     let out = radroots_replica_db::farm_member::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    537     value_to_js(out)
    538 }
    539 
    540 #[wasm_bindgen(js_name = replica_db_farm_member_claim_create)]
    541 pub fn replica_db_farm_member_claim_create(opts_json: &str) -> Result<JsValue, JsValue> {
    542     let opts: IFarmMemberClaimCreate = parse_json(opts_json).map_err(err_js)?;
    543     let exec = WasmSqlExecutor::new();
    544     let out =
    545         radroots_replica_db::farm_member_claim::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    546     value_to_js(out)
    547 }
    548 
    549 #[wasm_bindgen(js_name = replica_db_farm_member_claim_find_one)]
    550 pub fn replica_db_farm_member_claim_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    551     let opts: IFarmMemberClaimFindOne = parse_json(opts_json).map_err(err_js)?;
    552     let exec = WasmSqlExecutor::new();
    553     let out = radroots_replica_db::farm_member_claim::find_one(&exec, &opts)
    554         .map_err(|e| err_js(e.err))?;
    555     value_to_js(out)
    556 }
    557 
    558 #[wasm_bindgen(js_name = replica_db_farm_member_claim_find_many)]
    559 pub fn replica_db_farm_member_claim_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    560     let opts: IFarmMemberClaimFindMany = parse_json(opts_json).map_err(err_js)?;
    561     let exec = WasmSqlExecutor::new();
    562     let out = radroots_replica_db::farm_member_claim::find_many(&exec, &opts)
    563         .map_err(|e| err_js(e.err))?;
    564     value_to_js(out)
    565 }
    566 
    567 #[wasm_bindgen(js_name = replica_db_farm_member_claim_update)]
    568 pub fn replica_db_farm_member_claim_update(opts_json: &str) -> Result<JsValue, JsValue> {
    569     let opts: IFarmMemberClaimUpdate = parse_json(opts_json).map_err(err_js)?;
    570     let exec = WasmSqlExecutor::new();
    571     let out =
    572         radroots_replica_db::farm_member_claim::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    573     value_to_js(out)
    574 }
    575 
    576 #[wasm_bindgen(js_name = replica_db_farm_member_claim_delete)]
    577 pub fn replica_db_farm_member_claim_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    578     let opts: IFarmMemberClaimDelete = parse_json(opts_json).map_err(err_js)?;
    579     let exec = WasmSqlExecutor::new();
    580     let out =
    581         radroots_replica_db::farm_member_claim::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    582     value_to_js(out)
    583 }
    584 
    585 #[wasm_bindgen(js_name = replica_db_log_error_create)]
    586 pub fn replica_db_log_error_create(opts_json: &str) -> Result<JsValue, JsValue> {
    587     let opts: ILogErrorCreate = parse_json(opts_json).map_err(err_js)?;
    588     let exec = WasmSqlExecutor::new();
    589     let out = radroots_replica_db::log_error::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    590     value_to_js(out)
    591 }
    592 
    593 #[wasm_bindgen(js_name = replica_db_log_error_find_one)]
    594 pub fn replica_db_log_error_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    595     let opts: ILogErrorFindOne = parse_json(opts_json).map_err(err_js)?;
    596     let exec = WasmSqlExecutor::new();
    597     let out = radroots_replica_db::log_error::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    598     value_to_js(out)
    599 }
    600 
    601 #[wasm_bindgen(js_name = replica_db_log_error_find_many)]
    602 pub fn replica_db_log_error_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    603     let opts: ILogErrorFindMany = parse_json(opts_json).map_err(err_js)?;
    604     let exec = WasmSqlExecutor::new();
    605     let out = radroots_replica_db::log_error::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    606     value_to_js(out)
    607 }
    608 
    609 #[wasm_bindgen(js_name = replica_db_log_error_update)]
    610 pub fn replica_db_log_error_update(opts_json: &str) -> Result<JsValue, JsValue> {
    611     let opts: ILogErrorUpdate = parse_json(opts_json).map_err(err_js)?;
    612     let exec = WasmSqlExecutor::new();
    613     let out = radroots_replica_db::log_error::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    614     value_to_js(out)
    615 }
    616 
    617 #[wasm_bindgen(js_name = replica_db_log_error_delete)]
    618 pub fn replica_db_log_error_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    619     let opts: ILogErrorDelete = parse_json(opts_json).map_err(err_js)?;
    620     let exec = WasmSqlExecutor::new();
    621     let out = radroots_replica_db::log_error::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    622     value_to_js(out)
    623 }
    624 
    625 #[wasm_bindgen(js_name = replica_db_media_image_create)]
    626 pub fn replica_db_media_image_create(opts_json: &str) -> Result<JsValue, JsValue> {
    627     let opts: IMediaImageCreate = parse_json(opts_json).map_err(err_js)?;
    628     let exec = WasmSqlExecutor::new();
    629     let out = radroots_replica_db::media_image::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    630     value_to_js(out)
    631 }
    632 
    633 #[wasm_bindgen(js_name = replica_db_media_image_find_one)]
    634 pub fn replica_db_media_image_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    635     let opts: IMediaImageFindOne = parse_json(opts_json).map_err(err_js)?;
    636     let exec = WasmSqlExecutor::new();
    637     let out =
    638         radroots_replica_db::media_image::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    639     value_to_js(out)
    640 }
    641 
    642 #[wasm_bindgen(js_name = replica_db_media_image_find_many)]
    643 pub fn replica_db_media_image_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    644     let opts: IMediaImageFindMany = parse_json(opts_json).map_err(err_js)?;
    645     let exec = WasmSqlExecutor::new();
    646     let out =
    647         radroots_replica_db::media_image::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    648     value_to_js(out)
    649 }
    650 
    651 #[wasm_bindgen(js_name = replica_db_media_image_update)]
    652 pub fn replica_db_media_image_update(opts_json: &str) -> Result<JsValue, JsValue> {
    653     let opts: IMediaImageUpdate = parse_json(opts_json).map_err(err_js)?;
    654     let exec = WasmSqlExecutor::new();
    655     let out = radroots_replica_db::media_image::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    656     value_to_js(out)
    657 }
    658 
    659 #[wasm_bindgen(js_name = replica_db_media_image_delete)]
    660 pub fn replica_db_media_image_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    661     let opts: IMediaImageDelete = parse_json(opts_json).map_err(err_js)?;
    662     let exec = WasmSqlExecutor::new();
    663     let out = radroots_replica_db::media_image::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    664     value_to_js(out)
    665 }
    666 
    667 #[wasm_bindgen(js_name = replica_db_nostr_profile_create)]
    668 pub fn replica_db_nostr_profile_create(opts_json: &str) -> Result<JsValue, JsValue> {
    669     let opts: INostrProfileCreate = parse_json(opts_json).map_err(err_js)?;
    670     let exec = WasmSqlExecutor::new();
    671     let out =
    672         radroots_replica_db::nostr_profile::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    673     value_to_js(out)
    674 }
    675 
    676 #[wasm_bindgen(js_name = replica_db_nostr_profile_find_one)]
    677 pub fn replica_db_nostr_profile_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    678     let opts: INostrProfileFindOne = parse_json(opts_json).map_err(err_js)?;
    679     let exec = WasmSqlExecutor::new();
    680     let out =
    681         radroots_replica_db::nostr_profile::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    682     value_to_js(out)
    683 }
    684 
    685 #[wasm_bindgen(js_name = replica_db_nostr_profile_find_many)]
    686 pub fn replica_db_nostr_profile_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    687     let opts: INostrProfileFindMany = parse_json(opts_json).map_err(err_js)?;
    688     let exec = WasmSqlExecutor::new();
    689     let out =
    690         radroots_replica_db::nostr_profile::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    691     value_to_js(out)
    692 }
    693 
    694 #[wasm_bindgen(js_name = replica_db_nostr_profile_update)]
    695 pub fn replica_db_nostr_profile_update(opts_json: &str) -> Result<JsValue, JsValue> {
    696     let opts: INostrProfileUpdate = parse_json(opts_json).map_err(err_js)?;
    697     let exec = WasmSqlExecutor::new();
    698     let out =
    699         radroots_replica_db::nostr_profile::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    700     value_to_js(out)
    701 }
    702 
    703 #[wasm_bindgen(js_name = replica_db_nostr_profile_delete)]
    704 pub fn replica_db_nostr_profile_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    705     let opts: INostrProfileDelete = parse_json(opts_json).map_err(err_js)?;
    706     let exec = WasmSqlExecutor::new();
    707     let out =
    708         radroots_replica_db::nostr_profile::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    709     value_to_js(out)
    710 }
    711 
    712 #[wasm_bindgen(js_name = replica_db_nostr_event_head_create)]
    713 pub fn replica_db_nostr_event_head_create(opts_json: &str) -> Result<JsValue, JsValue> {
    714     let opts: INostrEventHeadCreate = parse_json(opts_json).map_err(err_js)?;
    715     let exec = WasmSqlExecutor::new();
    716     let out =
    717         radroots_replica_db::nostr_event_head::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    718     value_to_js(out)
    719 }
    720 
    721 #[wasm_bindgen(js_name = replica_db_nostr_event_head_find_one)]
    722 pub fn replica_db_nostr_event_head_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    723     let opts: INostrEventHeadFindOne = parse_json(opts_json).map_err(err_js)?;
    724     let exec = WasmSqlExecutor::new();
    725     let out =
    726         radroots_replica_db::nostr_event_head::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    727     value_to_js(out)
    728 }
    729 
    730 #[wasm_bindgen(js_name = replica_db_nostr_event_head_find_many)]
    731 pub fn replica_db_nostr_event_head_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    732     let opts: INostrEventHeadFindMany = parse_json(opts_json).map_err(err_js)?;
    733     let exec = WasmSqlExecutor::new();
    734     let out = radroots_replica_db::nostr_event_head::find_many(&exec, &opts)
    735         .map_err(|e| err_js(e.err))?;
    736     value_to_js(out)
    737 }
    738 
    739 #[wasm_bindgen(js_name = replica_db_nostr_event_head_update)]
    740 pub fn replica_db_nostr_event_head_update(opts_json: &str) -> Result<JsValue, JsValue> {
    741     let opts: INostrEventHeadUpdate = parse_json(opts_json).map_err(err_js)?;
    742     let exec = WasmSqlExecutor::new();
    743     let out =
    744         radroots_replica_db::nostr_event_head::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    745     value_to_js(out)
    746 }
    747 
    748 #[wasm_bindgen(js_name = replica_db_nostr_event_head_delete)]
    749 pub fn replica_db_nostr_event_head_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    750     let opts: INostrEventHeadDelete = parse_json(opts_json).map_err(err_js)?;
    751     let exec = WasmSqlExecutor::new();
    752     let out =
    753         radroots_replica_db::nostr_event_head::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    754     value_to_js(out)
    755 }
    756 
    757 #[wasm_bindgen(js_name = replica_db_nostr_relay_create)]
    758 pub fn replica_db_nostr_relay_create(opts_json: &str) -> Result<JsValue, JsValue> {
    759     let opts: INostrRelayCreate = parse_json(opts_json).map_err(err_js)?;
    760     let exec = WasmSqlExecutor::new();
    761     let out = radroots_replica_db::nostr_relay::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    762     value_to_js(out)
    763 }
    764 
    765 #[wasm_bindgen(js_name = replica_db_nostr_relay_find_one)]
    766 pub fn replica_db_nostr_relay_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    767     let opts: INostrRelayFindOne = parse_json(opts_json).map_err(err_js)?;
    768     let exec = WasmSqlExecutor::new();
    769     let out =
    770         radroots_replica_db::nostr_relay::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    771     value_to_js(out)
    772 }
    773 
    774 #[wasm_bindgen(js_name = replica_db_nostr_relay_find_many)]
    775 pub fn replica_db_nostr_relay_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    776     let opts: INostrRelayFindMany = parse_json(opts_json).map_err(err_js)?;
    777     let exec = WasmSqlExecutor::new();
    778     let out =
    779         radroots_replica_db::nostr_relay::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    780     value_to_js(out)
    781 }
    782 
    783 #[wasm_bindgen(js_name = replica_db_nostr_relay_update)]
    784 pub fn replica_db_nostr_relay_update(opts_json: &str) -> Result<JsValue, JsValue> {
    785     let opts: INostrRelayUpdate = parse_json(opts_json).map_err(err_js)?;
    786     let exec = WasmSqlExecutor::new();
    787     let out = radroots_replica_db::nostr_relay::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    788     value_to_js(out)
    789 }
    790 
    791 #[wasm_bindgen(js_name = replica_db_nostr_relay_delete)]
    792 pub fn replica_db_nostr_relay_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    793     let opts: INostrRelayDelete = parse_json(opts_json).map_err(err_js)?;
    794     let exec = WasmSqlExecutor::new();
    795     let out = radroots_replica_db::nostr_relay::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    796     value_to_js(out)
    797 }
    798 
    799 #[wasm_bindgen(js_name = replica_db_trade_product_create)]
    800 pub fn replica_db_trade_product_create(opts_json: &str) -> Result<JsValue, JsValue> {
    801     let opts: ITradeProductCreate = parse_json(opts_json).map_err(err_js)?;
    802     let exec = WasmSqlExecutor::new();
    803     let out =
    804         radroots_replica_db::trade_product::create(&exec, &opts).map_err(|e| err_js(e.err))?;
    805     value_to_js(out)
    806 }
    807 
    808 #[wasm_bindgen(js_name = replica_db_trade_product_find_one)]
    809 pub fn replica_db_trade_product_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    810     let opts: ITradeProductFindOne = parse_json(opts_json).map_err(err_js)?;
    811     let exec = WasmSqlExecutor::new();
    812     let out =
    813         radroots_replica_db::trade_product::find_one(&exec, &opts).map_err(|e| err_js(e.err))?;
    814     value_to_js(out)
    815 }
    816 
    817 #[wasm_bindgen(js_name = replica_db_trade_product_find_many)]
    818 pub fn replica_db_trade_product_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    819     let opts: ITradeProductFindMany = parse_json(opts_json).map_err(err_js)?;
    820     let exec = WasmSqlExecutor::new();
    821     let out =
    822         radroots_replica_db::trade_product::find_many(&exec, &opts).map_err(|e| err_js(e.err))?;
    823     value_to_js(out)
    824 }
    825 
    826 #[wasm_bindgen(js_name = replica_db_trade_product_update)]
    827 pub fn replica_db_trade_product_update(opts_json: &str) -> Result<JsValue, JsValue> {
    828     let opts: ITradeProductUpdate = parse_json(opts_json).map_err(err_js)?;
    829     let exec = WasmSqlExecutor::new();
    830     let out =
    831         radroots_replica_db::trade_product::update(&exec, &opts).map_err(|e| err_js(e.err))?;
    832     value_to_js(out)
    833 }
    834 
    835 #[wasm_bindgen(js_name = replica_db_trade_product_delete)]
    836 pub fn replica_db_trade_product_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    837     let opts: ITradeProductDelete = parse_json(opts_json).map_err(err_js)?;
    838     let exec = WasmSqlExecutor::new();
    839     let out =
    840         radroots_replica_db::trade_product::delete(&exec, &opts).map_err(|e| err_js(e.err))?;
    841     value_to_js(out)
    842 }
    843 
    844 #[wasm_bindgen(js_name = replica_db_nostr_profile_relay_set)]
    845 pub fn replica_db_nostr_profile_relay_set(opts_json: &str) -> Result<JsValue, JsValue> {
    846     let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?;
    847     let exec = WasmSqlExecutor::new();
    848     let out =
    849         radroots_replica_db::nostr_profile_relay::set(&exec, &opts).map_err(|e| err_js(e.err))?;
    850     value_to_js(out)
    851 }
    852 
    853 #[wasm_bindgen(js_name = replica_db_nostr_profile_relay_unset)]
    854 pub fn replica_db_nostr_profile_relay_unset(opts_json: &str) -> Result<JsValue, JsValue> {
    855     let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?;
    856     let exec = WasmSqlExecutor::new();
    857     let out =
    858         radroots_replica_db::nostr_profile_relay::unset(&exec, &opts).map_err(|e| err_js(e.err))?;
    859     value_to_js(out)
    860 }
    861 
    862 #[wasm_bindgen(js_name = replica_db_trade_product_location_set)]
    863 pub fn replica_db_trade_product_location_set(opts_json: &str) -> Result<JsValue, JsValue> {
    864     let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?;
    865     let exec = WasmSqlExecutor::new();
    866     let out = radroots_replica_db::trade_product_location::set(&exec, &opts)
    867         .map_err(|e| err_js(e.err))?;
    868     value_to_js(out)
    869 }
    870 
    871 #[wasm_bindgen(js_name = replica_db_trade_product_location_unset)]
    872 pub fn replica_db_trade_product_location_unset(opts_json: &str) -> Result<JsValue, JsValue> {
    873     let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?;
    874     let exec = WasmSqlExecutor::new();
    875     let out = radroots_replica_db::trade_product_location::unset(&exec, &opts)
    876         .map_err(|e| err_js(e.err))?;
    877     value_to_js(out)
    878 }
    879 
    880 #[wasm_bindgen(js_name = replica_db_trade_product_media_set)]
    881 pub fn replica_db_trade_product_media_set(opts_json: &str) -> Result<JsValue, JsValue> {
    882     let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?;
    883     let exec = WasmSqlExecutor::new();
    884     let out =
    885         radroots_replica_db::trade_product_media::set(&exec, &opts).map_err(|e| err_js(e.err))?;
    886     value_to_js(out)
    887 }
    888 
    889 #[wasm_bindgen(js_name = replica_db_trade_product_media_unset)]
    890 pub fn replica_db_trade_product_media_unset(opts_json: &str) -> Result<JsValue, JsValue> {
    891     let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?;
    892     let exec = WasmSqlExecutor::new();
    893     let out =
    894         radroots_replica_db::trade_product_media::unset(&exec, &opts).map_err(|e| err_js(e.err))?;
    895     value_to_js(out)
    896 }