@dofe/infra-shared-services 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 (153) hide show
  1. package/dist/email/dto/email.dto.d.ts +70 -0
  2. package/dist/email/dto/email.dto.d.ts.map +1 -0
  3. package/dist/email/dto/email.dto.js +58 -0
  4. package/dist/email/dto/email.dto.js.map +1 -0
  5. package/dist/email/email.module.d.ts +3 -0
  6. package/dist/email/email.module.d.ts.map +1 -0
  7. package/dist/email/email.module.js +38 -0
  8. package/dist/email/email.module.js.map +1 -0
  9. package/dist/email/email.service.d.ts +61 -0
  10. package/dist/email/email.service.d.ts.map +1 -0
  11. package/dist/email/email.service.js +191 -0
  12. package/dist/email/email.service.js.map +1 -0
  13. package/dist/email/index.d.ts +5 -0
  14. package/dist/email/index.d.ts.map +1 -0
  15. package/dist/email/index.js +26 -0
  16. package/dist/email/index.js.map +1 -0
  17. package/dist/file-storage/bucket-resolver.d.ts +174 -0
  18. package/dist/file-storage/bucket-resolver.d.ts.map +1 -0
  19. package/dist/file-storage/bucket-resolver.js +270 -0
  20. package/dist/file-storage/bucket-resolver.js.map +1 -0
  21. package/dist/file-storage/file-storage.factory.d.ts +183 -0
  22. package/dist/file-storage/file-storage.factory.d.ts.map +1 -0
  23. package/dist/file-storage/file-storage.factory.js +300 -0
  24. package/dist/file-storage/file-storage.factory.js.map +1 -0
  25. package/dist/file-storage/file-storage.module.d.ts +49 -0
  26. package/dist/file-storage/file-storage.module.d.ts.map +1 -0
  27. package/dist/file-storage/file-storage.module.js +74 -0
  28. package/dist/file-storage/file-storage.module.js.map +1 -0
  29. package/dist/file-storage/file-storage.service.d.ts +381 -0
  30. package/dist/file-storage/file-storage.service.d.ts.map +1 -0
  31. package/dist/file-storage/file-storage.service.js +598 -0
  32. package/dist/file-storage/file-storage.service.js.map +1 -0
  33. package/dist/file-storage/index.d.ts +43 -0
  34. package/dist/file-storage/index.d.ts.map +1 -0
  35. package/dist/file-storage/index.js +65 -0
  36. package/dist/file-storage/index.js.map +1 -0
  37. package/dist/file-storage/types.d.ts +187 -0
  38. package/dist/file-storage/types.d.ts.map +1 -0
  39. package/dist/file-storage/types.js +21 -0
  40. package/dist/file-storage/types.js.map +1 -0
  41. package/dist/index.d.ts +20 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +35 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/ip-geo/continent-mapping.d.ts +31 -0
  46. package/dist/ip-geo/continent-mapping.d.ts.map +1 -0
  47. package/dist/ip-geo/continent-mapping.js +246 -0
  48. package/dist/ip-geo/continent-mapping.js.map +1 -0
  49. package/dist/ip-geo/index.d.ts +33 -0
  50. package/dist/ip-geo/index.d.ts.map +1 -0
  51. package/dist/ip-geo/index.js +41 -0
  52. package/dist/ip-geo/index.js.map +1 -0
  53. package/dist/ip-geo/ip-geo.module.d.ts +8 -0
  54. package/dist/ip-geo/ip-geo.module.d.ts.map +1 -0
  55. package/dist/ip-geo/ip-geo.module.js +34 -0
  56. package/dist/ip-geo/ip-geo.module.js.map +1 -0
  57. package/dist/ip-geo/ip-geo.service.d.ts +43 -0
  58. package/dist/ip-geo/ip-geo.service.d.ts.map +1 -0
  59. package/dist/ip-geo/ip-geo.service.js +153 -0
  60. package/dist/ip-geo/ip-geo.service.js.map +1 -0
  61. package/dist/ip-info/index.d.ts +7 -0
  62. package/dist/ip-info/index.d.ts.map +1 -0
  63. package/dist/ip-info/index.js +13 -0
  64. package/dist/ip-info/index.js.map +1 -0
  65. package/dist/ip-info/ip-info.client.d.ts +32 -0
  66. package/dist/ip-info/ip-info.client.d.ts.map +1 -0
  67. package/dist/ip-info/ip-info.client.js +73 -0
  68. package/dist/ip-info/ip-info.client.js.map +1 -0
  69. package/dist/ip-info/ip-info.module.d.ts +3 -0
  70. package/dist/ip-info/ip-info.module.d.ts.map +1 -0
  71. package/dist/ip-info/ip-info.module.js +45 -0
  72. package/dist/ip-info/ip-info.module.js.map +1 -0
  73. package/dist/ip-info/ip-info.service.d.ts +50 -0
  74. package/dist/ip-info/ip-info.service.d.ts.map +1 -0
  75. package/dist/ip-info/ip-info.service.js +177 -0
  76. package/dist/ip-info/ip-info.service.js.map +1 -0
  77. package/dist/ocr/index.d.ts +33 -0
  78. package/dist/ocr/index.d.ts.map +1 -0
  79. package/dist/ocr/index.js +53 -0
  80. package/dist/ocr/index.js.map +1 -0
  81. package/dist/ocr/ocr.module.d.ts +41 -0
  82. package/dist/ocr/ocr.module.d.ts.map +1 -0
  83. package/dist/ocr/ocr.module.js +61 -0
  84. package/dist/ocr/ocr.module.js.map +1 -0
  85. package/dist/ocr/ocr.service.d.ts +111 -0
  86. package/dist/ocr/ocr.service.d.ts.map +1 -0
  87. package/dist/ocr/ocr.service.js +214 -0
  88. package/dist/ocr/ocr.service.js.map +1 -0
  89. package/dist/sms/index.d.ts +5 -0
  90. package/dist/sms/index.d.ts.map +1 -0
  91. package/dist/sms/index.js +29 -0
  92. package/dist/sms/index.js.map +1 -0
  93. package/dist/sms/sms.factory.d.ts +140 -0
  94. package/dist/sms/sms.factory.d.ts.map +1 -0
  95. package/dist/sms/sms.factory.js +276 -0
  96. package/dist/sms/sms.factory.js.map +1 -0
  97. package/dist/sms/sms.module.d.ts +3 -0
  98. package/dist/sms/sms.module.d.ts.map +1 -0
  99. package/dist/sms/sms.module.js +38 -0
  100. package/dist/sms/sms.module.js.map +1 -0
  101. package/dist/sms/sms.service.d.ts +139 -0
  102. package/dist/sms/sms.service.d.ts.map +1 -0
  103. package/dist/sms/sms.service.js +278 -0
  104. package/dist/sms/sms.service.js.map +1 -0
  105. package/dist/sms/types.d.ts +204 -0
  106. package/dist/sms/types.d.ts.map +1 -0
  107. package/dist/sms/types.js +44 -0
  108. package/dist/sms/types.js.map +1 -0
  109. package/dist/streaming-asr/index.d.ts +45 -0
  110. package/dist/streaming-asr/index.d.ts.map +1 -0
  111. package/dist/streaming-asr/index.js +66 -0
  112. package/dist/streaming-asr/index.js.map +1 -0
  113. package/dist/streaming-asr/streaming-asr.module.d.ts +37 -0
  114. package/dist/streaming-asr/streaming-asr.module.d.ts.map +1 -0
  115. package/dist/streaming-asr/streaming-asr.module.js +59 -0
  116. package/dist/streaming-asr/streaming-asr.module.js.map +1 -0
  117. package/dist/streaming-asr/streaming-asr.service.d.ts +276 -0
  118. package/dist/streaming-asr/streaming-asr.service.d.ts.map +1 -0
  119. package/dist/streaming-asr/streaming-asr.service.js +1120 -0
  120. package/dist/streaming-asr/streaming-asr.service.js.map +1 -0
  121. package/dist/streaming-asr/types.d.ts +194 -0
  122. package/dist/streaming-asr/types.d.ts.map +1 -0
  123. package/dist/streaming-asr/types.js +8 -0
  124. package/dist/streaming-asr/types.js.map +1 -0
  125. package/dist/system-health/index.d.ts +7 -0
  126. package/dist/system-health/index.d.ts.map +1 -0
  127. package/dist/system-health/index.js +25 -0
  128. package/dist/system-health/index.js.map +1 -0
  129. package/dist/system-health/system-health.controller.d.ts +43 -0
  130. package/dist/system-health/system-health.controller.d.ts.map +1 -0
  131. package/dist/system-health/system-health.controller.js +86 -0
  132. package/dist/system-health/system-health.controller.js.map +1 -0
  133. package/dist/system-health/system-health.module.d.ts +3 -0
  134. package/dist/system-health/system-health.module.d.ts.map +1 -0
  135. package/dist/system-health/system-health.module.js +29 -0
  136. package/dist/system-health/system-health.module.js.map +1 -0
  137. package/dist/system-health/system-health.service.d.ts +14 -0
  138. package/dist/system-health/system-health.service.d.ts.map +1 -0
  139. package/dist/system-health/system-health.service.js +87 -0
  140. package/dist/system-health/system-health.service.js.map +1 -0
  141. package/dist/uploader/index.d.ts +3 -0
  142. package/dist/uploader/index.d.ts.map +1 -0
  143. package/dist/uploader/index.js +8 -0
  144. package/dist/uploader/index.js.map +1 -0
  145. package/dist/uploader/uploader.module.d.ts +3 -0
  146. package/dist/uploader/uploader.module.d.ts.map +1 -0
  147. package/dist/uploader/uploader.module.js +25 -0
  148. package/dist/uploader/uploader.module.js.map +1 -0
  149. package/dist/uploader/uploader.service.d.ts +86 -0
  150. package/dist/uploader/uploader.service.d.ts.map +1 -0
  151. package/dist/uploader/uploader.service.js +188 -0
  152. package/dist/uploader/uploader.service.js.map +1 -0
  153. package/package.json +51 -0
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview 文件存储客户端工厂
4
+ *
5
+ * 本文件实现了文件存储客户端的工厂模式,负责:
6
+ * - 根据存储供应商类型创建对应的客户端实例
7
+ * - 管理客户端实例的生命周期(单例模式)
8
+ * - 提供统一的客户端获取接口
9
+ *
10
+ * @module file-storage/factory
11
+ */
12
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
17
+ };
18
+ var __metadata = (this && this.__metadata) || function (k, v) {
19
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20
+ };
21
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
22
+ return function (target, key) { decorator(target, key, paramIndex); }
23
+ };
24
+ var __importDefault = (this && this.__importDefault) || function (mod) {
25
+ return (mod && mod.__esModule) ? mod : { "default": mod };
26
+ };
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.FileStorageClientFactory = void 0;
29
+ const common_1 = require("@nestjs/common");
30
+ const config_1 = require("@nestjs/config");
31
+ const axios_1 = require("@nestjs/axios");
32
+ const nest_winston_1 = require("nest-winston");
33
+ const winston_1 = require("winston");
34
+ const infra_clients_1 = require("@dofe/infra-clients");
35
+ const infra_redis_1 = require("@dofe/infra-redis");
36
+ const infra_common_1 = require("@dofe/infra-common");
37
+ const infra_contracts_1 = require("@dofe/infra-contracts");
38
+ const infra_common_2 = require("@dofe/infra-common");
39
+ const types_1 = require("./types");
40
+ const environment_util_1 = __importDefault(require("@dofe/infra-utils/environment.util"));
41
+ /**
42
+ * 存储供应商到客户端类的映射
43
+ *
44
+ * @description 目前支持的存储供应商客户端实现。
45
+ * `tencent` 和 `ksyun` 在枚举中定义但尚未实现客户端。
46
+ */
47
+ const VENDOR_CLIENT_MAP = {
48
+ s3: infra_clients_1.FileS3Client,
49
+ oss: infra_clients_1.FileS3Client,
50
+ tos: infra_clients_1.FileTosClient,
51
+ us3: infra_clients_1.FileUs3Client,
52
+ gcs: infra_clients_1.FileGcsClient,
53
+ qiniu: infra_clients_1.FileQiniuClient,
54
+ // tencent: 尚未实现
55
+ // ksyun: 尚未实现
56
+ };
57
+ /**
58
+ * 文件存储客户端工厂
59
+ *
60
+ * @description 使用工厂模式管理不同存储供应商的客户端实例。
61
+ *
62
+ * 主要职责:
63
+ * - 根据 vendor 和 bucket 创建对应的客户端实例
64
+ * - 使用单例模式缓存客户端实例,避免重复创建
65
+ * - 统一管理存储配置和凭证
66
+ *
67
+ * 支持的存储供应商:
68
+ * - 's3': AWS S3 兼容存储
69
+ * - 'oss': 阿里云 OSS
70
+ * - 'tos': 火山引擎 TOS
71
+ * - 'us3': UCloud US3
72
+ * - 'gcs': Google Cloud Storage
73
+ * - 'qiniu': 七牛云存储
74
+ *
75
+ * @class FileStorageClientFactory
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * @Injectable()
80
+ * class MyService {
81
+ * constructor(private readonly factory: FileStorageClientFactory) {}
82
+ *
83
+ * async uploadFile(vendor: FileBucketVendor, bucket: string, file: Buffer) {
84
+ * const client = this.factory.getClient(vendor, bucket);
85
+ * await client.fileUploader(file, { key: 'path/to/file', bucket });
86
+ * }
87
+ * }
88
+ * ```
89
+ */
90
+ let FileStorageClientFactory = class FileStorageClientFactory {
91
+ redis;
92
+ httpService;
93
+ logger;
94
+ /**
95
+ * 客户端实例缓存
96
+ * @private
97
+ */
98
+ clients = new Map();
99
+ /**
100
+ * 存储桶配置列表
101
+ * @private
102
+ */
103
+ bucketConfigs;
104
+ /**
105
+ * 存储凭证配置
106
+ * @private
107
+ */
108
+ storageCredentials;
109
+ /**
110
+ * 应用配置
111
+ * @private
112
+ */
113
+ appConfig;
114
+ /**
115
+ * 默认存储供应商
116
+ * @private
117
+ */
118
+ defaultVendor;
119
+ /**
120
+ * 构造函数
121
+ *
122
+ * @param {ConfigService} configService - NestJS 配置服务
123
+ * @param {RedisService} redis - Redis 服务
124
+ * @param {HttpService} httpService - HTTP 服务
125
+ * @param {Logger} logger - Winston 日志记录器
126
+ */
127
+ constructor(configService, redis, httpService, logger) {
128
+ this.redis = redis;
129
+ this.httpService = httpService;
130
+ this.logger = logger;
131
+ // 加载配置
132
+ this.bucketConfigs =
133
+ configService.getOrThrow('buckets');
134
+ this.appConfig = configService.getOrThrow('app');
135
+ this.defaultVendor = this.appConfig.defaultVendor;
136
+ this.storageCredentials =
137
+ (0, infra_common_1.getKeysConfig)()?.storage || {};
138
+ // 预初始化所有配置的客户端
139
+ this.initializeClients();
140
+ }
141
+ /**
142
+ * 预初始化所有配置的存储客户端
143
+ *
144
+ * @private
145
+ */
146
+ initializeClients() {
147
+ for (const config of this.bucketConfigs) {
148
+ const vendor = config.vendor ?? this.defaultVendor;
149
+ try {
150
+ this.createClient(vendor, config);
151
+ }
152
+ catch (error) {
153
+ this.logger.error('Failed to initialize storage client', {
154
+ vendor,
155
+ bucket: config.bucket,
156
+ error: error.message,
157
+ });
158
+ }
159
+ }
160
+ if (environment_util_1.default.isProduction()) {
161
+ this.logger.info('FileStorageClientFactory module initialized', {
162
+ clientCount: this.clients.size,
163
+ vendors: [...new Set(this.bucketConfigs.map((c) => c.vendor))],
164
+ });
165
+ }
166
+ }
167
+ /**
168
+ * 创建存储客户端实例
169
+ *
170
+ * @private
171
+ * @param {FileBucketVendor} vendor - 存储供应商
172
+ * @param {PardxUploader.Config} config - 存储桶配置
173
+ * @returns {FileStorageInterface} 客户端实例
174
+ * @throws {Error} 不支持的供应商类型时抛出异常
175
+ */
176
+ createClient(vendor, config) {
177
+ const ClientClass = VENDOR_CLIENT_MAP[vendor];
178
+ if (!ClientClass) {
179
+ throw (0, infra_common_2.apiError)(infra_contracts_1.CommonErrorCode.FileServiceUnsupportedVendor);
180
+ }
181
+ const storageConfig = this.storageCredentials[vendor];
182
+ if (!storageConfig) {
183
+ throw (0, infra_common_2.apiError)(infra_contracts_1.CommonErrorCode.FileServiceUnsupportedVendor);
184
+ }
185
+ const client = new ClientClass(config, storageConfig, this.appConfig, this.redis, this.httpService, this.logger);
186
+ // 缓存客户端
187
+ const key = (0, types_1.buildStorageClientKey)(vendor, config.bucket);
188
+ this.clients.set(key, client);
189
+ return client;
190
+ }
191
+ /**
192
+ * 获取存储客户端
193
+ *
194
+ * @description 根据供应商和存储桶获取对应的客户端实例。
195
+ * 如果客户端不存在,将返回 undefined。
196
+ *
197
+ * @param {FileBucketVendor} vendor - 存储供应商
198
+ * @param {string} bucket - 存储桶名称
199
+ * @returns {FileStorageInterface | undefined} 客户端实例或 undefined
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const client = factory.getClient('oss', 'my-bucket');
204
+ * if (client) {
205
+ * await client.uploadFile('/path/to/file', 'key', 'my-bucket');
206
+ * }
207
+ * ```
208
+ */
209
+ getClient(vendor, bucket) {
210
+ const key = (0, types_1.buildStorageClientKey)(vendor, bucket);
211
+ return this.clients.get(key);
212
+ }
213
+ /**
214
+ * 获取存储客户端(必须存在)
215
+ *
216
+ * @description 获取客户端实例,如果不存在则抛出异常。
217
+ *
218
+ * @param {FileBucketVendor} vendor - 存储供应商
219
+ * @param {string} bucket - 存储桶名称
220
+ * @returns {FileStorageInterface} 客户端实例
221
+ * @throws {Error} 客户端不存在时抛出异常
222
+ *
223
+ * @example
224
+ * ```typescript
225
+ * const client = factory.getClientOrThrow('oss', 'my-bucket');
226
+ * await client.uploadFile('/path/to/file', 'key', 'my-bucket');
227
+ * ```
228
+ */
229
+ getClientOrThrow(vendor, bucket) {
230
+ const client = this.getClient(vendor, bucket);
231
+ if (!client) {
232
+ throw new Error(`File storage client not found for vendor: ${vendor}, bucket: ${bucket}`);
233
+ }
234
+ return client;
235
+ }
236
+ /**
237
+ * 检查客户端是否存在
238
+ *
239
+ * @param {FileBucketVendor} vendor - 存储供应商
240
+ * @param {string} bucket - 存储桶名称
241
+ * @returns {boolean} 是否存在
242
+ */
243
+ hasClient(vendor, bucket) {
244
+ const key = (0, types_1.buildStorageClientKey)(vendor, bucket);
245
+ return this.clients.has(key);
246
+ }
247
+ /**
248
+ * 获取存储桶配置
249
+ *
250
+ * @param {FileBucketVendor} vendor - 存储供应商
251
+ * @param {string} bucket - 存储桶名称
252
+ * @returns {PardxUploader.Config | undefined} 存储桶配置
253
+ */
254
+ getBucketConfig(vendor, bucket) {
255
+ return this.bucketConfigs.find((config) => config.bucket === bucket &&
256
+ (config.vendor ?? this.defaultVendor) === vendor);
257
+ }
258
+ /**
259
+ * 获取所有存储桶配置
260
+ *
261
+ * @returns {PardxUploader.Config[]} 存储桶配置列表
262
+ */
263
+ getAllBucketConfigs() {
264
+ return [...this.bucketConfigs];
265
+ }
266
+ /**
267
+ * 获取默认存储供应商
268
+ *
269
+ * @returns {FileBucketVendor} 默认供应商
270
+ */
271
+ getDefaultVendor() {
272
+ return this.defaultVendor;
273
+ }
274
+ /**
275
+ * 获取应用配置
276
+ *
277
+ * @returns {AppConfig} 应用配置
278
+ */
279
+ getAppConfig() {
280
+ return this.appConfig;
281
+ }
282
+ /**
283
+ * 获取所有已初始化的客户端键
284
+ *
285
+ * @returns {StorageClientKey[]} 客户端键列表
286
+ */
287
+ getClientKeys() {
288
+ return [...this.clients.keys()];
289
+ }
290
+ };
291
+ exports.FileStorageClientFactory = FileStorageClientFactory;
292
+ exports.FileStorageClientFactory = FileStorageClientFactory = __decorate([
293
+ (0, common_1.Injectable)(),
294
+ __param(3, (0, common_1.Inject)(nest_winston_1.WINSTON_MODULE_PROVIDER)),
295
+ __metadata("design:paramtypes", [config_1.ConfigService,
296
+ infra_redis_1.RedisService,
297
+ axios_1.HttpService,
298
+ winston_1.Logger])
299
+ ], FileStorageClientFactory);
300
+ //# sourceMappingURL=file-storage.factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.factory.js","sourceRoot":"","sources":["../../src/file-storage/file-storage.factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @fileoverview 文件存储服务模块
3
+ *
4
+ * 本模块提供文件存储服务的 NestJS 模块配置,整合了:
5
+ * - FileStorageService: 文件存储服务门面
6
+ * - FileStorageClientFactory: 客户端工厂
7
+ * - BucketResolver: 存储桶解析器
8
+ *
9
+ * @module file-storage/module
10
+ */
11
+ /**
12
+ * 文件存储服务模块
13
+ *
14
+ * @description 提供文件存储服务的依赖注入配置。
15
+ *
16
+ * 导出服务:
17
+ * - `FileStorageService`: 文件存储服务统一入口
18
+ * - `FileStorageClientFactory`: 客户端工厂(可选,用于高级场景)
19
+ * - `BucketResolver`: 存储桶解析器(可选,用于高级场景)
20
+ *
21
+ * 依赖模块:
22
+ * - `ConfigModule`: 配置服务
23
+ * - `HttpModule`: HTTP 客户端
24
+ * - `RedisModule`: Redis 缓存
25
+ * - `IpGeoModule`: IP 地理位置服务(用于区域感知,纯 infra 层)
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * // 在其他模块中导入
30
+ * @Module({
31
+ * imports: [FileStorageServiceModule],
32
+ * })
33
+ * export class VideoModule {}
34
+ *
35
+ * // 在服务中使用
36
+ * @Injectable()
37
+ * class VideoService {
38
+ * constructor(private readonly fileStorage: FileStorageService) {}
39
+ *
40
+ * async upload(file: Buffer, key: string) {
41
+ * const client = await this.fileStorage.getFileClient('oss', 'my-bucket');
42
+ * await client.fileUploader(file, { key, bucket: 'my-bucket' });
43
+ * }
44
+ * }
45
+ * ```
46
+ */
47
+ export declare class FileStorageServiceModule {
48
+ }
49
+ //# sourceMappingURL=file-storage.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.module.d.ts","sourceRoot":"","sources":["../../src/file-storage/file-storage.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,qBAKa,wBAAwB;CAAG"}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview 文件存储服务模块
4
+ *
5
+ * 本模块提供文件存储服务的 NestJS 模块配置,整合了:
6
+ * - FileStorageService: 文件存储服务门面
7
+ * - FileStorageClientFactory: 客户端工厂
8
+ * - BucketResolver: 存储桶解析器
9
+ *
10
+ * @module file-storage/module
11
+ */
12
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.FileStorageServiceModule = void 0;
20
+ const common_1 = require("@nestjs/common");
21
+ const config_1 = require("@nestjs/config");
22
+ const axios_1 = require("@nestjs/axios");
23
+ const infra_shared_services_1 = require("@dofe/infra-shared-services");
24
+ const infra_redis_1 = require("@dofe/infra-redis");
25
+ const file_storage_service_1 = require("./file-storage.service");
26
+ const file_storage_factory_1 = require("./file-storage.factory");
27
+ const bucket_resolver_1 = require("./bucket-resolver");
28
+ /**
29
+ * 文件存储服务模块
30
+ *
31
+ * @description 提供文件存储服务的依赖注入配置。
32
+ *
33
+ * 导出服务:
34
+ * - `FileStorageService`: 文件存储服务统一入口
35
+ * - `FileStorageClientFactory`: 客户端工厂(可选,用于高级场景)
36
+ * - `BucketResolver`: 存储桶解析器(可选,用于高级场景)
37
+ *
38
+ * 依赖模块:
39
+ * - `ConfigModule`: 配置服务
40
+ * - `HttpModule`: HTTP 客户端
41
+ * - `RedisModule`: Redis 缓存
42
+ * - `IpGeoModule`: IP 地理位置服务(用于区域感知,纯 infra 层)
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * // 在其他模块中导入
47
+ * @Module({
48
+ * imports: [FileStorageServiceModule],
49
+ * })
50
+ * export class VideoModule {}
51
+ *
52
+ * // 在服务中使用
53
+ * @Injectable()
54
+ * class VideoService {
55
+ * constructor(private readonly fileStorage: FileStorageService) {}
56
+ *
57
+ * async upload(file: Buffer, key: string) {
58
+ * const client = await this.fileStorage.getFileClient('oss', 'my-bucket');
59
+ * await client.fileUploader(file, { key, bucket: 'my-bucket' });
60
+ * }
61
+ * }
62
+ * ```
63
+ */
64
+ let FileStorageServiceModule = class FileStorageServiceModule {
65
+ };
66
+ exports.FileStorageServiceModule = FileStorageServiceModule;
67
+ exports.FileStorageServiceModule = FileStorageServiceModule = __decorate([
68
+ (0, common_1.Module)({
69
+ imports: [config_1.ConfigModule, infra_redis_1.RedisModule, infra_shared_services_1.IpGeoModule, axios_1.HttpModule],
70
+ providers: [bucket_resolver_1.BucketResolver, file_storage_factory_1.FileStorageClientFactory, file_storage_service_1.FileStorageService],
71
+ exports: [file_storage_service_1.FileStorageService, file_storage_factory_1.FileStorageClientFactory, bucket_resolver_1.BucketResolver],
72
+ })
73
+ ], FileStorageServiceModule);
74
+ //# sourceMappingURL=file-storage.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.module.js","sourceRoot":"","sources":["../../src/file-storage/file-storage.module.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;AAEH,2CAAwC;AACxC,2CAA8C;AAC9C,yCAA2C;AAC3C,uEAA0D;AAC1D,mDAAgD;AAChD,iEAA4D;AAC5D,iEAAkE;AAClE,uDAAmD;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAMI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;CAAG,CAAA;AAA3B,4DAAwB;mCAAxB,wBAAwB;IALpC,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,EAAE,yBAAW,EAAE,mCAAW,EAAE,kBAAU,CAAC;QAC7D,SAAS,EAAE,CAAC,gCAAc,EAAE,+CAAwB,EAAE,yCAAkB,CAAC;QACzE,OAAO,EAAE,CAAC,yCAAkB,EAAE,+CAAwB,EAAE,gCAAc,CAAC;KACxE,CAAC;GACW,wBAAwB,CAAG"}