Skip to main content
Glama
rules_impl.bzl24.9 kB
# Copyright (c) Meta Platforms, Inc. and affiliates. # # This source code is licensed under both the MIT license found in the # LICENSE-MIT file in the root directory of this source tree and the Apache # License, Version 2.0 found in the LICENSE-APACHE file in the root directory # of this source tree. load("@prelude//:alias.bzl", "alias_impl", "configured_alias_impl", "versioned_alias_impl") load("@prelude//:command_alias.bzl", "command_alias_impl") load("@prelude//:export_file.bzl", "export_file_impl") load("@prelude//:filegroup.bzl", "filegroup_impl") load("@prelude//:genrule.bzl", "genrule_attributes", "genrule_impl") load("@prelude//:http_file.bzl", "http_file_impl") load("@prelude//:remote_file.bzl", "remote_file_impl") load("@prelude//:sh_binary.bzl", "sh_binary_impl") load("@prelude//:sh_test.bzl", "sh_test_impl") load("@prelude//:test_suite.bzl", "test_suite_impl") load("@prelude//android:android.bzl", _android_extra_attributes = "extra_attributes", _android_implemented_rules = "implemented_rules") load("@prelude//android:configuration.bzl", "is_building_android_binary_attr") load("@prelude//apple:apple_rules_impl.bzl", _apple_extra_attributes = "extra_attributes", _apple_implemented_rules = "implemented_rules") load("@prelude//apple/user:apple_resource_transition.bzl", "apple_resource_transition") load("@prelude//apple/user:target_sdk_version_transition.bzl", "apple_test_target_sdk_version_transition", "target_sdk_version_transition") load("@prelude//configurations:rules.bzl", _config_extra_attributes = "extra_attributes", _config_implemented_rules = "implemented_rules") load("@prelude//csharp:csharp.bzl", "csharp_library_impl", "prebuilt_dotnet_library_impl") load("@prelude//cxx:bitcode.bzl", "llvm_link_bitcode_impl") load("@prelude//cxx:cuda.bzl", "CudaCompileStyle") load("@prelude//cxx:cxx.bzl", "cxx_binary_impl", "cxx_library_impl", "cxx_precompiled_header_impl", "cxx_test_impl", "prebuilt_cxx_library_impl") load("@prelude//cxx:cxx_toolchain.bzl", "cxx_toolchain_extra_attributes", "cxx_toolchain_impl") load("@prelude//cxx:cxx_toolchain_types.bzl", "CxxPlatformInfo", "CxxToolchainInfo") load("@prelude//cxx:headers.bzl", "CPrecompiledHeaderInfo", "HeaderMode") load("@prelude//cxx:link_groups_types.bzl", "LINK_GROUP_MAP_ATTR") load("@prelude//cxx:prebuilt_cxx_library_group.bzl", "prebuilt_cxx_library_group_impl") load("@prelude//cxx:windows_resource.bzl", "windows_resource_impl") load("@prelude//decls:android_rules.bzl", "android_rules") load("@prelude//decls:apple_rules.bzl", "ios_rules") load("@prelude//decls:common.bzl", "IncludeType", "buck") load("@prelude//decls:core_rules.bzl", "core_rules") load("@prelude//decls:cxx_rules.bzl", "BUILD_INFO_ATTR", "cxx_rules") load("@prelude//decls:d_rules.bzl", "d_rules") load("@prelude//decls:dotnet_rules.bzl", "dotnet_rules") load("@prelude//decls:erlang_rules.bzl", "erlang_rules") load("@prelude//decls:git_rules.bzl", "git_rules") load("@prelude//decls:go_rules.bzl", "go_rules") load("@prelude//decls:groovy_rules.bzl", "groovy_rules") load("@prelude//decls:halide_rules.bzl", "halide_rules") load("@prelude//decls:haskell_rules.bzl", "haskell_rules") load("@prelude//decls:java_rules.bzl", "java_rules") load("@prelude//decls:js_rules.bzl", "js_rules") load("@prelude//decls:kotlin_rules.bzl", "kotlin_rules") load("@prelude//decls:lua_rules.bzl", "lua_rules") load("@prelude//decls:ocaml_rules.bzl", "ocaml_rules") load("@prelude//decls:python_rules.bzl", "python_rules") load("@prelude//decls:re_test_common.bzl", "re_test_common") load("@prelude//decls:rust_rules.bzl", "rust_rules") load("@prelude//decls:scala_rules.bzl", "scala_rules") load("@prelude//decls:shell_rules.bzl", "shell_rules") load("@prelude//decls:toolchains_common.bzl", "toolchains_common") load("@prelude//decls:uncategorized_rules.bzl", "uncategorized_rules") load("@prelude//erlang:erlang.bzl", _erlang_implemented_rules = "implemented_rules") load("@prelude//git:git_fetch.bzl", "git_fetch_impl") load("@prelude//go:coverage.bzl", "GoCoverageMode") load("@prelude//go:go_binary.bzl", "go_binary_impl") load("@prelude//go:go_exported_library.bzl", "go_exported_library_impl") load("@prelude//go:go_library.bzl", "go_library_impl") load("@prelude//go:go_stdlib.bzl", "go_stdlib_impl") load("@prelude//go:go_test.bzl", "go_test_impl") load("@prelude//go/transitions:defs.bzl", "asan_attr", "build_tags_attr", "cgo_enabled_attr", "coverage_mode_attr", "go_binary_transition", "go_exported_library_transition", "go_library_transition", "go_stdlib_transition", "go_test_transition", "race_attr") load("@prelude//go_bootstrap:go_bootstrap.bzl", "go_bootstrap_binary_impl") load("@prelude//haskell:haskell.bzl", "haskell_binary_impl", "haskell_library_impl", "haskell_prebuilt_library_impl") load("@prelude//haskell:haskell_ghci.bzl", "haskell_ghci_impl") load("@prelude//haskell:haskell_haddock.bzl", "haskell_haddock_impl") load("@prelude//haskell:haskell_ide.bzl", "haskell_ide_impl") load("@prelude//haskell:library_info.bzl", "HaskellLibraryProvider") load("@prelude//http_archive:http_archive.bzl", "http_archive_impl") load("@prelude//java:java.bzl", _java_extra_attributes = "extra_attributes", _java_implemented_rules = "implemented_rules") load("@prelude//js:js.bzl", _js_extra_attributes = "extra_attributes", _js_implemented_rules = "implemented_rules") load("@prelude//js:worker_tool.bzl", "worker_tool") load("@prelude//julia:julia.bzl", _julia_extra_attributes = "extra_attributes", _julia_implemented_rules = "implemented_rules") load("@prelude//kotlin:kotlin.bzl", _kotlin_extra_attributes = "extra_attributes", _kotlin_implemented_rules = "implemented_rules") load("@prelude//linking:execution_preference.bzl", "link_execution_preference_attr") load("@prelude//linking:link_info.bzl", "LinkOrdering") load("@prelude//linking:types.bzl", "Linkage") load("@prelude//lua:cxx_lua_extension.bzl", "cxx_lua_extension_impl") load("@prelude//lua:lua_binary.bzl", "lua_binary_impl") load("@prelude//lua:lua_library.bzl", "lua_library_impl") load("@prelude//matlab:matlab.bzl", _matlab_extra_attributes = "extra_attributes", _matlab_implemented_rules = "implemented_rules") load("@prelude//ocaml:attrs.bzl", _ocaml_extra_attributes = "ocaml_extra_attributes") load("@prelude//ocaml:ocaml.bzl", "ocaml_binary_impl", "ocaml_library_impl", "ocaml_object_impl", "ocaml_shared_impl", "prebuilt_ocaml_library_impl") load("@prelude//python:cxx_python_extension.bzl", "cxx_python_extension_impl") load("@prelude//python:prebuilt_python_library.bzl", "prebuilt_python_library_impl") load("@prelude//python:python_binary.bzl", "python_binary_impl") load("@prelude//python:python_library.bzl", "python_library_impl") load("@prelude//python:python_needed_coverage_test.bzl", "python_needed_coverage_test_impl") load("@prelude//python:python_runtime_bundle.bzl", "python_runtime_bundle_impl") load("@prelude//python:python_test.bzl", "python_test_impl") load("@prelude//python_bootstrap:python_bootstrap.bzl", "PythonBootstrapSources", "python_bootstrap_binary_impl", "python_bootstrap_library_impl") load("@prelude//transitions:constraint_overrides.bzl", "constraint_overrides") load("@prelude//zip_file:zip_file.bzl", _zip_file_extra_attributes = "extra_attributes", _zip_file_implemented_rules = "implemented_rules") rule_decl_records = [ android_rules, core_rules, cxx_rules, d_rules, dotnet_rules, erlang_rules, git_rules, go_rules, groovy_rules, halide_rules, haskell_rules, ios_rules, java_rules, kotlin_rules, lua_rules, ocaml_rules, python_rules, rust_rules, shell_rules, js_rules, scala_rules, uncategorized_rules, ] def _merge_dictionaries(dicts): result = {} for d in dicts: for key, value in d.items(): if key in result: fail("Duplicate key: '{}' while merging dictionaries".format(key)) result[key] = value return result extra_implemented_rules = struct( #common rules alias = alias_impl, command_alias = command_alias_impl, configured_alias = configured_alias_impl, export_file = export_file_impl, filegroup = filegroup_impl, genrule = genrule_impl, http_archive = http_archive_impl, http_file = http_file_impl, remote_file = remote_file_impl, sh_binary = sh_binary_impl, sh_test = sh_test_impl, test_suite = test_suite_impl, toolchain_alias = alias_impl, versioned_alias = versioned_alias_impl, worker_tool = worker_tool, #c# csharp_library = csharp_library_impl, prebuilt_dotnet_library = prebuilt_dotnet_library_impl, #c++ cxx_binary = cxx_binary_impl, cxx_test = cxx_test_impl, cxx_toolchain = cxx_toolchain_impl, cxx_genrule = genrule_impl, cxx_library = cxx_library_impl, cxx_precompiled_header = cxx_precompiled_header_impl, cxx_python_extension = cxx_python_extension_impl, prebuilt_cxx_library = prebuilt_cxx_library_impl, prebuilt_cxx_library_group = prebuilt_cxx_library_group_impl, windows_resource = windows_resource_impl, # C++ / LLVM llvm_link_bitcode = llvm_link_bitcode_impl, #git git_fetch = git_fetch_impl, #go go_binary = go_binary_impl, go_bootstrap_binary = go_bootstrap_binary_impl, go_exported_library = go_exported_library_impl, go_library = go_library_impl, go_test = go_test_impl, go_stdlib = go_stdlib_impl, #haskell haskell_library = haskell_library_impl, haskell_binary = haskell_binary_impl, haskell_ghci = haskell_ghci_impl, haskell_haddock = haskell_haddock_impl, haskell_ide = haskell_ide_impl, haskell_prebuilt_library = haskell_prebuilt_library_impl, #lua cxx_lua_extension = cxx_lua_extension_impl, lua_binary = lua_binary_impl, lua_library = lua_library_impl, #ocaml ocaml_binary = ocaml_binary_impl, ocaml_object = ocaml_object_impl, ocaml_shared = ocaml_shared_impl, ocaml_library = ocaml_library_impl, prebuilt_ocaml_library = prebuilt_ocaml_library_impl, #python prebuilt_python_library = prebuilt_python_library_impl, python_binary = python_binary_impl, python_library = python_library_impl, python_runtime_bundle = python_runtime_bundle_impl, python_test = python_test_impl, python_needed_coverage_test = python_needed_coverage_test_impl, #python bootstrap python_bootstrap_binary = python_bootstrap_binary_impl, python_bootstrap_library = python_bootstrap_library_impl, #merged **kwargs **_merge_dictionaries([ _android_implemented_rules, _apple_implemented_rules, _config_implemented_rules, _erlang_implemented_rules, _java_implemented_rules, _js_implemented_rules, _julia_implemented_rules, _kotlin_implemented_rules, _matlab_implemented_rules, _zip_file_implemented_rules, ]) ) def _python_runtime_bundle_attrs(): return { "include": attrs.string(doc = "Header files required for linking python extensions"), "install_root": attrs.dep(doc = "The filegroup containing the runtime artifacts, all the paths are relative to this location"), "libpython": attrs.string(doc = "libpyhon.so required at runtime for the python executable and native extensions."), "py_bin": attrs.string(doc = "The runtime executable"), "py_version": attrs.string(doc = "The version of python this represents"), "stdlib": attrs.string(doc = "The python standard library"), } inlined_extra_attributes = { # csharp "csharp_library": { "_csharp_toolchain": toolchains_common.csharp(), }, #c++ "cxx_genrule": genrule_attributes() | { "_cxx_toolchain": toolchains_common.cxx(), "_exec_os_type": buck.exec_os_type_arg(), }, "cxx_library": { "auto_link_groups": attrs.bool(default = False), # These flags will only be used to instrument a target # when coverage for that target is enabled by `exported_needs_coverage_instrumentation` # or by any of the target's dependencies. "coverage_instrumentation_compiler_flags": attrs.list(attrs.string(), default = []), "cuda_compile_style": attrs.enum(CudaCompileStyle.values(), default = "mono"), "deps_query": attrs.option(attrs.query(), default = None), "exported_needs_coverage_instrumentation": attrs.bool(default = False), "extra_xcode_sources": attrs.list(attrs.source(allow_directory = True), default = []), "header_mode": attrs.option(attrs.enum(HeaderMode.values()), default = None), "link_deps_query_whole": attrs.bool(default = False), "link_execution_preference": link_execution_preference_attr(), "link_group_map": LINK_GROUP_MAP_ATTR, "link_ordering": attrs.option(attrs.enum(LinkOrdering.values()), default = None), "precompiled_header": attrs.option(attrs.dep(providers = [CPrecompiledHeaderInfo]), default = None), "prefer_stripped_objects": attrs.bool(default = False), "preferred_linkage": attrs.enum( Linkage.values(), default = "any", doc = """ Determines what linkage is used when the library is depended on by another target. To control how the dependencies of this library are linked, use `link_style` instead. """, ), "resources": attrs.named_set(attrs.one_of(attrs.dep(), attrs.source(allow_directory = True)), sorted = True, default = []), "separate_debug_info": attrs.bool(default = False), "stub": attrs.bool(default = False), "supports_header_symlink_subtarget": attrs.bool(default = False), "supports_python_dlopen": attrs.option(attrs.bool(), default = None), "supports_shlib_interfaces": attrs.bool(default = True), "_create_third_party_build_root": attrs.default_only(attrs.exec_dep(default = "prelude//third-party/tools:create_build")), "_cxx_hacks": attrs.default_only(attrs.dep(default = "prelude//cxx/tools:cxx_hacks")), "_cxx_toolchain": toolchains_common.cxx(), "_is_building_android_binary": is_building_android_binary_attr(), }, "cxx_test": re_test_common.test_args(), "cxx_toolchain": cxx_toolchain_extra_attributes(is_toolchain_rule = False), "export_file": constraint_overrides.attributes, "filegroup": constraint_overrides.attributes, # Generic rule to build from a command "genrule": genrule_attributes() | constraint_overrides.attributes, # Go "go_binary": { "embedcfg": attrs.option(attrs.source(allow_directory = False), default = None), "resources": attrs.list(attrs.one_of(attrs.dep(), attrs.source(allow_directory = True)), default = []), "_asan": asan_attr, "_build_info": BUILD_INFO_ATTR, "_build_tags": build_tags_attr, "_cxx_toolchain": toolchains_common.cxx(), "_exec_os_type": buck.exec_os_type_arg(), "_go_stdlib": attrs.default_only(attrs.dep(default = "prelude//go/tools:stdlib")), "_go_toolchain": toolchains_common.go(), "_race": race_attr, }, "go_bootstrap_binary": { "_exec_os_type": buck.exec_os_type_arg(), "_go_bootstrap_toolchain": toolchains_common.go_bootstrap(), }, "go_exported_library": { "embedcfg": attrs.option(attrs.source(allow_directory = False), default = None), "_asan": asan_attr, "_build_info": BUILD_INFO_ATTR, "_build_tags": build_tags_attr, "_cxx_toolchain": toolchains_common.cxx(), "_exec_os_type": buck.exec_os_type_arg(), "_go_stdlib": attrs.default_only(attrs.dep(default = "prelude//go/tools:stdlib")), "_go_toolchain": toolchains_common.go(), "_race": race_attr, }, "go_library": { "embedcfg": attrs.option(attrs.source(allow_directory = False), default = None), "_asan": asan_attr, "_build_tags": build_tags_attr, "_cgo_enabled": cgo_enabled_attr, "_coverage_mode": coverage_mode_attr, "_cxx_toolchain": toolchains_common.cxx(), "_exec_os_type": buck.exec_os_type_arg(), "_go_stdlib": attrs.default_only(attrs.dep(default = "prelude//go/tools:stdlib")), "_go_toolchain": toolchains_common.go(), "_race": race_attr, }, "go_stdlib": { "_asan": asan_attr, "_build_tags": build_tags_attr, "_cgo_enabled": cgo_enabled_attr, "_cxx_toolchain": toolchains_common.cxx(), "_exec_os_type": buck.exec_os_type_arg(), "_go_toolchain": toolchains_common.go(), "_race": race_attr, }, "go_test": { "coverage_mode": attrs.option(attrs.enum(GoCoverageMode.values()), default = None), "embedcfg": attrs.option(attrs.source(allow_directory = False), default = None), "resources": attrs.list(attrs.source(allow_directory = True), default = []), "_asan": asan_attr, "_build_info": BUILD_INFO_ATTR, "_build_tags": build_tags_attr, "_coverage_mode": coverage_mode_attr, "_cxx_toolchain": toolchains_common.cxx(), "_exec_os_type": buck.exec_os_type_arg(), "_go_stdlib": attrs.default_only(attrs.dep(default = "prelude//go/tools:stdlib")), "_go_toolchain": toolchains_common.go(), "_race": race_attr, "_testmaingen": attrs.default_only(attrs.exec_dep(providers = [RunInfo], default = "prelude//go_bootstrap/tools:go_testmaingen")), }, # groovy "groovy_library": { "resources_root": attrs.option(attrs.string(), default = None), }, "groovy_test": { "resources_root": attrs.option(attrs.string(), default = None), }, "haskell_binary": { "auto_link_groups": attrs.bool(default = False), "link_group_map": LINK_GROUP_MAP_ATTR, "template_deps": attrs.list(attrs.exec_dep(providers = [HaskellLibraryProvider]), default = []), "_cxx_toolchain": toolchains_common.cxx(), "_haskell_toolchain": toolchains_common.haskell(), }, "haskell_ghci": { "template_deps": attrs.list(attrs.exec_dep(providers = [HaskellLibraryProvider]), default = []), "_cxx_toolchain": toolchains_common.cxx(), "_haskell_toolchain": toolchains_common.haskell(), }, "haskell_haddock": { "_cxx_toolchain": toolchains_common.cxx(), "_haskell_toolchain": toolchains_common.haskell(), }, "haskell_ide": { "include_projects": attrs.list(attrs.dep(), default = []), "_haskell_toolchain": toolchains_common.haskell(), }, "haskell_library": { "preferred_linkage": attrs.enum(Linkage.values(), default = "any"), "template_deps": attrs.list(attrs.exec_dep(providers = [HaskellLibraryProvider]), default = []), "_cxx_toolchain": toolchains_common.cxx(), "_haskell_toolchain": toolchains_common.haskell(), }, "llvm_link_bitcode": { "_cxx_toolchain": toolchains_common.cxx(), }, "ndk_toolchain": { "cxx_toolchain": attrs.toolchain_dep(providers = [CxxToolchainInfo, CxxPlatformInfo]), }, "prebuilt_cxx_library": { "exported_header_style": attrs.enum(IncludeType, default = "system"), "header_dirs": attrs.option(attrs.list(attrs.source(allow_directory = True)), default = None), "linker_flags": attrs.list(attrs.arg(anon_target_compatible = True), default = []), "platform_header_dirs": attrs.option(attrs.list(attrs.tuple(attrs.regex(), attrs.list(attrs.source(allow_directory = True)))), default = None), "post_linker_flags": attrs.list(attrs.arg(anon_target_compatible = True), default = []), "preferred_linkage": attrs.enum( Linkage.values(), default = "any", doc = """ Determines what linkage is used when the library is depended on by another target. To control how the dependencies of this library are linked, use `link_style` instead. """, ), "public_include_directories": attrs.set(attrs.string(), sorted = True, default = []), "public_system_include_directories": attrs.set(attrs.string(), sorted = True, default = []), "raw_headers": attrs.set(attrs.source(), sorted = True, default = []), "stub": attrs.bool(default = False), "supports_lto": attrs.bool(default = False), "supports_python_dlopen": attrs.bool(default = True), "versioned_header_dirs": attrs.option(attrs.versioned(attrs.list(attrs.source(allow_directory = True))), default = None), "_create_third_party_build_root": attrs.default_only(attrs.exec_dep(default = "prelude//third-party/tools:create_build")), "_cxx_toolchain": toolchains_common.cxx(), "_target_os_type": buck.target_os_type_arg(), }, "prebuilt_cxx_library_group": { "_cxx_toolchain": toolchains_common.cxx(), }, #python "prebuilt_python_library": { "_create_third_party_build_root": attrs.default_only(attrs.exec_dep(default = "prelude//third-party/tools:create_build")), "_extract": attrs.default_only(attrs.exec_dep(default = "prelude//python/tools:extract")), "_python_toolchain": toolchains_common.python(), }, #python bootstrap "python_bootstrap_binary": { "copy_deps": attrs.bool(default = True), "deps": attrs.list(attrs.dep(providers = [PythonBootstrapSources]), default = []), "main": attrs.source(), "_python_bootstrap_toolchain": toolchains_common.python_bootstrap(), }, "python_bootstrap_library": { "deps": attrs.list(attrs.dep(providers = [PythonBootstrapSources]), default = []), "srcs": attrs.list(attrs.source()), }, "python_library": { "resources": attrs.named_set(attrs.one_of(attrs.dep(), attrs.source(allow_directory = True)), sorted = True, default = []), "_create_third_party_build_root": attrs.default_only(attrs.exec_dep(default = "prelude//third-party/tools:create_build")), "_cxx_toolchain": toolchains_common.cxx(), "_python_toolchain": toolchains_common.python(), }, "python_needed_coverage_test": dict( contacts = attrs.list(attrs.string(), default = []), env = attrs.dict(key = attrs.string(), value = attrs.arg(), sorted = False, default = {}), labels = attrs.list(attrs.string(), default = []), needed_coverage = attrs.list(attrs.tuple(attrs.int(), attrs.dep(), attrs.option(attrs.string())), default = []), test = attrs.dep(providers = [ExternalRunnerTestInfo]), **(re_test_common.test_args() | buck.inject_test_env_arg()) ), "python_runtime_bundle": _python_runtime_bundle_attrs(), "remote_file": { "sha1": attrs.option(attrs.string(), default = None), "sha256": attrs.option(attrs.string(), default = None), "_unzip_tool": attrs.default_only(attrs.exec_dep(providers = [RunInfo], default = "prelude//zip_file/tools:unzip")), }, "rust_test": {}, "sh_test": constraint_overrides.attributes, "windows_resource": { "_cxx_toolchain": toolchains_common.cxx(), }, } all_extra_attributes = _merge_dictionaries([ inlined_extra_attributes, _android_extra_attributes, _apple_extra_attributes, _config_extra_attributes, _java_extra_attributes, _js_extra_attributes, _julia_extra_attributes, _kotlin_extra_attributes, _matlab_extra_attributes, _ocaml_extra_attributes, _zip_file_extra_attributes, ]) extra_attributes = struct(**all_extra_attributes) # Configuration transitions to pass `cfg` for builtin rules. transitions = { "android_binary": constraint_overrides.transition, "apple_asset_catalog": apple_resource_transition, "apple_binary": target_sdk_version_transition, "apple_bundle": target_sdk_version_transition, "apple_library": target_sdk_version_transition, "apple_resource": apple_resource_transition, "apple_test": apple_test_target_sdk_version_transition, "cxx_binary": constraint_overrides.transition, "cxx_test": constraint_overrides.transition, "export_file": constraint_overrides.transition, "filegroup": constraint_overrides.transition, "genrule": constraint_overrides.transition, "go_binary": go_binary_transition, "go_exported_library": go_exported_library_transition, "go_library": go_library_transition, "go_stdlib": go_stdlib_transition, "go_test": go_test_transition, "python_binary": constraint_overrides.python_transition, "python_test": constraint_overrides.python_transition, "sh_test": constraint_overrides.transition, } toolchain_rule_names = [ "apple_toolchain", "swift_macro_toolchain", "swift_toolchain", "toolchain_alias", ]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/systeminit/si'

If you have feedback or need assistance with the MCP directory API, please join our Discord server