@objectstack/core 3.0.3 → 3.0.5
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/.turbo/turbo-build.log +10 -10
- package/CHANGELOG.md +14 -0
- package/dist/index.cjs +113 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +64 -1
- package/dist/index.d.ts +64 -1
- package/dist/index.js +109 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/fallbacks/fallbacks.test.ts +158 -0
- package/src/fallbacks/index.ts +20 -0
- package/src/fallbacks/memory-cache.ts +34 -0
- package/src/fallbacks/memory-job.ts +23 -0
- package/src/fallbacks/memory-queue.ts +28 -0
- package/src/index.ts +3 -0
- package/src/kernel.ts +11 -2
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
|
-
|
|
1093
|
-
|
|
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,
|