$projectId,]); $decoded = Key::decode($project, $key); $this->assertEquals($projectId, $decoded->getProjectId()); $this->assertEquals(API_KEY_DYNAMIC, $decoded->getType()); $this->assertEquals(Auth::USER_ROLE_APPS, $decoded->getRole()); $this->assertEquals(\array_merge($scopes, $roleScopes), $decoded->getScopes()); } private static function generateKey( string $projectId, bool $usage, array $scopes, ): string { $jwt = new JWT( key: System::getEnv('_APP_OPENSSL_KEY_V1'), algo: 'HS256', maxAge: 86400, leeway: 0, ); $apiKey = $jwt->encode([ 'projectId' => $projectId, 'usage' => $usage, 'scopes' => $scopes, ]); return API_KEY_DYNAMIC . '_' . $apiKey; } }