https://github.com/chieftools/sdk
Base functionality and helpers used for building for Chief Tools.
https://github.com/chieftools/sdk
chief-tools laravel
Last synced: 16 days ago
JSON representation
Base functionality and helpers used for building for Chief Tools.
- Host: GitHub
- URL: https://github.com/chieftools/sdk
- Owner: chieftools
- License: mit
- Created: 2019-01-13T19:40:13.000Z (about 7 years ago)
- Default Branch: develop
- Last Pushed: 2025-10-21T14:30:32.000Z (3 months ago)
- Last Synced: 2025-11-27T15:13:47.160Z (2 months ago)
- Topics: chief-tools, laravel
- Language: PHP
- Homepage: https://chief.app
- Size: 2.32 MB
- Stars: 8
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Chief Tools SDK
[](https://packagist.org/packages/chieftools/sdk)
[](https://packagist.org/packages/chieftools/sdk)
[](https://packagist.org/packages/chieftools/sdk)
[](https://packagist.org/packages/chieftools/sdk)
Base functionality and helpers used for building Chief Tools.
Keep in mind that this package is not meant to be used standalone, but as a base for building our own Chief Tools, this package is open-sourced for inspiration and to be used as a reference.
### Configures
- Authentication through [Account Chief](https://account.chief.app/) (powered by [Socialite](https://laravel.com/docs/9.x/socialite))
- Configured [Sentry](https://docs.sentry.io/platforms/php/laravel/) client
- [Lighthouse GraphQL](https://lighthouse-php.com/) with base schema and scalars
- Session protected endpoint `/api/graphql/web`
- Session protected (GraphiQL) playground `/api/playground`
- Access token protected endpoint `/api/graphql` (tokens managed by [Account Chief](https://account.chief.app/))
- Basic API documentation pages for GraphQL endpoint
- Account pages to show profile information and preferences
- Team pages to show team information, preferences and billing
- Redirects to Chief Tools for `/contact`, `/privacy`, `/terms`
- [Account Chief](https://account.chief.app/) webhook handler to be notified when user, team or tokens change
- Login event listener to update the `last_login` column on the `users` table
- Health check queue job pinging `QUEUE_MONITOR_URL` every minute using the default queue (disabled when `QUEUE_MONITOR_URL` is empty or unset)
### Provides
#### Middleware
- `ChiefTools\SDK\Middleware\AuthenticateChief`
Validates a request comes from [Chief Tools](https://chief.app/)
Requires `services.chief.webhook_secret` configuration to be set to a random string
- `ChiefTools\SDK\Middleware\AutoAuthenticate`
Uses both the `api` and `web` guard and sets the first that is authenticated
- `ChiefTools\SDK\Middleware\ForceSecure`
Make sure the request is over `https://`
- `ChiefTools\SDK\Middleware\MoveAccessTokenFromURLToHeader`
Move the access token from `access_token` GET paramater to the `Authorization` header
- `ChiefTools\SDK\Middleware\SecurityHeaders`
Adds a default set of security headers, can be configured by setting `chief.response.securityheaders` (array) in the app config
- `ChiefTools\SDK\Middleware\TrustProxiesOnVapor`
Configures `fideloper/proxy` to be used on [Laravel Vapor](https://vapor.laravel.com/)
#### Validation rules
- `ChiefTools\SDK\Rules\UUID`
Valites the input value is a UUIDv4
#### Helpers
- `active($whitelist = null, $blacklist = null, $active = 'active', $inactive = '')`
Get active state based on whitelist. Used to indicate active menu's
- `timezones(): array`
Return an key-value list of all timezones
- `validate($fields, $rules): bool`
Validate fields against rules. Example `validate($id, new \ChiefTools\SDK\Rules\UUID)`
- `latest_ca_bundle_file_path(): string`
Get the path to the most up-to-date CA bundle file, uses [Certainty](https://github.com/paragonie/certainty) under the hood
### Installation
Start with requiring the package:
```bash
composer require chieftools/sdk
```
Publish the configuration files and optionally the migrations:
```bash
php artisan vendor:publish --tag=chief-config
# php artisan vendor:publish --tag=chief-migrations
```
Run the app migrations to create the users table:
```bash
php artisan migrate
```
Add the Chief service to the `config/services.php`:
```php
[
'client_id' => env('CHIEF_CLIENT_ID'),
'client_secret' => env('CHIEF_CLIENT_SECRET'),
'webhook_secret' => env('CHIEF_SECRET'),
'base_url' => env('CHIEF_BASE_URL', 'https://account.chief.app'),
'verify' => env('CHIEF_VERIFY', true),
'redirect' => '/login/callback',
],
];
```
That's all, you should be able to authenticate against Account Chief.
### GraphQL API
You will need to create a `routes/graphql/schema.graphql` in your own project with the following contents:
```graphql
#import ../../vendor/chieftools/sdk/routes/graphql/schema.graphql
```
Anything you want to add the the schema you can do thereafter, for example:
```graphql
#import ../../vendor/chieftools/sdk/routes/graphql/schema.graphql
#import ./types/*.graphql
#import ./queries/*.graphql
```
Keep in mind that the `User` type is already provided so you will need to extend that if you want to append fields.
```graphql
type OfType implements Entity {
id: ID!
}
extend type User {
relation: [OfType!]! @hasMany(type: "paginator")
}
```