Skip to content

Authial/strategies-dependencies

Repository files navigation

@authial/strategies-dependencies

Shared dependencies and configurations for Authial Passport strategies.

Overview

This package provides centralized tooling and dependencies for building Passport authentication strategies. It includes:

  • 🔧 ESLint Configuration - ESLint 9+ flat config with TypeScript support
  • 🎨 Prettier Configuration - Consistent code formatting rules
  • 📘 TypeScript Configuration - Base compiler options for ES modules
  • 🔐 Passport Dependencies - Pre-configured Passport and OAuth2 exports
  • 🧪 Test Utilities - Chai and Mocha testing tools

Key Benefits:

  • ✅ No need to install ESLint, Prettier, or their plugins in each strategy
  • ✅ Consistent configuration across all strategy packages
  • ✅ ES Module support with full TypeScript types
  • ✅ Ready-to-use Passport and OAuth2 exports

Installation

npm install @authial/strategies-dependencies
# or
pnpm add @authial/strategies-dependencies

Quick Start

Step 1: Install the Package

npm install @authial/strategies-dependencies
# or
pnpm add @authial/strategies-dependencies

Step 2: Configure Your Strategy Package

Create package.json with ES modules:

{
  "name": "@authial/strategy-example",
  "type": "module",
  "main": "./dist/index.js",
  "types": "./dist/index.d.ts"
}

Create eslint.config.js:

import eslintConfig from '@authial/strategies-dependencies/eslint';

export default eslintConfig;

Create .prettierrc.js:

import prettierConfig from '@authial/strategies-dependencies/prettier';

export default prettierConfig;

Create tsconfig.json:

{
  "extends": "@authial/strategies-dependencies/tsconfig",
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}

Step 3: Use in Your Code

// Import Passport and OAuth2Strategy
import {
  passport,
  OAuth2Strategy,
} from '@authial/strategies-dependencies/passport';

// Import test utilities
import { expect, describe, it } from '@authial/strategies-dependencies/test';

// Use in your strategy
class MyStrategy extends OAuth2Strategy {
  // Your strategy implementation
}

That's it! No need to install ESLint, Prettier, TypeScript plugins, or Passport packages separately.

Available Exports

This package uses ES modules and provides the following exports:

🔐 Passport Dependencies

import {
  passport,
  OAuth2Strategy,
} from '@authial/strategies-dependencies/passport';
import type {
  Strategy,
  Profile,
  AuthenticateOptions,
} from '@authial/strategies-dependencies/passport';
  • passport - Passport.js instance
  • OAuth2Strategy - OAuth 2.0 strategy class
  • Type exports: Strategy, Profile, AuthenticateOptions, StrategyOptions, etc.

🔧 ESLint Configuration

import eslintConfig from '@authial/strategies-dependencies/eslint';
  • Returns: Array of ESLint 9+ flat config objects
  • Includes: TypeScript, Prettier, and Import plugin configurations

🎨 Prettier Configuration

import prettierConfig from '@authial/strategies-dependencies/prettier';
  • Returns: Prettier options object
  • Pre-configured with: single quotes, semicolons, trailing commas, 80 char width

📘 TypeScript Configuration

{
  "extends": "@authial/strategies-dependencies/tsconfig"
}
  • Base TypeScript configuration for ES modules
  • Includes: strict mode, declaration files, source maps

🧪 Test Utilities

import {
  expect,
  describe,
  it,
  before,
} from '@authial/strategies-dependencies/test';
  • expect - Chai assertion library
  • describe, it, before - Mocha test functions

Package Contents

Runtime Dependencies (Included)

  • passport ^0.7.0 - Authentication middleware for Node.js
  • passport-oauth2 ^1.8.0 - OAuth 2.0 authentication strategy

Development Tools (Included - No Need to Install Separately)

  • ESLint ^9.39.1 - Linting tool with flat config
  • typescript-eslint ^8.48.0 - TypeScript ESLint support
  • Prettier ^3.7.3 - Code formatter
  • eslint-plugin-prettier - Prettier integration for ESLint
  • eslint-plugin-import - Import/export syntax linting
  • eslint-import-resolver-typescript - TypeScript import resolution
  • Chai ^6.2.1 - Assertion library
  • Mocha ^11.7.5 - Test framework
  • TypeScript ^5.9.2 - Type definitions and compiler

Type Definitions (Included)

  • @types/passport - Passport type definitions
  • @types/passport-oauth2 - OAuth2 strategy type definitions
  • @types/chai - Chai type definitions
  • @types/mocha - Mocha type definitions

Configuration Details

ESLint Configuration (Flat Config - ESLint 9+)

The ESLint configuration includes:

Parser & Plugins:

  • typescript-eslint parser for TypeScript support
  • @typescript-eslint plugin for TypeScript-specific rules
  • eslint-plugin-prettier for Prettier integration
  • eslint-plugin-import for import/export linting

Rules:

  • ✅ TypeScript recommended rules
  • ✅ Automatic import sorting and organization
  • ✅ Prettier formatting as ESLint errors
  • ✅ Unused variables detection (ignores _ prefixed variables)
  • ✅ Console warnings
  • ✅ Prefer const over let
  • ✅ Required semicolons

Ignored Patterns:

  • dist/** - Build output
  • node_modules/** - Dependencies
  • *.config.js - Configuration files
  • pnpm-lock.yaml - Lock files

Prettier Configuration

{
  semi: true,              // Require semicolons
  singleQuote: true,       // Use single quotes
  trailingComma: 'all',    // Trailing commas everywhere
  printWidth: 80,          // 80 characters per line
  tabWidth: 2,             // 2 spaces for indentation
  useTabs: false,          // Use spaces, not tabs
  arrowParens: 'always',   // Always use parens in arrow functions
  endOfLine: 'lf'          // Unix-style line endings
}

TypeScript Configuration

{
  "compilerOptions": {
    "module": "ESNext", // ES module output
    "target": "ES2020", // Modern JavaScript
    "moduleResolution": "bundler", // Modern resolution
    "strict": true, // Strict type checking
    "declaration": true, // Generate .d.ts files
    "sourceMap": true, // Generate source maps
    "esModuleInterop": true, // CommonJS interop
    "skipLibCheck": true, // Skip lib checking
    "resolveJsonModule": true // Import JSON files
  }
}

Usage Examples

Building a Passport Strategy

// src/strategy.ts
import { OAuth2Strategy } from '@authial/strategies-dependencies/passport';
import type {
  StrategyOptions,
  VerifyFunction,
} from '@authial/strategies-dependencies/passport';

export class MyCustomStrategy extends OAuth2Strategy {
  constructor(options: StrategyOptions, verify: VerifyFunction) {
    super(options, verify);
    this.name = 'my-custom-strategy';
  }
}

Writing Tests

// src/strategy.test.ts
import { describe, it, expect } from '@authial/strategies-dependencies/test';
import { MyCustomStrategy } from './strategy.js';

describe('MyCustomStrategy', () => {
  it('should create a strategy instance', () => {
    const strategy = new MyCustomStrategy(options, verify);
    expect(strategy.name).to.equal('my-custom-strategy');
  });
});

Recommended Scripts

Add these scripts to your strategy's package.json:

{
  "type": "module",
  "scripts": {
    "build": "tsc",
    "dev": "tsc --watch",
    "lint": "eslint . --ext .ts",
    "lint:fix": "eslint . --ext .ts --fix",
    "format": "prettier --write \"src/**/*.ts\"",
    "format:check": "prettier --check \"src/**/*.ts\"",
    "test": "mocha"
  }
}

Why Use This Package?

Without @authial/strategies-dependencies

Each strategy needs to install and configure:

{
  "devDependencies": {
    "eslint": "^9.39.1",
    "@typescript-eslint/parser": "^8.48.0",
    "@typescript-eslint/eslint-plugin": "^8.48.0",
    "prettier": "^3.7.3",
    "eslint-plugin-prettier": "^5.5.4",
    "eslint-config-prettier": "^10.1.8",
    "eslint-plugin-import": "^2.32.0",
    "typescript-eslint": "^8.48.0",
    "chai": "^6.2.1",
    "mocha": "^11.7.5"
  },
  "dependencies": {
    "passport": "^0.7.0",
    "passport-oauth2": "^1.8.0"
  }
}

Plus manual configuration of ESLint, Prettier, and TypeScript.

With @authial/strategies-dependencies

Just one package:

{
  "dependencies": {
    "@authial/strategies-dependencies": "^0.1.0"
  }
}

Everything is pre-configured and ready to use!

Development

Building

pnpm build

Linting

pnpm lint
pnpm lint:fix

Formatting

pnpm format
pnpm format:check

License

MIT © Vaibhav Maurya

Repository

https://github.com/authial/strategies-dependencies

About

Shared dependencies for Authial Passport strategies

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors