lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README

wasm_impl.rs (39768B)


      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_store::migrations;
      6 use radroots_replica_store::{ReplicaStoreExportManifestRs, 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_schema::farm::{
     17     IFarmCreate, IFarmDelete, IFarmFindMany, IFarmFindOne, IFarmUpdate,
     18 };
     19 
     20 use radroots_replica_schema::farm_gcs_location::{
     21     IFarmGcsLocationCreate, IFarmGcsLocationDelete, IFarmGcsLocationFindMany,
     22     IFarmGcsLocationFindOne, IFarmGcsLocationUpdate,
     23 };
     24 
     25 use radroots_replica_schema::farm_member::{
     26     IFarmMemberCreate, IFarmMemberDelete, IFarmMemberFindMany, IFarmMemberFindOne,
     27     IFarmMemberUpdate,
     28 };
     29 
     30 use radroots_replica_schema::farm_member_claim::{
     31     IFarmMemberClaimCreate, IFarmMemberClaimDelete, IFarmMemberClaimFindMany,
     32     IFarmMemberClaimFindOne, IFarmMemberClaimUpdate,
     33 };
     34 
     35 use radroots_replica_schema::farm_tag::{
     36     IFarmTagCreate, IFarmTagDelete, IFarmTagFindMany, IFarmTagFindOne, IFarmTagUpdate,
     37 };
     38 
     39 use radroots_replica_schema::gcs_location::{
     40     IGcsLocationCreate, IGcsLocationDelete, IGcsLocationFindMany, IGcsLocationFindOne,
     41     IGcsLocationUpdate,
     42 };
     43 
     44 use radroots_replica_schema::log_error::{
     45     ILogErrorCreate, ILogErrorDelete, ILogErrorFindMany, ILogErrorFindOne, ILogErrorUpdate,
     46 };
     47 
     48 use radroots_replica_schema::media_image::{
     49     IMediaImageCreate, IMediaImageDelete, IMediaImageFindMany, IMediaImageFindOne,
     50     IMediaImageUpdate,
     51 };
     52 
     53 use radroots_replica_schema::nostr_profile::{
     54     INostrProfileCreate, INostrProfileDelete, INostrProfileFindMany, INostrProfileFindOne,
     55     INostrProfileUpdate,
     56 };
     57 
     58 use radroots_replica_schema::nostr_event_head::{
     59     INostrEventHeadCreate, INostrEventHeadDelete, INostrEventHeadFindMany, INostrEventHeadFindOne,
     60     INostrEventHeadUpdate,
     61 };
     62 
     63 use radroots_replica_schema::nostr_relay::{
     64     INostrRelayCreate, INostrRelayDelete, INostrRelayFindMany, INostrRelayFindOne,
     65     INostrRelayUpdate,
     66 };
     67 
     68 use radroots_replica_schema::trade_product::{
     69     ITradeProductCreate, ITradeProductDelete, ITradeProductFindMany, ITradeProductFindOne,
     70     ITradeProductUpdate,
     71 };
     72 
     73 use radroots_replica_schema::plot::{
     74     IPlotCreate, IPlotDelete, IPlotFindMany, IPlotFindOne, IPlotUpdate,
     75 };
     76 
     77 use radroots_replica_schema::plot_gcs_location::{
     78     IPlotGcsLocationCreate, IPlotGcsLocationDelete, IPlotGcsLocationFindMany,
     79     IPlotGcsLocationFindOne, IPlotGcsLocationUpdate,
     80 };
     81 
     82 use radroots_replica_schema::plot_tag::{
     83     IPlotTagCreate, IPlotTagDelete, IPlotTagFindMany, IPlotTagFindOne, IPlotTagUpdate,
     84 };
     85 
     86 use radroots_replica_schema::nostr_profile_relay::INostrProfileRelayRelation;
     87 
     88 use radroots_replica_schema::trade_product_location::ITradeProductLocationRelation;
     89 
     90 use radroots_replica_schema::trade_product_media::ITradeProductMediaRelation;
     91 
     92 #[wasm_bindgen(js_name = replica_store_run_migrations)]
     93 pub fn replica_store_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_store_reset_database)]
     99 pub fn replica_store_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_store_export_json)]
    105 pub fn replica_store_export_json() -> Result<JsValue, JsValue> {
    106     let exec = WasmSqlExecutor::new();
    107     let dump = radroots_replica_store::backup::export_database_backup(&exec).map_err(err_js)?;
    108     value_to_js(dump)
    109 }
    110 
    111 #[wasm_bindgen(js_name = replica_store_import_json)]
    112 pub fn replica_store_import_json(dump_json: &str) -> Result<(), JsValue> {
    113     let exec = WasmSqlExecutor::new();
    114     radroots_replica_store::backup::restore_database_backup_json(&exec, dump_json).map_err(err_js)
    115 }
    116 
    117 #[wasm_bindgen(js_name = replica_store_export_begin)]
    118 pub fn replica_store_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_store_export_finish)]
    132 pub fn replica_store_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: ReplicaStoreExportManifestRs) -> 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: ReplicaStoreExportManifestRs,
    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_store::ReplicaStoreExportManifestRs {
    187             export_version: "1".to_string(),
    188             replica_store_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_store_farm_create)]
    207 pub fn replica_store_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_store::farm::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    211     value_to_js(out)
    212 }
    213 
    214 #[wasm_bindgen(js_name = replica_store_farm_find_one)]
    215 pub fn replica_store_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_store::farm::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    219     value_to_js(out)
    220 }
    221 
    222 #[wasm_bindgen(js_name = replica_store_farm_find_many)]
    223 pub fn replica_store_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_store::farm::find_many(&exec, &opts).map_err(|e| err_js(e.error))?;
    227     value_to_js(out)
    228 }
    229 
    230 #[wasm_bindgen(js_name = replica_store_farm_update)]
    231 pub fn replica_store_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_store::farm::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    235     value_to_js(out)
    236 }
    237 
    238 #[wasm_bindgen(js_name = replica_store_farm_delete)]
    239 pub fn replica_store_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_store::farm::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    243     value_to_js(out)
    244 }
    245 
    246 #[wasm_bindgen(js_name = replica_store_plot_create)]
    247 pub fn replica_store_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_store::plot::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    251     value_to_js(out)
    252 }
    253 
    254 #[wasm_bindgen(js_name = replica_store_plot_find_one)]
    255 pub fn replica_store_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_store::plot::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    259     value_to_js(out)
    260 }
    261 
    262 #[wasm_bindgen(js_name = replica_store_plot_find_many)]
    263 pub fn replica_store_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_store::plot::find_many(&exec, &opts).map_err(|e| err_js(e.error))?;
    267     value_to_js(out)
    268 }
    269 
    270 #[wasm_bindgen(js_name = replica_store_plot_update)]
    271 pub fn replica_store_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_store::plot::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    275     value_to_js(out)
    276 }
    277 
    278 #[wasm_bindgen(js_name = replica_store_plot_delete)]
    279 pub fn replica_store_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_store::plot::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    283     value_to_js(out)
    284 }
    285 
    286 #[wasm_bindgen(js_name = replica_store_gcs_location_create)]
    287 pub fn replica_store_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 =
    291         radroots_replica_store::gcs_location::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    292     value_to_js(out)
    293 }
    294 
    295 #[wasm_bindgen(js_name = replica_store_gcs_location_find_one)]
    296 pub fn replica_store_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    297     let opts: IGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?;
    298     let exec = WasmSqlExecutor::new();
    299     let out = radroots_replica_store::gcs_location::find_one(&exec, &opts)
    300         .map_err(|e| err_js(e.error))?;
    301     value_to_js(out)
    302 }
    303 
    304 #[wasm_bindgen(js_name = replica_store_gcs_location_find_many)]
    305 pub fn replica_store_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    306     let opts: IGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?;
    307     let exec = WasmSqlExecutor::new();
    308     let out = radroots_replica_store::gcs_location::find_many(&exec, &opts)
    309         .map_err(|e| err_js(e.error))?;
    310     value_to_js(out)
    311 }
    312 
    313 #[wasm_bindgen(js_name = replica_store_gcs_location_update)]
    314 pub fn replica_store_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> {
    315     let opts: IGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?;
    316     let exec = WasmSqlExecutor::new();
    317     let out =
    318         radroots_replica_store::gcs_location::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    319     value_to_js(out)
    320 }
    321 
    322 #[wasm_bindgen(js_name = replica_store_gcs_location_delete)]
    323 pub fn replica_store_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    324     let opts: IGcsLocationDelete = parse_json(opts_json).map_err(err_js)?;
    325     let exec = WasmSqlExecutor::new();
    326     let out =
    327         radroots_replica_store::gcs_location::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    328     value_to_js(out)
    329 }
    330 
    331 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_create)]
    332 pub fn replica_store_farm_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> {
    333     let opts: IFarmGcsLocationCreate = parse_json(opts_json).map_err(err_js)?;
    334     let exec = WasmSqlExecutor::new();
    335     let out = radroots_replica_store::farm_gcs_location::create(&exec, &opts)
    336         .map_err(|e| err_js(e.error))?;
    337     value_to_js(out)
    338 }
    339 
    340 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_find_one)]
    341 pub fn replica_store_farm_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    342     let opts: IFarmGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?;
    343     let exec = WasmSqlExecutor::new();
    344     let out = radroots_replica_store::farm_gcs_location::find_one(&exec, &opts)
    345         .map_err(|e| err_js(e.error))?;
    346     value_to_js(out)
    347 }
    348 
    349 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_find_many)]
    350 pub fn replica_store_farm_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    351     let opts: IFarmGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?;
    352     let exec = WasmSqlExecutor::new();
    353     let out = radroots_replica_store::farm_gcs_location::find_many(&exec, &opts)
    354         .map_err(|e| err_js(e.error))?;
    355     value_to_js(out)
    356 }
    357 
    358 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_update)]
    359 pub fn replica_store_farm_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> {
    360     let opts: IFarmGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?;
    361     let exec = WasmSqlExecutor::new();
    362     let out = radroots_replica_store::farm_gcs_location::update(&exec, &opts)
    363         .map_err(|e| err_js(e.error))?;
    364     value_to_js(out)
    365 }
    366 
    367 #[wasm_bindgen(js_name = replica_store_farm_gcs_location_delete)]
    368 pub fn replica_store_farm_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    369     let opts: IFarmGcsLocationDelete = parse_json(opts_json).map_err(err_js)?;
    370     let exec = WasmSqlExecutor::new();
    371     let out = radroots_replica_store::farm_gcs_location::delete(&exec, &opts)
    372         .map_err(|e| err_js(e.error))?;
    373     value_to_js(out)
    374 }
    375 
    376 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_create)]
    377 pub fn replica_store_plot_gcs_location_create(opts_json: &str) -> Result<JsValue, JsValue> {
    378     let opts: IPlotGcsLocationCreate = parse_json(opts_json).map_err(err_js)?;
    379     let exec = WasmSqlExecutor::new();
    380     let out = radroots_replica_store::plot_gcs_location::create(&exec, &opts)
    381         .map_err(|e| err_js(e.error))?;
    382     value_to_js(out)
    383 }
    384 
    385 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_find_one)]
    386 pub fn replica_store_plot_gcs_location_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    387     let opts: IPlotGcsLocationFindOne = parse_json(opts_json).map_err(err_js)?;
    388     let exec = WasmSqlExecutor::new();
    389     let out = radroots_replica_store::plot_gcs_location::find_one(&exec, &opts)
    390         .map_err(|e| err_js(e.error))?;
    391     value_to_js(out)
    392 }
    393 
    394 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_find_many)]
    395 pub fn replica_store_plot_gcs_location_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    396     let opts: IPlotGcsLocationFindMany = parse_json(opts_json).map_err(err_js)?;
    397     let exec = WasmSqlExecutor::new();
    398     let out = radroots_replica_store::plot_gcs_location::find_many(&exec, &opts)
    399         .map_err(|e| err_js(e.error))?;
    400     value_to_js(out)
    401 }
    402 
    403 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_update)]
    404 pub fn replica_store_plot_gcs_location_update(opts_json: &str) -> Result<JsValue, JsValue> {
    405     let opts: IPlotGcsLocationUpdate = parse_json(opts_json).map_err(err_js)?;
    406     let exec = WasmSqlExecutor::new();
    407     let out = radroots_replica_store::plot_gcs_location::update(&exec, &opts)
    408         .map_err(|e| err_js(e.error))?;
    409     value_to_js(out)
    410 }
    411 
    412 #[wasm_bindgen(js_name = replica_store_plot_gcs_location_delete)]
    413 pub fn replica_store_plot_gcs_location_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    414     let opts: IPlotGcsLocationDelete = parse_json(opts_json).map_err(err_js)?;
    415     let exec = WasmSqlExecutor::new();
    416     let out = radroots_replica_store::plot_gcs_location::delete(&exec, &opts)
    417         .map_err(|e| err_js(e.error))?;
    418     value_to_js(out)
    419 }
    420 
    421 #[wasm_bindgen(js_name = replica_store_farm_tag_create)]
    422 pub fn replica_store_farm_tag_create(opts_json: &str) -> Result<JsValue, JsValue> {
    423     let opts: IFarmTagCreate = parse_json(opts_json).map_err(err_js)?;
    424     let exec = WasmSqlExecutor::new();
    425     let out =
    426         radroots_replica_store::farm_tag::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    427     value_to_js(out)
    428 }
    429 
    430 #[wasm_bindgen(js_name = replica_store_farm_tag_find_one)]
    431 pub fn replica_store_farm_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    432     let opts: IFarmTagFindOne = parse_json(opts_json).map_err(err_js)?;
    433     let exec = WasmSqlExecutor::new();
    434     let out =
    435         radroots_replica_store::farm_tag::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    436     value_to_js(out)
    437 }
    438 
    439 #[wasm_bindgen(js_name = replica_store_farm_tag_find_many)]
    440 pub fn replica_store_farm_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    441     let opts: IFarmTagFindMany = parse_json(opts_json).map_err(err_js)?;
    442     let exec = WasmSqlExecutor::new();
    443     let out =
    444         radroots_replica_store::farm_tag::find_many(&exec, &opts).map_err(|e| err_js(e.error))?;
    445     value_to_js(out)
    446 }
    447 
    448 #[wasm_bindgen(js_name = replica_store_farm_tag_update)]
    449 pub fn replica_store_farm_tag_update(opts_json: &str) -> Result<JsValue, JsValue> {
    450     let opts: IFarmTagUpdate = parse_json(opts_json).map_err(err_js)?;
    451     let exec = WasmSqlExecutor::new();
    452     let out =
    453         radroots_replica_store::farm_tag::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    454     value_to_js(out)
    455 }
    456 
    457 #[wasm_bindgen(js_name = replica_store_farm_tag_delete)]
    458 pub fn replica_store_farm_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    459     let opts: IFarmTagDelete = parse_json(opts_json).map_err(err_js)?;
    460     let exec = WasmSqlExecutor::new();
    461     let out =
    462         radroots_replica_store::farm_tag::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    463     value_to_js(out)
    464 }
    465 
    466 #[wasm_bindgen(js_name = replica_store_plot_tag_create)]
    467 pub fn replica_store_plot_tag_create(opts_json: &str) -> Result<JsValue, JsValue> {
    468     let opts: IPlotTagCreate = parse_json(opts_json).map_err(err_js)?;
    469     let exec = WasmSqlExecutor::new();
    470     let out =
    471         radroots_replica_store::plot_tag::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    472     value_to_js(out)
    473 }
    474 
    475 #[wasm_bindgen(js_name = replica_store_plot_tag_find_one)]
    476 pub fn replica_store_plot_tag_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    477     let opts: IPlotTagFindOne = parse_json(opts_json).map_err(err_js)?;
    478     let exec = WasmSqlExecutor::new();
    479     let out =
    480         radroots_replica_store::plot_tag::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    481     value_to_js(out)
    482 }
    483 
    484 #[wasm_bindgen(js_name = replica_store_plot_tag_find_many)]
    485 pub fn replica_store_plot_tag_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    486     let opts: IPlotTagFindMany = parse_json(opts_json).map_err(err_js)?;
    487     let exec = WasmSqlExecutor::new();
    488     let out =
    489         radroots_replica_store::plot_tag::find_many(&exec, &opts).map_err(|e| err_js(e.error))?;
    490     value_to_js(out)
    491 }
    492 
    493 #[wasm_bindgen(js_name = replica_store_plot_tag_update)]
    494 pub fn replica_store_plot_tag_update(opts_json: &str) -> Result<JsValue, JsValue> {
    495     let opts: IPlotTagUpdate = parse_json(opts_json).map_err(err_js)?;
    496     let exec = WasmSqlExecutor::new();
    497     let out =
    498         radroots_replica_store::plot_tag::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    499     value_to_js(out)
    500 }
    501 
    502 #[wasm_bindgen(js_name = replica_store_plot_tag_delete)]
    503 pub fn replica_store_plot_tag_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    504     let opts: IPlotTagDelete = parse_json(opts_json).map_err(err_js)?;
    505     let exec = WasmSqlExecutor::new();
    506     let out =
    507         radroots_replica_store::plot_tag::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    508     value_to_js(out)
    509 }
    510 
    511 #[wasm_bindgen(js_name = replica_store_farm_member_create)]
    512 pub fn replica_store_farm_member_create(opts_json: &str) -> Result<JsValue, JsValue> {
    513     let opts: IFarmMemberCreate = parse_json(opts_json).map_err(err_js)?;
    514     let exec = WasmSqlExecutor::new();
    515     let out =
    516         radroots_replica_store::farm_member::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    517     value_to_js(out)
    518 }
    519 
    520 #[wasm_bindgen(js_name = replica_store_farm_member_find_one)]
    521 pub fn replica_store_farm_member_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    522     let opts: IFarmMemberFindOne = parse_json(opts_json).map_err(err_js)?;
    523     let exec = WasmSqlExecutor::new();
    524     let out =
    525         radroots_replica_store::farm_member::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    526     value_to_js(out)
    527 }
    528 
    529 #[wasm_bindgen(js_name = replica_store_farm_member_find_many)]
    530 pub fn replica_store_farm_member_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    531     let opts: IFarmMemberFindMany = parse_json(opts_json).map_err(err_js)?;
    532     let exec = WasmSqlExecutor::new();
    533     let out = radroots_replica_store::farm_member::find_many(&exec, &opts)
    534         .map_err(|e| err_js(e.error))?;
    535     value_to_js(out)
    536 }
    537 
    538 #[wasm_bindgen(js_name = replica_store_farm_member_update)]
    539 pub fn replica_store_farm_member_update(opts_json: &str) -> Result<JsValue, JsValue> {
    540     let opts: IFarmMemberUpdate = parse_json(opts_json).map_err(err_js)?;
    541     let exec = WasmSqlExecutor::new();
    542     let out =
    543         radroots_replica_store::farm_member::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    544     value_to_js(out)
    545 }
    546 
    547 #[wasm_bindgen(js_name = replica_store_farm_member_delete)]
    548 pub fn replica_store_farm_member_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    549     let opts: IFarmMemberDelete = parse_json(opts_json).map_err(err_js)?;
    550     let exec = WasmSqlExecutor::new();
    551     let out =
    552         radroots_replica_store::farm_member::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    553     value_to_js(out)
    554 }
    555 
    556 #[wasm_bindgen(js_name = replica_store_farm_member_claim_create)]
    557 pub fn replica_store_farm_member_claim_create(opts_json: &str) -> Result<JsValue, JsValue> {
    558     let opts: IFarmMemberClaimCreate = parse_json(opts_json).map_err(err_js)?;
    559     let exec = WasmSqlExecutor::new();
    560     let out = radroots_replica_store::farm_member_claim::create(&exec, &opts)
    561         .map_err(|e| err_js(e.error))?;
    562     value_to_js(out)
    563 }
    564 
    565 #[wasm_bindgen(js_name = replica_store_farm_member_claim_find_one)]
    566 pub fn replica_store_farm_member_claim_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    567     let opts: IFarmMemberClaimFindOne = parse_json(opts_json).map_err(err_js)?;
    568     let exec = WasmSqlExecutor::new();
    569     let out = radroots_replica_store::farm_member_claim::find_one(&exec, &opts)
    570         .map_err(|e| err_js(e.error))?;
    571     value_to_js(out)
    572 }
    573 
    574 #[wasm_bindgen(js_name = replica_store_farm_member_claim_find_many)]
    575 pub fn replica_store_farm_member_claim_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    576     let opts: IFarmMemberClaimFindMany = parse_json(opts_json).map_err(err_js)?;
    577     let exec = WasmSqlExecutor::new();
    578     let out = radroots_replica_store::farm_member_claim::find_many(&exec, &opts)
    579         .map_err(|e| err_js(e.error))?;
    580     value_to_js(out)
    581 }
    582 
    583 #[wasm_bindgen(js_name = replica_store_farm_member_claim_update)]
    584 pub fn replica_store_farm_member_claim_update(opts_json: &str) -> Result<JsValue, JsValue> {
    585     let opts: IFarmMemberClaimUpdate = parse_json(opts_json).map_err(err_js)?;
    586     let exec = WasmSqlExecutor::new();
    587     let out = radroots_replica_store::farm_member_claim::update(&exec, &opts)
    588         .map_err(|e| err_js(e.error))?;
    589     value_to_js(out)
    590 }
    591 
    592 #[wasm_bindgen(js_name = replica_store_farm_member_claim_delete)]
    593 pub fn replica_store_farm_member_claim_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    594     let opts: IFarmMemberClaimDelete = parse_json(opts_json).map_err(err_js)?;
    595     let exec = WasmSqlExecutor::new();
    596     let out = radroots_replica_store::farm_member_claim::delete(&exec, &opts)
    597         .map_err(|e| err_js(e.error))?;
    598     value_to_js(out)
    599 }
    600 
    601 #[wasm_bindgen(js_name = replica_store_log_error_create)]
    602 pub fn replica_store_log_error_create(opts_json: &str) -> Result<JsValue, JsValue> {
    603     let opts: ILogErrorCreate = parse_json(opts_json).map_err(err_js)?;
    604     let exec = WasmSqlExecutor::new();
    605     let out =
    606         radroots_replica_store::log_error::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    607     value_to_js(out)
    608 }
    609 
    610 #[wasm_bindgen(js_name = replica_store_log_error_find_one)]
    611 pub fn replica_store_log_error_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    612     let opts: ILogErrorFindOne = parse_json(opts_json).map_err(err_js)?;
    613     let exec = WasmSqlExecutor::new();
    614     let out =
    615         radroots_replica_store::log_error::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    616     value_to_js(out)
    617 }
    618 
    619 #[wasm_bindgen(js_name = replica_store_log_error_find_many)]
    620 pub fn replica_store_log_error_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    621     let opts: ILogErrorFindMany = parse_json(opts_json).map_err(err_js)?;
    622     let exec = WasmSqlExecutor::new();
    623     let out =
    624         radroots_replica_store::log_error::find_many(&exec, &opts).map_err(|e| err_js(e.error))?;
    625     value_to_js(out)
    626 }
    627 
    628 #[wasm_bindgen(js_name = replica_store_log_error_update)]
    629 pub fn replica_store_log_error_update(opts_json: &str) -> Result<JsValue, JsValue> {
    630     let opts: ILogErrorUpdate = parse_json(opts_json).map_err(err_js)?;
    631     let exec = WasmSqlExecutor::new();
    632     let out =
    633         radroots_replica_store::log_error::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    634     value_to_js(out)
    635 }
    636 
    637 #[wasm_bindgen(js_name = replica_store_log_error_delete)]
    638 pub fn replica_store_log_error_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    639     let opts: ILogErrorDelete = parse_json(opts_json).map_err(err_js)?;
    640     let exec = WasmSqlExecutor::new();
    641     let out =
    642         radroots_replica_store::log_error::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    643     value_to_js(out)
    644 }
    645 
    646 #[wasm_bindgen(js_name = replica_store_media_image_create)]
    647 pub fn replica_store_media_image_create(opts_json: &str) -> Result<JsValue, JsValue> {
    648     let opts: IMediaImageCreate = parse_json(opts_json).map_err(err_js)?;
    649     let exec = WasmSqlExecutor::new();
    650     let out =
    651         radroots_replica_store::media_image::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    652     value_to_js(out)
    653 }
    654 
    655 #[wasm_bindgen(js_name = replica_store_media_image_find_one)]
    656 pub fn replica_store_media_image_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    657     let opts: IMediaImageFindOne = parse_json(opts_json).map_err(err_js)?;
    658     let exec = WasmSqlExecutor::new();
    659     let out =
    660         radroots_replica_store::media_image::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    661     value_to_js(out)
    662 }
    663 
    664 #[wasm_bindgen(js_name = replica_store_media_image_find_many)]
    665 pub fn replica_store_media_image_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    666     let opts: IMediaImageFindMany = parse_json(opts_json).map_err(err_js)?;
    667     let exec = WasmSqlExecutor::new();
    668     let out = radroots_replica_store::media_image::find_many(&exec, &opts)
    669         .map_err(|e| err_js(e.error))?;
    670     value_to_js(out)
    671 }
    672 
    673 #[wasm_bindgen(js_name = replica_store_media_image_update)]
    674 pub fn replica_store_media_image_update(opts_json: &str) -> Result<JsValue, JsValue> {
    675     let opts: IMediaImageUpdate = parse_json(opts_json).map_err(err_js)?;
    676     let exec = WasmSqlExecutor::new();
    677     let out =
    678         radroots_replica_store::media_image::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    679     value_to_js(out)
    680 }
    681 
    682 #[wasm_bindgen(js_name = replica_store_media_image_delete)]
    683 pub fn replica_store_media_image_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    684     let opts: IMediaImageDelete = parse_json(opts_json).map_err(err_js)?;
    685     let exec = WasmSqlExecutor::new();
    686     let out =
    687         radroots_replica_store::media_image::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    688     value_to_js(out)
    689 }
    690 
    691 #[wasm_bindgen(js_name = replica_store_nostr_profile_create)]
    692 pub fn replica_store_nostr_profile_create(opts_json: &str) -> Result<JsValue, JsValue> {
    693     let opts: INostrProfileCreate = parse_json(opts_json).map_err(err_js)?;
    694     let exec = WasmSqlExecutor::new();
    695     let out =
    696         radroots_replica_store::nostr_profile::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    697     value_to_js(out)
    698 }
    699 
    700 #[wasm_bindgen(js_name = replica_store_nostr_profile_find_one)]
    701 pub fn replica_store_nostr_profile_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    702     let opts: INostrProfileFindOne = parse_json(opts_json).map_err(err_js)?;
    703     let exec = WasmSqlExecutor::new();
    704     let out = radroots_replica_store::nostr_profile::find_one(&exec, &opts)
    705         .map_err(|e| err_js(e.error))?;
    706     value_to_js(out)
    707 }
    708 
    709 #[wasm_bindgen(js_name = replica_store_nostr_profile_find_many)]
    710 pub fn replica_store_nostr_profile_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    711     let opts: INostrProfileFindMany = parse_json(opts_json).map_err(err_js)?;
    712     let exec = WasmSqlExecutor::new();
    713     let out = radroots_replica_store::nostr_profile::find_many(&exec, &opts)
    714         .map_err(|e| err_js(e.error))?;
    715     value_to_js(out)
    716 }
    717 
    718 #[wasm_bindgen(js_name = replica_store_nostr_profile_update)]
    719 pub fn replica_store_nostr_profile_update(opts_json: &str) -> Result<JsValue, JsValue> {
    720     let opts: INostrProfileUpdate = parse_json(opts_json).map_err(err_js)?;
    721     let exec = WasmSqlExecutor::new();
    722     let out =
    723         radroots_replica_store::nostr_profile::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    724     value_to_js(out)
    725 }
    726 
    727 #[wasm_bindgen(js_name = replica_store_nostr_profile_delete)]
    728 pub fn replica_store_nostr_profile_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    729     let opts: INostrProfileDelete = parse_json(opts_json).map_err(err_js)?;
    730     let exec = WasmSqlExecutor::new();
    731     let out =
    732         radroots_replica_store::nostr_profile::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    733     value_to_js(out)
    734 }
    735 
    736 #[wasm_bindgen(js_name = replica_store_nostr_event_head_create)]
    737 pub fn replica_store_nostr_event_head_create(opts_json: &str) -> Result<JsValue, JsValue> {
    738     let opts: INostrEventHeadCreate = parse_json(opts_json).map_err(err_js)?;
    739     let exec = WasmSqlExecutor::new();
    740     let out = radroots_replica_store::nostr_event_head::create(&exec, &opts)
    741         .map_err(|e| err_js(e.error))?;
    742     value_to_js(out)
    743 }
    744 
    745 #[wasm_bindgen(js_name = replica_store_nostr_event_head_find_one)]
    746 pub fn replica_store_nostr_event_head_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    747     let opts: INostrEventHeadFindOne = parse_json(opts_json).map_err(err_js)?;
    748     let exec = WasmSqlExecutor::new();
    749     let out = radroots_replica_store::nostr_event_head::find_one(&exec, &opts)
    750         .map_err(|e| err_js(e.error))?;
    751     value_to_js(out)
    752 }
    753 
    754 #[wasm_bindgen(js_name = replica_store_nostr_event_head_find_many)]
    755 pub fn replica_store_nostr_event_head_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    756     let opts: INostrEventHeadFindMany = parse_json(opts_json).map_err(err_js)?;
    757     let exec = WasmSqlExecutor::new();
    758     let out = radroots_replica_store::nostr_event_head::find_many(&exec, &opts)
    759         .map_err(|e| err_js(e.error))?;
    760     value_to_js(out)
    761 }
    762 
    763 #[wasm_bindgen(js_name = replica_store_nostr_event_head_update)]
    764 pub fn replica_store_nostr_event_head_update(opts_json: &str) -> Result<JsValue, JsValue> {
    765     let opts: INostrEventHeadUpdate = parse_json(opts_json).map_err(err_js)?;
    766     let exec = WasmSqlExecutor::new();
    767     let out = radroots_replica_store::nostr_event_head::update(&exec, &opts)
    768         .map_err(|e| err_js(e.error))?;
    769     value_to_js(out)
    770 }
    771 
    772 #[wasm_bindgen(js_name = replica_store_nostr_event_head_delete)]
    773 pub fn replica_store_nostr_event_head_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    774     let opts: INostrEventHeadDelete = parse_json(opts_json).map_err(err_js)?;
    775     let exec = WasmSqlExecutor::new();
    776     let out = radroots_replica_store::nostr_event_head::delete(&exec, &opts)
    777         .map_err(|e| err_js(e.error))?;
    778     value_to_js(out)
    779 }
    780 
    781 #[wasm_bindgen(js_name = replica_store_nostr_relay_create)]
    782 pub fn replica_store_nostr_relay_create(opts_json: &str) -> Result<JsValue, JsValue> {
    783     let opts: INostrRelayCreate = parse_json(opts_json).map_err(err_js)?;
    784     let exec = WasmSqlExecutor::new();
    785     let out =
    786         radroots_replica_store::nostr_relay::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    787     value_to_js(out)
    788 }
    789 
    790 #[wasm_bindgen(js_name = replica_store_nostr_relay_find_one)]
    791 pub fn replica_store_nostr_relay_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    792     let opts: INostrRelayFindOne = parse_json(opts_json).map_err(err_js)?;
    793     let exec = WasmSqlExecutor::new();
    794     let out =
    795         radroots_replica_store::nostr_relay::find_one(&exec, &opts).map_err(|e| err_js(e.error))?;
    796     value_to_js(out)
    797 }
    798 
    799 #[wasm_bindgen(js_name = replica_store_nostr_relay_find_many)]
    800 pub fn replica_store_nostr_relay_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    801     let opts: INostrRelayFindMany = parse_json(opts_json).map_err(err_js)?;
    802     let exec = WasmSqlExecutor::new();
    803     let out = radroots_replica_store::nostr_relay::find_many(&exec, &opts)
    804         .map_err(|e| err_js(e.error))?;
    805     value_to_js(out)
    806 }
    807 
    808 #[wasm_bindgen(js_name = replica_store_nostr_relay_update)]
    809 pub fn replica_store_nostr_relay_update(opts_json: &str) -> Result<JsValue, JsValue> {
    810     let opts: INostrRelayUpdate = parse_json(opts_json).map_err(err_js)?;
    811     let exec = WasmSqlExecutor::new();
    812     let out =
    813         radroots_replica_store::nostr_relay::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    814     value_to_js(out)
    815 }
    816 
    817 #[wasm_bindgen(js_name = replica_store_nostr_relay_delete)]
    818 pub fn replica_store_nostr_relay_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    819     let opts: INostrRelayDelete = parse_json(opts_json).map_err(err_js)?;
    820     let exec = WasmSqlExecutor::new();
    821     let out =
    822         radroots_replica_store::nostr_relay::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    823     value_to_js(out)
    824 }
    825 
    826 #[wasm_bindgen(js_name = replica_store_trade_product_create)]
    827 pub fn replica_store_trade_product_create(opts_json: &str) -> Result<JsValue, JsValue> {
    828     let opts: ITradeProductCreate = parse_json(opts_json).map_err(err_js)?;
    829     let exec = WasmSqlExecutor::new();
    830     let out =
    831         radroots_replica_store::trade_product::create(&exec, &opts).map_err(|e| err_js(e.error))?;
    832     value_to_js(out)
    833 }
    834 
    835 #[wasm_bindgen(js_name = replica_store_trade_product_find_one)]
    836 pub fn replica_store_trade_product_find_one(opts_json: &str) -> Result<JsValue, JsValue> {
    837     let opts: ITradeProductFindOne = parse_json(opts_json).map_err(err_js)?;
    838     let exec = WasmSqlExecutor::new();
    839     let out = radroots_replica_store::trade_product::find_one(&exec, &opts)
    840         .map_err(|e| err_js(e.error))?;
    841     value_to_js(out)
    842 }
    843 
    844 #[wasm_bindgen(js_name = replica_store_trade_product_find_many)]
    845 pub fn replica_store_trade_product_find_many(opts_json: &str) -> Result<JsValue, JsValue> {
    846     let opts: ITradeProductFindMany = parse_json(opts_json).map_err(err_js)?;
    847     let exec = WasmSqlExecutor::new();
    848     let out = radroots_replica_store::trade_product::find_many(&exec, &opts)
    849         .map_err(|e| err_js(e.error))?;
    850     value_to_js(out)
    851 }
    852 
    853 #[wasm_bindgen(js_name = replica_store_trade_product_update)]
    854 pub fn replica_store_trade_product_update(opts_json: &str) -> Result<JsValue, JsValue> {
    855     let opts: ITradeProductUpdate = parse_json(opts_json).map_err(err_js)?;
    856     let exec = WasmSqlExecutor::new();
    857     let out =
    858         radroots_replica_store::trade_product::update(&exec, &opts).map_err(|e| err_js(e.error))?;
    859     value_to_js(out)
    860 }
    861 
    862 #[wasm_bindgen(js_name = replica_store_trade_product_delete)]
    863 pub fn replica_store_trade_product_delete(opts_json: &str) -> Result<JsValue, JsValue> {
    864     let opts: ITradeProductDelete = parse_json(opts_json).map_err(err_js)?;
    865     let exec = WasmSqlExecutor::new();
    866     let out =
    867         radroots_replica_store::trade_product::delete(&exec, &opts).map_err(|e| err_js(e.error))?;
    868     value_to_js(out)
    869 }
    870 
    871 #[wasm_bindgen(js_name = replica_store_nostr_profile_relay_set)]
    872 pub fn replica_store_nostr_profile_relay_set(opts_json: &str) -> Result<JsValue, JsValue> {
    873     let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?;
    874     let exec = WasmSqlExecutor::new();
    875     let out = radroots_replica_store::nostr_profile_relay::set(&exec, &opts)
    876         .map_err(|e| err_js(e.error))?;
    877     value_to_js(out)
    878 }
    879 
    880 #[wasm_bindgen(js_name = replica_store_nostr_profile_relay_unset)]
    881 pub fn replica_store_nostr_profile_relay_unset(opts_json: &str) -> Result<JsValue, JsValue> {
    882     let opts: INostrProfileRelayRelation = parse_json(opts_json).map_err(err_js)?;
    883     let exec = WasmSqlExecutor::new();
    884     let out = radroots_replica_store::nostr_profile_relay::unset(&exec, &opts)
    885         .map_err(|e| err_js(e.error))?;
    886     value_to_js(out)
    887 }
    888 
    889 #[wasm_bindgen(js_name = replica_store_trade_product_location_set)]
    890 pub fn replica_store_trade_product_location_set(opts_json: &str) -> Result<JsValue, JsValue> {
    891     let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?;
    892     let exec = WasmSqlExecutor::new();
    893     let out = radroots_replica_store::trade_product_location::set(&exec, &opts)
    894         .map_err(|e| err_js(e.error))?;
    895     value_to_js(out)
    896 }
    897 
    898 #[wasm_bindgen(js_name = replica_store_trade_product_location_unset)]
    899 pub fn replica_store_trade_product_location_unset(opts_json: &str) -> Result<JsValue, JsValue> {
    900     let opts: ITradeProductLocationRelation = parse_json(opts_json).map_err(err_js)?;
    901     let exec = WasmSqlExecutor::new();
    902     let out = radroots_replica_store::trade_product_location::unset(&exec, &opts)
    903         .map_err(|e| err_js(e.error))?;
    904     value_to_js(out)
    905 }
    906 
    907 #[wasm_bindgen(js_name = replica_store_trade_product_media_set)]
    908 pub fn replica_store_trade_product_media_set(opts_json: &str) -> Result<JsValue, JsValue> {
    909     let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?;
    910     let exec = WasmSqlExecutor::new();
    911     let out = radroots_replica_store::trade_product_media::set(&exec, &opts)
    912         .map_err(|e| err_js(e.error))?;
    913     value_to_js(out)
    914 }
    915 
    916 #[wasm_bindgen(js_name = replica_store_trade_product_media_unset)]
    917 pub fn replica_store_trade_product_media_unset(opts_json: &str) -> Result<JsValue, JsValue> {
    918     let opts: ITradeProductMediaRelation = parse_json(opts_json).map_err(err_js)?;
    919     let exec = WasmSqlExecutor::new();
    920     let out = radroots_replica_store::trade_product_media::unset(&exec, &opts)
    921         .map_err(|e| err_js(e.error))?;
    922     value_to_js(out)
    923 }