{"_id":"@1table/sms-core","_rev":"3-a6b4a40a676b1835af13f02705650c93","name":"@1table/sms-core","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@1table/sms-core","version":"1.0.0","keywords":["sms","1table","aliyun","btom","chatbot","embedded","sdk"],"author":"","license":"MIT","_id":"@1table/sms-core@1.0.0","maintainers":[{"name":"pengaq","email":"50463888@qq.com"}],"dist":{"shasum":"8e860b133541f43fe8f3368f8f5357249a8b5a8f","tarball":"https://registry.npmjs.org/@1table/sms-core/-/sms-core-1.0.0.tgz","fileCount":11,"integrity":"sha512-jEQrgfwIlSWjNvtmlpf/HHdqZSQaLYv194WY2cJuvE0mz8MtbZQClMfa955Q8W0x6oYVl1xX4wlKX4vf+hyVEA==","signatures":[{"sig":"MEYCIQCE1p1/Jlyw5fLjJLSzHaS2DyQ2SO/eY5yHJnJCEtNagwIhAOIChhBX6OwnpNE0gW6h1VBfnDGu20pf7PDUAjA4SZGu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23199},"main":"index.js","types":"index.d.ts","engines":{"node":">=14"},"gitHead":"8261309ea5548ba992102857808131ac460bf6a4","_npmUser":{"name":"pengaq","email":"50463888@qq.com"},"_npmVersion":"11.4.2","description":"可嵌入的短信核心库：不依赖 HTTP 微服务，在进程内按租户配置直接调用阿里云/Btom/Chatbot/Mock 网关发送短信","directories":{},"_nodeVersion":"22.13.0","dependencies":{"axios":"^1.6.0","@alicloud/openapi-client":"^0.2.0","@alicloud/dysmsapi20170525":"^2.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sms-core_1.0.0_1769749909519_0.8948968597667313","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@1table/sms-core","version":"1.0.1","keywords":["sms","1table","aliyun","btom","chatbot","embedded","sdk"],"author":"","license":"MIT","_id":"@1table/sms-core@1.0.1","maintainers":[{"name":"pengaq","email":"50463888@qq.com"}],"dist":{"shasum":"18aca1995a87fee1fda967688526091ff13d1877","tarball":"https://registry.npmjs.org/@1table/sms-core/-/sms-core-1.0.1.tgz","fileCount":11,"integrity":"sha512-/yyl8ni2g1uN++chZ/JulMxvKljajp6B16gKxNnXDzaADbsB7mlbyUCXH42eVY5RquRG2vakmoAJW2Ti2GOQkw==","signatures":[{"sig":"MEQCIES5fOIsidL7HwtEFKSgbc3Q5w/0/d3n9lalK/4fOdVXAiB+mCS66Ut5HrYjknohkQWFtyEJHR+dC/ANvmc//AY5Jw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23311},"main":"index.js","types":"index.d.ts","engines":{"node":">=14"},"gitHead":"aca66f6ace8f87858fd078fcd4f2396075b1e18c","_npmUser":{"name":"pengaq","email":"50463888@qq.com"},"_npmVersion":"11.4.2","description":"可嵌入的短信核心库：不依赖 HTTP 微服务，在进程内按租户配置直接调用阿里云/Btom/Chatbot/Mock 网关发送短信","directories":{},"_nodeVersion":"22.13.0","dependencies":{"axios":"^1.6.0","@alicloud/openapi-client":"^0.2.0","@alicloud/dysmsapi20170525":"^2.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/sms-core_1.0.1_1769752818747_0.5967043633964424","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@1table/sms-core","version":"1.0.3","description":"可嵌入的短信核心库：不依赖 HTTP 微服务，在进程内按租户配置直接调用阿里云/Btom/Chatbot/Mock 网关发送短信","main":"index.js","types":"index.d.ts","keywords":["sms","1table","aliyun","btom","chatbot","embedded","sdk"],"author":"","license":"MIT","dependencies":{"@alicloud/dysmsapi20170525":"^2.0.0","@alicloud/openapi-client":"^0.2.0","axios":"^1.6.0","tencentcloud-sdk-nodejs":"^4.0.0"},"engines":{"node":">=14"},"_id":"@1table/sms-core@1.0.3","gitHead":"e80aed1c3ae844bb9f5ab0d15fbec0513ec51c06","_nodeVersion":"22.13.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-60HZIK3Kg9zWbCT3wtsdwd9HXNLo7poSRpA1OrbVbf6D8GEtW6Bs02tjrui2wgUhy1N9Edk8QgPVUxCjQBB5vA==","shasum":"79966ff3727ad9727bd0e25be73b330ab72609d0","tarball":"https://registry.npmjs.org/@1table/sms-core/-/sms-core-1.0.3.tgz","fileCount":12,"unpackedSize":27798,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCeJT0Zq3j2OM40BHF8AOCuFIg5l8UFL7hL2jAcp0GMfgIgUifDe4ZKvEsUGw1+K4ZoYv6INx4ZSE5YoBDemK2GV38="}]},"_npmUser":{"name":"pengaq","email":"50463888@qq.com"},"directories":{},"maintainers":[{"name":"pengaq","email":"50463888@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sms-core_1.0.3_1769770535612_0.1014414301425326"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-30T05:11:49.370Z","modified":"2026-01-30T10:55:35.873Z","1.0.0":"2026-01-30T05:11:49.672Z","1.0.1":"2026-01-30T06:00:18.903Z","1.0.3":"2026-01-30T10:55:35.752Z"},"license":"MIT","keywords":["sms","1table","aliyun","btom","chatbot","embedded","sdk"],"description":"可嵌入的短信核心库：不依赖 HTTP 微服务，在进程内按租户配置直接调用阿里云/Btom/Chatbot/Mock 网关发送短信","maintainers":[{"name":"pengaq","email":"50463888@qq.com"}],"readme":"# @1table/sms-core\n\n可嵌入的短信核心库：**不依赖 HTTP 微服务**，在进程内按租户配置直接调用阿里云 / Btom / Chatbot / Mock 网关发送短信。适合 Serverless、单机应用或希望零网络调用的场景。\n\n## 与 @1table/sms-client 的区别\n\n| 能力 | @1table/sms-client | @1table/sms-core |\n|------|--------------------|------------------|\n| 使用方式 | 调用已部署的短信微服务（HTTP） | 在进程内直接调网关，无 HTTP |\n| 依赖 | 微服务需单独部署并可达 | 仅 Node 进程 + 网关配置 |\n| 租户/模板 | 由微服务侧配置 | 由业务方传入配置对象 |\n| 适用场景 | 多系统共用一套微服务 | 单应用内嵌、Serverless、无网调用 |\n\n## 安装\n\n```bash\nnpm install @1table/sms-core\n# 或从本地\nnpm install file:../sms-microservice/sms-core\n```\n\n## 租户配置结构\n\n```js\nconst tenantConfig = {\n  gateway: {\n    provider: 'aliyun',   // 'aliyun' | 'btom' | 'chatbot' | 'mock'\n    config: {\n      // 阿里云示例\n      accessKeyId: 'xxx',\n      accessKeySecret: 'xxx',\n      signName: '您的签名',\n      endpoint: 'dysmsapi.aliyuncs.com',  // 可选\n    },\n  },\n  templates: {\n    REGISTER: {\n      code: 'SMS_123456789',           // 阿里云模板 code；Btom 可空\n      description: '注册验证码',\n      content: '您的验证码是${code}，${ttl}分钟内有效。',  // 可选，用于插值/Btom 正文\n    },\n    LOGIN: { code: 'SMS_987654321', description: '登录验证码', content: '验证码：${code}' },\n  },\n};\n```\n\n各网关 `config` 要求见 [微服务 API 说明](../docs/SMS_API_REFERENCE.md)。\n\n## 使用方式\n\n### 方式一：createSmsService（推荐）\n\n```javascript\nconst { createSmsService } = require('@1table/sms-core');\n\nconst tenantConfig = {\n  gateway: { provider: 'aliyun', config: { accessKeyId: '...', accessKeySecret: '...', signName: '...' } },\n  templates: {\n    REGISTER: { code: 'SMS_123456789', content: '验证码：${code}，5分钟内有效。' },\n  },\n};\n\nconst sms = createSmsService(tenantConfig);\n\n// 发送模板短信（传模板 key 或 code）\nconst result = await sms.sendTemplate('13800138000', 'REGISTER', { code: '123456' });\nconsole.log(result.requestId, result.bizId);\n\n// 批量发送\nconst batch = await sms.sendBatch(['138...', '139...'], 'REGISTER', { code: '123456' });\nconsole.log(batch.success, batch.failed, batch.details);\n```\n\n### 方式二：new SmsService\n\n```javascript\nconst { SmsService } = require('@1table/sms-core');\n\nconst sms = new SmsService(tenantConfig);\nawait sms.sendTemplate('13800138000', 'REGISTER', { code: '123456' });\n```\n\n### 方式三：直接按网关发送（不依赖租户模板）\n\n适合 Btom 等无模板网关，或临时指定网关配置：\n\n```javascript\nconst { createGateway } = require('@1table/sms-core');\n\nconst gateway = createGateway('btom', {\n  apiUrl: 'https://...',\n  appId: '...',\n  appSecret: '...',\n  signName: '...',\n});\n\nconst result = await gateway.sendTemplate({\n  mobile: '13800138000',\n  templateCode: '',\n  params: {},\n  signName: '...',\n  content: '您的验证码是 123456，5 分钟内有效。',\n});\n```\n\n### Mock 网关（测试）\n\n```javascript\nconst { createSmsService } = require('@1table/sms-core');\n\nconst sms = createSmsService({\n  gateway: { provider: 'mock', config: {} },\n  templates: { CODE: { code: 'MOCK', content: '${code}' } },\n});\nawait sms.sendTemplate('13800138000', 'CODE', { code: '123456' });\n// 仅打日志，不真实发送\n```\n\n## API\n\n- **createSmsService(tenantConfig)** → `SmsService` 实例  \n- **SmsService#sendTemplate(mobile, templateKeyOrCode, params?, options?)**  \n  - `options.content`：Btom 等无模板网关时作为完整正文（不含签名）  \n- **SmsService#sendBatch(mobiles, templateKeyOrCode, params?, options?)**  \n- **createGateway(provider, config)** → 网关实例（`sendTemplate` / `sendCode`）  \n- **gateways**：`AliyunGateway`、`BtomGateway`、`ChatbotGateway`、`MockGateway`、`BaseGateway`（按需扩展）\n\n## 错误处理\n\n配置缺失或网关返回失败会抛出异常，建议业务侧 `try/catch` 并记录日志。\n\n## 发布\n\n### 发布到公共 npm\n\n1. 登录 npm（未登录则先 `npm login`）  \n2. 在 `sms-core` 目录下执行：\n\n```bash\ncd sms-microservice/sms-core\nnpm version patch   # 或 minor / major，按需\nnpm publish --access public\n```\n\n`@1table` 为 scope，默认会按私有包发布；若包要对所有人可见，必须加 `--access public`。\n\n### 发布到私有 registry\n\n在 `package.json` 中增加（或使用项目根目录 `.npmrc` 配置 registry）：\n\n```json\n\"publishConfig\": {\n  \"registry\": \"https://your-private-registry.com/\"\n}\n```\n\n然后执行：\n\n```bash\nnpm publish\n```\n\n### 发布前自检\n\n```bash\ncd sms-core\nnpm pack --dry-run   # 查看将要打包的文件\nnpm pack             # 生成 .tgz，可本地安装测试：npm install ./1table-sms-core-1.0.0.tgz\n```\n\n## 相关\n\n- 微服务（HTTP）接入：使用 [@1table/sms-client](../sdk/README.md)  \n- 微服务 API 说明：[docs/SMS_API_REFERENCE.md](../docs/SMS_API_REFERENCE.md)\n","readmeFilename":"README.md"}