@almadar/server 2.1.1 → 2.1.2

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 (91) hide show
  1. package/dist/contracts.d.ts +174 -0
  2. package/dist/contracts.d.ts.map +1 -0
  3. package/dist/deepagent/__tests__/memory.test.d.ts +6 -0
  4. package/dist/deepagent/__tests__/memory.test.d.ts.map +1 -0
  5. package/dist/deepagent/__tests__/session.test.d.ts +6 -0
  6. package/dist/deepagent/__tests__/session.test.d.ts.map +1 -0
  7. package/dist/deepagent/__tests__/skill-agent.test.d.ts +6 -0
  8. package/dist/deepagent/__tests__/skill-agent.test.d.ts.map +1 -0
  9. package/dist/deepagent/memory.d.ts +16 -0
  10. package/dist/deepagent/memory.d.ts.map +1 -0
  11. package/dist/deepagent/session.d.ts +16 -0
  12. package/dist/deepagent/session.d.ts.map +1 -0
  13. package/dist/deepagent/skill-agent.d.ts +22 -0
  14. package/dist/deepagent/skill-agent.d.ts.map +1 -0
  15. package/dist/index.js +2616 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/lib/db.d.ts +36 -0
  18. package/dist/lib/db.d.ts.map +1 -0
  19. package/dist/lib/debugRouter.d.ts +21 -0
  20. package/dist/lib/debugRouter.d.ts.map +1 -0
  21. package/dist/lib/env.d.ts +16 -0
  22. package/dist/lib/env.d.ts.map +1 -0
  23. package/dist/lib/eventBus.d.ts +44 -0
  24. package/dist/lib/eventBus.d.ts.map +1 -0
  25. package/dist/lib/eventBusTransport.d.ts +143 -0
  26. package/dist/lib/eventBusTransport.d.ts.map +1 -0
  27. package/dist/lib/eventPersistence.d.ts +151 -0
  28. package/dist/lib/eventPersistence.d.ts.map +1 -0
  29. package/dist/lib/index.d.ts +6 -0
  30. package/dist/lib/index.d.ts.map +1 -0
  31. package/dist/lib/index.js +288 -0
  32. package/dist/lib/index.js.map +1 -0
  33. package/dist/lib/logger.d.ts +7 -0
  34. package/dist/lib/logger.d.ts.map +1 -0
  35. package/dist/lib/serviceDiscovery.d.ts +168 -0
  36. package/dist/lib/serviceDiscovery.d.ts.map +1 -0
  37. package/dist/lib/websocket.d.ts +41 -0
  38. package/dist/lib/websocket.d.ts.map +1 -0
  39. package/dist/middleware/__tests__/multi-user.test.d.ts +6 -0
  40. package/dist/middleware/__tests__/multi-user.test.d.ts.map +1 -0
  41. package/dist/middleware/authenticateFirebase.d.ts +4 -0
  42. package/dist/middleware/authenticateFirebase.d.ts.map +1 -0
  43. package/dist/middleware/errorHandler.d.ts +53 -0
  44. package/dist/middleware/errorHandler.d.ts.map +1 -0
  45. package/dist/middleware/index.d.ts +4 -0
  46. package/dist/middleware/index.d.ts.map +1 -0
  47. package/dist/middleware/index.js +284 -0
  48. package/dist/middleware/index.js.map +1 -0
  49. package/dist/middleware/multi-user.d.ts +34 -0
  50. package/dist/middleware/multi-user.d.ts.map +1 -0
  51. package/dist/middleware/validation.d.ts +15 -0
  52. package/dist/middleware/validation.d.ts.map +1 -0
  53. package/dist/routes/__tests__/observability.test.d.ts +6 -0
  54. package/dist/routes/__tests__/observability.test.d.ts.map +1 -0
  55. package/dist/routes/observability.d.ts +11 -0
  56. package/dist/routes/observability.d.ts.map +1 -0
  57. package/dist/services/DataService.d.ts +70 -0
  58. package/dist/services/DataService.d.ts.map +1 -0
  59. package/dist/services/MockDataService.d.ts +110 -0
  60. package/dist/services/MockDataService.d.ts.map +1 -0
  61. package/dist/services/index.d.ts +8 -0
  62. package/dist/services/index.d.ts.map +1 -0
  63. package/dist/services/index.js +735 -0
  64. package/dist/services/index.js.map +1 -0
  65. package/dist/stores/ChangeSetStore.d.ts +24 -0
  66. package/dist/stores/ChangeSetStore.d.ts.map +1 -0
  67. package/dist/stores/SchemaProtectionService.d.ts +23 -0
  68. package/dist/stores/SchemaProtectionService.d.ts.map +1 -0
  69. package/dist/stores/SchemaStore.d.ts +52 -0
  70. package/dist/stores/SchemaStore.d.ts.map +1 -0
  71. package/dist/stores/SnapshotStore.d.ts +26 -0
  72. package/dist/stores/SnapshotStore.d.ts.map +1 -0
  73. package/dist/stores/ValidationStore.d.ts +19 -0
  74. package/dist/stores/ValidationStore.d.ts.map +1 -0
  75. package/dist/stores/firestoreFormat.d.ts +21 -0
  76. package/dist/stores/firestoreFormat.d.ts.map +1 -0
  77. package/dist/stores/index.d.ts +14 -0
  78. package/dist/stores/index.d.ts.map +1 -0
  79. package/dist/stores/index.js +519 -0
  80. package/dist/stores/index.js.map +1 -0
  81. package/dist/utils/index.d.ts +9 -0
  82. package/dist/utils/index.d.ts.map +1 -0
  83. package/dist/utils/index.js +106 -0
  84. package/dist/utils/index.js.map +1 -0
  85. package/dist/utils/queryFilters.d.ts +87 -0
  86. package/dist/utils/queryFilters.d.ts.map +1 -0
  87. package/dist/websocket/__tests__/state-sync.test.d.ts +6 -0
  88. package/dist/websocket/__tests__/state-sync.test.d.ts.map +1 -0
  89. package/dist/websocket/state-sync.d.ts +39 -0
  90. package/dist/websocket/state-sync.d.ts.map +1 -0
  91. package/package.json +1 -1
@@ -0,0 +1,174 @@
1
+ /**
2
+ * Server Service Contracts
3
+ *
4
+ * Type-safe contract definitions for the three main services
5
+ * callable from .orb schemas via `["call-service", ...]`.
6
+ *
7
+ * Each contract maps action names to their params/result types,
8
+ * and the corresponding `ServiceContract<Actions>` type ensures
9
+ * the runtime `execute(action, params)` call is fully typed.
10
+ *
11
+ * @packageDocumentation
12
+ */
13
+ import type { ServiceContract, ServiceEvents } from '@almadar/core';
14
+ /** Actions available on the data service (CRUD over collections). */
15
+ export type DataServiceActions = {
16
+ list: {
17
+ params: {
18
+ collection: string;
19
+ };
20
+ result: {
21
+ items: unknown[];
22
+ };
23
+ };
24
+ getById: {
25
+ params: {
26
+ collection: string;
27
+ id: string;
28
+ };
29
+ result: {
30
+ item: unknown | null;
31
+ };
32
+ };
33
+ create: {
34
+ params: {
35
+ collection: string;
36
+ data: Record<string, unknown>;
37
+ };
38
+ result: {
39
+ item: unknown;
40
+ };
41
+ };
42
+ update: {
43
+ params: {
44
+ collection: string;
45
+ id: string;
46
+ data: Record<string, unknown>;
47
+ };
48
+ result: {
49
+ item: unknown | null;
50
+ };
51
+ };
52
+ delete: {
53
+ params: {
54
+ collection: string;
55
+ id: string;
56
+ };
57
+ result: {
58
+ deleted: boolean;
59
+ };
60
+ };
61
+ };
62
+ /** Typed contract for the data service. */
63
+ export type DataServiceContract = ServiceContract<DataServiceActions>;
64
+ /** Actions available on the event bus service. */
65
+ export type EventBusActions = {
66
+ emit: {
67
+ params: {
68
+ event: string;
69
+ payload?: unknown;
70
+ };
71
+ result: {
72
+ delivered: number;
73
+ };
74
+ };
75
+ getListenerCounts: {
76
+ params: Record<string, never>;
77
+ result: {
78
+ counts: Record<string, number>;
79
+ };
80
+ };
81
+ };
82
+ /** Typed contract for the event bus service. */
83
+ export type EventBusServiceContract = ServiceContract<EventBusActions>;
84
+ /** Shape of a discovered service instance. */
85
+ interface DiscoveredService {
86
+ name: string;
87
+ instanceId: string;
88
+ host: string;
89
+ port: number;
90
+ }
91
+ /** Actions available on the service discovery service. */
92
+ export type ServiceDiscoveryActions = {
93
+ register: {
94
+ params: {
95
+ name: string;
96
+ instanceId: string;
97
+ host: string;
98
+ port: number;
99
+ emits: string[];
100
+ listens: string[];
101
+ };
102
+ result: {
103
+ registered: boolean;
104
+ };
105
+ };
106
+ findListeners: {
107
+ params: {
108
+ event: string;
109
+ };
110
+ result: {
111
+ services: DiscoveredService[];
112
+ };
113
+ };
114
+ findEmitters: {
115
+ params: {
116
+ event: string;
117
+ };
118
+ result: {
119
+ services: DiscoveredService[];
120
+ };
121
+ };
122
+ };
123
+ /** Typed contract for the service discovery service. */
124
+ export type ServiceDiscoveryContract = ServiceContract<ServiceDiscoveryActions>;
125
+ /** Events emitted by entity CRUD operations. */
126
+ export type EntityCrudEventMap = {
127
+ [K in `${string}_CREATED`]: Record<string, unknown>;
128
+ } & {
129
+ [K in `${string}_UPDATED`]: Record<string, unknown>;
130
+ } & {
131
+ [K in `${string}_DELETED`]: Record<string, unknown>;
132
+ };
133
+ /** Events emitted/consumed by the server infrastructure. */
134
+ export type ServerEventMap = {
135
+ /** Emitted when a service instance registers with ServiceDiscovery. */
136
+ SERVICE_REGISTERED: {
137
+ name: string;
138
+ instanceId: string;
139
+ host: string;
140
+ port: number;
141
+ };
142
+ /** Emitted when a service instance deregisters or expires. */
143
+ SERVICE_DEREGISTERED: {
144
+ name: string;
145
+ instanceId: string;
146
+ reason: 'explicit' | 'expired';
147
+ };
148
+ /** Emitted when a service health check fails. */
149
+ SERVICE_HEALTH_FAILED: {
150
+ name: string;
151
+ instanceId: string;
152
+ error: string;
153
+ };
154
+ /** Emitted when the distributed event bus connects. */
155
+ TRANSPORT_CONNECTED: {
156
+ instanceId: string;
157
+ transport: string;
158
+ };
159
+ /** Emitted when the distributed event bus disconnects. */
160
+ TRANSPORT_DISCONNECTED: {
161
+ instanceId: string;
162
+ reason: string;
163
+ };
164
+ };
165
+ /** Typed event emitter for server events. */
166
+ export type ServerServiceEvents = ServiceEvents<ServerEventMap>;
167
+ /** All server service contracts keyed by service name. */
168
+ export type ServerServiceContracts = {
169
+ data: DataServiceContract;
170
+ eventBus: EventBusServiceContract;
171
+ serviceDiscovery: ServiceDiscoveryContract;
172
+ };
173
+ export {};
174
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Unit tests for MemoryManager integration
3
+ * @module @almadar/server/deepagent/memory.test
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=memory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.test.d.ts","sourceRoot":"","sources":["../../../src/deepagent/__tests__/memory.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Unit tests for SessionManager integration
3
+ * @module @almadar/server/deepagent/session.test
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=session.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.test.d.ts","sourceRoot":"","sources":["../../../src/deepagent/__tests__/session.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Unit tests for skill agent factory
3
+ * @module @almadar/server/deepagent/skill-agent.test
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=skill-agent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-agent.test.d.ts","sourceRoot":"","sources":["../../../src/deepagent/__tests__/skill-agent.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Memory Manager Singleton
3
+ *
4
+ * Provides Firestore-backed memory management for DeepAgent.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Get or create the MemoryManager singleton
10
+ */
11
+ export declare function getMemoryManager(): Promise<unknown>;
12
+ /**
13
+ * Reset the MemoryManager (useful for testing)
14
+ */
15
+ export declare function resetMemoryManager(): void;
16
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/deepagent/memory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;GAEG;AACH,wBAAsB,gBAAgB,qBAgBrC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Session Manager Singleton
3
+ *
4
+ * Provides Firestore-backed session management with full GAP features.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Get or create the SessionManager singleton
10
+ */
11
+ export declare function getSessionManager(): Promise<unknown>;
12
+ /**
13
+ * Reset the SessionManager (useful for testing)
14
+ */
15
+ export declare function resetSessionManager(): void;
16
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/deepagent/session.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;GAEG;AACH,wBAAsB,iBAAiB,qBAiBtC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Skill Agent Factory
3
+ *
4
+ * Creates DeepAgent instances with full GAP feature integration.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ import { getMemoryManager } from './memory.js';
9
+ import { getSessionManager } from './session.js';
10
+ interface ServerSkillAgentOptions {
11
+ userId: string;
12
+ appId?: string;
13
+ threadId?: string;
14
+ skill?: string;
15
+ [key: string]: unknown;
16
+ }
17
+ /**
18
+ * Create a skill agent with full server-side GAP integration
19
+ */
20
+ export declare function createServerSkillAgent(options: ServerSkillAgentOptions): Promise<Record<string, unknown>>;
21
+ export { getMemoryManager, getSessionManager };
22
+ //# sourceMappingURL=skill-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-agent.d.ts","sourceRoot":"","sources":["../../src/deepagent/skill-agent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAMjD,UAAU,uBAAuB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,uBAAuB,oCAyDjC;AAGD,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC"}