36f5093692
Общая ветка переведена вперёд на ветку клиентских СМС — перемоткой, без слияния, поэтому конфликтов там быть не могло. Затем общая сведена в рабочую ветку, которая отставала на 79 записей. Столкновение было одно и знакомое — словарь орфографии cspell-words.txt. Разрешено правилом «обе стороны настоящие»: слова обеих веток сохранены, ничего не выброшено. Журнал схемы БД на этот раз свёлся сам, столкновения номеров не было. СТОРОЖ ПДн ОСТАНОВИЛ ЗАПИСЬ И БЫЛ ПРАВ. В образце базы номеров, который клиент скачивает перед своей первой рассылкой, стоял рабочий телефон владельца — в двух видах. Это не утечка чужих данных: тот же номер публично опубликован в реквизитах ИП по требованию ЮKassa. Но клиент заполняет этот файл своими номерами и запускает рассылку — забытая строка означала бы СМС владельцу за деньги клиента. Заменён на выдуманный из тестового диапазона. Подсказки на экране рассылок («+7 999 123-45-67») выдуманы изначально; разрешены в .gitleaks.toml ПО ЗНАЧЕНИЮ, а не по файлу, чтобы сами файлы остались под охраной. Сторож проверен вырезанием: подложенный номер, не подпадающий ни под одно разрешение, он поймал; после снятия подложки — чисто. Служебный счётчик наблюдателя убран в тайник на время сведения и возвращён после — он машинный и пересоздаётся хуками. Файлы второй смены, которая работает в этой же папке, не тронуты и в слияние не попали. Проверки сведённой ветки: тесты 4533, зелёных 4529, падений нет; экраны 238 файлов и 1906 зелёных, сторож сети не сработал ни разу; статанализ 0; формат чист.
126 lines
4.5 KiB
JSON
126 lines
4.5 KiB
JSON
{
|
|
"$schema": "https://getcomposer.org/schema.json",
|
|
"name": "laravel/laravel",
|
|
"type": "project",
|
|
"description": "The skeleton application for the Laravel framework.",
|
|
"keywords": ["laravel", "framework"],
|
|
"license": "MIT",
|
|
"require": {
|
|
"php": "^8.3",
|
|
"barryvdh/laravel-dompdf": "^3.1",
|
|
"geoip2/geoip2": "^3.3",
|
|
"laravel/framework": "^13.7",
|
|
"laravel/sanctum": "^4.3",
|
|
"laravel/tinker": "^3.0",
|
|
"openspout/openspout": "^5.3",
|
|
"phpoffice/phpspreadsheet": "^5.0",
|
|
"phpoffice/phpword": "^1.4",
|
|
"pragmarx/google2fa": "^9.0",
|
|
"predis/predis": "^3.4"
|
|
},
|
|
"require-dev": {
|
|
"barryvdh/laravel-ide-helper": "*",
|
|
"deptrac/deptrac": "^4.6",
|
|
"driftingly/rector-laravel": "^2.3",
|
|
"fakerphp/faker": "^1.23",
|
|
"infection/infection": "^0.32.7",
|
|
"larastan/larastan": "*",
|
|
"laravel/boost": "^2.4",
|
|
"laravel/pail": "^1.2.5",
|
|
"laravel/pao": "^1.0.6",
|
|
"laravel/pint": "^1.29",
|
|
"mockery/mockery": "^1.6",
|
|
"nunomaduro/collision": "^8.6",
|
|
"nunomaduro/phpinsights": "*",
|
|
"pestphp/pest": "^4.7",
|
|
"pestphp/pest-plugin-laravel": "^4.1",
|
|
"rector/rector": "^2.4",
|
|
"roave/security-advisories": "dev-latest"
|
|
},
|
|
"autoload": {
|
|
"psr-4": {
|
|
"App\\": "app/",
|
|
"Database\\Factories\\": "database/factories/",
|
|
"Database\\Seeders\\": "database/seeders/"
|
|
}
|
|
},
|
|
"autoload-dev": {
|
|
"psr-4": {
|
|
"Tests\\": "tests/"
|
|
}
|
|
},
|
|
"scripts": {
|
|
"setup": [
|
|
"composer install",
|
|
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
|
|
"@php artisan key:generate",
|
|
"@php artisan migrate --force",
|
|
"@php artisan ide-helper:models -M -n",
|
|
"npm install --ignore-scripts",
|
|
"npm run build"
|
|
],
|
|
"dev": [
|
|
"Composer\\Config::disableProcessTimeout",
|
|
"npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
|
|
],
|
|
"test": [
|
|
"@php artisan config:clear --ansi @no_additional_args",
|
|
"@php artisan test"
|
|
],
|
|
"pint": "@php vendor/bin/pint",
|
|
"pint:test": "@php vendor/bin/pint --test",
|
|
"test:parallel": "@php vendor/bin/pest --parallel --recreate-databases",
|
|
"stan": [
|
|
"node ../tools/storozh-statanaliza.mjs",
|
|
"@php vendor/bin/phpstan analyse --memory-limit=512M"
|
|
],
|
|
"rector": "@php vendor/bin/rector process --dry-run",
|
|
"rector:fix": "@php vendor/bin/rector process",
|
|
"insights": "@php artisan insights --no-interaction",
|
|
"mutation": "@php vendor/bin/infection --threads=2 --min-msi=50",
|
|
"audit-offline": "@composer audit --locked",
|
|
"demo:seed": "@php artisan db:seed --class=DemoSeeder --force",
|
|
"ide-helper": [
|
|
"@php artisan ide-helper:generate",
|
|
"@php artisan ide-helper:models -M -n",
|
|
"@php artisan ide-helper:meta"
|
|
],
|
|
"post-autoload-dump": [
|
|
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
|
"@php artisan package:discover --ansi"
|
|
],
|
|
"post-update-cmd": [
|
|
"@php artisan vendor:publish --tag=laravel-assets --ansi --force"
|
|
],
|
|
"post-root-package-install": [
|
|
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
|
|
],
|
|
"post-create-project-cmd": [
|
|
"@php artisan key:generate --ansi",
|
|
"@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
|
|
"@php artisan migrate --graceful --ansi"
|
|
],
|
|
"pre-package-uninstall": [
|
|
"Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
|
|
]
|
|
},
|
|
"extra": {
|
|
"laravel": {
|
|
"dont-discover": []
|
|
}
|
|
},
|
|
"config": {
|
|
"optimize-autoloader": true,
|
|
"preferred-install": "dist",
|
|
"sort-packages": true,
|
|
"allow-plugins": {
|
|
"pestphp/pest-plugin": true,
|
|
"php-http/discovery": true,
|
|
"infection/extension-installer": true,
|
|
"dealerdirect/phpcodesniffer-composer-installer": true
|
|
}
|
|
},
|
|
"minimum-stability": "stable",
|
|
"prefer-stable": true
|
|
}
|