{"_id":"@3mcode/token","_rev":"2-22239f019b9dca633dc2e13b3b967104","name":"@3mcode/token","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@3mcode/token","version":"1.0.0","author":{"name":"hacker1985@qq.com"},"_id":"@3mcode/token@1.0.0","maintainers":[{"name":"3mcode","email":"hacker1985@qq.com"}],"dist":{"shasum":"ebca8817394a314fdf68c777544b08b9d71407e3","tarball":"https://registry.npmjs.org/@3mcode/token/-/token-1.0.0.tgz","fileCount":9,"integrity":"sha512-xDsvkOf+4URn+RsKlsxDiHZoKaQ094RC2s8beKg0NC/8CpuHyjia4az8JZ9C1CUIyVURypT0+gkS1p7Aq1GPSg==","signatures":[{"sig":"MEYCIQCMuJ6T1tPjlpGUHs/5kPGo+/A+EySGJP9Ok/WzJ9rEKwIhANzm3TOrWLkGRKwjbgNBN5tDbUo9C3rVjL9PbENzDUlG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60488},"main":"dist/index.cjs","types":"dist/index.d.ts","module":"dist/index.es.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs"},"./types":"./dist/types.d.ts"},"gitHead":"ddb723aa41ebb2a1cb3a157e69ad19c0a0ff4d9e","scripts":{"build":"vite build","build:types":"tsc --project tsconfig.build.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"3mcode","email":"hacker1985@qq.com"},"_npmVersion":"9.7.2","description":"一个功能强大且灵活的Token管理类，支持多种存储方式和自定义配置。","directories":{},"_nodeVersion":"22.12.0","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.1.2","eslint":"^9.33.0","globals":"^16.3.0","@eslint/js":"^9.33.0","typescript":"~5.8.3","vite-plugin-dts":"^3.0.0","typescript-eslint":"^8.39.1"},"_npmOperationalInternal":{"tmp":"tmp/token_1.0.0_1757514320621_0.5957529518246794","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@3mcode/token","author":{"name":"hacker1985@qq.com"},"version":"1.1.0","main":"dist/index.cjs","module":"dist/index.es.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.es.js","require":"./dist/index.cjs"},"./types":"./dist/types.d.ts"},"scripts":{"build":"vite build","build:types":"tsc --project tsconfig.build.json","prepublishOnly":"npm run build"},"devDependencies":{"@eslint/js":"^9.33.0","eslint":"^9.33.0","globals":"^16.3.0","typescript":"~5.8.3","typescript-eslint":"^8.39.1","vite":"^7.1.2","vite-plugin-dts":"^3.0.0"},"publishConfig":{"registry":"https://registry.npmjs.org/","access":"public"},"gitHead":"b90f5617a345ec6d9255493c01d0d532079f48e9","description":"一个功能强大且灵活的Token管理类，支持多种存储方式和自定义配置。","_id":"@3mcode/token@1.1.0","_nodeVersion":"24.14.0","_npmVersion":"9.7.2","dist":{"integrity":"sha512-OetXvBLKnCqY4i/qaa5chshAICyJN0m3Cp8WdDbtVzI6QpbWev1bTlK1NgxljgXhXKAyWlZeLgVfUUFE1vQDKA==","shasum":"ccf560ec2889ccd9c9dd3c3c7cc59fa6c6539758","tarball":"https://registry.npmjs.org/@3mcode/token/-/token-1.1.0.tgz","fileCount":9,"unpackedSize":92996,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFX0kdcu9LRIEKer9uK5p4QPaojx+riWqe2HzhXQqBe3AiB8YV9qbo/LMsxHNzOEWXwN1gWydTe5egFJQdjZY6q+HA=="}]},"_npmUser":{"name":"3mcode","email":"hacker1985@qq.com"},"directories":{},"maintainers":[{"name":"3mcode","email":"hacker1985@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/token_1.1.0_1779585044912_0.05947629432648016"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-10T14:25:20.520Z","modified":"2026-05-24T01:10:45.149Z","1.0.0":"2025-09-10T14:25:20.818Z","1.1.0":"2026-05-24T01:10:45.051Z"},"author":{"name":"hacker1985@qq.com"},"description":"一个功能强大且灵活的Token管理类，支持多种存储方式和自定义配置。","maintainers":[{"name":"3mcode","email":"hacker1985@qq.com"}],"readme":"# TokenManager - 灵活的Token管理工具\n\n一个功能强大且灵活的Token管理类，支持多种存储方式和自定义配置。\n\n## 特性\n\n- 🎯 **多种存储方式**: 支持localStorage、sessionStorage、内存存储和自定义存储\n- 🔧 **灵活配置**: 可自定义token key名称和存储类型\n- 🔄 **自动过期检查**: 自动检查token是否过期\n- ⏰ **定时刷新**: 支持定时自动刷新token\n- 🛡️ **类型安全**: 完整的TypeScript类型支持\n- 🔄 **向后兼容**: 保持与旧版本的兼容性\n\n## 安装\n\n```bash\nnpm install\n```\n\n## 基本使用\n\n### 1. 使用默认单例（向后兼容）\n\n```typescript\nimport TokenManager from './src/index';\n\nconst tokenManager = TokenManager.getInstance();\n\n// 设置token\ntokenManager.setToken({\n    access_token: 'your-access-token',\n    refresh_token: 'your-refresh-token',\n    expires_in: 3600\n});\n\n// 获取token\nconst token = tokenManager.getToken();\nconsole.log(token);\n```\n\n### 2. 创建自定义配置的实例\n\n```typescript\nimport { createTokenManager, StorageType } from './src/index';\n\n// 使用sessionStorage\nconst sessionManager = createTokenManager({\n    tokenKey: 'my-session-token',\n    storageType: StorageType.SESSION_STORAGE\n});\n\n// 使用localStorage，自定义key\nconst localManager = createTokenManager({\n    tokenKey: 'my-local-token',\n    storageType: StorageType.LOCAL_STORAGE\n});\n\n// 使用内存存储\nconst memoryManager = createTokenManager({\n    tokenKey: 'my-memory-token',\n    storageType: StorageType.MEMORY\n});\n```\n\n### 3. 使用预设配置\n\n```typescript\nimport { createTokenManager, TokenManagerPresets } from './src/index';\n\n// 使用预设的session配置\nconst sessionManager = createTokenManager(TokenManagerPresets.session('my-token'));\n\n// 使用预设的内存配置\nconst memoryManager = createTokenManager(TokenManagerPresets.memory('my-token'));\n```\n\n### 4. 自定义存储实现\n\n```typescript\nimport { createTokenManager, StorageInterface } from './src/index';\n\nclass CustomStorage implements StorageInterface {\n    private data: Map<string, string> = new Map();\n    \n    getItem(key: string): string | null {\n        return this.data.get(key) || null;\n    }\n    \n    setItem(key: string, value: string): void {\n        this.data.set(key, value);\n    }\n    \n    removeItem(key: string): void {\n        this.data.delete(key);\n    }\n}\n\nconst customManager = createTokenManager({\n    tokenKey: 'custom-token',\n    customStorage: new CustomStorage()\n});\n```\n\n## API 参考\n\n### TokenManager 类\n\n#### 静态方法\n\n- `getInstance()`: 获取默认单例实例\n- `create(config)`: 创建新的TokenManager实例\n\n#### 实例方法\n\n##### Token 管理\n\n- `setToken(token)`: 设置token（自动计算过期时间）\n- `setTokenByPayload(token)`: 设置完整token数据\n- `getToken()`: 获取token（如果过期返回null）\n- `removeToken()`: 移除token\n\n##### 实用方法\n\n- `hasValidToken()`: 检查是否有有效的token\n- `getAccessToken()`: 获取访问token\n- `getRefreshToken()`: 获取刷新token\n- `isTokenExpiringSoon(minutes?)`: 检查token是否即将过期\n- `getConfig()`: 获取当前配置信息\n\n##### 定时刷新\n\n- `scheduleRefresh(expiresIn, refreshFn)`: 设置定时刷新\n- `clearRefreshTimer()`: 清除刷新定时器\n\n### 配置选项\n\n```typescript\ninterface TokenManagerConfig {\n    tokenKey?: string;           // token key名称，默认 'ors-token'\n    storageType?: StorageType;   // 存储类型，默认 localStorage\n    customStorage?: StorageInterface; // 自定义存储实现\n}\n```\n\n### 存储类型\n\n```typescript\nenum StorageType {\n    LOCAL_STORAGE = 'localStorage',\n    SESSION_STORAGE = 'sessionStorage',\n    MEMORY = 'memory'\n}\n```\n\n### Token 数据结构\n\n```typescript\ninterface TokenStorage {\n    access_token: string;    // 访问token\n    refresh_token: string;   // 刷新token\n    expires_in: number;      // 过期秒数\n    expire_at: Date;         // 过期时间\n}\n```\n\n## 使用场景\n\n### 1. 多应用场景\n\n```typescript\n// 主应用使用localStorage\nconst mainAppManager = createTokenManager({\n    tokenKey: 'main-app-token',\n    storageType: StorageType.LOCAL_STORAGE\n});\n\n// 子应用使用sessionStorage\nconst subAppManager = createTokenManager({\n    tokenKey: 'sub-app-token',\n    storageType: StorageType.SESSION_STORAGE\n});\n```\n\n### 2. 测试环境\n\n```typescript\n// 测试时使用内存存储，避免污染localStorage\nconst testManager = createTokenManager({\n    tokenKey: 'test-token',\n    storageType: StorageType.MEMORY\n});\n```\n\n### 3. 定时刷新\n\n```typescript\nconst manager = createTokenManager({\n    tokenKey: 'auto-refresh-token',\n    storageType: StorageType.LOCAL_STORAGE\n});\n\n// 设置token\nmanager.setToken({\n    access_token: 'token',\n    refresh_token: 'refresh-token',\n    expires_in: 3600\n});\n\n// 设置自动刷新\nmanager.scheduleRefresh(3600, async () => {\n    try {\n        const newToken = await refreshTokenAPI();\n        manager.setToken(newToken);\n        console.log('Token已自动刷新');\n    } catch (error) {\n        console.error('Token刷新失败:', error);\n    }\n});\n```\n\n## 运行示例\n\n```bash\n# 运行示例代码\nnpx ts-node example.ts\n```\n\n## 文件结构\n\n```\nsrc/frontend/token-manager/\n├── src/\n│   ├── index.ts          # 主入口文件，只做导出\n│   ├── types.ts          # 类型定义\n│   ├── storage.ts        # 存储相关实现\n│   ├── token-manager.ts  # TokenManager类\n│   └── presets.ts        # 预设配置和工具函数\n├── example.ts            # 使用示例\n└── README.md             # 详细文档\n```\n\n## 模块说明\n\n- **types.ts**: 包含所有TypeScript类型定义\n- **storage.ts**: 存储相关实现，包括MemoryStorage类和StorageFactory\n- **token-manager.ts**: 核心TokenManager类实现\n- **presets.ts**: 预设配置和便捷函数\n- **index.ts**: 主入口文件，统一导出所有公共API\n\n## 注意事项\n\n1. **内存存储**: 内存存储的数据在页面刷新后会丢失\n2. **sessionStorage**: 在同一个标签页中有效，关闭标签页后数据丢失\n3. **localStorage**: 数据持久化，直到手动清除或过期\n4. **定时刷新**: 记得在组件卸载时调用 `clearRefreshTimer()` 清理定时器\n5. **错误处理**: 建议在token操作时添加适当的错误处理\n","readmeFilename":"README.md"}