@plyaz/core 1.8.1 → 1.8.3

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.
@@ -121,7 +121,12 @@ export declare abstract class BaseFrontendDomainService<TConfig extends CoreBase
121
121
  /** Primary store - the main store this service can mutate */
122
122
  private _primaryStore;
123
123
  /**
124
- * Primary store key - override in subclass to set default
124
+ * Primary store key - resolved from (in order of precedence):
125
+ * 1. serviceConfig.store (explicit config)
126
+ * 2. Static defaultStoreKey on class
127
+ * 3. undefined (no store integration)
128
+ *
129
+ * Override in subclass or set via config.
125
130
  * @example protected primaryStoreKey = STORE_KEYS.EXAMPLE;
126
131
  */
127
132
  protected primaryStoreKey?: string;
@@ -142,6 +147,55 @@ export declare abstract class BaseFrontendDomainService<TConfig extends CoreBase
142
147
  /** Maximum rollback stack size */
143
148
  private readonly _maxRollbackStackSize;
144
149
  constructor(config: CoreBaseFrontendServiceConstructorConfig<TConfig, TStore, TData, TMapper, TValidator>);
150
+ /**
151
+ * Auto-resolve apiClientConfig from serviceConfig.apiBasePath if not explicitly provided.
152
+ * This reduces boilerplate in child services - they only need to set apiBasePath in config.
153
+ *
154
+ * Priority:
155
+ * 1. Explicit apiClientConfig.baseURL (full control)
156
+ * 2. serviceConfig.apiBasePath (auto-constructed, merged with injected options)
157
+ * 3. undefined (no API client)
158
+ *
159
+ * When auto-constructing, merges injected API options (headers, timeout, etc.)
160
+ * with the service's apiBasePath as baseURL.
161
+ */
162
+ protected static resolveApiClientConfig<T extends {
163
+ serviceConfig: {
164
+ apiBasePath?: string;
165
+ };
166
+ apiClientConfig?: {
167
+ baseURL?: string;
168
+ };
169
+ injected?: {
170
+ api?: unknown;
171
+ };
172
+ }>(config: T): T;
173
+ /**
174
+ * Initialize service and wait for API client to be ready.
175
+ * Call this in child service's static create() method after constructing the instance.
176
+ *
177
+ * @param service - The service instance to initialize
178
+ * @returns The initialized service (same instance, for chaining)
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * static async create(config, options): Promise<MyService> {
183
+ * const service = new MyService(config, options);
184
+ * return this.initializeService(service);
185
+ * }
186
+ * ```
187
+ */
188
+ protected static initializeService<T extends {
189
+ ensureApiClientInitialized(): Promise<void>;
190
+ }>(service: T): Promise<T>;
191
+ /**
192
+ * Ensure service is ready for operations.
193
+ * Checks enabled/available status AND waits for API client initialization.
194
+ * Call this at the start of all CRUD methods.
195
+ *
196
+ * @throws CorePackageError if service is not enabled or available
197
+ */
198
+ protected ensureReady(): Promise<void>;
145
199
  /**
146
200
  * Get the number of connected stores (primary + read stores).
147
201
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BaseFrontendDomainService.d.ts","sourceRoot":"","sources":["../../../src/domain/base/BaseFrontendDomainService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseFrontendDomainService.d.ts","sourceRoot":"","sources":["../../../src/domain/base/BaseFrontendDomainService.ts"],"names":[],"mappings":"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"}
@@ -72,16 +72,18 @@ export declare class FrontendExampleDomainService extends BaseFrontendDomainServ
72
72
  * Required by BaseFrontendDomainService
73
73
  */
74
74
  protected eventPrefix: string;
75
- /**
76
- * Primary store key - the store this service can mutate
77
- */
78
- protected primaryStoreKey: "example";
79
75
  /**
80
76
  * Read-only store keys - inherits error and featureFlags from base
81
77
  * No need to redeclare them - they're always included by default
82
78
  */
83
79
  private pollingTimer;
84
80
  static readonly serviceKey: "example-frontend";
81
+ /**
82
+ * Primary store key for this service.
83
+ * Used by ServiceRegistry to auto-inject the store if not specified in config.
84
+ * Also used by base class constructor to set instance primaryStoreKey.
85
+ */
86
+ static readonly primaryStoreKey: "example";
85
87
  /**
86
88
  * Factory method for ServiceRegistry auto-initialization.
87
89
  * Creates and initializes the service instance.
@@ -1 +1 @@
1
- {"version":3,"file":"FrontendExampleDomainService.d.ts","sourceRoot":"","sources":["../../../src/domain/example/FrontendExampleDomainService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAc7D,YAAY,EACV,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,IAAI,6BAA6B,EAC7D,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAMnE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,4BAA6B,SAAQ,yBAAyB,CACzE,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,YAAY,CAAC,OAAO,kBAAkB,CAAC,EACvC,yBAAyB,EACzB,IAAI,CACL;IAKC;;;OAGG;IACH,SAAS,CAAC,WAAW,SAAa;IAElC;;OAEG;IACH,SAAS,CAAC,eAAe,YAAsB;IAE/C;;;OAGG;IAOH,OAAO,CAAC,YAAY,CAA+C;IAMnE,MAAM,CAAC,QAAQ,CAAC,UAAU,qBAAiC;IAE3D;;;OAGG;WACU,MAAM,CACjB,MAAM,EAAE,6BAA6B,EACrC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,4BAA4B,CAAC;gBAoB5B,MAAM,GAAE,6BAAkC,EAAE,OAAO,CAAC,EAAE,wBAAwB;IA6E1F,WAAW,IAAI,OAAO;IAItB,OAAO,IAAI,IAAI;IASf;;;OAGG;cACsB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BhF;;;;;;;;;;;;OAYG;IACH,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAQjF;;;OAGG;IACH,YAAY,IAAI,IAAI;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAYnB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAItE;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAInD;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIlD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAkBtD"}
1
+ {"version":3,"file":"FrontendExampleDomainService.d.ts","sourceRoot":"","sources":["../../../src/domain/example/FrontendExampleDomainService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAc7D,YAAY,EACV,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,IAAI,6BAA6B,EAC7D,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAMnE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,4BAA6B,SAAQ,yBAAyB,CACzE,6BAA6B,EAC7B,yBAAyB,EACzB,wBAAwB,EACxB,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,YAAY,CAAC,OAAO,kBAAkB,CAAC,EACvC,yBAAyB,EACzB,IAAI,CACL;IAKC;;;OAGG;IACH,SAAS,CAAC,WAAW,SAAa;IAElC;;;OAGG;IAOH,OAAO,CAAC,YAAY,CAA+C;IAMnE,MAAM,CAAC,QAAQ,CAAC,UAAU,qBAAiC;IAE3D;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,eAAe,YAAsB;IAErD;;;OAGG;WACU,MAAM,CACjB,MAAM,EAAE,6BAA6B,EACrC,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,4BAA4B,CAAC;gBAmB5B,MAAM,GAAE,6BAAkC,EAAE,OAAO,CAAC,EAAE,wBAAwB;IA2E1F,WAAW,IAAI,OAAO;IAItB,OAAO,IAAI,IAAI;IASf;;;OAGG;cACsB,aAAa,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BhF;;;;;;;;;;;;OAYG;IACH,EAAE,CAAC,KAAK,EAAE,wBAAwB,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAQjF;;;OAGG;IACH,YAAY,IAAI,IAAI;IAapB;;OAEG;IACH,WAAW,IAAI,IAAI;IAYnB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAItE;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAInD;;;OAGG;IACG,gBAAgB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIlD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;CAkBtD"}
@@ -2441,10 +2441,16 @@ var init_ServiceRegistry = __esm({
2441
2441
  return initPromise;
2442
2442
  }
2443
2443
  /** Build stores for service injection */
2444
- static buildStoresForService(config) {
2444
+ // eslint-disable-next-line complexity
2445
+ static buildStoresForService(config, entry) {
2445
2446
  const allKeys = /* @__PURE__ */ new Set();
2446
2447
  if (config.store) {
2447
2448
  allKeys.add(config.store);
2449
+ } else if ("primaryStoreKey" in entry.service && typeof entry.service.primaryStoreKey === "string") {
2450
+ allKeys.add(entry.service.primaryStoreKey);
2451
+ _ServiceRegistry.logger.debug(
2452
+ `Auto-resolved store key '${entry.service.primaryStoreKey}' from service class`
2453
+ );
2448
2454
  }
2449
2455
  if (config.readStores) {
2450
2456
  config.readStores.forEach((key) => allKeys.add(key));
@@ -2482,7 +2488,7 @@ var init_ServiceRegistry = __esm({
2482
2488
  const observability = _ServiceRegistry.buildObservabilityConfig(config, entry);
2483
2489
  const storage = await _ServiceRegistry.buildStorageConfig(config, entry);
2484
2490
  const notifications = await _ServiceRegistry.buildNotificationsConfig(config, entry);
2485
- const stores = _ServiceRegistry.buildStoresForService(config);
2491
+ const stores = _ServiceRegistry.buildStoresForService(config, entry);
2486
2492
  let observabilityInstance = observability?.instance;
2487
2493
  if (observability?.dedicated && observability.config) {
2488
2494
  observabilityInstance = await _ServiceRegistry.createDedicatedObservability(
@@ -4033,6 +4039,13 @@ var init_CoreInitializer = __esm({
4033
4039
  /** Create fetch flags function */
4034
4040
  static createFetchFlagsFn(config, verbose) {
4035
4041
  return async () => {
4042
+ if (config?.provider !== "api") {
4043
+ _Core.log(
4044
+ `Feature flags using ${config?.provider ?? "default"} provider (no API fetch)`,
4045
+ verbose
4046
+ );
4047
+ return config?.defaults ?? {};
4048
+ }
4036
4049
  try {
4037
4050
  const client = exports.ApiClientService.getClient();
4038
4051
  const endpoint = config?.apiEndpoint ?? "/feature-flags";
@@ -4052,6 +4065,7 @@ var init_CoreInitializer = __esm({
4052
4065
  /**
4053
4066
  * Initialize feature flags slice within root store
4054
4067
  */
4068
+ // eslint-disable-next-line complexity
4055
4069
  static async initializeFeatureFlags(config, verbose) {
4056
4070
  if (config?.enabled === false) {
4057
4071
  _Core.log("Feature flags disabled by configuration", verbose);
@@ -4064,11 +4078,16 @@ var init_CoreInitializer = __esm({
4064
4078
  );
4065
4079
  }
4066
4080
  _Core._flagConfig = config ?? {};
4067
- _Core.log("Initializing feature flags from root store...", verbose);
4081
+ const isApiProvider = config?.provider === "api";
4082
+ _Core.log(
4083
+ `Initializing feature flags from root store (provider: ${config?.provider ?? "default"})...`,
4084
+ verbose
4085
+ );
4068
4086
  const state = _Core._rootStore.getState();
4069
4087
  await state.featureFlags.initialize({
4070
4088
  defaults: _Core._flagConfig.defaults,
4071
- polling: _Core._flagConfig.polling,
4089
+ // Only enable polling for API provider
4090
+ polling: isApiProvider ? _Core._flagConfig.polling : void 0,
4072
4091
  fetchFn: _Core.createFetchFlagsFn(_Core._flagConfig, verbose),
4073
4092
  onFlagChange: _Core._flagConfig.onFlagChange,
4074
4093
  onError: _Core._flagConfig.onError
@@ -4489,13 +4508,14 @@ var init_BaseFrontendDomainService = __esm({
4489
4508
  init_BaseDomainService();
4490
4509
  init_CoreEventManager();
4491
4510
  init_CoreInitializer();
4492
- BaseFrontendDomainService = class extends exports.BaseDomainService {
4511
+ BaseFrontendDomainService = class _BaseFrontendDomainService extends exports.BaseDomainService {
4493
4512
  // ─────────────────────────────────────────────────────────────────────────
4494
4513
  // Constructor
4495
4514
  // ─────────────────────────────────────────────────────────────────────────
4496
4515
  // eslint-disable-next-line complexity
4497
4516
  constructor(config) {
4498
- super(config);
4517
+ const resolvedConfig = _BaseFrontendDomainService.resolveApiClientConfig(config);
4518
+ super(resolvedConfig);
4499
4519
  // ─────────────────────────────────────────────────────────────────────────
4500
4520
  // Store Properties
4501
4521
  // ─────────────────────────────────────────────────────────────────────────
@@ -4521,6 +4541,11 @@ var init_BaseFrontendDomainService = __esm({
4521
4541
  const serviceConfig = config.serviceConfig;
4522
4542
  if (serviceConfig.store !== void 0) {
4523
4543
  this.primaryStoreKey = serviceConfig.store;
4544
+ } else {
4545
+ const staticKey = this.constructor.primaryStoreKey;
4546
+ if (staticKey) {
4547
+ this.primaryStoreKey = staticKey;
4548
+ }
4524
4549
  }
4525
4550
  if (serviceConfig.readStores !== void 0) {
4526
4551
  this.readStoreKeys = Array.from(
@@ -4539,9 +4564,12 @@ var init_BaseFrontendDomainService = __esm({
4539
4564
  this._primaryStore = primaryStore;
4540
4565
  this.logDebug(`Connected primary store: '${this.primaryStoreKey}'`);
4541
4566
  } else {
4542
- this.logWarn(
4543
- `Primary store '${this.primaryStoreKey}' not found. Store mutations (setData/updateData/setLoading) will be disabled. Configure stores in PlyazProvider to enable store integration.`
4544
- );
4567
+ const isServer = typeof globalThis.window === "undefined";
4568
+ if (!isServer) {
4569
+ this.logWarn(
4570
+ `Primary store '${this.primaryStoreKey}' not found. Store mutations (setData/updateData/setLoading) will be disabled. Configure stores in PlyazProvider to enable store integration.`
4571
+ );
4572
+ }
4545
4573
  }
4546
4574
  }
4547
4575
  for (const key of this.readStoreKeys) {
@@ -4566,6 +4594,66 @@ var init_BaseFrontendDomainService = __esm({
4566
4594
  static {
4567
4595
  __name(this, "BaseFrontendDomainService");
4568
4596
  }
4597
+ /**
4598
+ * Auto-resolve apiClientConfig from serviceConfig.apiBasePath if not explicitly provided.
4599
+ * This reduces boilerplate in child services - they only need to set apiBasePath in config.
4600
+ *
4601
+ * Priority:
4602
+ * 1. Explicit apiClientConfig.baseURL (full control)
4603
+ * 2. serviceConfig.apiBasePath (auto-constructed, merged with injected options)
4604
+ * 3. undefined (no API client)
4605
+ *
4606
+ * When auto-constructing, merges injected API options (headers, timeout, etc.)
4607
+ * with the service's apiBasePath as baseURL.
4608
+ */
4609
+ static resolveApiClientConfig(config) {
4610
+ if (config.apiClientConfig?.baseURL) {
4611
+ return config;
4612
+ }
4613
+ const apiBasePath = config.serviceConfig.apiBasePath;
4614
+ if (apiBasePath) {
4615
+ const injectedOptions = config.injected?.api ? {} : config.apiClientConfig ?? {};
4616
+ return {
4617
+ ...config,
4618
+ apiClientConfig: {
4619
+ ...injectedOptions,
4620
+ baseURL: apiBasePath
4621
+ // Service's apiBasePath always takes precedence
4622
+ }
4623
+ };
4624
+ }
4625
+ return config;
4626
+ }
4627
+ /**
4628
+ * Initialize service and wait for API client to be ready.
4629
+ * Call this in child service's static create() method after constructing the instance.
4630
+ *
4631
+ * @param service - The service instance to initialize
4632
+ * @returns The initialized service (same instance, for chaining)
4633
+ *
4634
+ * @example
4635
+ * ```typescript
4636
+ * static async create(config, options): Promise<MyService> {
4637
+ * const service = new MyService(config, options);
4638
+ * return this.initializeService(service);
4639
+ * }
4640
+ * ```
4641
+ */
4642
+ static async initializeService(service) {
4643
+ await service.ensureApiClientInitialized();
4644
+ return service;
4645
+ }
4646
+ /**
4647
+ * Ensure service is ready for operations.
4648
+ * Checks enabled/available status AND waits for API client initialization.
4649
+ * Call this at the start of all CRUD methods.
4650
+ *
4651
+ * @throws CorePackageError if service is not enabled or available
4652
+ */
4653
+ async ensureReady() {
4654
+ this.assertReady();
4655
+ await this.ensureApiClientInitialized();
4656
+ }
4569
4657
  // ─────────────────────────────────────────────────────────────────────────
4570
4658
  // Store Management (Public API)
4571
4659
  // ─────────────────────────────────────────────────────────────────────────
@@ -5038,7 +5126,7 @@ var init_BaseFrontendDomainService = __esm({
5038
5126
  */
5039
5127
  // eslint-disable-next-line complexity
5040
5128
  async fetchAll(query, options) {
5041
- this.assertReady();
5129
+ await this.ensureReady();
5042
5130
  const startTime = Date.now();
5043
5131
  if (!this.config.fetchers?.fetchAll) {
5044
5132
  throw new errors.CorePackageError(
@@ -5123,7 +5211,7 @@ var init_BaseFrontendDomainService = __esm({
5123
5211
  */
5124
5212
  // eslint-disable-next-line complexity
5125
5213
  async fetchById(id, options) {
5126
- this.assertReady();
5214
+ await this.ensureReady();
5127
5215
  const startTime = Date.now();
5128
5216
  if (!this.config.fetchers?.fetchById) {
5129
5217
  throw new errors.CorePackageError(
@@ -5184,7 +5272,7 @@ var init_BaseFrontendDomainService = __esm({
5184
5272
  */
5185
5273
  // eslint-disable-next-line complexity, max-lines-per-function
5186
5274
  async create(data, options) {
5187
- this.assertReady();
5275
+ await this.ensureReady();
5188
5276
  const startTime = Date.now();
5189
5277
  if (!this.config.fetchers?.create) {
5190
5278
  throw new errors.CorePackageError(
@@ -5277,7 +5365,7 @@ var init_BaseFrontendDomainService = __esm({
5277
5365
  */
5278
5366
  // eslint-disable-next-line complexity, max-lines-per-function
5279
5367
  async update(id, data, options) {
5280
- this.assertReady();
5368
+ await this.ensureReady();
5281
5369
  const startTime = Date.now();
5282
5370
  if (!this.config.fetchers?.update) {
5283
5371
  throw new errors.CorePackageError(
@@ -5366,7 +5454,7 @@ var init_BaseFrontendDomainService = __esm({
5366
5454
  */
5367
5455
  // eslint-disable-next-line complexity
5368
5456
  async delete(id, options) {
5369
- this.assertReady();
5457
+ await this.ensureReady();
5370
5458
  const startTime = Date.now();
5371
5459
  if (!this.config.fetchers?.delete) {
5372
5460
  throw new errors.CorePackageError(
@@ -7791,14 +7879,11 @@ var init_FrontendExampleDomainService = __esm({
7791
7879
  // ─────────────────────────────────────────────────────────────────────────
7792
7880
  // Constructor
7793
7881
  // ─────────────────────────────────────────────────────────────────────────
7794
- // eslint-disable-next-line complexity
7795
7882
  constructor(config = {}, options) {
7796
7883
  const apiBasePath = config.apiBasePath ?? "/api/examples";
7797
7884
  super({
7798
7885
  serviceName: "ExampleFrontendService",
7799
7886
  supportedRuntimes: ["frontend"],
7800
- // API client config - uses injected options or creates from apiBasePath
7801
- apiClientConfig: options?.apiClient?.options ?? { baseURL: apiBasePath },
7802
7887
  serviceConfig: {
7803
7888
  enabled: true,
7804
7889
  apiBasePath,
@@ -7862,10 +7947,6 @@ var init_FrontendExampleDomainService = __esm({
7862
7947
  * Required by BaseFrontendDomainService
7863
7948
  */
7864
7949
  this.eventPrefix = "example";
7865
- /**
7866
- * Primary store key - the store this service can mutate
7867
- */
7868
- this.primaryStoreKey = store.STORE_KEYS.EXAMPLE;
7869
7950
  /**
7870
7951
  * Read-only store keys - inherits error and featureFlags from base
7871
7952
  * No need to redeclare them - they're always included by default
@@ -7888,6 +7969,14 @@ var init_FrontendExampleDomainService = __esm({
7888
7969
  // ─────────────────────────────────────────────────────────────────────────
7889
7970
  this.serviceKey = core.SERVICE_KEYS.EXAMPLE_FRONTEND;
7890
7971
  }
7972
+ static {
7973
+ /**
7974
+ * Primary store key for this service.
7975
+ * Used by ServiceRegistry to auto-inject the store if not specified in config.
7976
+ * Also used by base class constructor to set instance primaryStoreKey.
7977
+ */
7978
+ this.primaryStoreKey = store.STORE_KEYS.EXAMPLE;
7979
+ }
7891
7980
  /**
7892
7981
  * Factory method for ServiceRegistry auto-initialization.
7893
7982
  * Creates and initializes the service instance.