13#include <quickjs/quickjs-exports.h>
14#include <quickjs/quickjs.h>
20 class AbstractGovernanceEffects;
23 class BaseEndpointRegistry;
27 class AbstractStateCache;
30 using StatePtr = std::shared_ptr<State>;
38 std::chrono::high_resolution_clock::time_point
start_time;
58 std::map<std::string, js::core::JSWrappedValue, std::less<>>
82 operator JSContext*()
const
92 virtual std::optional<JSWrappedValue>
get_module(
93 std::string_view module_name);
102 JSValueConst& argv, std::vector<std::string>& out);
104 std::pair<std::string, std::optional<std::string>>
error_message();
108 JSValue
object,
char const* property_name)
const;
115 size_t* pbyte_offset,
116 size_t* pbyte_length,
117 size_t* pbytes_per_element)
const;
119 const std::string& code,
120 const std::string& func,
121 const std::string& path);
124 const std::string& func,
125 const std::string& path);
136 const uint8_t* buf,
size_t buf_len)
const;
138 const char* buf,
size_t buf_len)
const;
140 std::span<const uint8_t> data)
const;
143 const char* buf,
size_t buf_len)
const;
145 std::span<const uint8_t> buf)
const;
150 JSCFunction* func,
const char* name,
int length)
const;
152 JSCFunction* func,
const char* name,
size_t arg_count = 0)
const;
159 const char* filename,
160 int eval_flags)
const;
162 const uint8_t* buf,
size_t buf_len,
int flags)
const;
166 const std::vector<JSWrappedValue>& argv,
167 const std::optional<ccf::JSRuntimeOptions>& options,
175 const JSWrappedValue& f,
const std::vector<JSWrappedValue>& argv);
182 const char* buf,
size_t buf_len,
const char* filename)
const;
185 [[nodiscard]] std::optional<std::string>
to_str(
187 [[nodiscard]] std::optional<std::string>
to_str(
const JSValue& x)
const;
188 [[nodiscard]] std::optional<std::string>
to_str(
189 const JSValue& x,
size_t& len)
const;
190 [[nodiscard]] std::optional<std::string>
to_str(
const JSAtom& atom)
const;
195 template <
typename TExtension>
198 for (
auto& extension : extensions)
200 if (
auto* t =
dynamic_cast<TExtension*
>(extension.get()); t !=
nullptr)
JSWrappedValue null() const
Definition context.cpp:310
JSWrappedValue new_c_function(JSCFunction *func, const char *name, int length) const
Definition context.cpp:400
JSWrappedValue get_exported_function(const std::string &code, const std::string &func, const std::string &path)
Definition context.cpp:248
bool remove_extension(const js::extensions::ExtensionPtr &extension)
Definition context.cpp:576
ccf::pal::Mutex lock
Definition context.h:62
JSWrappedValue get_global_obj() const
Definition context.cpp:213
void add_extension(const js::extensions::ExtensionPtr &extension)
Definition context.cpp:570
virtual std::optional< JSWrappedValue > get_module(std::string_view module_name)
Definition context.cpp:77
JSWrappedValue get_or_create_global_property(const char *s, JSWrappedValue &&default_value) const
Definition context.cpp:224
Context & operator=(const Context &)=delete
JSWrappedValue new_obj() const
Definition context.cpp:320
JSWrappedValue new_array_buffer_copy(const uint8_t *buf, size_t buf_len) const
Definition context.cpp:335
virtual JSWrappedValue inner_call(const JSWrappedValue &f, const std::vector< JSWrappedValue > &argv)
Definition context.cpp:478
JSWrappedValue get_typed_array_buffer(const JSWrappedValue &obj, size_t *pbyte_offset, size_t *pbyte_length, size_t *pbytes_per_element) const
Definition context.cpp:238
bool log_execution_metrics
Definition context.h:66
JSWrappedValue undefined() const
Definition context.cpp:315
JSWrappedValue read_object(const uint8_t *buf, size_t buf_len, int flags) const
Definition context.cpp:427
const TxAccess access
Definition context.h:64
virtual ~Context()
Definition context.cpp:71
JSWrappedValue eval(const char *input, size_t input_len, const char *filename, int eval_flags) const
Definition context.cpp:418
JSWrappedValue new_internal_error(const char *fmt,...) const
Definition context.cpp:382
JSWrappedValue new_getter_c_function(JSCFunction *func, const char *name, size_t arg_count=0) const
Definition context.cpp:406
InterruptData interrupt_data
Definition context.h:65
JSValue extract_string_array(JSValueConst &argv, std::vector< std::string > &out)
Definition context.cpp:137
JSWrappedValue parse_json(const nlohmann::json &j) const
Definition context.cpp:505
JSWrappedValue new_type_error(const char *fmt,...) const
Definition context.cpp:373
JSWrappedValue new_tag_value(int tag, int32_t val=0) const
Definition context.cpp:391
std::optional< std::string > to_str(const JSWrappedValue &x) const
Definition context.cpp:517
JSWrappedValue new_string_len(const char *buf, size_t buf_len) const
Definition context.cpp:361
std::pair< std::string, std::optional< std::string > > error_message()
Definition context.cpp:180
JSWrappedValue get_property(JSValue object, char const *property_name) const
Definition context.cpp:207
JSWrappedValue new_string(const std::string_view &str) const
Definition context.cpp:356
Context(const Context &)=delete
JSWrappedValue new_obj_class(JSClassID class_id) const
Definition context.cpp:325
JSWrappedValue json_stringify(const JSWrappedValue &obj) const
Definition context.cpp:496
JSWrappedValue duplicate_value(JSValueConst original) const
Definition context.cpp:413
Runtime & runtime()
Definition context.h:77
JSWrappedValue call_with_rt_options(const JSWrappedValue &f, const std::vector< JSWrappedValue > &argv, const std::optional< ccf::JSRuntimeOptions > &options, RuntimeLimitsPolicy policy)
Definition context.cpp:458
TExtension * get_extension()
Definition context.h:196
JSWrappedValue wrap(JSValue &&val) const
Definition context.cpp:123
JSWrappedValue new_array() const
Definition context.cpp:330
void set_module_loader(const modules::ModuleLoaderPtr &ml)
Definition context.h:87
JSWrappedValue get_global_property(const char *s) const
Definition context.cpp:218
std::shared_ptr< State > StatePtr
Definition historical_queries_interface.h:41
RuntimeLimitsPolicy
Definition runtime.h:13
std::vector< ExtensionPtr > Extensions
Definition extension_interface.h:24
std::shared_ptr< ExtensionInterface > ExtensionPtr
Definition extension_interface.h:23
std::shared_ptr< ModuleLoaderInterface > ModuleLoaderPtr
Definition module_loader_interface.h:29
TxAccess
Definition tx_access.h:10
std::mutex Mutex
Definition locking.h:12
Definition app_interface.h:14
State
Definition http_parser.h:128
ccf::js::TxAccess access
Definition context.h:40
std::chrono::high_resolution_clock::time_point start_time
Definition context.h:38
bool request_timed_out
Definition context.h:41
std::chrono::milliseconds max_execution_time
Definition context.h:39
Definition wrapped_value.h:13