$apps * @param array $metadata * * @return array */ public function inviteAppMember( string $ownerPublicId, string $email, array $apps, array $metadata = [], string $role = 'member', ): array { $response = $this->request('post', '/identity/team/invite', [ 'owner' => $ownerPublicId, 'email' => strtolower(trim($email)), 'apps' => $apps, 'role' => $role, 'metadata' => $metadata, ]); return (array) $response->json('data', []); } /** @return list> */ public function teamAccess(string $userPublicId): array { $response = $this->request('get', '/identity/team/access', [ 'user' => $userPublicId, ]); return (array) $response->json('data', []); } private function request(string $method, string $path, array $query = []): Response { $url = rtrim((string) config('identity.api_url'), '/').$path; $key = config('identity.api_key'); if ($url === '' || ! is_string($key) || $key === '') { throw new RuntimeException('Identity API is not configured.'); } $response = Http::withToken($key) ->timeout(10) ->{$method}($url, $query); if (! $response->successful()) { throw new RuntimeException($response->json('message') ?: 'Identity API request failed.'); } return $response; } }