openclaw-overlay-plugin 0.7.22

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 (221) hide show
  1. package/README.md +406 -0
  2. package/SKILL.md +78 -0
  3. package/clawdbot.plugin.json +106 -0
  4. package/dist/cli-main.d.ts +7 -0
  5. package/dist/cli-main.js +192 -0
  6. package/dist/cli.d.ts +8 -0
  7. package/dist/cli.js +14 -0
  8. package/dist/core/config.d.ts +11 -0
  9. package/dist/core/config.js +13 -0
  10. package/dist/core/index.d.ts +25 -0
  11. package/dist/core/index.js +26 -0
  12. package/dist/core/payment.d.ts +16 -0
  13. package/dist/core/payment.js +94 -0
  14. package/dist/core/types.d.ts +94 -0
  15. package/dist/core/types.js +4 -0
  16. package/dist/core/verify.d.ts +28 -0
  17. package/dist/core/verify.js +104 -0
  18. package/dist/core/wallet.d.ts +99 -0
  19. package/dist/core/wallet.js +219 -0
  20. package/dist/scripts/baemail/commands.d.ts +64 -0
  21. package/dist/scripts/baemail/commands.js +258 -0
  22. package/dist/scripts/baemail/handler.d.ts +36 -0
  23. package/dist/scripts/baemail/handler.js +284 -0
  24. package/dist/scripts/baemail/index.d.ts +5 -0
  25. package/dist/scripts/baemail/index.js +5 -0
  26. package/dist/scripts/config.d.ts +48 -0
  27. package/dist/scripts/config.js +68 -0
  28. package/dist/scripts/index.d.ts +7 -0
  29. package/dist/scripts/index.js +7 -0
  30. package/dist/scripts/messaging/connect.d.ts +8 -0
  31. package/dist/scripts/messaging/connect.js +114 -0
  32. package/dist/scripts/messaging/handlers.d.ts +21 -0
  33. package/dist/scripts/messaging/handlers.js +334 -0
  34. package/dist/scripts/messaging/inbox.d.ts +11 -0
  35. package/dist/scripts/messaging/inbox.js +51 -0
  36. package/dist/scripts/messaging/index.d.ts +8 -0
  37. package/dist/scripts/messaging/index.js +8 -0
  38. package/dist/scripts/messaging/poll.d.ts +7 -0
  39. package/dist/scripts/messaging/poll.js +52 -0
  40. package/dist/scripts/messaging/send.d.ts +7 -0
  41. package/dist/scripts/messaging/send.js +43 -0
  42. package/dist/scripts/output.d.ts +12 -0
  43. package/dist/scripts/output.js +19 -0
  44. package/dist/scripts/overlay/discover.d.ts +7 -0
  45. package/dist/scripts/overlay/discover.js +72 -0
  46. package/dist/scripts/overlay/index.d.ts +7 -0
  47. package/dist/scripts/overlay/index.js +7 -0
  48. package/dist/scripts/overlay/registration.d.ts +19 -0
  49. package/dist/scripts/overlay/registration.js +176 -0
  50. package/dist/scripts/overlay/services.d.ts +29 -0
  51. package/dist/scripts/overlay/services.js +167 -0
  52. package/dist/scripts/overlay/transaction.d.ts +42 -0
  53. package/dist/scripts/overlay/transaction.js +103 -0
  54. package/dist/scripts/payment/build.d.ts +24 -0
  55. package/dist/scripts/payment/build.js +54 -0
  56. package/dist/scripts/payment/commands.d.ts +15 -0
  57. package/dist/scripts/payment/commands.js +73 -0
  58. package/dist/scripts/payment/index.d.ts +6 -0
  59. package/dist/scripts/payment/index.js +6 -0
  60. package/dist/scripts/payment/types.d.ts +56 -0
  61. package/dist/scripts/payment/types.js +4 -0
  62. package/dist/scripts/services/index.d.ts +6 -0
  63. package/dist/scripts/services/index.js +6 -0
  64. package/dist/scripts/services/queue.d.ts +11 -0
  65. package/dist/scripts/services/queue.js +28 -0
  66. package/dist/scripts/services/request.d.ts +7 -0
  67. package/dist/scripts/services/request.js +82 -0
  68. package/dist/scripts/services/respond.d.ts +11 -0
  69. package/dist/scripts/services/respond.js +132 -0
  70. package/dist/scripts/types.d.ts +107 -0
  71. package/dist/scripts/types.js +4 -0
  72. package/dist/scripts/utils/index.d.ts +6 -0
  73. package/dist/scripts/utils/index.js +6 -0
  74. package/dist/scripts/utils/merkle.d.ts +12 -0
  75. package/dist/scripts/utils/merkle.js +47 -0
  76. package/dist/scripts/utils/storage.d.ts +66 -0
  77. package/dist/scripts/utils/storage.js +211 -0
  78. package/dist/scripts/utils/woc.d.ts +26 -0
  79. package/dist/scripts/utils/woc.js +91 -0
  80. package/dist/scripts/wallet/balance.d.ts +22 -0
  81. package/dist/scripts/wallet/balance.js +240 -0
  82. package/dist/scripts/wallet/identity.d.ts +70 -0
  83. package/dist/scripts/wallet/identity.js +151 -0
  84. package/dist/scripts/wallet/index.d.ts +6 -0
  85. package/dist/scripts/wallet/index.js +6 -0
  86. package/dist/scripts/wallet/setup.d.ts +15 -0
  87. package/dist/scripts/wallet/setup.js +105 -0
  88. package/dist/scripts/x-verification/commands.d.ts +27 -0
  89. package/dist/scripts/x-verification/commands.js +222 -0
  90. package/dist/scripts/x-verification/index.d.ts +4 -0
  91. package/dist/scripts/x-verification/index.js +4 -0
  92. package/dist/services/built-in/api-proxy/index.d.ts +6 -0
  93. package/dist/services/built-in/api-proxy/index.js +23 -0
  94. package/dist/services/built-in/code-develop/index.d.ts +6 -0
  95. package/dist/services/built-in/code-develop/index.js +23 -0
  96. package/dist/services/built-in/code-review/index.d.ts +10 -0
  97. package/dist/services/built-in/code-review/index.js +51 -0
  98. package/dist/services/built-in/image-analysis/index.d.ts +6 -0
  99. package/dist/services/built-in/image-analysis/index.js +33 -0
  100. package/dist/services/built-in/memory-store/index.d.ts +6 -0
  101. package/dist/services/built-in/memory-store/index.js +22 -0
  102. package/dist/services/built-in/roulette/index.d.ts +6 -0
  103. package/dist/services/built-in/roulette/index.js +27 -0
  104. package/dist/services/built-in/summarize/index.d.ts +6 -0
  105. package/dist/services/built-in/summarize/index.js +21 -0
  106. package/dist/services/built-in/tell-joke/handler.d.ts +7 -0
  107. package/dist/services/built-in/tell-joke/handler.js +122 -0
  108. package/dist/services/built-in/tell-joke/index.d.ts +9 -0
  109. package/dist/services/built-in/tell-joke/index.js +31 -0
  110. package/dist/services/built-in/translate/index.d.ts +6 -0
  111. package/dist/services/built-in/translate/index.js +21 -0
  112. package/dist/services/built-in/web-research/index.d.ts +9 -0
  113. package/dist/services/built-in/web-research/index.js +51 -0
  114. package/dist/services/index.d.ts +13 -0
  115. package/dist/services/index.js +14 -0
  116. package/dist/services/loader.d.ts +77 -0
  117. package/dist/services/loader.js +292 -0
  118. package/dist/services/manager.d.ts +86 -0
  119. package/dist/services/manager.js +255 -0
  120. package/dist/services/registry.d.ts +98 -0
  121. package/dist/services/registry.js +204 -0
  122. package/dist/services/types.d.ts +230 -0
  123. package/dist/services/types.js +30 -0
  124. package/dist/test/cli.test.d.ts +7 -0
  125. package/dist/test/cli.test.js +329 -0
  126. package/dist/test/comprehensive-overlay.test.d.ts +13 -0
  127. package/dist/test/comprehensive-overlay.test.js +593 -0
  128. package/dist/test/key-derivation.test.d.ts +12 -0
  129. package/dist/test/key-derivation.test.js +86 -0
  130. package/dist/test/overlay-submit.test.d.ts +10 -0
  131. package/dist/test/overlay-submit.test.js +460 -0
  132. package/dist/test/request-response-flow.test.d.ts +5 -0
  133. package/dist/test/request-response-flow.test.js +209 -0
  134. package/dist/test/service-system.test.d.ts +5 -0
  135. package/dist/test/service-system.test.js +190 -0
  136. package/dist/test/utils/server-logic.d.ts +98 -0
  137. package/dist/test/utils/server-logic.js +286 -0
  138. package/dist/test/wallet.test.d.ts +7 -0
  139. package/dist/test/wallet.test.js +146 -0
  140. package/index.ts +1965 -0
  141. package/openclaw.plugin.json +106 -0
  142. package/package.json +73 -0
  143. package/src/cli-main.ts +230 -0
  144. package/src/cli.ts +16 -0
  145. package/src/core/README.md +246 -0
  146. package/src/core/config.ts +21 -0
  147. package/src/core/index.ts +42 -0
  148. package/src/core/payment.ts +111 -0
  149. package/src/core/types.ts +102 -0
  150. package/src/core/verify.ts +119 -0
  151. package/src/core/wallet.ts +282 -0
  152. package/src/scripts/baemail/commands.ts +326 -0
  153. package/src/scripts/baemail/handler.ts +338 -0
  154. package/src/scripts/baemail/index.ts +6 -0
  155. package/src/scripts/config.ts +81 -0
  156. package/src/scripts/index.ts +8 -0
  157. package/src/scripts/messaging/connect.ts +121 -0
  158. package/src/scripts/messaging/handlers.ts +394 -0
  159. package/src/scripts/messaging/inbox.ts +64 -0
  160. package/src/scripts/messaging/index.ts +9 -0
  161. package/src/scripts/messaging/poll.ts +59 -0
  162. package/src/scripts/messaging/send.ts +54 -0
  163. package/src/scripts/output.ts +21 -0
  164. package/src/scripts/overlay/discover.ts +81 -0
  165. package/src/scripts/overlay/index.ts +8 -0
  166. package/src/scripts/overlay/registration.ts +199 -0
  167. package/src/scripts/overlay/services.ts +199 -0
  168. package/src/scripts/overlay/transaction.ts +124 -0
  169. package/src/scripts/payment/build.ts +65 -0
  170. package/src/scripts/payment/commands.ts +92 -0
  171. package/src/scripts/payment/index.ts +7 -0
  172. package/src/scripts/payment/types.ts +62 -0
  173. package/src/scripts/services/index.ts +7 -0
  174. package/src/scripts/services/queue.ts +35 -0
  175. package/src/scripts/services/request.ts +98 -0
  176. package/src/scripts/services/respond.ts +149 -0
  177. package/src/scripts/types.ts +121 -0
  178. package/src/scripts/utils/index.ts +7 -0
  179. package/src/scripts/utils/merkle.ts +57 -0
  180. package/src/scripts/utils/storage.ts +231 -0
  181. package/src/scripts/utils/woc.ts +106 -0
  182. package/src/scripts/wallet/balance.ts +277 -0
  183. package/src/scripts/wallet/identity.ts +203 -0
  184. package/src/scripts/wallet/index.ts +7 -0
  185. package/src/scripts/wallet/setup.ts +121 -0
  186. package/src/scripts/x-verification/commands.ts +256 -0
  187. package/src/scripts/x-verification/index.ts +5 -0
  188. package/src/services/built-in/api-proxy/index.ts +26 -0
  189. package/src/services/built-in/api-proxy/prompt.md +26 -0
  190. package/src/services/built-in/code-develop/index.ts +26 -0
  191. package/src/services/built-in/code-develop/prompt.md +35 -0
  192. package/src/services/built-in/code-review/index.ts +54 -0
  193. package/src/services/built-in/code-review/prompt.md +105 -0
  194. package/src/services/built-in/image-analysis/index.ts +36 -0
  195. package/src/services/built-in/image-analysis/prompt.md +42 -0
  196. package/src/services/built-in/memory-store/index.ts +25 -0
  197. package/src/services/built-in/memory-store/prompt.md +45 -0
  198. package/src/services/built-in/roulette/index.ts +30 -0
  199. package/src/services/built-in/roulette/prompt.md +35 -0
  200. package/src/services/built-in/summarize/index.ts +24 -0
  201. package/src/services/built-in/summarize/prompt.md +27 -0
  202. package/src/services/built-in/tell-joke/handler.ts +134 -0
  203. package/src/services/built-in/tell-joke/index.ts +34 -0
  204. package/src/services/built-in/tell-joke/prompt.md +59 -0
  205. package/src/services/built-in/translate/index.ts +24 -0
  206. package/src/services/built-in/translate/prompt.md +23 -0
  207. package/src/services/built-in/web-research/index.ts +54 -0
  208. package/src/services/built-in/web-research/prompt.md +110 -0
  209. package/src/services/index.ts +16 -0
  210. package/src/services/loader.ts +344 -0
  211. package/src/services/manager.ts +304 -0
  212. package/src/services/registry.ts +246 -0
  213. package/src/services/types.ts +259 -0
  214. package/src/test/cli.test.ts +352 -0
  215. package/src/test/comprehensive-overlay.test.ts +729 -0
  216. package/src/test/key-derivation.test.ts +102 -0
  217. package/src/test/overlay-submit.test.ts +570 -0
  218. package/src/test/request-response-flow.test.ts +252 -0
  219. package/src/test/service-system.test.ts +241 -0
  220. package/src/test/utils/server-logic.ts +368 -0
  221. package/src/test/wallet.test.ts +166 -0
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Service registry implementation.
3
+ *
4
+ * This provides a centralized registry for all services, allowing
5
+ * dynamic registration and discovery without modifying core code.
6
+ */
7
+ import { ServiceDefinition, ServiceRegistry } from './types.js';
8
+ /**
9
+ * Default service registry implementation.
10
+ */
11
+ export declare class DefaultServiceRegistry implements ServiceRegistry {
12
+ private services;
13
+ /**
14
+ * Register a new service definition.
15
+ */
16
+ register(service: ServiceDefinition): void;
17
+ /**
18
+ * Get a service definition by ID.
19
+ */
20
+ get(serviceId: string): ServiceDefinition | undefined;
21
+ /**
22
+ * List all registered services.
23
+ */
24
+ list(): ServiceDefinition[];
25
+ /**
26
+ * List services by category.
27
+ */
28
+ listByCategory(category: string): ServiceDefinition[];
29
+ /**
30
+ * Check if a service is registered.
31
+ */
32
+ has(serviceId: string): boolean;
33
+ /**
34
+ * Unregister a service.
35
+ */
36
+ unregister(serviceId: string): void;
37
+ /**
38
+ * Clear all services (useful for testing).
39
+ */
40
+ clear(): void;
41
+ /**
42
+ * Get service count.
43
+ */
44
+ count(): number;
45
+ /**
46
+ * Get services by price range.
47
+ */
48
+ getByPriceRange(minPrice: number, maxPrice: number): ServiceDefinition[];
49
+ /**
50
+ * Search services by name or description.
51
+ */
52
+ search(query: string): ServiceDefinition[];
53
+ /**
54
+ * Validate a service definition.
55
+ */
56
+ private validateServiceDefinition;
57
+ }
58
+ /**
59
+ * Global service registry instance.
60
+ */
61
+ export declare const serviceRegistry: DefaultServiceRegistry;
62
+ /**
63
+ * Utility functions for working with the service registry.
64
+ */
65
+ export declare const ServiceRegistryUtils: {
66
+ /**
67
+ * Register multiple services at once.
68
+ */
69
+ registerMultiple(services: ServiceDefinition[]): void;
70
+ /**
71
+ * Get services that support a specific input type.
72
+ */
73
+ getServicesForInput(inputType: string): ServiceDefinition[];
74
+ /**
75
+ * Validate service exists and return it.
76
+ */
77
+ requireService(serviceId: string): ServiceDefinition;
78
+ /**
79
+ * Get all service IDs.
80
+ */
81
+ getAllServiceIds(): string[];
82
+ /**
83
+ * Check if any services are registered.
84
+ */
85
+ hasAnyServices(): boolean;
86
+ /**
87
+ * Get service statistics.
88
+ */
89
+ getStatistics(): {
90
+ totalServices: number;
91
+ servicesByCategory: Record<string, number>;
92
+ priceRange: {
93
+ min: number;
94
+ max: number;
95
+ };
96
+ servicesWithHandlers: number;
97
+ };
98
+ };
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Service registry implementation.
3
+ *
4
+ * This provides a centralized registry for all services, allowing
5
+ * dynamic registration and discovery without modifying core code.
6
+ */
7
+ import { ServiceCategory } from './types.js';
8
+ /**
9
+ * Default service registry implementation.
10
+ */
11
+ export class DefaultServiceRegistry {
12
+ services = new Map();
13
+ /**
14
+ * Register a new service definition.
15
+ */
16
+ register(service) {
17
+ // Validate service definition
18
+ this.validateServiceDefinition(service);
19
+ // Check for duplicates
20
+ if (this.services.has(service.id)) {
21
+ throw new Error(`Service '${service.id}' is already registered`);
22
+ }
23
+ // Register the service
24
+ this.services.set(service.id, { ...service });
25
+ }
26
+ /**
27
+ * Get a service definition by ID.
28
+ */
29
+ get(serviceId) {
30
+ return this.services.get(serviceId);
31
+ }
32
+ /**
33
+ * List all registered services.
34
+ */
35
+ list() {
36
+ return Array.from(this.services.values());
37
+ }
38
+ /**
39
+ * List services by category.
40
+ */
41
+ listByCategory(category) {
42
+ return this.list().filter(service => service.category === category);
43
+ }
44
+ /**
45
+ * Check if a service is registered.
46
+ */
47
+ has(serviceId) {
48
+ return this.services.has(serviceId);
49
+ }
50
+ /**
51
+ * Unregister a service.
52
+ */
53
+ unregister(serviceId) {
54
+ this.services.delete(serviceId);
55
+ }
56
+ /**
57
+ * Clear all services (useful for testing).
58
+ */
59
+ clear() {
60
+ this.services.clear();
61
+ }
62
+ /**
63
+ * Get service count.
64
+ */
65
+ count() {
66
+ return this.services.size;
67
+ }
68
+ /**
69
+ * Get services by price range.
70
+ */
71
+ getByPriceRange(minPrice, maxPrice) {
72
+ return this.list().filter(service => service.defaultPrice >= minPrice && service.defaultPrice <= maxPrice);
73
+ }
74
+ /**
75
+ * Search services by name or description.
76
+ */
77
+ search(query) {
78
+ const lowerQuery = query.toLowerCase();
79
+ return this.list().filter(service => service.name.toLowerCase().includes(lowerQuery) ||
80
+ service.description.toLowerCase().includes(lowerQuery) ||
81
+ service.id.toLowerCase().includes(lowerQuery));
82
+ }
83
+ /**
84
+ * Validate a service definition.
85
+ */
86
+ validateServiceDefinition(service) {
87
+ if (!service.id) {
88
+ throw new Error('Service ID is required');
89
+ }
90
+ if (typeof service.id !== 'string' || service.id.trim().length === 0) {
91
+ throw new Error('Service ID must be a non-empty string');
92
+ }
93
+ // Validate ID format (kebab-case)
94
+ if (!/^[a-z0-9]+(-[a-z0-9]+)*$/.test(service.id)) {
95
+ throw new Error('Service ID must be in kebab-case format (lowercase, hyphens only)');
96
+ }
97
+ if (!service.name || typeof service.name !== 'string' || service.name.trim().length === 0) {
98
+ throw new Error('Service name is required and must be a non-empty string');
99
+ }
100
+ if (!service.description || typeof service.description !== 'string' || service.description.trim().length === 0) {
101
+ throw new Error('Service description is required and must be a non-empty string');
102
+ }
103
+ if (typeof service.defaultPrice !== 'number' || service.defaultPrice < 0 || !Number.isInteger(service.defaultPrice)) {
104
+ throw new Error('Service defaultPrice must be a non-negative integer');
105
+ }
106
+ if (service.category && !Object.values(ServiceCategory).includes(service.category)) {
107
+ throw new Error(`Invalid service category: ${service.category}`);
108
+ }
109
+ // Validate input schema if provided
110
+ if (service.inputSchema && typeof service.inputSchema !== 'object') {
111
+ throw new Error('Service inputSchema must be an object');
112
+ }
113
+ // Validate handler if provided
114
+ if (service.handler) {
115
+ if (typeof service.handler.validate !== 'function') {
116
+ throw new Error('Service handler must have a validate function');
117
+ }
118
+ if (typeof service.handler.process !== 'function') {
119
+ throw new Error('Service handler must have a process function');
120
+ }
121
+ }
122
+ }
123
+ }
124
+ /**
125
+ * Global service registry instance.
126
+ */
127
+ export const serviceRegistry = new DefaultServiceRegistry();
128
+ /**
129
+ * Utility functions for working with the service registry.
130
+ */
131
+ export const ServiceRegistryUtils = {
132
+ /**
133
+ * Register multiple services at once.
134
+ */
135
+ registerMultiple(services) {
136
+ for (const service of services) {
137
+ serviceRegistry.register(service);
138
+ }
139
+ },
140
+ /**
141
+ * Get services that support a specific input type.
142
+ */
143
+ getServicesForInput(inputType) {
144
+ return serviceRegistry.list().filter(service => {
145
+ if (!service.inputSchema)
146
+ return false;
147
+ const schema = service.inputSchema;
148
+ return schema.properties && schema.properties[inputType];
149
+ });
150
+ },
151
+ /**
152
+ * Validate service exists and return it.
153
+ */
154
+ requireService(serviceId) {
155
+ const service = serviceRegistry.get(serviceId);
156
+ if (!service) {
157
+ throw new Error(`Service '${serviceId}' not found`);
158
+ }
159
+ return service;
160
+ },
161
+ /**
162
+ * Get all service IDs.
163
+ */
164
+ getAllServiceIds() {
165
+ return serviceRegistry.list().map(service => service.id);
166
+ },
167
+ /**
168
+ * Check if any services are registered.
169
+ */
170
+ hasAnyServices() {
171
+ return serviceRegistry.count() > 0;
172
+ },
173
+ /**
174
+ * Get service statistics.
175
+ */
176
+ getStatistics() {
177
+ const services = serviceRegistry.list();
178
+ const servicesByCategory = {};
179
+ let minPrice = Infinity;
180
+ let maxPrice = -Infinity;
181
+ let servicesWithHandlers = 0;
182
+ for (const service of services) {
183
+ // Count by category
184
+ const category = service.category || 'uncategorized';
185
+ servicesByCategory[category] = (servicesByCategory[category] || 0) + 1;
186
+ // Track price range
187
+ minPrice = Math.min(minPrice, service.defaultPrice);
188
+ maxPrice = Math.max(maxPrice, service.defaultPrice);
189
+ // Count services with handlers
190
+ if (service.handler) {
191
+ servicesWithHandlers++;
192
+ }
193
+ }
194
+ return {
195
+ totalServices: services.length,
196
+ servicesByCategory,
197
+ priceRange: {
198
+ min: minPrice === Infinity ? 0 : minPrice,
199
+ max: maxPrice === -Infinity ? 0 : maxPrice
200
+ },
201
+ servicesWithHandlers
202
+ };
203
+ }
204
+ };
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Service architecture type definitions.
3
+ *
4
+ * This module defines the core interfaces for the pluggable service system.
5
+ * Services can be added without modifying core payment or relay logic.
6
+ */
7
+ export interface ServiceDefinition {
8
+ /** Unique service identifier (kebab-case) */
9
+ id: string;
10
+ /** Human-readable service name */
11
+ name: string;
12
+ /** Service description for discovery */
13
+ description: string;
14
+ /** Default price in satoshis */
15
+ defaultPrice: number;
16
+ /** Optional JSON schema for input validation */
17
+ inputSchema?: object;
18
+ /** Optional legacy handler for non-agent mode */
19
+ handler?: ServiceHandler;
20
+ /** Optional path to agent mode prompt file */
21
+ promptFile?: string;
22
+ /** Service category for organization */
23
+ category?: string;
24
+ /** Whether this service requires special permissions */
25
+ requiresVerification?: boolean;
26
+ }
27
+ export interface ServiceHandler {
28
+ /**
29
+ * Validate incoming service input.
30
+ * @param input - Raw input from service request
31
+ * @returns Validation result
32
+ */
33
+ validate(input: any): ValidationResult;
34
+ /**
35
+ * Process the service request.
36
+ * Payment has already been verified at this point.
37
+ * @param input - Validated input data
38
+ * @param context - Service execution context
39
+ * @returns Service processing result
40
+ */
41
+ process(input: any, context: ServiceContext): Promise<ServiceResult>;
42
+ }
43
+ export interface ValidationResult {
44
+ /** Whether input is valid */
45
+ valid: boolean;
46
+ /** Error message if invalid */
47
+ error?: string;
48
+ /** Sanitized/normalized input if valid */
49
+ sanitized?: any;
50
+ }
51
+ export interface ServiceContext {
52
+ /** Unique request identifier */
53
+ requestId: string;
54
+ /** Sender's identity key */
55
+ from: string;
56
+ /** Service being requested */
57
+ serviceId: string;
58
+ /** Payment information (already verified) */
59
+ payment: PaymentInfo;
60
+ /** Request timestamp */
61
+ timestamp: number;
62
+ }
63
+ export interface PaymentInfo {
64
+ /** Transaction ID */
65
+ txid: string;
66
+ /** Amount paid in satoshis */
67
+ satoshis: number;
68
+ /** Whether payment was accepted by wallet */
69
+ accepted: boolean;
70
+ /** Payment verification details */
71
+ verification?: {
72
+ /** BEEF transaction data */
73
+ beef: string;
74
+ /** Derivation prefix for BRC-29 */
75
+ derivationPrefix?: string;
76
+ /** Derivation suffix for BRC-29 */
77
+ derivationSuffix?: string;
78
+ };
79
+ }
80
+ export interface ServiceResult {
81
+ /** Whether service execution was successful */
82
+ success: boolean;
83
+ /** Service output data */
84
+ data?: any;
85
+ /** Error message if unsuccessful */
86
+ error?: string;
87
+ /** Additional metadata */
88
+ metadata?: {
89
+ /** Processing time in milliseconds */
90
+ processingTime?: number;
91
+ /** Service version */
92
+ version?: string;
93
+ /** Additional context */
94
+ [key: string]: any;
95
+ };
96
+ }
97
+ export interface ServiceRegistry {
98
+ /**
99
+ * Register a new service definition.
100
+ * @param service - Service to register
101
+ */
102
+ register(service: ServiceDefinition): void;
103
+ /**
104
+ * Get a service definition by ID.
105
+ * @param serviceId - Service identifier
106
+ * @returns Service definition or undefined
107
+ */
108
+ get(serviceId: string): ServiceDefinition | undefined;
109
+ /**
110
+ * List all registered services.
111
+ * @returns Array of all service definitions
112
+ */
113
+ list(): ServiceDefinition[];
114
+ /**
115
+ * List services by category.
116
+ * @param category - Service category
117
+ * @returns Array of services in category
118
+ */
119
+ listByCategory(category: string): ServiceDefinition[];
120
+ /**
121
+ * Check if a service is registered.
122
+ * @param serviceId - Service identifier
123
+ * @returns Whether service exists
124
+ */
125
+ has(serviceId: string): boolean;
126
+ /**
127
+ * Unregister a service.
128
+ * @param serviceId - Service identifier
129
+ */
130
+ unregister(serviceId: string): void;
131
+ }
132
+ export interface ServiceLoader {
133
+ /**
134
+ * Load services from a directory.
135
+ * @param directory - Directory path to scan
136
+ * @returns Array of loaded service definitions
137
+ */
138
+ loadFromDirectory(directory: string): Promise<ServiceDefinition[]>;
139
+ /**
140
+ * Load all built-in services.
141
+ * @returns Array of built-in service definitions
142
+ */
143
+ loadBuiltInServices(): Promise<ServiceDefinition[]>;
144
+ /**
145
+ * Load custom user services.
146
+ * @returns Array of custom service definitions
147
+ */
148
+ loadCustomServices(): Promise<ServiceDefinition[]>;
149
+ }
150
+ /**
151
+ * Service execution context for handlers.
152
+ * This provides access to validated input and request context
153
+ * without exposing payment verification or relay logic.
154
+ */
155
+ export interface ServiceExecutionContext {
156
+ /** Service definition being executed */
157
+ service: ServiceDefinition;
158
+ /** Validated input data */
159
+ input: any;
160
+ /** Request context */
161
+ context: ServiceContext;
162
+ }
163
+ /**
164
+ * Service plugin interface for advanced services.
165
+ * This allows services to define additional hooks and lifecycle methods.
166
+ */
167
+ export interface ServicePlugin {
168
+ /** Service definition */
169
+ definition: ServiceDefinition;
170
+ /** Optional initialization hook */
171
+ initialize?(): Promise<void>;
172
+ /** Optional cleanup hook */
173
+ cleanup?(): Promise<void>;
174
+ /** Optional health check */
175
+ healthCheck?(): Promise<boolean>;
176
+ }
177
+ /**
178
+ * Service manager interface for orchestrating service lifecycle.
179
+ */
180
+ export interface ServiceManager {
181
+ /** Service registry */
182
+ registry: ServiceRegistry;
183
+ /** Service loader */
184
+ loader: ServiceLoader;
185
+ /**
186
+ * Initialize the service system.
187
+ */
188
+ initialize(): Promise<void>;
189
+ /**
190
+ * Execute a service request.
191
+ * @param serviceId - Service to execute
192
+ * @param input - Service input
193
+ * @param context - Execution context
194
+ * @returns Service result
195
+ */
196
+ execute(serviceId: string, input: any, context: ServiceContext): Promise<ServiceResult>;
197
+ /**
198
+ * Validate service input.
199
+ * @param serviceId - Service to validate for
200
+ * @param input - Input to validate
201
+ * @returns Validation result
202
+ */
203
+ validate(serviceId: string, input: any): ValidationResult;
204
+ /**
205
+ * Reload all services.
206
+ */
207
+ reload(): Promise<void>;
208
+ }
209
+ /**
210
+ * Common service categories for organization.
211
+ */
212
+ export declare enum ServiceCategory {
213
+ UTILITY = "utility",
214
+ AI = "ai",
215
+ BLOCKCHAIN = "blockchain",
216
+ COMMUNICATION = "communication",
217
+ DEVELOPMENT = "development",
218
+ RESEARCH = "research",
219
+ ENTERTAINMENT = "entertainment",
220
+ CUSTOM = "custom"
221
+ }
222
+ /**
223
+ * Service status for monitoring and management.
224
+ */
225
+ export declare enum ServiceStatus {
226
+ ACTIVE = "active",
227
+ INACTIVE = "inactive",
228
+ ERROR = "error",
229
+ LOADING = "loading"
230
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Service architecture type definitions.
3
+ *
4
+ * This module defines the core interfaces for the pluggable service system.
5
+ * Services can be added without modifying core payment or relay logic.
6
+ */
7
+ /**
8
+ * Common service categories for organization.
9
+ */
10
+ export var ServiceCategory;
11
+ (function (ServiceCategory) {
12
+ ServiceCategory["UTILITY"] = "utility";
13
+ ServiceCategory["AI"] = "ai";
14
+ ServiceCategory["BLOCKCHAIN"] = "blockchain";
15
+ ServiceCategory["COMMUNICATION"] = "communication";
16
+ ServiceCategory["DEVELOPMENT"] = "development";
17
+ ServiceCategory["RESEARCH"] = "research";
18
+ ServiceCategory["ENTERTAINMENT"] = "entertainment";
19
+ ServiceCategory["CUSTOM"] = "custom";
20
+ })(ServiceCategory || (ServiceCategory = {}));
21
+ /**
22
+ * Service status for monitoring and management.
23
+ */
24
+ export var ServiceStatus;
25
+ (function (ServiceStatus) {
26
+ ServiceStatus["ACTIVE"] = "active";
27
+ ServiceStatus["INACTIVE"] = "inactive";
28
+ ServiceStatus["ERROR"] = "error";
29
+ ServiceStatus["LOADING"] = "loading";
30
+ })(ServiceStatus || (ServiceStatus = {}));
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI test suite — tests the compiled CLI as a subprocess.
3
+ *
4
+ * Uses child_process.execFile to invoke `node dist/cli.js <command>`
5
+ * and validates stdout JSON, stderr, and exit codes.
6
+ */
7
+ export {};