Shared dependencies and configurations for Authial Passport strategies.
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
npm install @authial/strategies-dependencies
# or
pnpm add @authial/strategies-dependenciesnpm install @authial/strategies-dependencies
# or
pnpm add @authial/strategies-dependencies{
"name": "@authial/strategy-example",
"type": "module",
"main": "./dist/index.js",
"types": "./dist/index.d.ts"
}import eslintConfig from '@authial/strategies-dependencies/eslint';
export default eslintConfig;import prettierConfig from '@authial/strategies-dependencies/prettier';
export default prettierConfig;{
"extends": "@authial/strategies-dependencies/tsconfig",
"compilerOptions": {
"outDir": "./dist",
"rootDir": "./src"
},
"include": ["src/**/*"],
"exclude": ["node_modules", "dist"]
}// 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.
This package uses ES modules and provides the following exports:
import {
passport,
OAuth2Strategy,
} from '@authial/strategies-dependencies/passport';
import type {
Strategy,
Profile,
AuthenticateOptions,
} from '@authial/strategies-dependencies/passport';passport- Passport.js instanceOAuth2Strategy- OAuth 2.0 strategy class- Type exports:
Strategy,Profile,AuthenticateOptions,StrategyOptions, etc.
import eslintConfig from '@authial/strategies-dependencies/eslint';- Returns: Array of ESLint 9+ flat config objects
- Includes: TypeScript, Prettier, and Import plugin configurations
import prettierConfig from '@authial/strategies-dependencies/prettier';- Returns: Prettier options object
- Pre-configured with: single quotes, semicolons, trailing commas, 80 char width
{
"extends": "@authial/strategies-dependencies/tsconfig"
}- Base TypeScript configuration for ES modules
- Includes: strict mode, declaration files, source maps
import {
expect,
describe,
it,
before,
} from '@authial/strategies-dependencies/test';expect- Chai assertion librarydescribe,it,before- Mocha test functions
- passport
^0.7.0- Authentication middleware for Node.js - passport-oauth2
^1.8.0- OAuth 2.0 authentication strategy
- 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
@types/passport- Passport type definitions@types/passport-oauth2- OAuth2 strategy type definitions@types/chai- Chai type definitions@types/mocha- Mocha type definitions
The ESLint configuration includes:
Parser & Plugins:
typescript-eslintparser for TypeScript support@typescript-eslintplugin for TypeScript-specific ruleseslint-plugin-prettierfor Prettier integrationeslint-plugin-importfor 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 outputnode_modules/**- Dependencies*.config.js- Configuration filespnpm-lock.yaml- Lock files
{
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
}{
"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
}
}// 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';
}
}// 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');
});
});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"
}
}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.
Just one package:
{
"dependencies": {
"@authial/strategies-dependencies": "^0.1.0"
}
}Everything is pre-configured and ready to use!
pnpm buildpnpm lint
pnpm lint:fixpnpm format
pnpm format:checkMIT © Vaibhav Maurya