Skip to content
Snippets Groups Projects
Commit ac362079 authored by Mateusz Charytoniuk's avatar Mateusz Charytoniuk
Browse files

feat: add rubixml swoole backend

parent cc92a210
No related branches found
No related tags found
No related merge requests found
Showing
with 10325 additions and 419 deletions
{
"name": "distantmagic/resonance",
"description": "PHP Framework with AI capabilities.",
"type": "library",
"license": "MIT",
"archive": {
"exclude": [
"/app",
"/docs",
"/examples",
"/resources",
"/tools"
]
},
"authors": [
{
"name": "Mateusz Charytoniuk",
"email": "mateusz.charytoniuk@protonmail.com"
}
],
"autoload": {
"files": [
"src/helpers/coroutineMustGetContext.php",
......@@ -15,12 +26,9 @@
"Distantmagic\\Resonance\\": "src/"
}
},
"authors": [
{
"name": "Mateusz Charytoniuk",
"email": "mateusz.charytoniuk@protonmail.com"
}
],
"description": "PHP Framework with AI capabilities.",
"license": "MIT",
"name": "distantmagic/resonance",
"require": {
"defuse/php-encryption": "^2.4",
"distantmagic/graphql-swoole-promise-adapter": "^0.1.1",
......@@ -64,7 +72,8 @@
"twig/twig": "^3.7",
"webonyx/graphql-php": "^15.6",
"beberlei/assert": "^3.3",
"dunglas/doctrine-json-odm": "^1.4"
"dunglas/doctrine-json-odm": "^1.4",
"rubix/ml": "^2.5"
},
"require-dev": {
"phpunit/phpunit": "^11.0",
......@@ -81,5 +90,6 @@
"ext-readline": "Unlocks some console features",
"ext-redis": "HTTP Sessions driver",
"ext-uuid": "Faster UUID generation"
}
},
"type": "library"
}
This diff is collapsed.
/cache
/config.ini
/oauth2
/ssl
/vendor
# Resonance Project
To start the project you need to:
1. Install dependencies with `composer install`
2. Create `config.ini` (you can copy `config.ini.example`)
3. Run `php bin/resonance.php serve` in the terminal to start the server
## Using SSL
In order to use SSL you need to [generate SSL certificate for a local development](https://resonance.distantmagic.com/docs/extras/ssl-certificate-for-local-development.html)
and uncomment SSL related settings in `app/Command/Serve.php`.
<?php
declare(strict_types=1);
namespace App;
use Distantmagic\Resonance\Attribute\Singleton;
use Distantmagic\Resonance\HtmlErrorTemplateInterface;
use Distantmagic\Resonance\HttpError;
use Distantmagic\Resonance\HttpInterceptableInterface;
use Distantmagic\Resonance\TwigTemplate;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
#[Singleton(provides: HtmlErrorTemplateInterface::class)]
readonly class HtmlErrorTemplate implements HtmlErrorTemplateInterface
{
public function renderHttpError(ServerRequestInterface $request, ResponseInterface $response, HttpError $httpError): HttpInterceptableInterface
{
return new TwigTemplate('error.twig', [
'error' => $httpError,
]);
}
}
<?php
declare(strict_types=1);
namespace App\HttpResponder;
use App\HttpRouteSymbol;
use Distantmagic\Resonance\Attribute\RespondsToHttp;
use Distantmagic\Resonance\HttpInterceptableInterface;
use Distantmagic\Resonance\RequestMethod;
use Distantmagic\Resonance\TwigTemplate;
#[RespondsToHttp(
method: RequestMethod::GET,
pattern: '/',
routeSymbol: HttpRouteSymbol::Homepage,
)]
function Homepage(): HttpInterceptableInterface
{
return new TwigTemplate('homepage.twig');
}
<?php
declare(strict_types=1);
namespace App;
use Distantmagic\Resonance\CastableEnumTrait;
use Distantmagic\Resonance\HttpRouteSymbolInterface;
use Distantmagic\Resonance\NameableEnumTrait;
enum HttpRouteSymbol implements HttpRouteSymbolInterface
{
use CastableEnumTrait;
use NameableEnumTrait;
case Homepage;
}
<?php
declare(strict_types=1);
namespace App;
use Distantmagic\Resonance\Attribute\Singleton;
use Distantmagic\Resonance\UserInterface;
use Distantmagic\Resonance\UserRepositoryInterface;
#[Singleton(provides: UserRepositoryInterface::class)]
readonly class UserRepository implements UserRepositoryInterface
{
public function findUserById(int|string $userId): ?UserInterface
{
return null;
}
}
bad_request = "Bad request"
forbidden = Forbidden
method_not_allowed = "Method not allowed"
not_acceptable = "Not acceptable"
page_not_found = "Page not found"
server_error = "Server error"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title></title>
</head>
<body>
<h1>{{ error.code }}</h1>
<pre>{{ error.message(request) }}</pre>
</body>
</html>
\ No newline at end of file
Hello, world!
<?php
declare(strict_types=1);
use Distantmagic\Resonance\DoctrineConsoleRunner;
$container = require_once __DIR__.'/../container.php';
exit(DoctrineConsoleRunner::run($container));
<?php
declare(strict_types=1);
use Distantmagic\Resonance\ConsoleApplication;
$container = require_once __DIR__.'/../container.php';
exit($container->make(ConsoleApplication::class)->run());
{
"name": "distantmagic/resonance-project",
"type": "project",
"license": "MIT",
"autoload": {
"files": [
"constants.php"
],
"psr-4": {
"App\\": "app/"
}
},
"minimum-stability": "dev",
"prefer-stable": true,
"repositories": [
{
"type": "path",
"url": "vendor/distantmagic/resonance",
"options": {
"symlink": true
}
}
],
"require": {
"php": ">=8.2",
"distantmagic/resonance": "dev-master"
},
"require-dev": {
"swoole/ide-helper": "^5.1"
},
"scripts": {
"symlink-resonance": [
"mkdir -p vendor/distantmagic",
"rm -rf vendor/distantmagic/resonance",
"ln -s -f ../../ vendor/distantmagic/resonance"
],
"pre-install-cmd": "@symlink-resonance",
"pre-update-cmd": "@symlink-resonance"
}
}
This diff is collapsed.
[app]
env = development
esbuild_metafile = null
scheme = https
url = http://localhost:9501
[database]
default[driver] = mysql
default[host] = 127.0.0.1
default[port] = 3306
default[database] = distantmagic
default[username] = distantmagic
default[password] = distantmagic
default[log_queries] = false
default[pool_prefill] = false
default[pool_size] = 8
[grpc]
grpc_php_plugin_bin = %DM_ROOT%/grpc_php_plugin
protoc_bin = /usr/bin/protoc
[llamacpp]
host = 127.0.0.1
port = 8081
[mailer]
default[transport_dsn] = smtp://localhost
; default[dkim_domain_name] = example.com
; default[dkim_selector] = resonance1
; default[dkim_signing_key_passphrase] = yourpassphrase
; default[dkim_signing_key_private] = dkim/private.key
; default[dkim_signing_key_public] = dkim/public.key
[manifest]
background_color = "#ffffff"
theme_color = "#ffffff"
[oauth2]
encryption_key = %DM_ROOT%/oauth2/defuse.key
jwt_signing_key_passphrase = yourpassphrase
jwt_signing_key_private = %DM_ROOT%/oauth2/private.key
jwt_signing_key_public = %DM_ROOT%/oauth2/public.key
session_key_authorization_request = oauth2.authorization_request
session_key_pkce = oauth2.pkce
session_key_state = oauth2.state
[openapi]
description = description
title = title
version = 0.0.0
[redis]
default[db_index] = 0
default[host] = 127.0.0.1
default[password] = null
default[port] = 6379
default[prefix] = dm:
default[timeout] = 1
default[pool_prefill] = false
default[pool_size] = 8
[session]
cookie_lifespan = 86400
cookie_name = dmsession
redis_connection_pool = default
[sqlite-vss]
extension_vector0 = %DM_ROOT%/vector0.so
extension_vss0 = %DM_ROOT%/vss0.so
[static]
base_url = https://resonance.distantmagic.com
esbuild_metafile = %DM_ROOT%/esbuild-meta-docs.json
input_directory = docs
output_directory = %DM_ROOT%/docs/build
sitemap = %DM_ROOT%/docs/build/sitemap.xml
[swoole]
host = 127.0.0.1
port = 9501
log_level = SWOOLE_LOG_DEBUG
ssl_cert_file = null
ssl_key_file = null
[translator]
base_directory = %DM_APP_ROOT%/lang
default_primary_language = en
[websocket]
max_connections = 10000
<?php
declare(strict_types=1);
define('DM_APP_ROOT', __DIR__.'/app');
define('DM_BATCH_PROMISE_TIMEOUT', 0.3);
define('DM_GRAPHQL_PROMISE_TIMEOUT', 0.2);
define('DM_POOL_CONNECTION_TIMEOUT', 0.1);
define('DM_PUBLIC_ROOT', __DIR__.'/public');
define('DM_RESONANCE_ROOT', __DIR__.'/vendor/distantmagic/resonance/src');
define('DM_ROOT', __DIR__);
<?php
declare(strict_types=1);
require_once __DIR__.'/vendor/autoload.php';
defined('DM_ROOT') or exit('Configuration is not loaded.');
use Distantmagic\Resonance\DependencyInjectionContainer;
use Swoole\Runtime;
Runtime::enableCoroutine(SWOOLE_HOOK_ALL);
$container = new DependencyInjectionContainer();
$container->phpProjectFiles->indexDirectory(DM_RESONANCE_ROOT);
$container->phpProjectFiles->indexDirectory(DM_APP_ROOT);
$container->registerSingletons();
return $container;
<?xml version="1.0"?>
<psalm
errorLevel="1"
findUnusedBaselineEntry="true"
findUnusedCode="true"
findUnusedPsalmSuppress="true"
reportInfo="true"
resolveFromConfigFile="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config vendor/vimeo/psalm/config.xsd"
>
<projectFiles>
<directory name="app" />
<file name="constants.php" />
<ignoreFiles>
<directory name="vendor" />
</ignoreFiles>
</projectFiles>
<issueHandlers>
<ForbiddenCode>
<errorLevel type="suppress">
<directory name="app"/>
</errorLevel>
</ForbiddenCode>
<PossiblyUnusedMethod>
<!--
Classess built with Dependency Injection container do not have
their constructor explicitly called.
-->
<errorLevel type="suppress">
<directory name="app"/>
<referencedMethod name="*::__construct"/>
</errorLevel>
</PossiblyUnusedMethod>
<PossiblyUnusedReturnValue>
<errorLevel type="suppress">
<directory name="app/HttpResponder"/>
</errorLevel>
</PossiblyUnusedReturnValue>
<UnusedClass>
<errorLevel type="suppress">
<directory name="app"/>
</errorLevel>
</UnusedClass>
</issueHandlers>
<stubs>
<file name="tools/psalm/vendor/vimeo/psalm/stubs/extensions/ds.phpstub" />
<file name="vendor/swoole/ide-helper/src/swoole/Swoole/Http/Request.php" />
<file name="vendor/swoole/ide-helper/src/swoole/Swoole/Http/Response.php" />
<file name="vendor/swoole/ide-helper/src/swoole/Swoole/Http/Server.php" />
<file name="vendor/swoole/ide-helper/src/swoole/Swoole/WebSocket/Frame.php" />
<file name="vendor/swoole/ide-helper/src/swoole/Swoole/WebSocket/Server.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/ConnectionPool.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Coroutine/WaitGroup.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/ObjectProxy.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/ObjectProxy.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/PDOConfig.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/PDOPool.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/PDOProxy.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/PDOStatementProxy.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/RedisConfig.php" />
<file name="vendor/swoole/ide-helper/src/swoole_library/src/core/Database/RedisPool.php" />
</stubs>
</psalm>
/vendor
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment