{"_id":"1password-config","_rev":"9-1ad8ec735f57981e41594aa648782bcb","name":"1password-config","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.1":{"name":"1password-config","version":"0.0.1","keywords":["1password","config"],"author":{"name":"Colin"},"license":"MIT","_id":"1password-config@0.0.1","maintainers":[{"name":"colin-2030","email":"mrsoniceman@gmail.com"}],"dist":{"shasum":"0dcd6a32f94441d6792e1a0b886b9e266070a35b","tarball":"https://registry.npmjs.org/1password-config/-/1password-config-0.0.1.tgz","fileCount":6,"integrity":"sha512-KgiL5Ho+bWZYcKPsaNZ8N1VcZvL7mlL/gAq8KNZ1LxCu93pT9pVTk1Xl0NfGBtxTYvvQ4ANBdcH8LtXTBbn/aw==","signatures":[{"sig":"MEUCIFnxPzEhWRU6fQepQvVD6BE9doqPcdfzM10bLhsnyzgTAiEAzN2H0UazIbM+3kjk49N0KySUnkMyYRqJTRyXPbbz+CU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4831},"main":"./dist/cjs/index.js","type":"module","types":"./dist/types/index.d.ts","module":"./dist/esm/index.js","engines":{"node":">=16.0.0"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/index.js","require":"./dist/cjs/index.js"}},"gitHead":"801ec7fd78df1603fb172e5b67263ba9cda7c048","private":false,"scripts":{"build":"npm run clean && npm run build:esm && npm run build:cjs","clean":"rm -rf dist","build:cjs":"tsc --project tsconfig.build.json --module CommonJS --outDir dist/cjs","build:esm":"tsc --project tsconfig.build.json --module ESNext --outDir dist/esm","publish:npm":"npm publish","publish:beta":"npm publish --tag beta","version:major":"npm version major","version:minor":"npm version minor","version:patch":"npm version patch","prepublishOnly":"npm run build"},"_npmUser":{"name":"colin-2030","email":"mrsoniceman@gmail.com"},"deprecated":"此版本包含敏感数据，请升级到最新版本","_npmVersion":"10.9.2","description":"1Password configuration utilities","directories":{},"sideEffects":false,"_nodeVersion":"22.13.0","dependencies":{"@1password/op-js":"^0.1.14-alpha.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/1password-config_0.0.1_1754907324766_0.6443396086858624","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"1password-config","version":"1.0.0","description":"1Password configuration utilities","keywords":["1password","config","1password-config"],"author":{"name":"Colin"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/woshidamaomao/1password-config.git"},"homepage":"https://github.com/woshidamaomao/1password-config","bugs":{"url":"https://github.com/woshidamaomao/1password-config/issues"},"type":"module","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/types/index.d.ts","exports":{".":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js","types":"./dist/types/index.d.ts"}},"scripts":{"clean":"rm -rf dist","build:esm":"tsc --project tsconfig.build.json --module ESNext --outDir dist/esm","build:cjs":"tsc --project tsconfig.build.json --module CommonJS --outDir dist/cjs","build":"npm run clean && npm run build:esm && npm run build:cjs","prepublishOnly":"npm run build","publish:npm":"npm publish","publish:beta":"npm publish --tag beta","version:patch":"npm version patch","version:minor":"npm version minor","version:major":"npm version major","example":"tsx examples/demo.ts"},"sideEffects":false,"publishConfig":{"access":"public"},"private":false,"dependencies":{"@1password/op-js":"0.1.13"},"devDependencies":{"@types/node":"^20.0.0","tsx":"^4.0.0","typescript":"^5.0.0"},"engines":{"node":">=16.0.0"},"_id":"1password-config@1.0.0","gitHead":"05e70680f29963977249d20f8b4fc00d3fab3565","_nodeVersion":"22.13.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-lasdUese4CMms7P0LG8XNdp53JQyHM8XFHH+CgtbpubmJraH+TvLhk9/99j1zc3PwNB7xGnK7mLGaQUw7a935g==","shasum":"69fbba8ec0c801c6b76a1310af52385f61557869","tarball":"https://registry.npmjs.org/1password-config/-/1password-config-1.0.0.tgz","fileCount":7,"unpackedSize":16693,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDWTN06gDq/TfwbkvHKL+brEkBKyeU6lMhZLGLkGdCU8gIhAMdXyktEhZAbmBZDPC+cuYUtD6A6j1X3UNFrFGyrxGQW"}]},"_npmUser":{"name":"colin-2030","email":"mrsoniceman@gmail.com"},"directories":{},"maintainers":[{"name":"colin-2030","email":"mrsoniceman@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/1password-config_1.0.0_1755164034899_0.8871499259850555"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-11T10:15:24.691Z","modified":"2025-08-14T09:33:55.261Z","0.0.1":"2025-08-11T10:15:24.938Z","0.0.2":"2025-08-14T08:07:55.178Z","0.0.3":"2025-08-14T08:33:14.101Z","0.0.4":"2025-08-14T08:58:16.752Z","1.0.0":"2025-08-14T09:33:55.086Z"},"author":{"name":"Colin"},"license":"MIT","keywords":["1password","config","1password-config"],"description":"1Password configuration utilities","maintainers":[{"name":"colin-2030","email":"mrsoniceman@gmail.com"}],"readme":"# 1password-config\n\nA secure Node.js toolkit for retrieving configurations from 1Password.\n\n## 🚀 Quick Start\n\n```bash\n# Install\nnpm install 1password-config\n\n# Create a configuration item in 1Password, then:\n```\n\n```typescript\nimport { getConfig } from '1password-config';\n\n// Example: Alibaba Cloud OSS Configuration\nconst ossConfig = await getConfig('your-1password-item-uuid-or-name', {\n  region: 'OSS region configuration',\n  access_key_id: {\n    key: 'username',\n    description: 'OSS Access Key ID'\n  },\n  access_key_secret: {\n    key: 'credential',\n    description: 'OSS Access Key Secret'\n  },\n  bucket: {\n    description: 'Storage bucket name'\n  },\n  host: {\n    description: 'OSS service host'\n  }\n});\n\n// Use directly - it's that simple!\nconsole.log('Region:', ossConfig.region);\nconsole.log('Access Key:', ossConfig.access_key_id);\n```\n\n## 📖 API Reference\n\n### Function Signature\n\n```typescript\n// Simple format (default)\nfunction getConfig<T extends ConfigMap>(\n  idOrName: string,\n  keyOptions: T,\n  options?: { detailedResult?: false }\n): Promise<{ [K in keyof T]: string | undefined }>\n\n// Detailed format\nfunction getConfig<T extends ConfigMap>(\n  idOrName: string,\n  keyOptions: T,\n  options: { detailedResult: true }\n): Promise<{ [K in keyof T]: ConfigResult }>\n```\n\n### Parameters\n\n#### `idOrName: string`\nThe name or UUID of the 1Password item.\n\n#### `keyOptions: ConfigMap`\nConfiguration field mapping object. Supports two formats:\n\n**1. String value format:**\n```typescript\n{\n  username: 'User name description'\n}\n```\n\n**2. Object value format:**\n```typescript\n{\n  access_key: {\n    key: 'username',           // Field name in 1Password (optional, defaults to key name)\n    default: 'default_value',  // Default value (optional)\n    description: 'Access key'  // Description (optional)\n  }\n}\n```\n\n#### `options?: GetConfigOptions`\nConfiguration options object:\n- `detailedResult?: boolean` - Whether to return detailed format, default `false`\n\n### Return Types\n\n#### Simple Format (Default)\nReturns an object with configuration values:\n\n```typescript\n{\n  region: \"oss-cn-shanghai\",\n  access_key_id: \"DSAI5aOitshaSH6PsagdLtms\",\n  bucket: \"my-bucket\"\n}\n```\n\n#### Detailed Format\nReturns an object with complete information for each field:\n\n```typescript\n{\n  region: {\n    value: \"oss-cn-shanghai\",\n    matched: true,\n    description: \"OSS region configuration\"\n  },\n  access_key_id: {\n    value: \"DSAI5aOitshaSH6PsagdLtms\",\n    matched: true,\n    description: \"OSS Access Key ID\"\n  },\n  backup_key: {\n    value: \"default-backup-key\",\n    matched: false,\n    description: \"Backup key\"\n  }\n}\n```\n\n#### ConfigResult Type\n```typescript\ntype ConfigResult = {\n    value: string | undefined;  // Field value\n    matched: boolean;           // Whether found in 1Password\n    description?: string;       // Description\n}\n```\n\n## 💡 Usage Examples\n\n### Simple Configuration (Recommended)\n\nMost common usage - directly get configuration values:\n\n```typescript\nconst config = await getConfig('my-oss-config', {\n  region: 'OSS region',\n  access_key_id: {\n    key: 'username',\n    default: 'dev-key'\n  },\n  bucket: { default: 'dev-bucket' }\n});\n\n// Use directly\nconst ossClient = new OSS({\n  region: config.region,\n  accessKeyId: config.access_key_id,\n  bucket: config.bucket\n});\n```\n\n### Advanced Configuration\n\nWhen 1Password field names differ from your desired names:\n\n```typescript\nconst config = await getConfig('oss-credentials', {\n  accessKey: {\n    key: 'username',        // Maps to 'username' field in 1Password\n    description: 'Access key'\n  },\n  secretKey: {\n    key: 'credential',      // Maps to 'credential' field in 1Password\n    default: 'dev-secret'   // Development environment default\n  }\n});\n```\n\n### Detailed Information Mode\n\nWhen you need to know if configuration was actually retrieved from 1Password:\n\n```typescript\nconst config = await getConfig('my-config', {\n  database_url: 'Database connection string',\n  api_key: { default: 'dev-key' }\n}, { detailedResult: true });  // Enable detailed mode\n\n// Check configuration status\nconsole.log('Database URL:', config.database_url.value);\nconsole.log('From 1Password:', config.database_url.matched ? 'Yes' : 'No');\n\nif (!config.api_key.matched) {\n    console.warn('⚠️ API key using default value, please configure in 1Password');\n}\n```\n\n## 🛠️ Setting up 1Password\n\n1. Open 1Password app\n2. Create a new \"Secure Note\" or \"API Credential\"\n3. Name it something like \"My OSS Config\"\n4. Add fields:\n   - `username` - Your access key ID\n   - `credential` - Your access key secret\n   - `region` - OSS region (e.g., oss-cn-shanghai)\n   - `bucket` - Bucket name\n   - `host` - OSS endpoint URL\n   - `cdn_host` - CDN URL\n5. Save\n\nThen in your code:\n\n```typescript\nconst config = await getConfig('My OSS Config', {\n  region: 'OSS region',\n  access_key_id: {\n    key: 'username',\n    description: 'OSS Access Key ID'\n  },\n  access_key_secret: {\n    key: 'credential',\n    description: 'OSS Access Key Secret'\n  },\n  bucket: 'Storage bucket',\n  host: 'OSS endpoint',\n  cdn_host: 'CDN endpoint'\n});\n```\n\n## 🌍 Environment-specific Configuration\n\n```typescript\n// Use different configurations for different environments\nconst itemName = process.env.NODE_ENV === 'production' \n  ? 'Production OSS Config' \n  : 'Development OSS Config';\n\nconst config = await getConfig(itemName, {\n  region: 'OSS region',\n  access_key_id: { key: 'username' },\n  access_key_secret: { key: 'credential' },\n  bucket: { default: 'dev-bucket' }\n});\n```\n\n## 🔍 Production Environment Validation\n\n```typescript\nif (process.env.NODE_ENV === 'production') {\n    const config = await getConfig('Production Config', {\n        database_url: 'Database URL',\n        jwt_secret: 'JWT Secret',\n        oss_key: 'OSS Access Key'\n    }, { detailedResult: true });\n    \n    // Ensure critical configurations are set\n    const missing = Object.entries(config)\n        .filter(([, cfg]) => !cfg.matched)\n        .map(([key]) => key);\n    \n    if (missing.length > 0) {\n        throw new Error(`Missing production configurations: ${missing.join(', ')}`);\n    }\n}\n```\n\n## ❓ Troubleshooting\n\n**Q: Item not found error?**\n- Ensure the 1Password item name matches exactly\n- Try using the item UUID: run `op item list` to view\n\n**Q: Field not retrieving?**\n- Check if field name is correct (case-insensitive)\n- Confirm the field exists in 1Password\n\n**Q: Need to re-login?**\n- Run `op signin` to re-authenticate\n\n## 📚 More Resources\n\n- 📖 [Detailed API Documentation](./API.md) - Complete feature reference\n- 💡 [Example Code](./examples/) - Practical examples\n- 🚀 Run example: `npm run example`\n\n## 📄 License\n\nMIT\n","readmeFilename":"README.md","homepage":"https://github.com/woshidamaomao/1password-config","repository":{"type":"git","url":"git+https://github.com/woshidamaomao/1password-config.git"},"bugs":{"url":"https://github.com/woshidamaomao/1password-config/issues"}}