PHP code example of padosoft / askmydocs-connector-base
1. Go to this page and download the library: Download padosoft/askmydocs-connector-base library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
padosoft / askmydocs-connector-base example snippets
use Padosoft\AskMyDocsConnectorBase\Scheduling\SyncScheduler;
->withSchedule(function (Schedule $schedule): void {
(new SyncScheduler)->registerSchedules($schedule);
})
namespace You\AskMyDocsConnectorMyApi;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Padosoft\AskMyDocsConnectorBase\BaseConnector;
use Padosoft\AskMyDocsConnectorBase\HealthStatus;
use Padosoft\AskMyDocsConnectorBase\SyncResult;
use Padosoft\AskMyDocsConnectorBase\Exceptions\ConnectorAuthException;
final class MyApiConnector extends BaseConnector
{
public function key(): string { return 'my-api'; }
public function displayName(): string { return 'My API'; }
public function oauthScopes(): array
{
return ['read:docs'];
}
public function initiateOAuth(int $installationId): string
{
$state = $this->issueOAuthState($installationId);
return 'https://my-api.example.com/oauth/authorize?state='.$state.'&...';
}
public function handleOAuthCallback(int $installationId, Request $request): void
{
if (! $this->consumeOAuthState($installationId, (string) $request->query('state'))) {
throw new ConnectorAuthException('Bad state');
}
// Exchange code -> token, then:
$this->vault->setCredentials($installationId, 'access-token', refreshToken: 'refresh');
}
public function syncFull(int $installationId): SyncResult
{
return $this->syncIncremental($installationId, null);
}
public function syncIncremental(int $installationId, ?Carbon $since): SyncResult
{
// Fetch changed docs, dispatch host ingest jobs, count them.
return new SyncResult(
documentsAdded: 5,
documentsUpdated: 2,
documentsRemoved: 0,
errors: [],
completedAt: Carbon::now(),
);
}
public function disconnect(int $installationId): void
{
$this->vault->clearCredentials($installationId);
}
public function health(int $installationId): HealthStatus
{
return HealthStatus::healthy();
}
}
use Padosoft\AskMyDocsConnectorBase\Contracts\SupportsCredentialForm;
use Padosoft\AskMyDocsConnectorBase\Support\CredentialField;
final class ImapConnector extends BaseConnector implements SupportsCredentialForm
{
public function credentialFormSchema(): array
{
return [
(new CredentialField(
name: 'host', label: 'IMAP Host', type: 'text', target: 'connection', name: 'password', label: 'Password', type: 'password', target: 'secret',
DB::transaction(function () use (...) {
$row = ConnectorCredential::query()
->where(...)
->lockForUpdate() // SELECT ... FOR UPDATE
->first();
if ($row === null) {
throw new ConnectorAuthException('credential row was deleted concurrently');
}
$extra = $row->extra_json ?? [];
$extra[$key] = $value;
$row->extra_json = $extra;
$row->save(); // same transaction
});
// config/connectors.php (publishable with --tag=connector-config)
return [
'built_in' => [
// \App\Connectors\BuiltIn\MyHostConnector::class,
],
'default_sync_cadence_minutes' => env('CONNECTOR_DEFAULT_SYNC_CADENCE_MINUTES', 15),
'per_connector_cadence' => [
// 'google-drive' => 10,
// 'notion' => 30,
],
'oauth_state_ttl_seconds' => env('CONNECTOR_OAUTH_STATE_TTL_SECONDS', 600),
'sync_job_queue' => env('CONNECTOR_SYNC_JOB_QUEUE', 'default'),
'providers' => [
// Per-connector packages merge their own block here from their
// own service providers via mergeConfigFrom().
],
];