@dofe/infra-clients 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) hide show
  1. package/dist/index.d.ts +20 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +36 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/internal/agentx/agentx-client.module.d.ts +10 -0
  6. package/dist/internal/agentx/agentx-client.module.d.ts.map +1 -0
  7. package/dist/internal/agentx/agentx-client.module.js +38 -0
  8. package/dist/internal/agentx/agentx-client.module.js.map +1 -0
  9. package/dist/internal/agentx/agentx-client.service.d.ts +570 -0
  10. package/dist/internal/agentx/agentx-client.service.d.ts.map +1 -0
  11. package/dist/internal/agentx/agentx-client.service.js +912 -0
  12. package/dist/internal/agentx/agentx-client.service.js.map +1 -0
  13. package/dist/internal/agentx/agentx-file-client.service.d.ts +48 -0
  14. package/dist/internal/agentx/agentx-file-client.service.d.ts.map +1 -0
  15. package/dist/internal/agentx/agentx-file-client.service.js +276 -0
  16. package/dist/internal/agentx/agentx-file-client.service.js.map +1 -0
  17. package/dist/internal/agentx/index.d.ts +9 -0
  18. package/dist/internal/agentx/index.d.ts.map +1 -0
  19. package/dist/internal/agentx/index.js +27 -0
  20. package/dist/internal/agentx/index.js.map +1 -0
  21. package/dist/internal/agentx/interfaces/file.interface.d.ts +21 -0
  22. package/dist/internal/agentx/interfaces/file.interface.d.ts.map +1 -0
  23. package/dist/internal/agentx/interfaces/file.interface.js +22 -0
  24. package/dist/internal/agentx/interfaces/file.interface.js.map +1 -0
  25. package/dist/internal/agentx/interfaces/task.interface.d.ts +74 -0
  26. package/dist/internal/agentx/interfaces/task.interface.d.ts.map +1 -0
  27. package/dist/internal/agentx/interfaces/task.interface.js +16 -0
  28. package/dist/internal/agentx/interfaces/task.interface.js.map +1 -0
  29. package/dist/internal/ai/index.d.ts +3 -0
  30. package/dist/internal/ai/index.d.ts.map +1 -0
  31. package/dist/internal/ai/index.js +19 -0
  32. package/dist/internal/ai/index.js.map +1 -0
  33. package/dist/internal/ai/risk-detection.client.d.ts +74 -0
  34. package/dist/internal/ai/risk-detection.client.d.ts.map +1 -0
  35. package/dist/internal/ai/risk-detection.client.js +224 -0
  36. package/dist/internal/ai/risk-detection.client.js.map +1 -0
  37. package/dist/internal/ai/risk-detection.module.d.ts +3 -0
  38. package/dist/internal/ai/risk-detection.module.d.ts.map +1 -0
  39. package/dist/internal/ai/risk-detection.module.js +35 -0
  40. package/dist/internal/ai/risk-detection.module.js.map +1 -0
  41. package/dist/internal/ai-provider/ai-provider.client.d.ts +81 -0
  42. package/dist/internal/ai-provider/ai-provider.client.d.ts.map +1 -0
  43. package/dist/internal/ai-provider/ai-provider.client.js +435 -0
  44. package/dist/internal/ai-provider/ai-provider.client.js.map +1 -0
  45. package/dist/internal/ai-provider/ai-provider.module.d.ts +3 -0
  46. package/dist/internal/ai-provider/ai-provider.module.d.ts.map +1 -0
  47. package/dist/internal/ai-provider/ai-provider.module.js +28 -0
  48. package/dist/internal/ai-provider/ai-provider.module.js.map +1 -0
  49. package/dist/internal/ai-provider/index.d.ts +4 -0
  50. package/dist/internal/ai-provider/index.d.ts.map +1 -0
  51. package/dist/internal/ai-provider/index.js +8 -0
  52. package/dist/internal/ai-provider/index.js.map +1 -0
  53. package/dist/internal/channel-verify/channel-verify.client.d.ts +31 -0
  54. package/dist/internal/channel-verify/channel-verify.client.d.ts.map +1 -0
  55. package/dist/internal/channel-verify/channel-verify.client.js +150 -0
  56. package/dist/internal/channel-verify/channel-verify.client.js.map +1 -0
  57. package/dist/internal/channel-verify/index.d.ts +5 -0
  58. package/dist/internal/channel-verify/index.d.ts.map +1 -0
  59. package/dist/internal/channel-verify/index.js +26 -0
  60. package/dist/internal/channel-verify/index.js.map +1 -0
  61. package/dist/internal/complexity-classifier/complexity-classifier.module.d.ts +3 -0
  62. package/dist/internal/complexity-classifier/complexity-classifier.module.d.ts.map +1 -0
  63. package/dist/internal/complexity-classifier/complexity-classifier.module.js +30 -0
  64. package/dist/internal/complexity-classifier/complexity-classifier.module.js.map +1 -0
  65. package/dist/internal/complexity-classifier/complexity-classifier.service.d.ts +57 -0
  66. package/dist/internal/complexity-classifier/complexity-classifier.service.d.ts.map +1 -0
  67. package/dist/internal/complexity-classifier/complexity-classifier.service.js +285 -0
  68. package/dist/internal/complexity-classifier/complexity-classifier.service.js.map +1 -0
  69. package/dist/internal/complexity-classifier/complexity-classifier.types.d.ts +78 -0
  70. package/dist/internal/complexity-classifier/complexity-classifier.types.d.ts.map +1 -0
  71. package/dist/internal/complexity-classifier/complexity-classifier.types.js +20 -0
  72. package/dist/internal/complexity-classifier/complexity-classifier.types.js.map +1 -0
  73. package/dist/internal/complexity-classifier/index.d.ts +7 -0
  74. package/dist/internal/complexity-classifier/index.d.ts.map +1 -0
  75. package/dist/internal/complexity-classifier/index.js +25 -0
  76. package/dist/internal/complexity-classifier/index.js.map +1 -0
  77. package/dist/internal/crypt/crypt-client.service.spec.d.ts +2 -0
  78. package/dist/internal/crypt/crypt-client.service.spec.d.ts.map +1 -0
  79. package/dist/internal/crypt/crypt-client.service.spec.js +17 -0
  80. package/dist/internal/crypt/crypt-client.service.spec.js.map +1 -0
  81. package/dist/internal/crypt/crypt.client.d.ts +10 -0
  82. package/dist/internal/crypt/crypt.client.d.ts.map +1 -0
  83. package/dist/internal/crypt/crypt.client.js +78 -0
  84. package/dist/internal/crypt/crypt.client.js.map +1 -0
  85. package/dist/internal/crypt/crypt.module.d.ts +3 -0
  86. package/dist/internal/crypt/crypt.module.d.ts.map +1 -0
  87. package/dist/internal/crypt/crypt.module.js +23 -0
  88. package/dist/internal/crypt/crypt.module.js.map +1 -0
  89. package/dist/internal/crypt/index.d.ts +3 -0
  90. package/dist/internal/crypt/index.d.ts.map +1 -0
  91. package/dist/internal/crypt/index.js +19 -0
  92. package/dist/internal/crypt/index.js.map +1 -0
  93. package/dist/internal/email/dto/email.dto.d.ts +62 -0
  94. package/dist/internal/email/dto/email.dto.d.ts.map +1 -0
  95. package/dist/internal/email/dto/email.dto.js +50 -0
  96. package/dist/internal/email/dto/email.dto.js.map +1 -0
  97. package/dist/internal/email/index.d.ts +10 -0
  98. package/dist/internal/email/index.d.ts.map +1 -0
  99. package/dist/internal/email/index.js +29 -0
  100. package/dist/internal/email/index.js.map +1 -0
  101. package/dist/internal/email/sendcloud.client.d.ts +103 -0
  102. package/dist/internal/email/sendcloud.client.d.ts.map +1 -0
  103. package/dist/internal/email/sendcloud.client.js +336 -0
  104. package/dist/internal/email/sendcloud.client.js.map +1 -0
  105. package/dist/internal/exchange-rate/exchange-rate.client.d.ts +49 -0
  106. package/dist/internal/exchange-rate/exchange-rate.client.d.ts.map +1 -0
  107. package/dist/internal/exchange-rate/exchange-rate.client.js +166 -0
  108. package/dist/internal/exchange-rate/exchange-rate.client.js.map +1 -0
  109. package/dist/internal/exchange-rate/exchange-rate.module.d.ts +3 -0
  110. package/dist/internal/exchange-rate/exchange-rate.module.d.ts.map +1 -0
  111. package/dist/internal/exchange-rate/exchange-rate.module.js +23 -0
  112. package/dist/internal/exchange-rate/exchange-rate.module.js.map +1 -0
  113. package/dist/internal/exchange-rate/index.d.ts +3 -0
  114. package/dist/internal/exchange-rate/index.d.ts.map +1 -0
  115. package/dist/internal/exchange-rate/index.js +19 -0
  116. package/dist/internal/exchange-rate/index.js.map +1 -0
  117. package/dist/internal/file-cdn/dto/file-cdn.dto.d.ts +78 -0
  118. package/dist/internal/file-cdn/dto/file-cdn.dto.d.ts.map +1 -0
  119. package/dist/internal/file-cdn/dto/file-cdn.dto.js +70 -0
  120. package/dist/internal/file-cdn/dto/file-cdn.dto.js.map +1 -0
  121. package/dist/internal/file-cdn/file-cdn-client.service.spec.d.ts +2 -0
  122. package/dist/internal/file-cdn/file-cdn-client.service.spec.d.ts.map +1 -0
  123. package/dist/internal/file-cdn/file-cdn-client.service.spec.js +17 -0
  124. package/dist/internal/file-cdn/file-cdn-client.service.spec.js.map +1 -0
  125. package/dist/internal/file-cdn/file-cdn.client.d.ts +283 -0
  126. package/dist/internal/file-cdn/file-cdn.client.d.ts.map +1 -0
  127. package/dist/internal/file-cdn/file-cdn.client.js +526 -0
  128. package/dist/internal/file-cdn/file-cdn.client.js.map +1 -0
  129. package/dist/internal/file-cdn/file-cdn.module.d.ts +3 -0
  130. package/dist/internal/file-cdn/file-cdn.module.d.ts.map +1 -0
  131. package/dist/internal/file-cdn/file-cdn.module.js +32 -0
  132. package/dist/internal/file-cdn/file-cdn.module.js.map +1 -0
  133. package/dist/internal/file-cdn/index.d.ts +35 -0
  134. package/dist/internal/file-cdn/index.d.ts.map +1 -0
  135. package/dist/internal/file-cdn/index.js +54 -0
  136. package/dist/internal/file-cdn/index.js.map +1 -0
  137. package/dist/internal/file-storage/config/file.config.d.ts +12 -0
  138. package/dist/internal/file-storage/config/file.config.d.ts.map +1 -0
  139. package/dist/internal/file-storage/config/file.config.js +15 -0
  140. package/dist/internal/file-storage/config/file.config.js.map +1 -0
  141. package/dist/internal/file-storage/dto/file.dto.d.ts +163 -0
  142. package/dist/internal/file-storage/dto/file.dto.d.ts.map +1 -0
  143. package/dist/internal/file-storage/dto/file.dto.js +98 -0
  144. package/dist/internal/file-storage/dto/file.dto.js.map +1 -0
  145. package/dist/internal/file-storage/file-gcs.client.d.ts +33 -0
  146. package/dist/internal/file-storage/file-gcs.client.d.ts.map +1 -0
  147. package/dist/internal/file-storage/file-gcs.client.js +118 -0
  148. package/dist/internal/file-storage/file-gcs.client.js.map +1 -0
  149. package/dist/internal/file-storage/file-qiniu.client.d.ts +199 -0
  150. package/dist/internal/file-storage/file-qiniu.client.d.ts.map +1 -0
  151. package/dist/internal/file-storage/file-qiniu.client.js +526 -0
  152. package/dist/internal/file-storage/file-qiniu.client.js.map +1 -0
  153. package/dist/internal/file-storage/file-s3.client.d.ts +158 -0
  154. package/dist/internal/file-storage/file-s3.client.d.ts.map +1 -0
  155. package/dist/internal/file-storage/file-s3.client.js +865 -0
  156. package/dist/internal/file-storage/file-s3.client.js.map +1 -0
  157. package/dist/internal/file-storage/file-storage.interface.d.ts +38 -0
  158. package/dist/internal/file-storage/file-storage.interface.d.ts.map +1 -0
  159. package/dist/internal/file-storage/file-storage.interface.js +3 -0
  160. package/dist/internal/file-storage/file-storage.interface.js.map +1 -0
  161. package/dist/internal/file-storage/file-tos.client.d.ts +109 -0
  162. package/dist/internal/file-storage/file-tos.client.d.ts.map +1 -0
  163. package/dist/internal/file-storage/file-tos.client.js +630 -0
  164. package/dist/internal/file-storage/file-tos.client.js.map +1 -0
  165. package/dist/internal/file-storage/file-us3.client.d.ts +30 -0
  166. package/dist/internal/file-storage/file-us3.client.d.ts.map +1 -0
  167. package/dist/internal/file-storage/file-us3.client.js +129 -0
  168. package/dist/internal/file-storage/file-us3.client.js.map +1 -0
  169. package/dist/internal/file-storage/index.d.ts +15 -0
  170. package/dist/internal/file-storage/index.d.ts.map +1 -0
  171. package/dist/internal/file-storage/index.js +37 -0
  172. package/dist/internal/file-storage/index.js.map +1 -0
  173. package/dist/internal/health-check/health-check.client.d.ts +37 -0
  174. package/dist/internal/health-check/health-check.client.d.ts.map +1 -0
  175. package/dist/internal/health-check/health-check.client.js +142 -0
  176. package/dist/internal/health-check/health-check.client.js.map +1 -0
  177. package/dist/internal/health-check/health-check.module.d.ts +3 -0
  178. package/dist/internal/health-check/health-check.module.d.ts.map +1 -0
  179. package/dist/internal/health-check/health-check.module.js +33 -0
  180. package/dist/internal/health-check/health-check.module.js.map +1 -0
  181. package/dist/internal/health-check/index.d.ts +6 -0
  182. package/dist/internal/health-check/index.d.ts.map +1 -0
  183. package/dist/internal/health-check/index.js +11 -0
  184. package/dist/internal/health-check/index.js.map +1 -0
  185. package/dist/internal/ip-info/dto/ip-info.dto.d.ts +16 -0
  186. package/dist/internal/ip-info/dto/ip-info.dto.d.ts.map +1 -0
  187. package/dist/internal/ip-info/dto/ip-info.dto.js +3 -0
  188. package/dist/internal/ip-info/dto/ip-info.dto.js.map +1 -0
  189. package/dist/internal/ip-info/index.d.ts +4 -0
  190. package/dist/internal/ip-info/index.d.ts.map +1 -0
  191. package/dist/internal/ip-info/index.js +20 -0
  192. package/dist/internal/ip-info/index.js.map +1 -0
  193. package/dist/internal/ip-info/ip-info.client.d.ts +16 -0
  194. package/dist/internal/ip-info/ip-info.client.d.ts.map +1 -0
  195. package/dist/internal/ip-info/ip-info.client.js +77 -0
  196. package/dist/internal/ip-info/ip-info.client.js.map +1 -0
  197. package/dist/internal/ip-info/ip-info.module.d.ts +3 -0
  198. package/dist/internal/ip-info/ip-info.module.d.ts.map +1 -0
  199. package/dist/internal/ip-info/ip-info.module.js +28 -0
  200. package/dist/internal/ip-info/ip-info.module.js.map +1 -0
  201. package/dist/internal/mlflow/mlflow.client.d.ts +44 -0
  202. package/dist/internal/mlflow/mlflow.client.d.ts.map +1 -0
  203. package/dist/internal/mlflow/mlflow.client.js +184 -0
  204. package/dist/internal/mlflow/mlflow.client.js.map +1 -0
  205. package/dist/internal/mlflow/mlflow.module.d.ts +3 -0
  206. package/dist/internal/mlflow/mlflow.module.d.ts.map +1 -0
  207. package/dist/internal/mlflow/mlflow.module.js +23 -0
  208. package/dist/internal/mlflow/mlflow.module.js.map +1 -0
  209. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.d.ts +52 -0
  210. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.d.ts.map +1 -0
  211. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.js +174 -0
  212. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.js.map +1 -0
  213. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.spec.d.ts +2 -0
  214. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.spec.d.ts.map +1 -0
  215. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.spec.js +145 -0
  216. package/dist/internal/model-research-proxy/anthropic-proxy-research.client.spec.js.map +1 -0
  217. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.d.ts +3 -0
  218. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.d.ts.map +1 -0
  219. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.js +30 -0
  220. package/dist/internal/model-research-proxy/anthropic-proxy-research.module.js.map +1 -0
  221. package/dist/internal/model-research-proxy/index.d.ts +6 -0
  222. package/dist/internal/model-research-proxy/index.d.ts.map +1 -0
  223. package/dist/internal/model-research-proxy/index.js +24 -0
  224. package/dist/internal/model-research-proxy/index.js.map +1 -0
  225. package/dist/internal/model-verify/index.d.ts +4 -0
  226. package/dist/internal/model-verify/index.d.ts.map +1 -0
  227. package/dist/internal/model-verify/index.js +26 -0
  228. package/dist/internal/model-verify/index.js.map +1 -0
  229. package/dist/internal/model-verify/model-verify.client.d.ts +77 -0
  230. package/dist/internal/model-verify/model-verify.client.d.ts.map +1 -0
  231. package/dist/internal/model-verify/model-verify.client.js +324 -0
  232. package/dist/internal/model-verify/model-verify.client.js.map +1 -0
  233. package/dist/internal/ocr/dto/ocr.dto.d.ts +76 -0
  234. package/dist/internal/ocr/dto/ocr.dto.d.ts.map +1 -0
  235. package/dist/internal/ocr/dto/ocr.dto.js +48 -0
  236. package/dist/internal/ocr/dto/ocr.dto.js.map +1 -0
  237. package/dist/internal/ocr/index.d.ts +4 -0
  238. package/dist/internal/ocr/index.d.ts.map +1 -0
  239. package/dist/internal/ocr/index.js +20 -0
  240. package/dist/internal/ocr/index.js.map +1 -0
  241. package/dist/internal/ocr/ocr.client.d.ts +39 -0
  242. package/dist/internal/ocr/ocr.client.d.ts.map +1 -0
  243. package/dist/internal/ocr/ocr.client.js +112 -0
  244. package/dist/internal/ocr/ocr.client.js.map +1 -0
  245. package/dist/internal/ocr/ocr.module.d.ts +3 -0
  246. package/dist/internal/ocr/ocr.module.d.ts.map +1 -0
  247. package/dist/internal/ocr/ocr.module.js +28 -0
  248. package/dist/internal/ocr/ocr.module.js.map +1 -0
  249. package/dist/internal/openai/index.d.ts +3 -0
  250. package/dist/internal/openai/index.d.ts.map +1 -0
  251. package/dist/internal/openai/index.js +19 -0
  252. package/dist/internal/openai/index.js.map +1 -0
  253. package/dist/internal/openai/openai.client.d.ts +36 -0
  254. package/dist/internal/openai/openai.client.d.ts.map +1 -0
  255. package/dist/internal/openai/openai.client.js +112 -0
  256. package/dist/internal/openai/openai.client.js.map +1 -0
  257. package/dist/internal/openai/openai.module.d.ts +3 -0
  258. package/dist/internal/openai/openai.module.d.ts.map +1 -0
  259. package/dist/internal/openai/openai.module.js +30 -0
  260. package/dist/internal/openai/openai.module.js.map +1 -0
  261. package/dist/internal/openclaw/docker-exec.service.d.ts +132 -0
  262. package/dist/internal/openclaw/docker-exec.service.d.ts.map +1 -0
  263. package/dist/internal/openclaw/docker-exec.service.js +544 -0
  264. package/dist/internal/openclaw/docker-exec.service.js.map +1 -0
  265. package/dist/internal/openclaw/index.d.ts +14 -0
  266. package/dist/internal/openclaw/index.d.ts.map +1 -0
  267. package/dist/internal/openclaw/index.js +32 -0
  268. package/dist/internal/openclaw/index.js.map +1 -0
  269. package/dist/internal/openclaw/openclaw-agent-coordination.client.d.ts +73 -0
  270. package/dist/internal/openclaw/openclaw-agent-coordination.client.d.ts.map +1 -0
  271. package/dist/internal/openclaw/openclaw-agent-coordination.client.js +249 -0
  272. package/dist/internal/openclaw/openclaw-agent-coordination.client.js.map +1 -0
  273. package/dist/internal/openclaw/openclaw-context-status.client.d.ts +66 -0
  274. package/dist/internal/openclaw/openclaw-context-status.client.d.ts.map +1 -0
  275. package/dist/internal/openclaw/openclaw-context-status.client.js +164 -0
  276. package/dist/internal/openclaw/openclaw-context-status.client.js.map +1 -0
  277. package/dist/internal/openclaw/openclaw-cron.client.d.ts +61 -0
  278. package/dist/internal/openclaw/openclaw-cron.client.d.ts.map +1 -0
  279. package/dist/internal/openclaw/openclaw-cron.client.js +416 -0
  280. package/dist/internal/openclaw/openclaw-cron.client.js.map +1 -0
  281. package/dist/internal/openclaw/openclaw-gateway.client.d.ts +41 -0
  282. package/dist/internal/openclaw/openclaw-gateway.client.d.ts.map +1 -0
  283. package/dist/internal/openclaw/openclaw-gateway.client.js +175 -0
  284. package/dist/internal/openclaw/openclaw-gateway.client.js.map +1 -0
  285. package/dist/internal/openclaw/openclaw-skill-sync.client.d.ts +222 -0
  286. package/dist/internal/openclaw/openclaw-skill-sync.client.d.ts.map +1 -0
  287. package/dist/internal/openclaw/openclaw-skill-sync.client.js +720 -0
  288. package/dist/internal/openclaw/openclaw-skill-sync.client.js.map +1 -0
  289. package/dist/internal/openclaw/openclaw.client.d.ts +602 -0
  290. package/dist/internal/openclaw/openclaw.client.d.ts.map +1 -0
  291. package/dist/internal/openclaw/openclaw.client.js +3062 -0
  292. package/dist/internal/openclaw/openclaw.client.js.map +1 -0
  293. package/dist/internal/openclaw/openclaw.module.d.ts +3 -0
  294. package/dist/internal/openclaw/openclaw.module.d.ts.map +1 -0
  295. package/dist/internal/openclaw/openclaw.module.js +62 -0
  296. package/dist/internal/openclaw/openclaw.module.js.map +1 -0
  297. package/dist/internal/openclaw/skill-translation.service.d.ts +39 -0
  298. package/dist/internal/openclaw/skill-translation.service.d.ts.map +1 -0
  299. package/dist/internal/openclaw/skill-translation.service.js +217 -0
  300. package/dist/internal/openclaw/skill-translation.service.js.map +1 -0
  301. package/dist/internal/openclaw/types/cron.types.d.ts +112 -0
  302. package/dist/internal/openclaw/types/cron.types.d.ts.map +1 -0
  303. package/dist/internal/openclaw/types/cron.types.js +9 -0
  304. package/dist/internal/openclaw/types/cron.types.js.map +1 -0
  305. package/dist/internal/openspeech/index.d.ts +35 -0
  306. package/dist/internal/openspeech/index.d.ts.map +1 -0
  307. package/dist/internal/openspeech/index.js +56 -0
  308. package/dist/internal/openspeech/index.js.map +1 -0
  309. package/dist/internal/openspeech/openspeech.client.d.ts +304 -0
  310. package/dist/internal/openspeech/openspeech.client.d.ts.map +1 -0
  311. package/dist/internal/openspeech/openspeech.client.js +405 -0
  312. package/dist/internal/openspeech/openspeech.client.js.map +1 -0
  313. package/dist/internal/openspeech/openspeech.factory.d.ts +247 -0
  314. package/dist/internal/openspeech/openspeech.factory.d.ts.map +1 -0
  315. package/dist/internal/openspeech/openspeech.factory.js +406 -0
  316. package/dist/internal/openspeech/openspeech.factory.js.map +1 -0
  317. package/dist/internal/openspeech/openspeech.module.d.ts +45 -0
  318. package/dist/internal/openspeech/openspeech.module.d.ts.map +1 -0
  319. package/dist/internal/openspeech/openspeech.module.js +68 -0
  320. package/dist/internal/openspeech/openspeech.module.js.map +1 -0
  321. package/dist/internal/openspeech/providers/aliyun.provider.d.ts +125 -0
  322. package/dist/internal/openspeech/providers/aliyun.provider.d.ts.map +1 -0
  323. package/dist/internal/openspeech/providers/aliyun.provider.js +274 -0
  324. package/dist/internal/openspeech/providers/aliyun.provider.js.map +1 -0
  325. package/dist/internal/openspeech/providers/base.provider.d.ts +98 -0
  326. package/dist/internal/openspeech/providers/base.provider.d.ts.map +1 -0
  327. package/dist/internal/openspeech/providers/base.provider.js +87 -0
  328. package/dist/internal/openspeech/providers/base.provider.js.map +1 -0
  329. package/dist/internal/openspeech/providers/index.d.ts +10 -0
  330. package/dist/internal/openspeech/providers/index.d.ts.map +1 -0
  331. package/dist/internal/openspeech/providers/index.js +26 -0
  332. package/dist/internal/openspeech/providers/index.js.map +1 -0
  333. package/dist/internal/openspeech/providers/volcengine-streaming.provider.d.ts +291 -0
  334. package/dist/internal/openspeech/providers/volcengine-streaming.provider.d.ts.map +1 -0
  335. package/dist/internal/openspeech/providers/volcengine-streaming.provider.js +1358 -0
  336. package/dist/internal/openspeech/providers/volcengine-streaming.provider.js.map +1 -0
  337. package/dist/internal/openspeech/providers/volcengine.provider.d.ts +144 -0
  338. package/dist/internal/openspeech/providers/volcengine.provider.d.ts.map +1 -0
  339. package/dist/internal/openspeech/providers/volcengine.provider.js +337 -0
  340. package/dist/internal/openspeech/providers/volcengine.provider.js.map +1 -0
  341. package/dist/internal/openspeech/types.d.ts +408 -0
  342. package/dist/internal/openspeech/types.d.ts.map +1 -0
  343. package/dist/internal/openspeech/types.js +11 -0
  344. package/dist/internal/openspeech/types.js.map +1 -0
  345. package/dist/internal/provider-verify/index.d.ts +6 -0
  346. package/dist/internal/provider-verify/index.d.ts.map +1 -0
  347. package/dist/internal/provider-verify/index.js +24 -0
  348. package/dist/internal/provider-verify/index.js.map +1 -0
  349. package/dist/internal/provider-verify/provider-verify.client.d.ts +55 -0
  350. package/dist/internal/provider-verify/provider-verify.client.d.ts.map +1 -0
  351. package/dist/internal/provider-verify/provider-verify.client.js +284 -0
  352. package/dist/internal/provider-verify/provider-verify.client.js.map +1 -0
  353. package/dist/internal/provider-verify/provider-verify.module.d.ts +3 -0
  354. package/dist/internal/provider-verify/provider-verify.module.d.ts.map +1 -0
  355. package/dist/internal/provider-verify/provider-verify.module.js +28 -0
  356. package/dist/internal/provider-verify/provider-verify.module.js.map +1 -0
  357. package/dist/internal/routing-llm/index.d.ts +7 -0
  358. package/dist/internal/routing-llm/index.d.ts.map +1 -0
  359. package/dist/internal/routing-llm/index.js +25 -0
  360. package/dist/internal/routing-llm/index.js.map +1 -0
  361. package/dist/internal/routing-llm/interfaces/routing-llm.interface.d.ts +88 -0
  362. package/dist/internal/routing-llm/interfaces/routing-llm.interface.d.ts.map +1 -0
  363. package/dist/internal/routing-llm/interfaces/routing-llm.interface.js +64 -0
  364. package/dist/internal/routing-llm/interfaces/routing-llm.interface.js.map +1 -0
  365. package/dist/internal/routing-llm/routing-llm.client.d.ts +32 -0
  366. package/dist/internal/routing-llm/routing-llm.client.d.ts.map +1 -0
  367. package/dist/internal/routing-llm/routing-llm.client.js +275 -0
  368. package/dist/internal/routing-llm/routing-llm.client.js.map +1 -0
  369. package/dist/internal/routing-llm/routing-llm.module.d.ts +3 -0
  370. package/dist/internal/routing-llm/routing-llm.module.d.ts.map +1 -0
  371. package/dist/internal/routing-llm/routing-llm.module.js +28 -0
  372. package/dist/internal/routing-llm/routing-llm.module.js.map +1 -0
  373. package/dist/internal/sms/dto/sms.dto.d.ts +156 -0
  374. package/dist/internal/sms/dto/sms.dto.d.ts.map +1 -0
  375. package/dist/internal/sms/dto/sms.dto.js +78 -0
  376. package/dist/internal/sms/dto/sms.dto.js.map +1 -0
  377. package/dist/internal/sms/index.d.ts +14 -0
  378. package/dist/internal/sms/index.d.ts.map +1 -0
  379. package/dist/internal/sms/index.js +37 -0
  380. package/dist/internal/sms/index.js.map +1 -0
  381. package/dist/internal/sms/sms-aliyun.client.d.ts +19 -0
  382. package/dist/internal/sms/sms-aliyun.client.d.ts.map +1 -0
  383. package/dist/internal/sms/sms-aliyun.client.js +74 -0
  384. package/dist/internal/sms/sms-aliyun.client.js.map +1 -0
  385. package/dist/internal/sms/sms-http.client.d.ts +21 -0
  386. package/dist/internal/sms/sms-http.client.d.ts.map +1 -0
  387. package/dist/internal/sms/sms-http.client.js +76 -0
  388. package/dist/internal/sms/sms-http.client.js.map +1 -0
  389. package/dist/internal/sms/sms-tencent.client.d.ts +18 -0
  390. package/dist/internal/sms/sms-tencent.client.d.ts.map +1 -0
  391. package/dist/internal/sms/sms-tencent.client.js +76 -0
  392. package/dist/internal/sms/sms-tencent.client.js.map +1 -0
  393. package/dist/internal/sms/sms-volcengine.client.d.ts +29 -0
  394. package/dist/internal/sms/sms-volcengine.client.d.ts.map +1 -0
  395. package/dist/internal/sms/sms-volcengine.client.js +124 -0
  396. package/dist/internal/sms/sms-volcengine.client.js.map +1 -0
  397. package/dist/internal/sms/sms-zxjc.client.d.ts +18 -0
  398. package/dist/internal/sms/sms-zxjc.client.d.ts.map +1 -0
  399. package/dist/internal/sms/sms-zxjc.client.js +40 -0
  400. package/dist/internal/sms/sms-zxjc.client.js.map +1 -0
  401. package/dist/internal/sse/index.d.ts +3 -0
  402. package/dist/internal/sse/index.d.ts.map +1 -0
  403. package/dist/internal/sse/index.js +19 -0
  404. package/dist/internal/sse/index.js.map +1 -0
  405. package/dist/internal/sse/sse-client.service.spec.d.ts +2 -0
  406. package/dist/internal/sse/sse-client.service.spec.d.ts.map +1 -0
  407. package/dist/internal/sse/sse-client.service.spec.js +17 -0
  408. package/dist/internal/sse/sse-client.service.spec.js.map +1 -0
  409. package/dist/internal/sse/sse.client.d.ts +63 -0
  410. package/dist/internal/sse/sse.client.d.ts.map +1 -0
  411. package/dist/internal/sse/sse.client.js +304 -0
  412. package/dist/internal/sse/sse.client.js.map +1 -0
  413. package/dist/internal/sse/sse.module.d.ts +3 -0
  414. package/dist/internal/sse/sse.module.d.ts.map +1 -0
  415. package/dist/internal/sse/sse.module.js +30 -0
  416. package/dist/internal/sse/sse.module.js.map +1 -0
  417. package/dist/internal/third-party-sse/index.d.ts +3 -0
  418. package/dist/internal/third-party-sse/index.d.ts.map +1 -0
  419. package/dist/internal/third-party-sse/index.js +19 -0
  420. package/dist/internal/third-party-sse/index.js.map +1 -0
  421. package/dist/internal/third-party-sse/third-party-sse.client.d.ts +14 -0
  422. package/dist/internal/third-party-sse/third-party-sse.client.d.ts.map +1 -0
  423. package/dist/internal/third-party-sse/third-party-sse.client.js +63 -0
  424. package/dist/internal/third-party-sse/third-party-sse.client.js.map +1 -0
  425. package/dist/internal/third-party-sse/third-party-sse.module.d.ts +3 -0
  426. package/dist/internal/third-party-sse/third-party-sse.module.d.ts.map +1 -0
  427. package/dist/internal/third-party-sse/third-party-sse.module.js +23 -0
  428. package/dist/internal/third-party-sse/third-party-sse.module.js.map +1 -0
  429. package/dist/internal/third-party-sse/third-party-sse.service.spec.d.ts +2 -0
  430. package/dist/internal/third-party-sse/third-party-sse.service.spec.d.ts.map +1 -0
  431. package/dist/internal/third-party-sse/third-party-sse.service.spec.js +17 -0
  432. package/dist/internal/third-party-sse/third-party-sse.service.spec.js.map +1 -0
  433. package/dist/internal/verify/index.d.ts +3 -0
  434. package/dist/internal/verify/index.d.ts.map +1 -0
  435. package/dist/internal/verify/index.js +19 -0
  436. package/dist/internal/verify/index.js.map +1 -0
  437. package/dist/internal/verify/verify.client.d.ts +12 -0
  438. package/dist/internal/verify/verify.client.d.ts.map +1 -0
  439. package/dist/internal/verify/verify.client.js +57 -0
  440. package/dist/internal/verify/verify.client.js.map +1 -0
  441. package/dist/internal/verify/verify.module.d.ts +3 -0
  442. package/dist/internal/verify/verify.module.d.ts.map +1 -0
  443. package/dist/internal/verify/verify.module.js +23 -0
  444. package/dist/internal/verify/verify.module.js.map +1 -0
  445. package/dist/internal/volcengine-tts/dto/tts.dto.d.ts +52 -0
  446. package/dist/internal/volcengine-tts/dto/tts.dto.d.ts.map +1 -0
  447. package/dist/internal/volcengine-tts/dto/tts.dto.js +59 -0
  448. package/dist/internal/volcengine-tts/dto/tts.dto.js.map +1 -0
  449. package/dist/internal/volcengine-tts/index.d.ts +4 -0
  450. package/dist/internal/volcengine-tts/index.d.ts.map +1 -0
  451. package/dist/internal/volcengine-tts/index.js +20 -0
  452. package/dist/internal/volcengine-tts/index.js.map +1 -0
  453. package/dist/internal/volcengine-tts/volcengine-tts.client.d.ts +104 -0
  454. package/dist/internal/volcengine-tts/volcengine-tts.client.d.ts.map +1 -0
  455. package/dist/internal/volcengine-tts/volcengine-tts.client.js +690 -0
  456. package/dist/internal/volcengine-tts/volcengine-tts.client.js.map +1 -0
  457. package/dist/internal/volcengine-tts/volcengine-tts.module.d.ts +3 -0
  458. package/dist/internal/volcengine-tts/volcengine-tts.module.d.ts.map +1 -0
  459. package/dist/internal/volcengine-tts/volcengine-tts.module.js +34 -0
  460. package/dist/internal/volcengine-tts/volcengine-tts.module.js.map +1 -0
  461. package/dist/internal/wechat/index.d.ts +3 -0
  462. package/dist/internal/wechat/index.d.ts.map +1 -0
  463. package/dist/internal/wechat/index.js +19 -0
  464. package/dist/internal/wechat/index.js.map +1 -0
  465. package/dist/internal/wechat/wechat-client.service.spec.d.ts +2 -0
  466. package/dist/internal/wechat/wechat-client.service.spec.d.ts.map +1 -0
  467. package/dist/internal/wechat/wechat-client.service.spec.js +17 -0
  468. package/dist/internal/wechat/wechat-client.service.spec.js.map +1 -0
  469. package/dist/internal/wechat/wechat.client.d.ts +3 -0
  470. package/dist/internal/wechat/wechat.client.d.ts.map +1 -0
  471. package/dist/internal/wechat/wechat.client.js +17 -0
  472. package/dist/internal/wechat/wechat.client.js.map +1 -0
  473. package/dist/internal/wechat/wechat.module.d.ts +3 -0
  474. package/dist/internal/wechat/wechat.module.d.ts.map +1 -0
  475. package/dist/internal/wechat/wechat.module.js +21 -0
  476. package/dist/internal/wechat/wechat.module.js.map +1 -0
  477. package/dist/plugin/decorators/inject-client.decorator.d.ts +40 -0
  478. package/dist/plugin/decorators/inject-client.decorator.d.ts.map +1 -0
  479. package/dist/plugin/decorators/inject-client.decorator.js +63 -0
  480. package/dist/plugin/decorators/inject-client.decorator.js.map +1 -0
  481. package/dist/plugin/index.d.ts +14 -0
  482. package/dist/plugin/index.d.ts.map +1 -0
  483. package/dist/plugin/index.js +34 -0
  484. package/dist/plugin/index.js.map +1 -0
  485. package/dist/plugin/interceptors/http-logging.interceptor.d.ts +51 -0
  486. package/dist/plugin/interceptors/http-logging.interceptor.d.ts.map +1 -0
  487. package/dist/plugin/interceptors/http-logging.interceptor.js +84 -0
  488. package/dist/plugin/interceptors/http-logging.interceptor.js.map +1 -0
  489. package/dist/plugin/interfaces/client.interface.d.ts +80 -0
  490. package/dist/plugin/interfaces/client.interface.d.ts.map +1 -0
  491. package/dist/plugin/interfaces/client.interface.js +8 -0
  492. package/dist/plugin/interfaces/client.interface.js.map +1 -0
  493. package/dist/plugin/utils/retry.util.d.ts +49 -0
  494. package/dist/plugin/utils/retry.util.d.ts.map +1 -0
  495. package/dist/plugin/utils/retry.util.js +110 -0
  496. package/dist/plugin/utils/retry.util.js.map +1 -0
  497. package/package.json +55 -0
@@ -0,0 +1,630 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FileTosClient = void 0;
4
+ const file_s3_client_1 = require("./file-s3.client");
5
+ const tos_sdk_1 = require("@volcengine/tos-sdk");
6
+ const infra_utils_1 = require("@dofe/infra-utils");
7
+ const infra_common_1 = require("@dofe/infra-common");
8
+ /**
9
+ * Volcengine TOS (Tinder Object Storage) Client
10
+ *
11
+ * 职责:仅负责与火山引擎 TOS API 通信
12
+ * - 不访问数据库
13
+ * - 不包含业务逻辑
14
+ */
15
+ class FileTosClient extends file_s3_client_1.FileS3Client {
16
+ urlRedisKey = 'privateDownloadUrl';
17
+ tosClient;
18
+ tosInternalClient;
19
+ constructor(config, storageConfig, appConfig, redis, httpService, logger) {
20
+ super(config, storageConfig, appConfig, redis, httpService, logger);
21
+ this.setTosClient();
22
+ }
23
+ /**
24
+ * 初始化火山引擎 TOS 客户端
25
+ * 参考:https://www.volcengine.com/docs/6349/113484?lang=zh
26
+ */
27
+ setTosClient() {
28
+ try {
29
+ // 从 endpoint 中提取域名(去掉协议前缀)
30
+ const extractEndpoint = (endpoint) => {
31
+ if (!endpoint)
32
+ return '';
33
+ return endpoint.replace(/^https?:\/\//, '').replace(/\/$/, '');
34
+ };
35
+ // 创建外部 TOS 客户端
36
+ this.tosClient = new tos_sdk_1.TosClient({
37
+ accessKeyId: this.storageConfig.accessKey,
38
+ accessKeySecret: this.storageConfig.secretKey,
39
+ region: this.config.region,
40
+ endpoint: extractEndpoint(this.config.tosEndpoint || ''),
41
+ });
42
+ // 创建内部 TOS 客户端(如果配置了内部端点)
43
+ if (infra_utils_1.environmentUtil.isProduction()) {
44
+ this.tosInternalClient = new tos_sdk_1.TosClient({
45
+ accessKeyId: this.storageConfig.accessKey,
46
+ accessKeySecret: this.storageConfig.secretKey,
47
+ region: this.config.region,
48
+ endpoint: extractEndpoint(this.config.tosInternalEndpoint || ''),
49
+ });
50
+ this.logger.info('TOS clients initialized with internal endpoint', {
51
+ externalEndpoint: this.config.tosEndpoint,
52
+ internalEndpoint: this.config.tosInternalEndpoint,
53
+ bucket: this.config.bucket,
54
+ region: this.config.region,
55
+ });
56
+ }
57
+ else {
58
+ this.tosInternalClient = this.tosClient;
59
+ if (infra_utils_1.environmentUtil.isProduction()) {
60
+ this.logger.info('TOS client initialized (single endpoint)', {
61
+ endpoint: this.config.tosEndpoint,
62
+ bucket: this.config.bucket,
63
+ region: this.config.region,
64
+ });
65
+ }
66
+ }
67
+ }
68
+ catch (error) {
69
+ this.logger.error('Failed to initialize TOS clients', {
70
+ error: error.message,
71
+ config: {
72
+ bucket: this.config.bucket,
73
+ region: this.config.region,
74
+ endpoint: this.config.tosEndpoint,
75
+ },
76
+ });
77
+ throw error;
78
+ }
79
+ }
80
+ /**
81
+ * 保持与父类的兼容性,同时初始化 S3 客户端(用于其他操作)
82
+ */
83
+ setClient() {
84
+ // 调用父类方法初始化 S3 客户端(用于兼容其他操作)
85
+ super.setClient();
86
+ // 同时初始化 TOS 客户端(用于预签名 URL)
87
+ this.setTosClient();
88
+ }
89
+ /**
90
+ * 获取视频信息,并组合成 VideoInfo 结构
91
+ *
92
+ * @param fileKey 视频文件键名
93
+ * @param internal 是否使用内部客户端,默认为false
94
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
95
+ * @returns 返回组合后的 VideoInfo 对象
96
+ */
97
+ async getVideoInfo(fileKey, internal = false, bucket) {
98
+ const finalBucket = bucket || this.getBucketString();
99
+ const tosClient = internal ? this.tosInternalClient : this.tosClient;
100
+ try {
101
+ this.logger.info('Getting video info', {
102
+ fileKey,
103
+ bucket: finalBucket,
104
+ internal,
105
+ });
106
+ // 使用 TOS SDK 的 getObjectV2 方法获取视频信息
107
+ const result = await tosClient.getObjectV2({
108
+ bucket: finalBucket,
109
+ key: fileKey,
110
+ process: 'video/info',
111
+ dataType: 'buffer',
112
+ });
113
+ if (result.data && result.data.content) {
114
+ const videoInfoJson = result.data.content.toString();
115
+ let ffprobeInfo;
116
+ try {
117
+ ffprobeInfo = JSON.parse(videoInfoJson);
118
+ }
119
+ catch (parseError) {
120
+ this.logger.warn('Failed to parse video info as JSON', {
121
+ fileKey,
122
+ content: videoInfoJson,
123
+ });
124
+ throw new Error('Failed to parse video info as JSON');
125
+ }
126
+ this.logger.info('Video info retrieved successfully', {
127
+ fileKey,
128
+ bucket: finalBucket,
129
+ requestId: result.requestId,
130
+ });
131
+ // 组合成 VideoInfo 结构
132
+ // VideoInfo @ prisma/schema.prisma:
133
+ // id, duration, streamDuration, height, width, sar, dar, rFrameRate, ffmpegInfo, spriteCount, ...
134
+ // 按 IMM、ffmpeg标准推算
135
+ const format = ffprobeInfo.format || {};
136
+ const streams = ffprobeInfo.streams || [];
137
+ const videoStream = streams.find((s) => s.codec_type === 'video');
138
+ // 若有多个视频流,默认取第一个
139
+ const audioStream = streams.find((s) => s.codec_type === 'audio');
140
+ const duration = ffprobeInfo.duration
141
+ ? parseFloat(ffprobeInfo.duration)
142
+ : format.duration
143
+ ? parseFloat(format.duration)
144
+ : videoStream && videoStream.duration
145
+ ? parseFloat(videoStream.duration)
146
+ : 0;
147
+ const streamDuration = ffprobeInfo.duration
148
+ ? parseFloat(ffprobeInfo.duration)
149
+ : videoStream && videoStream.duration
150
+ ? parseFloat(videoStream.duration)
151
+ : duration;
152
+ const width = videoStream?.width ?? null;
153
+ const height = videoStream?.height ?? null;
154
+ const sar = videoStream?.sample_aspect_ratio ?? '1:1';
155
+ const dar = videoStream?.display_aspect_ratio ?? videoStream?.dar ?? null;
156
+ const rFrameRate = videoStream?.r_frame_rate ?? null;
157
+ // 返回 VideoInfo 主体和原始 ffmpeg info
158
+ // 这些字段与 schema 里 VideoInfo 字段保持同步
159
+ const videoInfo = {
160
+ duration: duration || 0,
161
+ streamDuration: streamDuration || 0,
162
+ height: width != null && height != null ? height : null,
163
+ width: width != null && height != null ? width : null,
164
+ sar,
165
+ dar,
166
+ rFrameRate,
167
+ ffmpegInfo: ffprobeInfo,
168
+ audioDuration: audioStream?.duration
169
+ ? parseFloat(audioStream.duration)
170
+ : 0,
171
+ // 其它结构字段,需用到可补充
172
+ // id, fileKeyId, ... 由上层数据库生成
173
+ };
174
+ return videoInfo;
175
+ }
176
+ else {
177
+ throw new Error('Failed to get video info: missing data in response');
178
+ }
179
+ }
180
+ catch (error) {
181
+ this.logger.error('Failed to get video info', {
182
+ fileKey,
183
+ bucket: finalBucket,
184
+ error: error.message,
185
+ stack: error.stack,
186
+ internal,
187
+ });
188
+ throw error;
189
+ }
190
+ }
191
+ /**
192
+ * 获取图片信息
193
+ * 参考:https://www.volcengine.com/docs/6349/1179568?lang=zh
194
+ *
195
+ * 使用 TOS SDK 的图片信息获取功能,返回图片的基本信息(格式、宽度、高度、大小等)
196
+ * 如果图片包含 Exif 信息,将按照 JSON 格式返回内容
197
+ *
198
+ * @param fileKey 图片文件键名
199
+ * @param internal 是否使用内部客户端,默认为false
200
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
201
+ * @returns 返回图片信息的 JSON 字符串
202
+ */
203
+ async getImageInfo(fileKey, internal = false, bucket) {
204
+ const finalBucket = bucket || this.getBucketString();
205
+ const tosClient = internal ? this.tosInternalClient : this.tosClient;
206
+ try {
207
+ this.logger.info('Getting image info', {
208
+ fileKey,
209
+ bucket: finalBucket,
210
+ internal,
211
+ });
212
+ // 使用 TOS SDK 的 getObjectV2 方法获取图片信息
213
+ // process 参数:image/info 表示获取图片信息
214
+ // 参考文档:https://www.volcengine.com/docs/6349/1179568?lang=zh
215
+ const result = await tosClient.getObjectV2({
216
+ bucket: finalBucket,
217
+ key: fileKey,
218
+ process: 'image/info', // 图片信息处理参数
219
+ dataType: 'buffer', // 返回 buffer 类型数据
220
+ });
221
+ // 解析返回的图片信息
222
+ if (result.data && result.data.content) {
223
+ const imageInfoJson = result.data.content.toString();
224
+ // 尝试解析 JSON 以验证格式
225
+ try {
226
+ const rawImageInfo = JSON.parse(imageInfoJson);
227
+ // 提取宽高值(TOS 返回的是字符串格式)
228
+ const widthStr = rawImageInfo.ImageWidth?.value;
229
+ const heightStr = rawImageInfo.ImageHeight?.value;
230
+ // 转换为数字
231
+ const width = widthStr ? parseInt(widthStr, 10) : undefined;
232
+ const height = heightStr ? parseInt(heightStr, 10) : undefined;
233
+ // 计算宽高比(SAR 和 DAR)
234
+ // SAR (Sample Aspect Ratio): 像素宽高比,默认 1:1
235
+ // DAR (Display Aspect Ratio): 显示宽高比,默认与 SAR 相同
236
+ let sar = '1:1'; // 默认值
237
+ let dar = undefined;
238
+ if (width && height) {
239
+ // 计算最大公约数以简化比例
240
+ const gcd = (a, b) => {
241
+ return b === 0 ? a : gcd(b, a % b);
242
+ };
243
+ const divisor = gcd(width, height);
244
+ sar = `${width / divisor}:${height / divisor}`;
245
+ dar = sar; // 默认 DAR 与 SAR 相同
246
+ }
247
+ // 重组为 ImageInfo 格式
248
+ const imageInfo = {
249
+ width,
250
+ height,
251
+ sar,
252
+ dar,
253
+ ffmpegInfo: rawImageInfo, // 保存完整的原始数据
254
+ };
255
+ this.logger.info('Image info retrieved successfully', {
256
+ fileKey,
257
+ bucket: finalBucket,
258
+ requestId: result.requestId,
259
+ format: rawImageInfo.Format?.value,
260
+ width: imageInfo.width,
261
+ height: imageInfo.height,
262
+ sar: imageInfo.sar,
263
+ dar: imageInfo.dar,
264
+ fileSize: rawImageInfo.FileSize?.value,
265
+ });
266
+ return imageInfo;
267
+ }
268
+ catch (parseError) {
269
+ // 如果不是有效的 JSON,记录警告但继续返回原始内容
270
+ this.logger.warn('Failed to parse image info as JSON', {
271
+ fileKey,
272
+ content: imageInfoJson,
273
+ });
274
+ throw new Error('Failed to parse image info as JSON');
275
+ }
276
+ }
277
+ else {
278
+ throw new Error('Failed to get image info: missing data in response');
279
+ }
280
+ }
281
+ catch (error) {
282
+ this.logger.error('Failed to get image info', {
283
+ fileKey,
284
+ bucket: finalBucket,
285
+ error: error.message,
286
+ stack: error.stack,
287
+ internal,
288
+ });
289
+ throw error;
290
+ }
291
+ }
292
+ /**
293
+ * 获取音频信息
294
+ * 参考:火山引擎 TOS 媒体处理文档
295
+ *
296
+ * 使用 TOS SDK 的音频信息获取功能,返回音频的详细信息(时长、采样率、声道数、比特率等)
297
+ *
298
+ * @param fileKey 音频文件键名
299
+ * @param internal 是否使用内部客户端,默认为false
300
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
301
+ * @returns 返回音频信息的对象
302
+ */
303
+ /**
304
+ * 获取音频信息,并组合成 AudioInfo 结构
305
+ *
306
+ * @param fileKey 音频文件键名
307
+ * @param internal 是否使用内部客户端,默认为false
308
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
309
+ * @returns 返回组合后的 AudioInfo 对象
310
+ */
311
+ async getAudioInfo(fileKey, internal = false, bucket) {
312
+ const finalBucket = bucket || this.getBucketString();
313
+ const tosClient = internal ? this.tosInternalClient : this.tosClient;
314
+ try {
315
+ this.logger.info('Getting audio info', {
316
+ fileKey,
317
+ bucket: finalBucket,
318
+ internal,
319
+ });
320
+ // 使用 TOS SDK 的 getObjectV2 方法获取音频信息
321
+ const result = await tosClient.getObjectV2({
322
+ bucket: finalBucket,
323
+ key: fileKey,
324
+ process: 'video/info',
325
+ dataType: 'buffer',
326
+ });
327
+ if (result.data && result.data.content) {
328
+ const audioInfoJson = result.data.content.toString();
329
+ let ffprobeInfo;
330
+ try {
331
+ ffprobeInfo = JSON.parse(audioInfoJson);
332
+ }
333
+ catch (parseError) {
334
+ this.logger.warn('Failed to parse audio info as JSON', {
335
+ fileKey,
336
+ content: audioInfoJson,
337
+ });
338
+ throw new Error('Failed to parse audio info as JSON');
339
+ }
340
+ const format = ffprobeInfo.format || {};
341
+ const streams = ffprobeInfo.streams || [];
342
+ // 查找音频流(可能有多个,取第一个)
343
+ const audioStream = streams.find((s) => s.codec_type === 'audio');
344
+ // 提取时长信息
345
+ const duration = ffprobeInfo.duration
346
+ ? parseFloat(ffprobeInfo.duration.toString())
347
+ : ffprobeInfo.duration
348
+ ? parseFloat(ffprobeInfo.duration.toString())
349
+ : format.duration
350
+ ? parseFloat(format.duration.toString())
351
+ : audioStream?.duration
352
+ ? parseFloat(audioStream.duration.toString())
353
+ : 0;
354
+ const streamDuration = ffprobeInfo.streamDuration
355
+ ? parseFloat(ffprobeInfo.streamDuration.toString())
356
+ : audioStream?.duration
357
+ ? parseFloat(audioStream.duration.toString())
358
+ : duration;
359
+ // 提取音频流信息
360
+ const channels = audioStream?.channels ?? undefined;
361
+ const channelLayout = audioStream?.channel_layout ?? undefined;
362
+ const sampleRate = audioStream?.sample_rate
363
+ ? audioStream.sample_rate.toString()
364
+ : undefined;
365
+ // 提取比特率(优先使用 format.bit_rate,其次使用 stream.bit_rate)
366
+ const bitRate = format.bit_rate
367
+ ? format.bit_rate.toString()
368
+ : audioStream?.bit_rate
369
+ ? audioStream.bit_rate.toString()
370
+ : undefined;
371
+ // 组合成 AudioInfo 结构
372
+ // AudioInfo @ prisma/schema.prisma:
373
+ // id, duration, streamDuration, channels, channelLayout, sampleRate, bitRate, ffmpegInfo, fileKeyId
374
+ const audioInfo = {
375
+ duration: duration || 0,
376
+ streamDuration: streamDuration || 0,
377
+ channels,
378
+ channelLayout,
379
+ sampleRate,
380
+ bitRate,
381
+ ffmpegInfo: ffprobeInfo, // 保存完整的原始数据
382
+ };
383
+ this.logger.info('Audio info retrieved successfully', {
384
+ fileKey,
385
+ bucket: finalBucket,
386
+ requestId: result.requestId,
387
+ duration: audioInfo.duration,
388
+ streamDuration: audioInfo.streamDuration,
389
+ channels: audioInfo.channels,
390
+ sampleRate: audioInfo.sampleRate,
391
+ bitRate: audioInfo.bitRate,
392
+ });
393
+ return audioInfo;
394
+ }
395
+ else {
396
+ throw new Error('Failed to get audio info: missing data in response');
397
+ }
398
+ }
399
+ catch (error) {
400
+ this.logger.error('Failed to get audio info', {
401
+ fileKey,
402
+ bucket: finalBucket,
403
+ error: error.message,
404
+ stack: error.stack,
405
+ internal,
406
+ });
407
+ throw error;
408
+ }
409
+ }
410
+ /**
411
+ * 视频第一帧截帧并持久化存储
412
+ * 参考:https://www.volcengine.com/docs/6349/1179565?lang=zh
413
+ *
414
+ * 使用 TOS SDK 的视频截帧功能,截取视频第一帧并保存到指定位置
415
+ *
416
+ * @param fileKey 视频文件键名
417
+ * @param internal 是否使用内部客户端,默认为false
418
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
419
+ * @returns 返回保存的截图文件键名
420
+ */
421
+ async getSnapshot(fileKey, internal = false, bucket, time = 0, width = 0, height = 0, format = 'jpg') {
422
+ const finalBucket = bucket || this.getBucketString();
423
+ const tosClient = internal ? this.tosInternalClient : this.tosClient;
424
+ try {
425
+ // 构建目标文件路径:将 fileKey 的后缀改为 _snapshot.jpg
426
+ // 例如:path/to/video.mp4 -> path/to/video_snapshot.jpg
427
+ const pathParts = fileKey.split('/');
428
+ const fileName = pathParts.pop() || '';
429
+ const basePath = pathParts.join('/');
430
+ // 移除原文件扩展名,添加 _snapshot.jpg 后缀
431
+ const nameWithoutExt = fileName.replace(/\.[^/.]+$/, '');
432
+ const snapshotFileName = `${nameWithoutExt}${infra_common_1.TRANSCODE_CONSTANTS.SUFFIXES.SNAPSHOT}${infra_common_1.TRANSCODE_CONSTANTS.EXTENSIONS.JPG}`;
433
+ const snapshotFileKey = basePath
434
+ ? `${basePath}/${snapshotFileName}`
435
+ : snapshotFileName;
436
+ this.logger.info('Generating video snapshot', {
437
+ fileKey,
438
+ snapshotFileKey,
439
+ bucket: finalBucket,
440
+ internal,
441
+ });
442
+ // 使用 TOS SDK 的 getObjectV2 方法进行视频截帧并持久化存储
443
+ // process 参数:video/snapshot,t_0 表示截取第0秒(第一帧)
444
+ // saveBucket 和 saveObject 需要使用 base64url 编码
445
+ // 构建 process 参数,width 或 height 为 0 时不包含
446
+ let process = `video/snapshot,t_${time}`;
447
+ if (width > 0) {
448
+ process += `,w_${width}`;
449
+ }
450
+ if (height > 0) {
451
+ process += `,h_${height}`;
452
+ }
453
+ if (format) {
454
+ process += `,f_${format}`;
455
+ }
456
+ const saveBucket = Buffer.from(finalBucket).toString('base64url');
457
+ const saveObject = Buffer.from(snapshotFileKey).toString('base64url');
458
+ const result = await tosClient.getObjectV2({
459
+ bucket: finalBucket,
460
+ key: fileKey,
461
+ process: process,
462
+ dataType: 'buffer',
463
+ saveBucket: saveBucket,
464
+ saveObject: saveObject,
465
+ });
466
+ // 解析返回结果
467
+ // 根据文档,持久化存储成功后,返回的 data.content 包含保存结果信息
468
+ if (result.data) {
469
+ let saveResult;
470
+ if (result.data.content) {
471
+ try {
472
+ saveResult = JSON.parse(result.data.content.toString());
473
+ }
474
+ catch (parseError) {
475
+ // 如果不是 JSON,可能是其他格式,记录原始内容
476
+ this.logger.warn('Failed to parse snapshot result as JSON', {
477
+ content: result.data.content.toString(),
478
+ });
479
+ }
480
+ }
481
+ this.logger.info('Video snapshot generated and saved successfully', {
482
+ fileKey,
483
+ snapshotFileKey,
484
+ bucket: finalBucket,
485
+ requestId: result.requestId,
486
+ saveResult: saveResult,
487
+ });
488
+ // 返回保存的截图文件键名
489
+ return snapshotFileKey;
490
+ }
491
+ else {
492
+ throw new Error('Failed to get snapshot result from TOS response: missing data');
493
+ }
494
+ }
495
+ catch (error) {
496
+ this.logger.error('Failed to generate video snapshot', {
497
+ fileKey,
498
+ bucket: finalBucket,
499
+ error: error.message,
500
+ stack: error.stack,
501
+ internal,
502
+ });
503
+ throw error;
504
+ }
505
+ }
506
+ /**
507
+ * 获取私有文件的下载链接
508
+ * 参考:https://www.volcengine.com/docs/6349/113484?lang=zh
509
+ *
510
+ * 使用火山引擎官方 TOS SDK 生成预签名 URL
511
+ *
512
+ * @param fileKey 文件键名
513
+ * @param expire 链接过期时间,单位为秒,默认为30秒
514
+ * @param internal 是否使用内部客户端,默认为false
515
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
516
+ * @returns 返回一个Promise,解析后得到私有文件的下载链接
517
+ */
518
+ async getPrivateDownloadUrl(fileKey, expire = 3600, internal = false, bucket) {
519
+ // 如果是公开存储桶,直接返回公开 URL
520
+ if (this.config.isPublic) {
521
+ return `${this.config.domain}/${fileKey}`;
522
+ }
523
+ const finalBucket = bucket || this.getBucketString();
524
+ const cacheKey = `${finalBucket}:${fileKey}`;
525
+ // 检查 Redis 缓存
526
+ // const redisUrl = await this.redis.getData(this.urlRedisKey, cacheKey);
527
+ // if (redisUrl) {
528
+ // this.logger.debug('Using cached presigned URL', { fileKey, bucket: finalBucket });
529
+ // return redisUrl;
530
+ // }
531
+ // 使用火山引擎 TOS SDK 生成预签名 URL
532
+ const tosClient = internal ? this.tosInternalClient : this.tosClient;
533
+ try {
534
+ // 使用 TOS SDK 的 getPreSignedUrl 方法生成预签名 URL
535
+ // 参考文档:https://www.volcengine.com/docs/6349/113484?lang=zh
536
+ const signedUrl = tosClient.getPreSignedUrl({
537
+ method: 'GET',
538
+ bucket: finalBucket,
539
+ key: fileKey,
540
+ expires: expire, // 预签名 URL 的有效期,单位是秒
541
+ });
542
+ this.logger.info('Generated presigned URL for TOS using TOS SDK', {
543
+ fileKey,
544
+ bucket: finalBucket,
545
+ expiresIn: expire,
546
+ internal,
547
+ });
548
+ // 缓存 URL(缓存时间略短于过期时间,确保不会返回已过期的 URL)
549
+ const cacheExpire = Math.max(expire - 5, 1); // 至少缓存1秒
550
+ await this.redis.saveData(this.urlRedisKey, cacheKey, signedUrl, cacheExpire);
551
+ // 如果需要替换为自定义域名,使用 replaceUrlToOwnDoamin
552
+ return this.replaceUrlToOwnDoamin(signedUrl);
553
+ }
554
+ catch (error) {
555
+ this.logger.error('Failed to generate presigned URL for TOS', {
556
+ fileKey,
557
+ bucket: finalBucket,
558
+ error: error.message,
559
+ internal,
560
+ });
561
+ throw error;
562
+ }
563
+ }
564
+ /**
565
+ * 获取私有文件的下载链接(不进行 CDN 加密)
566
+ * 参考:https://www.volcengine.com/docs/6349/113484?lang=zh
567
+ *
568
+ * 使用火山引擎官方 TOS SDK 生成预签名 URL
569
+ *
570
+ * @param fileKey 文件键名
571
+ * @param expiresIn 链接过期时间,单位为秒,默认为30秒
572
+ * @param internal 是否使用内部客户端,默认为false
573
+ * @param bucket 存储桶名称(可选),如果未提供则使用配置中的默认存储桶
574
+ * @returns 返回一个Promise,解析后得到私有文件的下载链接
575
+ */
576
+ async getPrivateDownloadUrlWithoutCdnEncrypt(fileKey, expiresIn = 30, internal = false, bucket) {
577
+ // 如果是公开存储桶,直接返回公开 URL
578
+ if (this.config.isPublic) {
579
+ return `${this.config.domain}/${fileKey}`;
580
+ }
581
+ const finalBucket = bucket || this.getBucketString();
582
+ const cacheKey = `${finalBucket}:${fileKey}`;
583
+ // 检查 Redis 缓存
584
+ const redisUrl = await this.redis.getData(this.urlRedisKey, cacheKey);
585
+ if (redisUrl) {
586
+ this.logger.debug('Using cached presigned URL', {
587
+ fileKey,
588
+ bucket: finalBucket,
589
+ });
590
+ return redisUrl;
591
+ }
592
+ // 使用火山引擎 TOS SDK 生成预签名 URL
593
+ const tosClient = internal ? this.tosInternalClient : this.tosClient;
594
+ try {
595
+ // 使用 TOS SDK 的 getPreSignedUrl 方法生成预签名 URL
596
+ // 参考文档:https://www.volcengine.com/docs/6349/113484?lang=zh
597
+ const signedUrl = tosClient.getPreSignedUrl({
598
+ method: 'GET',
599
+ bucket: finalBucket,
600
+ key: fileKey,
601
+ expires: expiresIn, // 预签名 URL 的有效期,单位是秒
602
+ });
603
+ this.logger.info('Generated presigned URL for TOS using TOS SDK (without CDN encrypt)', {
604
+ fileKey,
605
+ bucket: finalBucket,
606
+ expiresIn,
607
+ internal,
608
+ });
609
+ // 缓存 URL
610
+ const cacheExpire = Math.max(expiresIn - 5, 1);
611
+ await this.redis.saveData(this.urlRedisKey, cacheKey, signedUrl, cacheExpire);
612
+ // 如果需要替换为自定义域名
613
+ if (internal) {
614
+ return this.replaceUrlToOwnDoamin(signedUrl);
615
+ }
616
+ return signedUrl;
617
+ }
618
+ catch (error) {
619
+ this.logger.error('Failed to generate presigned URL for TOS', {
620
+ fileKey,
621
+ bucket: finalBucket,
622
+ error: error.message,
623
+ internal,
624
+ });
625
+ throw error;
626
+ }
627
+ }
628
+ }
629
+ exports.FileTosClient = FileTosClient;
630
+ //# sourceMappingURL=file-tos.client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-tos.client.js","sourceRoot":"","sources":["../../../src/internal/file-storage/file-tos.client.ts"],"names":[],"mappings":"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"}