///|
extern "js" fn object_id_secure_random_ffi(buffer : Bytes) -> Bool =
  #| (buffer) => {
  #|   if (!globalThis.crypto || typeof globalThis.crypto.getRandomValues !== "function") {
  #|     return false;
  #|   }
  #|   globalThis.crypto.getRandomValues(buffer);
  #|   return true;
  #| }

///|
fn object_id_secure_random(count : Int) -> Bytes raise BsonError {
  match secure_entropy_from_provider(count) {
    Some(bytes) => return bytes
    None => ()
  }
  let buffer = Bytes::make(count, 0)
  if !object_id_secure_random_ffi(buffer) {
    raise bson_error(
      UnsupportedEntropy,
      -1,
      "$.\u{24}oid",
      "Web Crypto secure entropy is unavailable",
    )
  }
  buffer
}