sa2kit 1.6.24 → 1.6.26

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.
@@ -1,5 +1,5 @@
1
1
  export { LocalStorageProvider } from '../../chunk-GSTLV3MB.mjs';
2
- export { AliyunOSSProvider } from '../../chunk-OHUE7EL6.mjs';
2
+ export { AliyunOSSProvider } from '../../chunk-SWWRT5FN.mjs';
3
3
  import { CDNProviderError } from '../../chunk-ZGVB35L2.mjs';
4
4
  import { createLogger } from '../../chunk-KQGP6BTS.mjs';
5
5
  import { StorageProviderError, FileUploadError, FileProcessingError } from '../../chunk-CIVO4R6N.mjs';
@@ -2980,6 +2980,7 @@ var UniversalFileService = class extends EventEmitter {
2980
2980
  async initialize() {
2981
2981
  logger6.info("\u{1F680} [UniversalFileService] \u5F00\u59CB\u521D\u59CB\u5316\u6587\u4EF6\u670D\u52A1...");
2982
2982
  try {
2983
+ await this.validateConfiguration();
2983
2984
  await this.initializeStorageProviders();
2984
2985
  await this.initializeCDNProviders();
2985
2986
  await this.initializeFileProcessors();
@@ -2995,9 +2996,21 @@ var UniversalFileService = class extends EventEmitter {
2995
2996
  async reinitializeStorageProviders() {
2996
2997
  logger6.info("\u{1F504} [UniversalFileService] \u91CD\u65B0\u521D\u59CB\u5316\u5B58\u50A8\u63D0\u4F9B\u8005...");
2997
2998
  try {
2998
- const ossProvider = this.storageProviders.get("aliyun-oss");
2999
- if (ossProvider && "reinitialize" in ossProvider) {
3000
- logger6.info("\u{1F504} [UniversalFileService] \u91CD\u65B0\u521D\u59CB\u5316\u963F\u91CC\u4E91OSS\u63D0\u4F9B\u8005...");
2999
+ for (const [type, provider] of this.storageProviders) {
3000
+ if ("reinitialize" in provider) {
3001
+ try {
3002
+ logger6.info(`\u{1F504} [UniversalFileService] \u91CD\u65B0\u521D\u59CB\u5316\u5B58\u50A8\u63D0\u4F9B\u8005: ${type}...`);
3003
+ const config = this.config.storageProviders?.[type];
3004
+ if (config) {
3005
+ await provider.reinitialize(config);
3006
+ logger6.info(`\u2705 [UniversalFileService] \u5B58\u50A8\u63D0\u4F9B\u8005\u91CD\u65B0\u521D\u59CB\u5316\u5B8C\u6210: ${type}`);
3007
+ } else {
3008
+ logger6.warn(`\u26A0\uFE0F [UniversalFileService] \u5B58\u50A8\u63D0\u4F9B\u8005\u914D\u7F6E\u4E0D\u5B58\u5728: ${type}`);
3009
+ }
3010
+ } catch (error) {
3011
+ logger6.error(`\u274C [UniversalFileService] \u5B58\u50A8\u63D0\u4F9B\u8005\u91CD\u65B0\u521D\u59CB\u5316\u5931\u8D25: ${type}`, error);
3012
+ }
3013
+ }
3001
3014
  }
3002
3015
  logger6.info("\u2705 [UniversalFileService] \u5B58\u50A8\u63D0\u4F9B\u8005\u91CD\u65B0\u521D\u59CB\u5316\u5B8C\u6210");
3003
3016
  } catch (error) {
@@ -3314,6 +3327,42 @@ var UniversalFileService = class extends EventEmitter {
3314
3327
  this.off(eventType, listener);
3315
3328
  }
3316
3329
  // ============= 私有方法 =============
3330
+ /**
3331
+ * 验证配置是否完整
3332
+ */
3333
+ async validateConfiguration() {
3334
+ logger6.info("\u{1F50D} [UniversalFileService] \u9A8C\u8BC1\u914D\u7F6E\u6587\u4EF6...");
3335
+ if (!this.config) {
3336
+ throw new Error("\u6587\u4EF6\u670D\u52A1\u914D\u7F6E\u4E3A\u7A7A");
3337
+ }
3338
+ if (!this.config.storage) {
3339
+ throw new Error("\u5B58\u50A8\u914D\u7F6E\u4E3A\u7A7A");
3340
+ }
3341
+ if (this.config.storage.type === "aliyun-oss") {
3342
+ const ossConfig = this.config.storage;
3343
+ if (!ossConfig.accessKeyId || !ossConfig.accessKeySecret || !ossConfig.bucket || !ossConfig.region) {
3344
+ logger6.warn("\u26A0\uFE0F [UniversalFileService] OSS\u914D\u7F6E\u4E0D\u5B8C\u6574\uFF0C\u7B49\u5F85\u914D\u7F6E\u52A0\u8F7D...");
3345
+ const maxRetries = 30;
3346
+ const retryInterval = 1e3;
3347
+ for (let i = 0; i < maxRetries; i++) {
3348
+ await new Promise((resolve) => setTimeout(resolve, retryInterval));
3349
+ const updatedConfig = this.config.storage;
3350
+ if (updatedConfig.accessKeyId && updatedConfig.accessKeySecret && updatedConfig.bucket && updatedConfig.region) {
3351
+ logger6.info("\u2705 [UniversalFileService] OSS\u914D\u7F6E\u52A0\u8F7D\u5B8C\u6210");
3352
+ break;
3353
+ }
3354
+ if (i === maxRetries - 1) {
3355
+ throw new Error("OSS\u914D\u7F6E\u52A0\u8F7D\u8D85\u65F6\uFF1A\u7F3A\u5C11\u5FC5\u9700\u7684\u914D\u7F6E\u9879 (accessKeyId, accessKeySecret, bucket, region)");
3356
+ }
3357
+ logger6.debug(`\u7B49\u5F85OSS\u914D\u7F6E\u52A0\u8F7D\u4E2D... (${i + 1}/${maxRetries})`);
3358
+ }
3359
+ }
3360
+ }
3361
+ if (!this.config.defaultStorage) {
3362
+ this.config.defaultStorage = this.config.storage.type;
3363
+ }
3364
+ logger6.info("\u2705 [UniversalFileService] \u914D\u7F6E\u9A8C\u8BC1\u5B8C\u6210");
3365
+ }
3317
3366
  async initializeStorageProviders() {
3318
3367
  logger6.info("\u{1F4E6} [UniversalFileService] \u5F00\u59CB\u521D\u59CB\u5316\u5B58\u50A8\u63D0\u4F9B\u8005...");
3319
3368
  if (this.storageProviders.size === 0) {
@@ -3342,7 +3391,7 @@ var UniversalFileService = class extends EventEmitter {
3342
3391
  try {
3343
3392
  if (this.config.storage) {
3344
3393
  if (this.config.storage.type === "aliyun-oss" && this.config.storage.enabled) {
3345
- const { AliyunOSSProvider: AliyunOSSProvider2 } = await import('../../AliyunOSSProvider-2UZRIGT3.mjs');
3394
+ const { AliyunOSSProvider: AliyunOSSProvider2 } = await import('../../AliyunOSSProvider-YKT256D6.mjs');
3346
3395
  const ossProvider = new AliyunOSSProvider2();
3347
3396
  this.registerStorageProvider(ossProvider);
3348
3397
  logger6.info("\u2705 [UniversalFileService] \u963F\u91CC\u4E91OSS\u63D0\u4F9B\u8005\u6CE8\u518C\u6210\u529F");
@@ -3560,6 +3609,28 @@ var UniversalFileService = class extends EventEmitter {
3560
3609
  throw new FileUploadError("\u65E0\u6743\u9650\u5220\u9664\u6B64\u6587\u4EF6");
3561
3610
  }
3562
3611
  }
3612
+ /**
3613
+ * 检查服务是否完全可用(包括存储提供者)
3614
+ */
3615
+ isFullyInitialized() {
3616
+ const hasStorageProvider = Array.from(this.storageProviders.values()).some(
3617
+ (provider) => provider.type === "aliyun-oss" || provider.type === "local"
3618
+ );
3619
+ return hasStorageProvider;
3620
+ }
3621
+ /**
3622
+ * 等待服务完全初始化(带超时)
3623
+ */
3624
+ async waitForInitialization(timeoutMs = 3e4) {
3625
+ const startTime = Date.now();
3626
+ while (!this.isFullyInitialized()) {
3627
+ if (Date.now() - startTime > timeoutMs) {
3628
+ throw new Error(`\u670D\u52A1\u521D\u59CB\u5316\u8D85\u65F6 (${timeoutMs}ms)`);
3629
+ }
3630
+ await new Promise((resolve) => setTimeout(resolve, 100));
3631
+ }
3632
+ logger6.info("\u2705 [UniversalFileService] \u670D\u52A1\u5B8C\u5168\u521D\u59CB\u5316\u5C31\u7EEA");
3633
+ }
3563
3634
  };
3564
3635
  var logger7 = createLogger("CacheManager");
3565
3636
  var CacheManager = class {
@@ -4980,8 +5051,13 @@ async function createFileServiceWithFactory(options = {}) {
4980
5051
  }
4981
5052
  const service = new UniversalFileService(finalConfig);
4982
5053
  if (autoInitialize) {
4983
- await service.initialize();
4984
- logger10.info("\u2705 \u6587\u4EF6\u670D\u52A1\u521B\u5EFA\u5E76\u521D\u59CB\u5316\u5B8C\u6210");
5054
+ try {
5055
+ await service.initialize();
5056
+ logger10.info("\u2705 \u6587\u4EF6\u670D\u52A1\u521B\u5EFA\u5E76\u521D\u59CB\u5316\u5B8C\u6210");
5057
+ } catch (initError) {
5058
+ logger10.warn("\u26A0\uFE0F \u6587\u4EF6\u670D\u52A1\u521D\u59CB\u5316\u5931\u8D25\uFF0C\u5C06\u63D0\u4F9B\u5EF6\u8FDF\u521D\u59CB\u5316\u7684\u652F\u6301:", initError);
5059
+ logger10.info("\u{1F4A1} \u63D0\u793A\uFF1A\u53EF\u8C03\u7528 service.reinitializeStorageProviders() \u6765\u91CD\u65B0\u521D\u59CB\u5316\u5B58\u50A8\u63D0\u4F9B\u8005");
5060
+ }
4985
5061
  } else {
4986
5062
  logger10.info("\u2705 \u6587\u4EF6\u670D\u52A1\u521B\u5EFA\u5B8C\u6210");
4987
5063
  }