public static function factory($config = array())
    {
        $default = array(
            'masterKey' => null,
            'writeKey'  => null,
            'readKey'   => null,
            'projectId' => null,
            'organizationKey' => null,
            'organizationId' => null,
            'version' => '3.0',
            'headers' => array(
                'Keen-Sdk' => 'php-' . self::VERSION
            )
        );

        // Create client configuration
        $config = self::parseConfig($config, $default);

        $file = 'keen-io-' . str_replace('.', '_', $config['version']) . '.php';

        // Create the new Keen IO Client with our Configuration
        return new self(
            new Client($config),
            new Description(include __DIR__ . "/Resources/{$file}"),
            null,
            function ($arg) {
                return json_decode($arg->getBody(), true);
            },
            null,
            $config
        );
    }