@danqiusheng/nest-nacos 1.0.0 → 1.2.0

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 (39) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -21
  3. package/README.en.md +197 -0
  4. package/README.md +353 -385
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +1 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/nacos-config.service.d.ts +25 -45
  10. package/dist/nacos-config.service.d.ts.map +1 -1
  11. package/dist/nacos-config.service.js +241 -102
  12. package/dist/nacos-config.service.js.map +1 -1
  13. package/dist/nacos-naming.service.d.ts +16 -46
  14. package/dist/nacos-naming.service.d.ts.map +1 -1
  15. package/dist/nacos-naming.service.js +119 -88
  16. package/dist/nacos-naming.service.js.map +1 -1
  17. package/dist/nacos.decorators.d.ts +0 -4
  18. package/dist/nacos.decorators.d.ts.map +1 -1
  19. package/dist/nacos.decorators.js +1 -12
  20. package/dist/nacos.decorators.js.map +1 -1
  21. package/dist/nacos.health.d.ts +2 -6
  22. package/dist/nacos.health.d.ts.map +1 -1
  23. package/dist/nacos.health.js +5 -25
  24. package/dist/nacos.health.js.map +1 -1
  25. package/dist/nacos.interfaces.d.ts +85 -57
  26. package/dist/nacos.interfaces.d.ts.map +1 -1
  27. package/dist/nacos.module.d.ts +2 -11
  28. package/dist/nacos.module.d.ts.map +1 -1
  29. package/dist/nacos.module.js +22 -19
  30. package/dist/nacos.module.js.map +1 -1
  31. package/dist/nacos.providers.d.ts +4 -11
  32. package/dist/nacos.providers.d.ts.map +1 -1
  33. package/dist/nacos.providers.js +37 -23
  34. package/dist/nacos.providers.js.map +1 -1
  35. package/dist/nacos.utils.d.ts +6 -0
  36. package/dist/nacos.utils.d.ts.map +1 -0
  37. package/dist/nacos.utils.js +79 -0
  38. package/dist/nacos.utils.js.map +1 -0
  39. package/package.json +19 -10
package/dist/index.d.ts CHANGED
@@ -11,4 +11,5 @@ export * from './nacos-naming.service';
11
11
  export * from './nacos-config.service';
12
12
  export * from './nacos.decorators';
13
13
  export * from './nacos.health';
14
+ export * from './nacos.utils';
14
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -27,4 +27,5 @@ __exportStar(require("./nacos-naming.service"), exports);
27
27
  __exportStar(require("./nacos-config.service"), exports);
28
28
  __exportStar(require("./nacos.decorators"), exports);
29
29
  __exportStar(require("./nacos.health"), exports);
30
+ __exportStar(require("./nacos.utils"), exports);
30
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;GAIG;AACH,oDAAkC;AAClC,qDAAmC;AACnC,iDAA+B;AAC/B,oDAAkC;AAClC,yDAAuC;AACvC,yDAAuC;AACvC,qDAAmC;AACnC,iDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA;;;;GAIG;AACH,oDAAkC;AAClC,qDAAmC;AACnC,iDAA+B;AAC/B,oDAAkC;AAClC,yDAAuC;AACvC,yDAAuC;AACvC,qDAAmC;AACnC,iDAA+B;AAC/B,gDAA8B"}
@@ -1,62 +1,42 @@
1
- /**
2
- * NestJS Nacos 插件 - Config 服务(配置中心)
3
- *
4
- * 封装 NacosConfigClient,负责:
5
- * - 配置读取与发布
6
- * - 配置变更订阅(服务端推送)
7
- * - 本地配置缓存(支持热更新)
8
- */
9
1
  import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
10
2
  import { NacosConfigClient } from 'nacos';
11
- import { NacosModuleOptions } from './nacos.interfaces';
3
+ import { NacosConfigDescriptor, NacosConfigFormat, NacosConfigState, NacosModuleOptions } from './nacos.interfaces';
4
+ type ConfigListener = (content: string, parsed?: unknown) => void;
12
5
  export declare class NacosConfigService implements OnModuleInit, OnModuleDestroy {
13
6
  private readonly client;
14
7
  private readonly options;
15
8
  private readonly logger;
16
- /** 配置缓存:key = `${dataId}@@${group}` */
17
9
  private readonly cache;
18
- /** 订阅回调集合:key = `${dataId}@@${group}` */
10
+ private readonly parsedCache;
19
11
  private readonly listeners;
12
+ private readonly sdkListeners;
13
+ private readonly states;
20
14
  constructor(client: NacosConfigClient | null, options: NacosModuleOptions | null);
21
- /** 模块初始化:等待客户端就绪 + 预加载订阅配置 */
22
15
  onModuleInit(): Promise<void>;
23
16
  onModuleDestroy(): Promise<void>;
24
- /**
25
- * 获取配置内容
26
- * @param dataId 配置 ID
27
- * @param group 分组名,默认 'DEFAULT_GROUP'
28
- * @returns 配置内容字符串
29
- */
17
+ preload(descriptors: NacosConfigDescriptor[]): Promise<void>;
30
18
  getConfig(dataId: string, group?: string): Promise<string>;
31
- /**
32
- * 获取配置并解析为 JSON 对象
33
- */
34
- getConfigAsJson<T = any>(dataId: string, group?: string): Promise<T>;
35
- /**
36
- * 发布配置
37
- * @param dataId 配置 ID
38
- * @param group 分组名
39
- * @param content 配置内容
40
- */
19
+ getParsedConfig<T = unknown>(dataId: string, group?: string, format?: NacosConfigFormat): Promise<T>;
20
+ getConfigAsJson<T = unknown>(dataId: string, group?: string): Promise<T>;
21
+ getMergedConfig<T = Record<string, unknown>>(descriptors?: NacosConfigDescriptor[]): Promise<T>;
41
22
  publish(dataId: string, group: string, content: string): Promise<boolean>;
42
- /**
43
- * 删除配置
44
- */
45
23
  remove(dataId: string, group: string): Promise<boolean>;
46
- /**
47
- * 订阅配置变更(服务端推送)
48
- * @param dataId 配置 ID
49
- * @param group 分组名
50
- * @param listener 回调函数,参数为新配置内容
51
- */
52
- subscribe(dataId: string, group: string, listener: (content: string) => void): void;
53
- /**
54
- * 取消订阅
55
- */
56
- unSubscribe(dataId: string, group: string, listener?: (content: string) => void): void;
57
- /** 获取原始客户端 */
24
+ subscribe(dataId: string, group: string, listener: ConfigListener): void;
25
+ unSubscribe(dataId: string, group: string, listener?: ConfigListener): void;
26
+ getLoadedConfigs(): NacosConfigState[];
58
27
  getRawClient(): NacosConfigClient | null;
59
- /** 内部方法:加载配置并建立订阅 */
60
- private loadAndSubscribe;
28
+ private loadDescriptor;
29
+ private ensureSdkSubscription;
30
+ private acceptContent;
31
+ private loadFallback;
32
+ private writeFallback;
33
+ private cachePath;
34
+ private normalizeDescriptor;
35
+ private parse;
36
+ private key;
37
+ private splitKey;
38
+ private errorMessage;
39
+ private removeThroughSdk;
61
40
  }
41
+ export {};
62
42
  //# sourceMappingURL=nacos-config.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nacos-config.service.d.ts","sourceRoot":"","sources":["../src/nacos-config.service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAA8B,eAAe,EAAE,YAAY,EAAY,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,qBACa,kBAAmB,YAAW,YAAY,EAAE,eAAe;IAQ3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqD;gBAGnB,MAAM,EAAE,iBAAiB,GAAG,IAAI,EACtC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAGxF,8BAA8B;IACxB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtC;;;;;OAKG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAWzE;;OAEG;IACG,eAAe,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAUnF;;;;;OAKG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/E;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7D;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAiBnF;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAYtF,cAAc;IACd,YAAY,IAAI,iBAAiB,GAAG,IAAI;IAIxC,qBAAqB;YACP,gBAAgB;CAY/B"}
1
+ {"version":3,"file":"nacos-config.service.d.ts","sourceRoot":"","sources":["../src/nacos-config.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8B,eAAe,EAAE,YAAY,EAAY,MAAM,gBAAgB,CAAC;AACrG,OAAO,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAG5B,KAAK,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAElE,qBACa,kBAAmB,YAAW,YAAY,EAAE,eAAe;IAS3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IACpE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgD;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;gBAGF,MAAM,EAAE,iBAAiB,GAAG,IAAI,EACtC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAGlF,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWhC,OAAO,CAAC,WAAW,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAYnE,eAAe,CAAC,CAAC,GAAG,OAAO,EAC/B,MAAM,EAAE,MAAM,EACd,KAAK,SAAkB,EACvB,MAAM,GAAE,iBAA0B,GACjC,OAAO,CAAC,CAAC,CAAC;IASP,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,SAAkB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIjF,eAAe,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/C,WAAW,GAAE,qBAAqB,EAAyC,GAC1E,OAAO,CAAC,CAAC,CAAC;IAcP,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAczE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAe7D,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAYxE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,cAAc,GAAG,IAAI;IAc3E,gBAAgB,IAAI,gBAAgB,EAAE;IAItC,YAAY,IAAI,iBAAiB,GAAG,IAAI;YAI1B,cAAc;IA0B5B,OAAO,CAAC,qBAAqB;YA2Bf,aAAa;YA0Bb,YAAY;YAcZ,aAAa;IAO3B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,KAAK;IAQb,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,YAAY;YAIN,gBAAgB;CAmC/B"}
@@ -14,157 +14,296 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
14
14
  var NacosConfigService_1;
15
15
  Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.NacosConfigService = void 0;
17
- /**
18
- * NestJS Nacos 插件 - Config 服务(配置中心)
19
- *
20
- * 封装 NacosConfigClient,负责:
21
- * - 配置读取与发布
22
- * - 配置变更订阅(服务端推送)
23
- * - 本地配置缓存(支持热更新)
24
- */
17
+ const crypto_1 = require("crypto");
18
+ const fs_1 = require("fs");
19
+ const path_1 = require("path");
25
20
  const common_1 = require("@nestjs/common");
26
21
  const nacos_constants_1 = require("./nacos.constants");
22
+ const nacos_utils_1 = require("./nacos.utils");
27
23
  let NacosConfigService = NacosConfigService_1 = class NacosConfigService {
28
24
  constructor(client, options) {
29
25
  this.client = client;
30
26
  this.options = options;
31
27
  this.logger = new common_1.Logger(NacosConfigService_1.name);
32
- /** 配置缓存:key = `${dataId}@@${group}` */
33
28
  this.cache = new Map();
34
- /** 订阅回调集合:key = `${dataId}@@${group}` */
29
+ this.parsedCache = new Map();
35
30
  this.listeners = new Map();
31
+ this.sdkListeners = new Map();
32
+ this.states = new Map();
36
33
  }
37
- /** 模块初始化:等待客户端就绪 + 预加载订阅配置 */
38
34
  async onModuleInit() {
39
35
  if (!this.client) {
40
- this.logger.warn('NacosConfigClient 未初始化,Config 功能跳过');
36
+ if ((this.options?.subscribeConfigs?.length ?? 0) > 0) {
37
+ await this.preload(this.options.subscribeConfigs);
38
+ }
41
39
  return;
42
40
  }
43
- await this.client.ready();
44
- this.logger.log('NacosConfigClient 已就绪');
45
- // 预加载并订阅配置项
46
- const configs = this.options?.subscribeConfigs ?? [];
47
- for (const { dataId, group } of configs) {
48
- await this.loadAndSubscribe(dataId, group);
49
- }
41
+ await (0, nacos_utils_1.withRetry)(() => this.client.ready(), this.options?.configLoading?.retry ?? this.options?.retry);
42
+ await this.preload(this.options?.subscribeConfigs ?? []);
50
43
  }
51
44
  async onModuleDestroy() {
52
45
  if (!this.client)
53
46
  return;
54
- this.logger.log('NacosConfigClient 已关闭');
55
- }
56
- /**
57
- * 获取配置内容
58
- * @param dataId 配置 ID
59
- * @param group 分组名,默认 'DEFAULT_GROUP'
60
- * @returns 配置内容字符串
61
- */
47
+ for (const [key, wrapper] of this.sdkListeners) {
48
+ const { dataId, group } = this.splitKey(key);
49
+ this.client.unSubscribe({ dataId, group }, wrapper);
50
+ }
51
+ this.sdkListeners.clear();
52
+ this.listeners.clear();
53
+ await Promise.resolve(this.client.close());
54
+ }
55
+ async preload(descriptors) {
56
+ for (const descriptor of descriptors) {
57
+ await this.loadDescriptor(this.normalizeDescriptor(descriptor));
58
+ }
59
+ }
62
60
  async getConfig(dataId, group = 'DEFAULT_GROUP') {
63
- if (!this.client)
64
- throw new Error('NacosConfigClient 未初始化');
65
- const key = `${dataId}@@${group}`;
66
- if (this.cache.has(key)) {
61
+ const key = this.key(dataId, group);
62
+ if (this.cache.has(key))
67
63
  return this.cache.get(key);
68
- }
69
- const content = await this.client.getConfig(dataId, group);
64
+ if (!this.client)
65
+ throw new Error('NacosConfigClient is not initialized');
66
+ const content = await (0, nacos_utils_1.withRetry)(() => this.client.getConfig(dataId, group), this.options?.configLoading?.retry ?? this.options?.retry);
70
67
  this.cache.set(key, content);
71
68
  return content;
72
69
  }
73
- /**
74
- * 获取配置并解析为 JSON 对象
75
- */
76
- async getConfigAsJson(dataId, group = 'DEFAULT_GROUP') {
70
+ async getParsedConfig(dataId, group = 'DEFAULT_GROUP', format = 'auto') {
71
+ const key = this.key(dataId, group);
72
+ if (this.parsedCache.has(key))
73
+ return this.parsedCache.get(key);
77
74
  const content = await this.getConfig(dataId, group);
78
- try {
79
- return JSON.parse(content);
80
- }
81
- catch {
82
- this.logger.warn(`配置 ${dataId} 不是合法 JSON,返回原始字符串`);
83
- return content;
75
+ const parsed = this.parse(content, format, dataId);
76
+ this.parsedCache.set(key, parsed);
77
+ return parsed;
78
+ }
79
+ async getConfigAsJson(dataId, group = 'DEFAULT_GROUP') {
80
+ return this.getParsedConfig(dataId, group, 'json');
81
+ }
82
+ async getMergedConfig(descriptors = this.options?.subscribeConfigs ?? []) {
83
+ let merged = {};
84
+ for (const input of descriptors) {
85
+ const descriptor = this.normalizeDescriptor(input);
86
+ const value = await this.getParsedConfig(descriptor.dataId, descriptor.group, descriptor.format);
87
+ merged = (0, nacos_utils_1.mergeConfigValues)(merged, value);
84
88
  }
89
+ return merged;
85
90
  }
86
- /**
87
- * 发布配置
88
- * @param dataId 配置 ID
89
- * @param group 分组名
90
- * @param content 配置内容
91
- */
92
91
  async publish(dataId, group, content) {
93
92
  if (!this.client)
94
- throw new Error('NacosConfigClient 未初始化');
95
- const result = await this.client.publishSingle(dataId, group, content);
96
- const key = `${dataId}@@${group}`;
97
- this.cache.set(key, content);
98
- this.logger.log(`已发布配置: ${dataId} (${group})`);
93
+ throw new Error('NacosConfigClient is not initialized');
94
+ const result = await (0, nacos_utils_1.withRetry)(() => this.client.publishSingle(dataId, group, content), this.options?.retry);
95
+ if (result) {
96
+ const key = this.key(dataId, group);
97
+ this.cache.set(key, content);
98
+ this.parsedCache.delete(key);
99
+ }
99
100
  return result;
100
101
  }
101
- /**
102
- * 删除配置
103
- */
104
102
  async remove(dataId, group) {
105
103
  if (!this.client)
106
- throw new Error('NacosConfigClient 未初始化');
107
- const result = await this.client.remove(dataId, group);
108
- const key = `${dataId}@@${group}`;
109
- this.cache.delete(key);
110
- this.logger.log(`已删除配置: ${dataId} (${group})`);
104
+ throw new Error('NacosConfigClient is not initialized');
105
+ const result = await (0, nacos_utils_1.withRetry)(() => this.removeThroughSdk(dataId, group), this.options?.retry);
106
+ if (result) {
107
+ const key = this.key(dataId, group);
108
+ this.cache.delete(key);
109
+ this.parsedCache.delete(key);
110
+ this.states.delete(key);
111
+ }
111
112
  return result;
112
113
  }
113
- /**
114
- * 订阅配置变更(服务端推送)
115
- * @param dataId 配置 ID
116
- * @param group 分组名
117
- * @param listener 回调函数,参数为新配置内容
118
- */
119
114
  subscribe(dataId, group, listener) {
120
115
  if (!this.client)
121
- throw new Error('NacosConfigClient 未初始化');
122
- const key = `${dataId}@@${group}`;
123
- // 内部包装:更新缓存 + 通知所有监听者
124
- const wrapper = (content) => {
125
- this.cache.set(key, content);
126
- this.listeners.get(key)?.forEach((fn) => fn(content));
127
- };
128
- this.client.subscribe({ dataId, group }, wrapper);
129
- if (!this.listeners.has(key)) {
130
- this.listeners.set(key, new Set());
116
+ throw new Error('NacosConfigClient is not initialized');
117
+ const key = this.key(dataId, group);
118
+ let callbacks = this.listeners.get(key);
119
+ if (!callbacks) {
120
+ callbacks = new Set();
121
+ this.listeners.set(key, callbacks);
131
122
  }
132
- this.listeners.get(key).add(listener);
133
- this.logger.log(`已订阅配置: ${dataId} (${group})`);
123
+ callbacks.add(listener);
124
+ this.ensureSdkSubscription(dataId, group);
134
125
  }
135
- /**
136
- * 取消订阅
137
- */
138
126
  unSubscribe(dataId, group, listener) {
139
127
  if (!this.client)
140
- throw new Error('NacosConfigClient 未初始化');
141
- const key = `${dataId}@@${group}`;
142
- // SDK 要求 listener 必填,此处兼容可选参数
143
- this.client.unSubscribe({ dataId, group }, (listener ?? (() => undefined)));
144
- if (listener) {
145
- this.listeners.get(key)?.delete(listener);
146
- }
147
- else {
128
+ throw new Error('NacosConfigClient is not initialized');
129
+ const key = this.key(dataId, group);
130
+ const callbacks = this.listeners.get(key);
131
+ if (listener)
132
+ callbacks?.delete(listener);
133
+ else
134
+ callbacks?.clear();
135
+ if (!callbacks || callbacks.size === 0) {
136
+ const wrapper = this.sdkListeners.get(key);
137
+ if (wrapper)
138
+ this.client.unSubscribe({ dataId, group }, wrapper);
148
139
  this.listeners.delete(key);
140
+ this.sdkListeners.delete(key);
149
141
  }
150
142
  }
151
- /** 获取原始客户端 */
143
+ getLoadedConfigs() {
144
+ return Array.from(this.states.values()).map((state) => ({ ...state }));
145
+ }
152
146
  getRawClient() {
153
147
  return this.client;
154
148
  }
155
- /** 内部方法:加载配置并建立订阅 */
156
- async loadAndSubscribe(dataId, group) {
149
+ async loadDescriptor(descriptor) {
150
+ const mode = this.options?.configLoading?.failureMode ?? 'throw';
151
+ try {
152
+ if (!this.client)
153
+ throw new Error('NacosConfigClient is not initialized');
154
+ const content = await (0, nacos_utils_1.withRetry)(() => this.client.getConfig(descriptor.dataId, descriptor.group), this.options?.configLoading?.retry ?? this.options?.retry);
155
+ await this.acceptContent(descriptor, content, 'nacos', true);
156
+ }
157
+ catch (error) {
158
+ let loadedFallback = false;
159
+ if (mode === 'fallback') {
160
+ loadedFallback = await this.loadFallback(descriptor);
161
+ }
162
+ if (!loadedFallback && descriptor.required && mode !== 'continue') {
163
+ throw new Error(`Failed to preload Nacos config ${descriptor.dataId} (${descriptor.group}): ${this.errorMessage(error)}`);
164
+ }
165
+ if (!loadedFallback) {
166
+ this.logger.warn(`Skipped config ${descriptor.dataId} (${descriptor.group}): ${this.errorMessage(error)}`);
167
+ }
168
+ }
169
+ if (descriptor.subscribe && this.client)
170
+ this.ensureSdkSubscription(descriptor.dataId, descriptor.group);
171
+ }
172
+ ensureSdkSubscription(dataId, group) {
173
+ if (!this.client)
174
+ return;
175
+ const key = this.key(dataId, group);
176
+ if (this.sdkListeners.has(key))
177
+ return;
178
+ const descriptor = this.normalizeDescriptor(this.options?.subscribeConfigs?.find((item) => item.dataId === dataId && (item.group ?? 'DEFAULT_GROUP') === group) ?? { dataId, group });
179
+ const wrapper = (content) => {
180
+ void this.acceptContent(descriptor, content, 'nacos', true)
181
+ .then(() => {
182
+ const parsed = this.parsedCache.get(key);
183
+ for (const callback of this.listeners.get(key) ?? []) {
184
+ try {
185
+ callback(content, parsed);
186
+ }
187
+ catch (error) {
188
+ this.logger.error(`Config listener failed for ${dataId} (${group})`, error);
189
+ }
190
+ }
191
+ })
192
+ .catch((error) => this.logger.error(`Config update rejected for ${dataId} (${group})`, error));
193
+ };
194
+ this.sdkListeners.set(key, wrapper);
195
+ this.client.subscribe({ dataId, group }, wrapper);
196
+ }
197
+ async acceptContent(descriptor, content, source, persist) {
198
+ const key = this.key(descriptor.dataId, descriptor.group);
199
+ const parsed = this.parse(content, descriptor.format, descriptor.dataId);
200
+ this.cache.set(key, content);
201
+ this.parsedCache.set(key, parsed);
202
+ this.states.set(key, {
203
+ dataId: descriptor.dataId,
204
+ group: descriptor.group,
205
+ format: (0, nacos_utils_1.resolveConfigFormat)(descriptor.dataId, descriptor.format),
206
+ source,
207
+ updatedAt: new Date().toISOString(),
208
+ });
209
+ if (persist && this.cachePath(descriptor)) {
210
+ try {
211
+ await this.writeFallback(this.cachePath(descriptor), content);
212
+ }
213
+ catch (error) {
214
+ this.logger.warn(`Failed to write config cache for ${descriptor.dataId}: ${this.errorMessage(error)}`);
215
+ }
216
+ }
217
+ }
218
+ async loadFallback(descriptor) {
219
+ const path = this.cachePath(descriptor);
220
+ if (!path)
221
+ return false;
222
+ try {
223
+ const content = await fs_1.promises.readFile(path, 'utf8');
224
+ await this.acceptContent(descriptor, content, 'fallback', false);
225
+ return true;
226
+ }
227
+ catch {
228
+ return false;
229
+ }
230
+ }
231
+ async writeFallback(path, content) {
232
+ await fs_1.promises.mkdir((0, path_1.dirname)(path), { recursive: true });
233
+ const temporary = `${path}.${process.pid}.${Date.now()}.tmp`;
234
+ await fs_1.promises.writeFile(temporary, content, 'utf8');
235
+ await fs_1.promises.rename(temporary, path);
236
+ }
237
+ cachePath(descriptor) {
238
+ if (descriptor.cachePath)
239
+ return (0, path_1.resolve)(descriptor.cachePath);
240
+ const cacheDir = this.options?.configLoading?.cacheDir;
241
+ if (!cacheDir)
242
+ return undefined;
243
+ const digest = (0, crypto_1.createHash)('sha256')
244
+ .update(`${descriptor.dataId}@@${descriptor.group ?? 'DEFAULT_GROUP'}`)
245
+ .digest('hex')
246
+ .slice(0, 16);
247
+ return (0, path_1.join)((0, path_1.resolve)(cacheDir), `${digest}.cache`);
248
+ }
249
+ normalizeDescriptor(descriptor) {
250
+ return {
251
+ dataId: descriptor.dataId,
252
+ group: descriptor.group ?? 'DEFAULT_GROUP',
253
+ format: descriptor.format ?? 'auto',
254
+ subscribe: descriptor.subscribe ?? true,
255
+ required: descriptor.required ?? true,
256
+ cachePath: descriptor.cachePath,
257
+ };
258
+ }
259
+ parse(content, format, dataId) {
157
260
  try {
158
- const content = await this.getConfig(dataId, group);
159
- this.logger.log(`已加载配置: ${dataId} (${group})`);
160
- this.subscribe(dataId, group, (newContent) => {
161
- this.logger.log(`配置已更新: ${dataId} (${group})`);
162
- });
163
- void content;
261
+ return (0, nacos_utils_1.parseConfigContent)(content, format, dataId);
262
+ }
263
+ catch (error) {
264
+ throw new Error(`Invalid ${(0, nacos_utils_1.resolveConfigFormat)(dataId, format)} config ${dataId}: ${this.errorMessage(error)}`);
164
265
  }
165
- catch (err) {
166
- this.logger.error(`加载配置失败: ${dataId} (${group})`, err);
266
+ }
267
+ key(dataId, group) {
268
+ return `${dataId}@@${group}`;
269
+ }
270
+ splitKey(key) {
271
+ const separator = key.lastIndexOf('@@');
272
+ return { dataId: key.slice(0, separator), group: key.slice(separator + 2) };
273
+ }
274
+ errorMessage(error) {
275
+ return error instanceof Error ? error.message : String(error);
276
+ }
277
+ async removeThroughSdk(dataId, group) {
278
+ // nacos@2.6.x sends `tenant=public` when removing the public namespace,
279
+ // although publish/get use the empty namespace. Use the official
280
+ // nacos-config DataClient directly for this one operation so the request
281
+ // omits tenant entirely and does not depend on cluster-client's 7777
282
+ // leader/follower state.
283
+ const isPublic = !this.options?.config?.namespace || this.options.config.namespace === 'public';
284
+ if (isPublic) {
285
+ if (this.client.options) {
286
+ const { DataClient } = require('nacos-config');
287
+ const config = this.options?.config;
288
+ const directClient = new DataClient({
289
+ serverAddr: config?.serverAddr,
290
+ namespace: undefined,
291
+ username: config?.username,
292
+ password: config?.password,
293
+ ssl: config?.ssl,
294
+ accessKey: config?.accessKey,
295
+ secretKey: config?.secretKey,
296
+ signatureRegionId: config?.signatureRegionId,
297
+ });
298
+ try {
299
+ return await directClient.remove(dataId, group);
300
+ }
301
+ finally {
302
+ directClient.close();
303
+ }
304
+ }
167
305
  }
306
+ return this.client.remove(dataId, group);
168
307
  }
169
308
  };
170
309
  exports.NacosConfigService = NacosConfigService;
@@ -1 +1 @@
1
- {"version":3,"file":"nacos-config.service.js","sourceRoot":"","sources":["../src/nacos-config.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nacos-config.service.js","sourceRoot":"","sources":["../src/nacos-config.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mCAAoC;AACpC,2BAAoC;AACpC,+BAA8C;AAC9C,2CAAqG;AAErG,uDAAuE;AAOvE,+CAAsG;AAK/F,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAQ7B,YAC2C,MAAiD,EACvD,OAAmD;QAD5B,WAAM,GAAN,MAAM,CAA0B;QACtC,YAAO,GAAP,OAAO,CAA2B;QATvE,WAAM,GAAG,IAAI,eAAM,CAAC,oBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,UAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QAClC,gBAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;QACzC,cAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;QACnD,iBAAY,GAAG,IAAI,GAAG,EAAqC,CAAC;QAC5D,WAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;IAK3D,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtD,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAQ,CAAC,gBAAiB,CAAC,CAAC;YACtD,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,IAAA,uBAAS,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAO,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACvG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,WAAoC;QAChD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,KAAK,GAAG,eAAe;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAS,EAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,MAAO,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,EAC3C,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAC1D,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,MAAc,EACd,KAAK,GAAG,eAAe,EACvB,SAA4B,MAAM;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;QACrE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,eAAe,CAAc,MAAc,EAAE,KAAK,GAAG,eAAe;QACxE,OAAO,IAAI,CAAC,eAAe,CAAI,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,cAAuC,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,EAAE;QAE3E,IAAI,MAAM,GAAY,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CACtC,UAAU,CAAC,MAAM,EACjB,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,MAAM,CAClB,CAAC;YACF,MAAM,GAAG,IAAA,+BAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,KAAa,EAAE,OAAe;QAC1D,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAS,EAC5B,GAAG,EAAE,CAAC,IAAI,CAAC,MAAO,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EACxD,IAAI,CAAC,OAAO,EAAE,KAAK,CACpB,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,KAAa;QACxC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,IAAA,uBAAS,EAC5B,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,EAC1C,IAAI,CAAC,OAAO,EAAE,KAAK,CACpB,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,KAAa,EAAE,QAAwB;QAC/D,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxB,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,KAAa,EAAE,QAAyB;QAClE,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ;YAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;;YACrC,SAAS,EAAE,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO;gBAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,UAAyG;QACpI,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,IAAI,OAAO,CAAC;QACjE,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1E,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAS,EAC7B,GAAG,EAAE,CAAC,IAAI,CAAC,MAAO,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACjE,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,CAC1D,CAAC;YACF,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,cAAc,GAAG,KAAK,CAAC;YAC3B,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBACxB,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,CAAC,cAAc,IAAI,UAAU,CAAC,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CACb,kCAAkC,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,KAAK,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CACzG,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,KAAK,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;QACD,IAAI,UAAU,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3G,CAAC;IAEO,qBAAqB,CAAC,MAAc,EAAE,KAAa;QACzD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CACzC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAClC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,eAAe,CAAC,KAAK,KAAK,CAC9E,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CACvB,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,OAAe,EAAE,EAAE;YAClC,KAAK,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC;iBACxD,IAAI,CAAC,GAAG,EAAE;gBACT,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACzC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACrD,IAAI,CAAC;wBACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAC5B,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,MAAM,KAAK,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,MAAM,KAAK,KAAK,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,UAAyG,EACzG,OAAe,EACf,MAA4B,EAC5B,OAAgB;QAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE;YACnB,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,MAAM,EAAE,IAAA,iCAAmB,EAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC;YACjE,MAAM;YACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAE,EAAE,OAAO,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,UAAyG;QAEzG,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAChD,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,OAAe;QACvD,MAAM,aAAE,CAAC,KAAK,CAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QAC7D,MAAM,aAAE,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,aAAE,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IAEO,SAAS,CAAC,UAAyE;QACzF,IAAI,UAAU,CAAC,SAAS;YAAE,OAAO,IAAA,cAAO,EAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,CAAC;QACvD,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QAChC,MAAM,MAAM,GAAG,IAAA,mBAAU,EAAC,QAAQ,CAAC;aAChC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,KAAK,UAAU,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC;aACtE,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,OAAO,IAAA,WAAI,EAAC,IAAA,cAAO,EAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEO,mBAAmB,CAAC,UAAiC;QAC3D,OAAO;YACL,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,KAAK,EAAE,UAAU,CAAC,KAAK,IAAI,eAAe;YAC1C,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,MAAM;YACnC,SAAS,EAAE,UAAU,CAAC,SAAS,IAAI,IAAI;YACvC,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,IAAI;YACrC,SAAS,EAAE,UAAU,CAAC,SAAS;SAChC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,OAAe,EAAE,MAAyB,EAAE,MAAc;QACtE,IAAI,CAAC;YACH,OAAO,IAAA,gCAAkB,EAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,WAAW,IAAA,iCAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,WAAW,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IAEO,GAAG,CAAC,MAAc,EAAE,KAAa;QACvC,OAAO,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEO,QAAQ,CAAC,GAAW;QAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;IAC9E,CAAC;IAEO,YAAY,CAAC,KAAc;QACjC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAa;QAC1D,wEAAwE;QACxE,iEAAiE;QACjE,yEAAyE;QACzE,qEAAqE;QACrE,yBAAyB;QACzB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC;QAChG,IAAI,QAAQ,EAAE,CAAC;YACb,IAAK,IAAI,CAAC,MAAc,CAAC,OAAO,EAAE,CAAC;gBACjC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,cAAc,CAK5C,CAAC;gBACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;gBACpC,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC;oBAClC,UAAU,EAAE,MAAM,EAAE,UAAU;oBAC9B,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE,MAAM,EAAE,QAAQ;oBAC1B,QAAQ,EAAE,MAAM,EAAE,QAAQ;oBAC1B,GAAG,EAAE,MAAM,EAAE,GAAG;oBAChB,SAAS,EAAE,MAAM,EAAE,SAAS;oBAC5B,SAAS,EAAE,MAAM,EAAE,SAAS;oBAC5B,iBAAiB,EAAE,MAAM,EAAE,iBAAiB;iBAC7C,CAAC,CAAC;gBACH,IAAI,CAAC;oBACH,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAClD,CAAC;wBAAS,CAAC;oBACT,YAAY,CAAC,KAAK,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,MAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF,CAAA;AAvUY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,mBAAU,GAAE;IAUR,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,qCAAmB,CAAC,CAAA;IACvC,WAAA,IAAA,iBAAQ,GAAE,CAAA;IAAE,WAAA,IAAA,eAAM,EAAC,+BAAa,CAAC,CAAA;;GAVzB,kBAAkB,CAuU9B"}
@@ -1,68 +1,38 @@
1
- /**
2
- * NestJS Nacos 插件 - Naming 服务(服务发现/注册)
3
- *
4
- * 封装 NacosNamingClient,负责:
5
- * - 客户端生命周期管理(初始化 / 关闭)
6
- * - 服务实例自动注册与注销
7
- * - 服务订阅与实例查询
8
- */
9
1
  import { OnModuleDestroy, OnModuleInit } from '@nestjs/common';
10
2
  import { NacosNamingClient } from 'nacos';
11
- import { NacosInstanceOptions, NacosModuleOptions } from './nacos.interfaces';
3
+ import { NacosInstanceOptions, NacosInstanceSelectionOptions, NacosModuleOptions, NacosServiceInstance } from './nacos.interfaces';
12
4
  export declare class NacosNamingService implements OnModuleInit, OnModuleDestroy {
13
5
  private readonly client;
14
6
  private readonly options;
15
7
  private readonly logger;
16
- /** 已注册的实例配置(用于模块销毁时注销) */
17
- private registeredInstances;
8
+ private readonly registeredInstances;
9
+ private readonly subscriptions;
10
+ private readonly roundRobinIndexes;
18
11
  constructor(client: NacosNamingClient | null, options: NacosModuleOptions | null);
19
- /** 模块初始化:等待客户端就绪 + 自动注册实例 */
20
12
  onModuleInit(): Promise<void>;
21
- /** 模块销毁:注销所有已注册实例 + 关闭客户端 */
22
13
  onModuleDestroy(): Promise<void>;
23
- /**
24
- * 注册服务实例
25
- * @param inst 实例配置
26
- */
27
- register(inst: NacosInstanceOptions): Promise<void>;
28
- /**
29
- * 注销服务实例
30
- * @param inst 实例配置
31
- */
32
- deregister(inst: NacosInstanceOptions): Promise<void>;
33
- /**
34
- * 查询服务的所有实例
35
- * @param serviceName 服务名
36
- * @param groupName 分组名
37
- * @param clusters 集群名
38
- * @param subscribe 是否订阅,默认 true
39
- */
40
- getAllInstances(serviceName: string, groupName?: string, clusters?: string, subscribe?: boolean): Promise<import("nacos-naming").Hosts>;
41
- /**
42
- * 查询健康实例
43
- */
44
- selectInstances(serviceName: string, groupName?: string, clusters?: string, healthy?: boolean, subscribe?: boolean): Promise<import("nacos-naming").Hosts>;
45
- /**
46
- * 订阅服务实例变更(服务端推送)
47
- * @param info 服务信息,字符串为 serviceName,对象为 { serviceName, groupName, clusters }
48
- * @param listener 回调函数,参数为实例列表
49
- */
14
+ register(instance: NacosInstanceOptions): Promise<void>;
15
+ deregister(instance: NacosInstanceOptions): Promise<void>;
16
+ updateWeight(instance: NacosInstanceOptions, weight: number): Promise<void>;
17
+ getAllInstances(serviceName: string, groupName?: string, clusters?: string, subscribe?: boolean): Promise<NacosServiceInstance[]>;
18
+ selectInstances(serviceName: string, groupName?: string, clusters?: string, healthy?: boolean, subscribe?: boolean): Promise<NacosServiceInstance[]>;
19
+ selectInstance(serviceName: string, selection?: NacosInstanceSelectionOptions): Promise<NacosServiceInstance>;
50
20
  subscribe(info: string | {
51
21
  serviceName: string;
52
22
  groupName?: string;
53
23
  clusters?: string;
54
24
  }, listener: (hosts: any[]) => void): void;
55
- /**
56
- * 取消订阅
57
- */
58
25
  unSubscribe(info: string | {
59
26
  serviceName: string;
60
27
  groupName?: string;
61
28
  clusters?: string;
62
29
  }, listener?: (hosts: any[]) => void): void;
63
- /** 获取 Nacos 服务端状态:'UP' 'DOWN' */
64
- getServerStatus(): string;
65
- /** 获取原始客户端(需要使用高级 API 时) */
30
+ getServerStatus(): Promise<'UP' | 'DOWN'>;
31
+ getRegisteredInstances(): NacosInstanceOptions[];
66
32
  getRawClient(): NacosNamingClient | null;
33
+ private weighted;
34
+ private matchesMetadata;
35
+ private sameInstance;
36
+ private subscriptionKey;
67
37
  }
68
38
  //# sourceMappingURL=nacos-naming.service.d.ts.map