1: | <?php declare(strict_types=1); |
2: | |
3: | namespace Salient\Contract\Core\Provider; |
4: | |
5: | use Salient\Contract\Container\HasContainer; |
6: | use Salient\Contract\Core\Exception\MethodNotImplementedExceptionInterface; |
7: | use Salient\Contract\Core\DateFormatterInterface; |
8: | use Salient\Contract\Core\HasName; |
9: | use Stringable; |
10: | |
11: | /** |
12: | * Services objects on behalf of a backend |
13: | * |
14: | * @template TContext of ProviderContextInterface |
15: | */ |
16: | interface ProviderInterface extends HasContainer, HasName |
17: | { |
18: | /** |
19: | * Get the name of the provider |
20: | * |
21: | * Appropriate values to return are: |
22: | * |
23: | * - already in scope (no lookup or transformation required) |
24: | * - likely to be unique |
25: | * - human-readable |
26: | */ |
27: | public function getName(): string; |
28: | |
29: | /** |
30: | * Get a stable list of values that, together with its class name, uniquely |
31: | * identifies the provider's backend instance |
32: | * |
33: | * This method must be idempotent for each backend instance the provider |
34: | * connects to. The return value should correspond to the smallest possible |
35: | * set of stable metadata that uniquely identifies the specific data source |
36: | * backing the connected instance. |
37: | * |
38: | * This may include: |
39: | * |
40: | * - an endpoint URI (if backend instances are URI-specific or can be |
41: | * expressed as an immutable URI) |
42: | * - a tenant ID |
43: | * - an installation GUID |
44: | * |
45: | * It should not include: |
46: | * |
47: | * - usernames, API keys, tokens, or other identifiers with a shorter |
48: | * lifespan than the data source itself |
49: | * - values that aren't unique to the connected data source |
50: | * - case-insensitive values (unless normalised first) |
51: | * |
52: | * It must not include: |
53: | * |
54: | * - values retrieved from a provider at runtime |
55: | * |
56: | * @return array<int|float|string|bool|Stringable|null> |
57: | */ |
58: | public function getBackendIdentifier(): array; |
59: | |
60: | /** |
61: | * Get a date formatter to work with the backend's date and time format |
62: | * and/or timezone |
63: | */ |
64: | public function getDateFormatter(): DateFormatterInterface; |
65: | |
66: | /** |
67: | * Get a context within which to instantiate entities on the provider's |
68: | * behalf |
69: | * |
70: | * @return TContext |
71: | */ |
72: | public function getContext(): ProviderContextInterface; |
73: | |
74: | /** |
75: | * Throw an exception if the backend isn't reachable |
76: | * |
77: | * Positive results should be cached for `$ttl` seconds. Negative results |
78: | * must never be cached. |
79: | * |
80: | * @return $this |
81: | * @throws MethodNotImplementedExceptionInterface if heartbeat monitoring |
82: | * isn't supported. |
83: | */ |
84: | public function checkHeartbeat(int $ttl = 300); |
85: | } |
86: |