@objectstack/rest 9.9.1 → 9.10.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.
package/dist/index.d.cts CHANGED
@@ -237,7 +237,8 @@ declare class RestServer {
237
237
  private sharingRulesServiceProvider?;
238
238
  private i18nServiceProvider?;
239
239
  private analyticsServiceProvider?;
240
- constructor(server: IHttpServer, protocol: ObjectStackProtocol, config?: RestServerConfig, kernelManager?: RestKernelManager, envRegistry?: RestEnvRegistry, defaultEnvironmentIdProvider?: () => string | undefined, authServiceProvider?: (environmentId?: string) => Promise<any | undefined>, objectQLProvider?: (environmentId?: string) => Promise<any | undefined>, emailServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingServiceProvider?: (environmentId?: string) => Promise<any | undefined>, reportsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, approvalsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingRulesServiceProvider?: (environmentId?: string) => Promise<any | undefined>, i18nServiceProvider?: (environmentId?: string) => Promise<any | undefined>, analyticsServiceProvider?: (environmentId?: string) => Promise<any | undefined>);
240
+ private settingsServiceProvider?;
241
+ constructor(server: IHttpServer, protocol: ObjectStackProtocol, config?: RestServerConfig, kernelManager?: RestKernelManager, envRegistry?: RestEnvRegistry, defaultEnvironmentIdProvider?: () => string | undefined, authServiceProvider?: (environmentId?: string) => Promise<any | undefined>, objectQLProvider?: (environmentId?: string) => Promise<any | undefined>, emailServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingServiceProvider?: (environmentId?: string) => Promise<any | undefined>, reportsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, approvalsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingRulesServiceProvider?: (environmentId?: string) => Promise<any | undefined>, i18nServiceProvider?: (environmentId?: string) => Promise<any | undefined>, analyticsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, settingsServiceProvider?: (environmentId?: string) => Promise<any | undefined>);
241
242
  /**
242
243
  * Resolve the protocol for a given request. When `environmentId` is present
243
244
  * and a KernelManager is wired, fetch the per-project kernel's
package/dist/index.d.ts CHANGED
@@ -237,7 +237,8 @@ declare class RestServer {
237
237
  private sharingRulesServiceProvider?;
238
238
  private i18nServiceProvider?;
239
239
  private analyticsServiceProvider?;
240
- constructor(server: IHttpServer, protocol: ObjectStackProtocol, config?: RestServerConfig, kernelManager?: RestKernelManager, envRegistry?: RestEnvRegistry, defaultEnvironmentIdProvider?: () => string | undefined, authServiceProvider?: (environmentId?: string) => Promise<any | undefined>, objectQLProvider?: (environmentId?: string) => Promise<any | undefined>, emailServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingServiceProvider?: (environmentId?: string) => Promise<any | undefined>, reportsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, approvalsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingRulesServiceProvider?: (environmentId?: string) => Promise<any | undefined>, i18nServiceProvider?: (environmentId?: string) => Promise<any | undefined>, analyticsServiceProvider?: (environmentId?: string) => Promise<any | undefined>);
240
+ private settingsServiceProvider?;
241
+ constructor(server: IHttpServer, protocol: ObjectStackProtocol, config?: RestServerConfig, kernelManager?: RestKernelManager, envRegistry?: RestEnvRegistry, defaultEnvironmentIdProvider?: () => string | undefined, authServiceProvider?: (environmentId?: string) => Promise<any | undefined>, objectQLProvider?: (environmentId?: string) => Promise<any | undefined>, emailServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingServiceProvider?: (environmentId?: string) => Promise<any | undefined>, reportsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, approvalsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, sharingRulesServiceProvider?: (environmentId?: string) => Promise<any | undefined>, i18nServiceProvider?: (environmentId?: string) => Promise<any | undefined>, analyticsServiceProvider?: (environmentId?: string) => Promise<any | undefined>, settingsServiceProvider?: (environmentId?: string) => Promise<any | undefined>);
241
242
  /**
242
243
  * Resolve the protocol for a given request. When `environmentId` is present
243
244
  * and a KernelManager is wired, fetch the per-project kernel's
package/dist/index.js CHANGED
@@ -449,7 +449,7 @@ function rowsToCsv(fields, rows, includeHeader) {
449
449
  return lines.join("\r\n") + (lines.length > 0 ? "\r\n" : "");
450
450
  }
451
451
  var RestServer = class {
452
- constructor(server, protocol, config = {}, kernelManager, envRegistry, defaultEnvironmentIdProvider, authServiceProvider, objectQLProvider, emailServiceProvider, sharingServiceProvider, reportsServiceProvider, approvalsServiceProvider, sharingRulesServiceProvider, i18nServiceProvider, analyticsServiceProvider) {
452
+ constructor(server, protocol, config = {}, kernelManager, envRegistry, defaultEnvironmentIdProvider, authServiceProvider, objectQLProvider, emailServiceProvider, sharingServiceProvider, reportsServiceProvider, approvalsServiceProvider, sharingRulesServiceProvider, i18nServiceProvider, analyticsServiceProvider, settingsServiceProvider) {
453
453
  /**
454
454
  * Short-TTL cache for `hostname → environmentId` (P1-4). `resolveByHostname`
455
455
  * is a control-plane lookup (typically a DB query) that otherwise runs on
@@ -480,6 +480,7 @@ var RestServer = class {
480
480
  this.sharingRulesServiceProvider = sharingRulesServiceProvider;
481
481
  this.i18nServiceProvider = i18nServiceProvider;
482
482
  this.analyticsServiceProvider = analyticsServiceProvider;
483
+ this.settingsServiceProvider = settingsServiceProvider;
483
484
  }
484
485
  /**
485
486
  * Resolve the protocol for a given request. When `environmentId` is present
@@ -869,6 +870,23 @@ var RestServer = class {
869
870
  } catch {
870
871
  }
871
872
  }
873
+ let timezone;
874
+ let locale;
875
+ try {
876
+ const settings = this.settingsServiceProvider ? await this.settingsServiceProvider(environmentId).catch(() => void 0) : void 0;
877
+ if (settings && typeof settings.get === "function") {
878
+ const sctx = { tenantId, userId };
879
+ const [tzRes, localeRes] = await Promise.all([
880
+ settings.get("localization", "timezone", sctx).catch(() => void 0),
881
+ settings.get("localization", "locale", sctx).catch(() => void 0)
882
+ ]);
883
+ const tzVal = tzRes?.value;
884
+ const localeVal = localeRes?.value;
885
+ if (typeof tzVal === "string" && tzVal.trim()) timezone = tzVal.trim();
886
+ if (typeof localeVal === "string" && localeVal.trim()) locale = localeVal.trim();
887
+ }
888
+ } catch {
889
+ }
872
890
  return {
873
891
  userId,
874
892
  tenantId,
@@ -876,7 +894,9 @@ var RestServer = class {
876
894
  permissions,
877
895
  systemPermissions,
878
896
  isSystem: false,
879
- org_user_ids
897
+ org_user_ids,
898
+ ...timezone ? { timezone } : {},
899
+ ...locale ? { locale } : {}
880
900
  };
881
901
  } catch {
882
902
  return void 0;
@@ -4409,6 +4429,13 @@ function createRestApiPlugin(config = {}) {
4409
4429
  return void 0;
4410
4430
  }
4411
4431
  };
4432
+ const settingsServiceProvider = async (_environmentId) => {
4433
+ try {
4434
+ return ctx.getService("settings");
4435
+ } catch {
4436
+ return void 0;
4437
+ }
4438
+ };
4412
4439
  if (!server) {
4413
4440
  ctx.logger.warn(`RestApiPlugin: HTTP Server service '${serverService}' not found. REST routes skipped.`);
4414
4441
  return;
@@ -4419,7 +4446,7 @@ function createRestApiPlugin(config = {}) {
4419
4446
  }
4420
4447
  ctx.logger.info("Hydrating REST API from Protocol...");
4421
4448
  try {
4422
- const restServer = new RestServer(server, protocol, config.api, kernelManager, envRegistry, defaultEnvironmentIdProvider, authServiceProvider, objectQLProvider, emailServiceProvider, sharingServiceProvider, reportsServiceProvider, approvalsServiceProvider, sharingRulesServiceProvider, i18nServiceProvider, analyticsServiceProvider);
4449
+ const restServer = new RestServer(server, protocol, config.api, kernelManager, envRegistry, defaultEnvironmentIdProvider, authServiceProvider, objectQLProvider, emailServiceProvider, sharingServiceProvider, reportsServiceProvider, approvalsServiceProvider, sharingRulesServiceProvider, i18nServiceProvider, analyticsServiceProvider, settingsServiceProvider);
4423
4450
  restServer.registerRoutes();
4424
4451
  ctx.logger.info("REST API successfully registered");
4425
4452
  } catch (err) {