Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
ca01b1b
feat(gateway): add passRequestHeaders configuration
geekdada Dec 31, 2025
0c1a3bd
refactor(provider): unify header handling across all providers
geekdada Dec 31, 2025
3d33e77
test(provider): update tests for new header handling api
geekdada Dec 31, 2025
7f6d3af
fix(provider): improve header handling and cache key generation
geekdada Dec 31, 2025
28c6cc2
refactor(provider): update cache key generation for all providers
geekdada Dec 31, 2025
18fa69b
fix(provider): add requestHeaders support to getSubscriptionUserInfo
geekdada Dec 31, 2025
96d1383
chore: upgrade pnpm to v10
geekdada Dec 31, 2025
8bb2d29
feat(provider): add getNodeListV2 method
geekdada Dec 31, 2025
1fcd541
refactor(provider): make getNodeListV2 abstract
geekdada Jan 1, 2026
8a51509
refactor(provider): implement getNodeListV2 in provider subclasses
geekdada Jan 1, 2026
64e13ef
test(provider): fix cache key collision in ClashProvider test
geekdada Jan 1, 2026
bb81a85
style(provider): format code in subscription providers
geekdada Jan 1, 2026
2ed7faa
chore: update dependencies and improve TypeScript configuration
geekdada Jan 1, 2026
b8d40dd
chore(eslint): upgrade to v9 and update dependencies
geekdada Jan 1, 2026
da6243d
chore(eslint): migrate to flat config format
geekdada Jan 1, 2026
7ec9330
refactor(linter): migrate to eslint 9 api
geekdada Jan 1, 2026
b888218
style: fix eslint 9 formatting issues
geekdada Jan 1, 2026
6df9fc2
chore: update .gitignore to include additional files and directories
geekdada Jan 1, 2026
42f4472
feat(types): improve HTTP headers type definition
geekdada Jan 18, 2026
95b5672
feat(provider): migrate from passGatewayRequestUserAgent to passGatew…
geekdada Jan 18, 2026
f7b03e6
feat(provider): migrate from passGatewayRequestUserAgent to passGatew…
geekdada Jan 18, 2026
077c4f5
fix(types): fix subscriptionUserInfo spelling consistency
geekdada Jan 18, 2026
f54843e
feat(generator): enhance artifact subscription info handling
geekdada Jan 18, 2026
2b1af4a
feat(provider): update all providers for consistent naming
geekdada Jan 18, 2026
3840c2e
fix(commands): update subscriptions command for consistent naming
geekdada Jan 18, 2026
7ae0ace
refactor: replace agentkeepalive with native Node.js HTTP agents
geekdada Jan 18, 2026
e6c9272
feat(provider): enhance request headers handling and UA initialization
geekdada Jan 18, 2026
bb875b1
chore: migrate npm config to pnpm workspace and remove deprecated dep…
geekdada Jan 18, 2026
f74efcf
chore: move pnpm config from package.json to pnpm-workspace.yaml
geekdada Jan 18, 2026
83fd3dd
chore: update build command in package.json for TypeScript compilation
geekdada Jan 18, 2026
d82605c
chore(cache): bump provider cache version to v3
geekdada Jan 18, 2026
43a7588
feat(provider): add logging and error handling to requestCacheableRes…
geekdada Jan 18, 2026
75433fc
fix(http-client): conditionally apply agent based on NODE_ENV
geekdada Jan 18, 2026
51fbe42
docs(claude): use pnpm ava command instead of npx
geekdada Jan 19, 2026
64ff879
test(provider): add comprehensive tests for clash and custom providers
geekdada Jan 19, 2026
b4b6c2f
Update src/provider/Provider.ts
geekdada Jan 19, 2026
6097c0e
fix(artifact): correct variable name for subscription user info map
geekdada Jan 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .eslintignore

This file was deleted.

46 changes: 0 additions & 46 deletions .eslintrc.js

This file was deleted.

43 changes: 38 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,18 +1,51 @@
# OS
.DS_Store
Thumbs.db

# Logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Environment
.env
.nyc_output
.env.local
.env.*.local

# Dependencies
node_modules/
coverage/

/.zeabur/output/
# Build outputs
/dist/
/build/
/binary-build/
*.tsbuildinfo
.buildinfo

# Test & Coverage
.nyc_output
coverage/
/test/fixture/**/dist
/test/benchmark/playground.js

# IDE
.idea/
.vscode/
*.swp
*.swo
*~

# VuePress docs
/docs/.vuepress/dist
/docs/.vuepress/.cache
/docs/.vuepress/.temp
/test/fixture/**/dist
/test/benchmark/playground.js

# Examples
/examples/**/dist

# Misc
*.tgz
.eslintcache
.cache/
4 changes: 0 additions & 4 deletions .npmrc

This file was deleted.

2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ pnpm test:lint
pnpm test:unit

# 运行单个测试文件
npx ava src/path/to/test.test.ts
pnpm ava src/path/to/test.test.ts

# 运行 CLI 测试 (使用 mocha)
pnpm test:cli
Expand Down
243 changes: 243 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,243 @@
import eslint from '@eslint/js'
import tseslint from 'typescript-eslint'
import importPlugin from 'eslint-plugin-import-x'
import prettierConfig from 'eslint-config-prettier'
import prettierPlugin from 'eslint-plugin-prettier'
import globals from 'globals'

export default tseslint.config(
// Global ignores (replaces .eslintignore)
{
ignores: [
'build/**',
'test/asset/**',
'docs/.vuepress/dist/**',
'docs/.vuepress/.cache/**',
'docs/.vuepress/.temp/**',
'coverage/**',
'node_modules/**',
'examples/**',
'hygen-template/**',
// Root-level re-export files
'*.js',
'*.d.ts',
// Config files at root
'.prettierrc.js',
'bump.config.ts',
],
},

// Base configs
eslint.configs.recommended,
...tseslint.configs.recommended,

// TypeScript files configuration
{
files: ['src/**/*.ts', 'scripts/**/*.ts'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: {
...globals.node,
...globals.es2021,
},
parserOptions: {
project: './tsconfig.eslint.json',
},
},
plugins: {
'import-x': importPlugin,
prettier: prettierPlugin,
},
settings: {
'import-x/resolver': {
typescript: {
alwaysTryTypes: true,
project: './tsconfig.eslint.json',
},
node: true,
},
},
rules: {
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
// Allow TypeScript re-export patterns
'no-redeclare': 'off',
'@typescript-eslint/no-redeclare': 'off',
'import-x/order': [
'error',
{
groups: [
['builtin', 'external', 'internal'],
'parent',
'sibling',
'index',
'object',
'type',
],
'newlines-between': 'always',
},
],
'prettier/prettier': 'error',
},
},

// Test files configuration (unit tests with ava)
{
files: ['test/**/*.ts', 'src/**/*.test.ts'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: {
...globals.node,
...globals.es2021,
},
parserOptions: {
project: './tsconfig.eslint.json',
},
},
plugins: {
'import-x': importPlugin,
prettier: prettierPlugin,
},
settings: {
'import-x/resolver': {
typescript: {
alwaysTryTypes: true,
project: './tsconfig.eslint.json',
},
node: true,
},
},
rules: {
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
'@typescript-eslint/no-unused-expressions': 'off',
'no-redeclare': 'off',
'@typescript-eslint/no-redeclare': 'off',
'import-x/order': [
'error',
{
groups: [
['builtin', 'external', 'internal'],
'parent',
'sibling',
'index',
'object',
'type',
],
'newlines-between': 'always',
},
],
'prettier/prettier': 'error',
},
},

// CLI test files (mocha)
{
files: ['test/**/*.cli-test.ts'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: {
...globals.node,
...globals.es2021,
...globals.mocha,
},
parserOptions: {
project: './tsconfig.eslint.json',
},
},
plugins: {
'import-x': importPlugin,
prettier: prettierPlugin,
},
settings: {
'import-x/resolver': {
typescript: {
alwaysTryTypes: true,
project: './tsconfig.eslint.json',
},
node: true,
},
},
rules: {
'@typescript-eslint/ban-ts-comment': 'off',
'@typescript-eslint/no-var-requires': 'off',
'@typescript-eslint/no-require-imports': 'off',
'@typescript-eslint/no-explicit-any': 'off',
'@typescript-eslint/no-unused-vars': [
'error',
{ argsIgnorePattern: '^_' },
],
'@typescript-eslint/no-unused-expressions': 'off',
'no-redeclare': 'off',
'@typescript-eslint/no-redeclare': 'off',
'import-x/order': [
'error',
{
groups: [
['builtin', 'external', 'internal'],
'parent',
'sibling',
'index',
'object',
'type',
],
'newlines-between': 'always',
},
],
'prettier/prettier': 'error',
},
},

// JavaScript files configuration (without type-aware rules)
{
files: ['scripts/**/*.js', 'test/**/*.js'],
languageOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
globals: {
...globals.node,
...globals.es2021,
},
},
plugins: {
'import-x': importPlugin,
prettier: prettierPlugin,
},
rules: {
'@typescript-eslint/no-require-imports': 'off',
'import-x/order': [
'error',
{
groups: [
['builtin', 'external', 'internal'],
'parent',
'sibling',
'index',
'object',
'type',
],
'newlines-between': 'always',
},
],
'prettier/prettier': 'error',
},
},

// Prettier must be last
prettierConfig,
)
Loading