@objectstack/core 3.0.2 → 3.0.4

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
@@ -1591,6 +1591,69 @@ declare function getMemoryUsage(): {
1591
1591
  heapTotal: number;
1592
1592
  };
1593
1593
 
1594
+ /**
1595
+ * In-memory Map-backed cache fallback.
1596
+ *
1597
+ * Implements the ICacheService contract with basic get/set/delete/has/clear
1598
+ * and TTL expiry. Used by ObjectKernel as an automatic fallback when no
1599
+ * real cache plugin (e.g. Redis) is registered.
1600
+ */
1601
+ declare function createMemoryCache(): {
1602
+ _fallback: boolean;
1603
+ _serviceName: string;
1604
+ get<T = unknown>(key: string): Promise<T | undefined>;
1605
+ set<T = unknown>(key: string, value: T, ttl?: number): Promise<void>;
1606
+ delete(key: string): Promise<boolean>;
1607
+ has(key: string): Promise<boolean>;
1608
+ clear(): Promise<void>;
1609
+ stats(): Promise<{
1610
+ hits: number;
1611
+ misses: number;
1612
+ keyCount: number;
1613
+ }>;
1614
+ };
1615
+
1616
+ /**
1617
+ * In-memory publish/subscribe queue fallback.
1618
+ *
1619
+ * Implements the IQueueService contract with synchronous in-process delivery.
1620
+ * Used by ObjectKernel as an automatic fallback when no real queue plugin
1621
+ * (e.g. BullMQ / RabbitMQ) is registered.
1622
+ */
1623
+ declare function createMemoryQueue(): {
1624
+ _fallback: boolean;
1625
+ _serviceName: string;
1626
+ publish<T = unknown>(queue: string, data: T): Promise<string>;
1627
+ subscribe(queue: string, handler: (msg: any) => Promise<void>): Promise<void>;
1628
+ unsubscribe(queue: string): Promise<void>;
1629
+ getQueueSize(): Promise<number>;
1630
+ purge(queue: string): Promise<void>;
1631
+ };
1632
+
1633
+ /**
1634
+ * In-memory job scheduler fallback.
1635
+ *
1636
+ * Implements the IJobService contract with basic schedule/cancel/trigger
1637
+ * operations. Used by ObjectKernel as an automatic fallback when no real
1638
+ * job plugin (e.g. Agenda / BullMQ) is registered.
1639
+ */
1640
+ declare function createMemoryJob(): {
1641
+ _fallback: boolean;
1642
+ _serviceName: string;
1643
+ schedule(name: string, schedule: any, handler: any): Promise<void>;
1644
+ cancel(name: string): Promise<void>;
1645
+ trigger(name: string, data?: unknown): Promise<void>;
1646
+ getExecutions(): Promise<any[]>;
1647
+ listJobs(): Promise<string[]>;
1648
+ };
1649
+
1650
+ /**
1651
+ * Map of core-criticality service names to their in-memory fallback factories.
1652
+ * Used by ObjectKernel.validateSystemRequirements() to auto-inject fallbacks
1653
+ * when no real plugin provides the service.
1654
+ */
1655
+ declare const CORE_FALLBACK_FACTORIES: Record<string, () => Record<string, any>>;
1656
+
1594
1657
  /**
1595
1658
  * Plugin Health Monitor
1596
1659
  *
@@ -1786,4 +1849,4 @@ declare class DependencyResolver {
1786
1849
  isAcyclic(dependencies: Map<string, string[]>): boolean;
1787
1850
  }
1788
1851
 
1789
- export { ApiRegistry, type ApiRegistryPluginConfig, DependencyResolver, HotReloadManager, type KernelState, LiteKernel, ObjectKernel, ObjectKernelBase, type ObjectKernelConfig, ObjectLogger, type PermissionCheckResult$1 as PermissionCheckResult, type PermissionGrant, type Plugin, PluginConfigValidator, type PluginContext, PluginHealthMonitor, type PluginHealthStatus, type PluginLoadResult, PluginLoader, type PluginMetadata, type PermissionCheckResult as PluginPermissionCheckResult, PluginPermissionEnforcer, PluginPermissionManager, type PluginPermissions, PluginSandboxRuntime, PluginSecurityScanner, type PluginSignatureConfig, PluginSignatureVerifier, type PluginStartupResult, index as QA, type ResourceUsage, type SandboxContext, type ScanTarget, SecurePluginContext, type SecurityIssue, SemanticVersionManager, type ServiceFactory, ServiceLifecycle, type ServiceRegistration, type SignatureVerificationResult, type VersionCompatibility, createApiRegistryPlugin, createLogger, createPluginConfigValidator, createPluginPermissionEnforcer, getEnv, getMemoryUsage, isNode, safeExit };
1852
+ export { ApiRegistry, type ApiRegistryPluginConfig, CORE_FALLBACK_FACTORIES, DependencyResolver, HotReloadManager, type KernelState, LiteKernel, ObjectKernel, ObjectKernelBase, type ObjectKernelConfig, ObjectLogger, type PermissionCheckResult$1 as PermissionCheckResult, type PermissionGrant, type Plugin, PluginConfigValidator, type PluginContext, PluginHealthMonitor, type PluginHealthStatus, type PluginLoadResult, PluginLoader, type PluginMetadata, type PermissionCheckResult as PluginPermissionCheckResult, PluginPermissionEnforcer, PluginPermissionManager, type PluginPermissions, PluginSandboxRuntime, PluginSecurityScanner, type PluginSignatureConfig, PluginSignatureVerifier, type PluginStartupResult, index as QA, type ResourceUsage, type SandboxContext, type ScanTarget, SecurePluginContext, type SecurityIssue, SemanticVersionManager, type ServiceFactory, ServiceLifecycle, type ServiceRegistration, type SignatureVerificationResult, type VersionCompatibility, createApiRegistryPlugin, createLogger, createMemoryCache, createMemoryJob, createMemoryQueue, createPluginConfigValidator, createPluginPermissionEnforcer, getEnv, getMemoryUsage, isNode, safeExit };
package/dist/index.d.ts CHANGED
@@ -1591,6 +1591,69 @@ declare function getMemoryUsage(): {
1591
1591
  heapTotal: number;
1592
1592
  };
1593
1593
 
1594
+ /**
1595
+ * In-memory Map-backed cache fallback.
1596
+ *
1597
+ * Implements the ICacheService contract with basic get/set/delete/has/clear
1598
+ * and TTL expiry. Used by ObjectKernel as an automatic fallback when no
1599
+ * real cache plugin (e.g. Redis) is registered.
1600
+ */
1601
+ declare function createMemoryCache(): {
1602
+ _fallback: boolean;
1603
+ _serviceName: string;
1604
+ get<T = unknown>(key: string): Promise<T | undefined>;
1605
+ set<T = unknown>(key: string, value: T, ttl?: number): Promise<void>;
1606
+ delete(key: string): Promise<boolean>;
1607
+ has(key: string): Promise<boolean>;
1608
+ clear(): Promise<void>;
1609
+ stats(): Promise<{
1610
+ hits: number;
1611
+ misses: number;
1612
+ keyCount: number;
1613
+ }>;
1614
+ };
1615
+
1616
+ /**
1617
+ * In-memory publish/subscribe queue fallback.
1618
+ *
1619
+ * Implements the IQueueService contract with synchronous in-process delivery.
1620
+ * Used by ObjectKernel as an automatic fallback when no real queue plugin
1621
+ * (e.g. BullMQ / RabbitMQ) is registered.
1622
+ */
1623
+ declare function createMemoryQueue(): {
1624
+ _fallback: boolean;
1625
+ _serviceName: string;
1626
+ publish<T = unknown>(queue: string, data: T): Promise<string>;
1627
+ subscribe(queue: string, handler: (msg: any) => Promise<void>): Promise<void>;
1628
+ unsubscribe(queue: string): Promise<void>;
1629
+ getQueueSize(): Promise<number>;
1630
+ purge(queue: string): Promise<void>;
1631
+ };
1632
+
1633
+ /**
1634
+ * In-memory job scheduler fallback.
1635
+ *
1636
+ * Implements the IJobService contract with basic schedule/cancel/trigger
1637
+ * operations. Used by ObjectKernel as an automatic fallback when no real
1638
+ * job plugin (e.g. Agenda / BullMQ) is registered.
1639
+ */
1640
+ declare function createMemoryJob(): {
1641
+ _fallback: boolean;
1642
+ _serviceName: string;
1643
+ schedule(name: string, schedule: any, handler: any): Promise<void>;
1644
+ cancel(name: string): Promise<void>;
1645
+ trigger(name: string, data?: unknown): Promise<void>;
1646
+ getExecutions(): Promise<any[]>;
1647
+ listJobs(): Promise<string[]>;
1648
+ };
1649
+
1650
+ /**
1651
+ * Map of core-criticality service names to their in-memory fallback factories.
1652
+ * Used by ObjectKernel.validateSystemRequirements() to auto-inject fallbacks
1653
+ * when no real plugin provides the service.
1654
+ */
1655
+ declare const CORE_FALLBACK_FACTORIES: Record<string, () => Record<string, any>>;
1656
+
1594
1657
  /**
1595
1658
  * Plugin Health Monitor
1596
1659
  *
@@ -1786,4 +1849,4 @@ declare class DependencyResolver {
1786
1849
  isAcyclic(dependencies: Map<string, string[]>): boolean;
1787
1850
  }
1788
1851
 
1789
- export { ApiRegistry, type ApiRegistryPluginConfig, DependencyResolver, HotReloadManager, type KernelState, LiteKernel, ObjectKernel, ObjectKernelBase, type ObjectKernelConfig, ObjectLogger, type PermissionCheckResult$1 as PermissionCheckResult, type PermissionGrant, type Plugin, PluginConfigValidator, type PluginContext, PluginHealthMonitor, type PluginHealthStatus, type PluginLoadResult, PluginLoader, type PluginMetadata, type PermissionCheckResult as PluginPermissionCheckResult, PluginPermissionEnforcer, PluginPermissionManager, type PluginPermissions, PluginSandboxRuntime, PluginSecurityScanner, type PluginSignatureConfig, PluginSignatureVerifier, type PluginStartupResult, index as QA, type ResourceUsage, type SandboxContext, type ScanTarget, SecurePluginContext, type SecurityIssue, SemanticVersionManager, type ServiceFactory, ServiceLifecycle, type ServiceRegistration, type SignatureVerificationResult, type VersionCompatibility, createApiRegistryPlugin, createLogger, createPluginConfigValidator, createPluginPermissionEnforcer, getEnv, getMemoryUsage, isNode, safeExit };
1852
+ export { ApiRegistry, type ApiRegistryPluginConfig, CORE_FALLBACK_FACTORIES, DependencyResolver, HotReloadManager, type KernelState, LiteKernel, ObjectKernel, ObjectKernelBase, type ObjectKernelConfig, ObjectLogger, type PermissionCheckResult$1 as PermissionCheckResult, type PermissionGrant, type Plugin, PluginConfigValidator, type PluginContext, PluginHealthMonitor, type PluginHealthStatus, type PluginLoadResult, PluginLoader, type PluginMetadata, type PermissionCheckResult as PluginPermissionCheckResult, PluginPermissionEnforcer, PluginPermissionManager, type PluginPermissions, PluginSandboxRuntime, PluginSecurityScanner, type PluginSignatureConfig, PluginSignatureVerifier, type PluginStartupResult, index as QA, type ResourceUsage, type SandboxContext, type ScanTarget, SecurePluginContext, type SecurityIssue, SemanticVersionManager, type ServiceFactory, ServiceLifecycle, type ServiceRegistration, type SignatureVerificationResult, type VersionCompatibility, createApiRegistryPlugin, createLogger, createMemoryCache, createMemoryJob, createMemoryQueue, createPluginConfigValidator, createPluginPermissionEnforcer, getEnv, getMemoryUsage, isNode, safeExit };
package/dist/index.js CHANGED
@@ -941,6 +941,102 @@ var PluginLoader = class {
941
941
  }
942
942
  };
943
943
 
944
+ // src/fallbacks/memory-cache.ts
945
+ function createMemoryCache() {
946
+ const store = /* @__PURE__ */ new Map();
947
+ let hits = 0;
948
+ let misses = 0;
949
+ return {
950
+ _fallback: true,
951
+ _serviceName: "cache",
952
+ async get(key) {
953
+ const entry = store.get(key);
954
+ if (!entry || entry.expires && Date.now() > entry.expires) {
955
+ store.delete(key);
956
+ misses++;
957
+ return void 0;
958
+ }
959
+ hits++;
960
+ return entry.value;
961
+ },
962
+ async set(key, value, ttl) {
963
+ store.set(key, { value, expires: ttl ? Date.now() + ttl * 1e3 : void 0 });
964
+ },
965
+ async delete(key) {
966
+ return store.delete(key);
967
+ },
968
+ async has(key) {
969
+ return store.has(key);
970
+ },
971
+ async clear() {
972
+ store.clear();
973
+ },
974
+ async stats() {
975
+ return { hits, misses, keyCount: store.size };
976
+ }
977
+ };
978
+ }
979
+
980
+ // src/fallbacks/memory-queue.ts
981
+ function createMemoryQueue() {
982
+ const handlers = /* @__PURE__ */ new Map();
983
+ let msgId = 0;
984
+ return {
985
+ _fallback: true,
986
+ _serviceName: "queue",
987
+ async publish(queue, data) {
988
+ const id = `fallback-msg-${++msgId}`;
989
+ const fns = handlers.get(queue) ?? [];
990
+ for (const fn of fns) fn({ id, data, attempts: 1, timestamp: Date.now() });
991
+ return id;
992
+ },
993
+ async subscribe(queue, handler) {
994
+ handlers.set(queue, [...handlers.get(queue) ?? [], handler]);
995
+ },
996
+ async unsubscribe(queue) {
997
+ handlers.delete(queue);
998
+ },
999
+ async getQueueSize() {
1000
+ return 0;
1001
+ },
1002
+ async purge(queue) {
1003
+ handlers.delete(queue);
1004
+ }
1005
+ };
1006
+ }
1007
+
1008
+ // src/fallbacks/memory-job.ts
1009
+ function createMemoryJob() {
1010
+ const jobs = /* @__PURE__ */ new Map();
1011
+ return {
1012
+ _fallback: true,
1013
+ _serviceName: "job",
1014
+ async schedule(name, schedule, handler) {
1015
+ jobs.set(name, { schedule, handler });
1016
+ },
1017
+ async cancel(name) {
1018
+ jobs.delete(name);
1019
+ },
1020
+ async trigger(name, data) {
1021
+ const job = jobs.get(name);
1022
+ if (job?.handler) await job.handler({ jobId: name, data });
1023
+ },
1024
+ async getExecutions() {
1025
+ return [];
1026
+ },
1027
+ async listJobs() {
1028
+ return [...jobs.keys()];
1029
+ }
1030
+ };
1031
+ }
1032
+
1033
+ // src/fallbacks/index.ts
1034
+ var CORE_FALLBACK_FACTORIES = {
1035
+ cache: createMemoryCache,
1036
+ queue: createMemoryQueue,
1037
+ job: createMemoryJob
1038
+ };
1039
+
944
1040
  // src/kernel.ts
945
1041
  var ObjectKernel = class {
946
1042
  constructor(config = {}) {
@@ -1089,8 +1185,15 @@ var ObjectKernel = class {
1089
1185
  this.logger.error(`CRITICAL: Required service missing: ${serviceName}`);
1090
1186
  missingServices.push(serviceName);
1091
1187
  } else if (criticality === "core") {
1092
- this.logger.warn(`CORE: Core service missing, functionality may be degraded: ${serviceName}`);
1093
- missingCoreServices.push(serviceName);
1188
+ const factory = CORE_FALLBACK_FACTORIES[serviceName];
1189
+ if (factory) {
1190
+ const fallback = factory();
1191
+ this.registerService(serviceName, fallback);
1192
+ this.logger.warn(`Service '${serviceName}' not provided \u2014 using in-memory fallback`);
1193
+ } else {
1194
+ this.logger.warn(`CORE: Core service missing, functionality may be degraded: ${serviceName}`);
1195
+ missingCoreServices.push(serviceName);
1196
+ }
1094
1197
  } else {
1095
1198
  this.logger.info(`Info: Optional service not present: ${serviceName}`);
1096
1199
  }
@@ -4337,6 +4440,7 @@ var DependencyResolver = class {
4337
4440
  };
4338
4441
  export {
4339
4442
  ApiRegistry,
4443
+ CORE_FALLBACK_FACTORIES,
4340
4444
  DependencyResolver,
4341
4445
  HotReloadManager,
4342
4446
  LiteKernel,
@@ -4357,6 +4461,9 @@ export {
4357
4461
  ServiceLifecycle,
4358
4462
  createApiRegistryPlugin,
4359
4463
  createLogger,
4464
+ createMemoryCache,
4465
+ createMemoryJob,
4466
+ createMemoryQueue,
4360
4467
  createPluginConfigValidator,
4361
4468
  createPluginPermissionEnforcer,
4362
4469
  getEnv,