@lobu/gateway 3.0.8 → 3.0.12

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 (219) hide show
  1. package/dist/api/platform.d.ts.map +1 -1
  2. package/dist/api/platform.js +8 -26
  3. package/dist/api/platform.js.map +1 -1
  4. package/dist/auth/mcp/proxy.d.ts +14 -0
  5. package/dist/auth/mcp/proxy.d.ts.map +1 -1
  6. package/dist/auth/mcp/proxy.js +149 -13
  7. package/dist/auth/mcp/proxy.js.map +1 -1
  8. package/dist/cli/gateway.d.ts.map +1 -1
  9. package/dist/cli/gateway.js +29 -0
  10. package/dist/cli/gateway.js.map +1 -1
  11. package/dist/cli/index.js +2 -2
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/connections/chat-instance-manager.d.ts.map +1 -1
  14. package/dist/connections/chat-instance-manager.js +2 -1
  15. package/dist/connections/chat-instance-manager.js.map +1 -1
  16. package/dist/connections/interaction-bridge.d.ts +9 -2
  17. package/dist/connections/interaction-bridge.d.ts.map +1 -1
  18. package/dist/connections/interaction-bridge.js +132 -230
  19. package/dist/connections/interaction-bridge.js.map +1 -1
  20. package/dist/connections/message-handler-bridge.d.ts.map +1 -1
  21. package/dist/connections/message-handler-bridge.js +44 -26
  22. package/dist/connections/message-handler-bridge.js.map +1 -1
  23. package/dist/interactions.d.ts +9 -43
  24. package/dist/interactions.d.ts.map +1 -1
  25. package/dist/interactions.js +10 -52
  26. package/dist/interactions.js.map +1 -1
  27. package/dist/orchestration/base-deployment-manager.js +7 -7
  28. package/dist/orchestration/base-deployment-manager.js.map +1 -1
  29. package/dist/platform/unified-thread-consumer.d.ts.map +1 -1
  30. package/dist/platform/unified-thread-consumer.js +38 -34
  31. package/dist/platform/unified-thread-consumer.js.map +1 -1
  32. package/dist/routes/public/agent.d.ts +4 -0
  33. package/dist/routes/public/agent.d.ts.map +1 -1
  34. package/dist/routes/public/agent.js +21 -0
  35. package/dist/routes/public/agent.js.map +1 -1
  36. package/dist/services/core-services.d.ts.map +1 -1
  37. package/dist/services/core-services.js +4 -0
  38. package/dist/services/core-services.js.map +1 -1
  39. package/package.json +2 -2
  40. package/src/__tests__/agent-config-routes.test.ts +0 -254
  41. package/src/__tests__/agent-history-routes.test.ts +0 -72
  42. package/src/__tests__/agent-routes.test.ts +0 -68
  43. package/src/__tests__/agent-schedules-routes.test.ts +0 -59
  44. package/src/__tests__/agent-settings-store.test.ts +0 -323
  45. package/src/__tests__/bedrock-model-catalog.test.ts +0 -40
  46. package/src/__tests__/bedrock-openai-service.test.ts +0 -157
  47. package/src/__tests__/bedrock-provider-module.test.ts +0 -56
  48. package/src/__tests__/chat-instance-manager-slack.test.ts +0 -204
  49. package/src/__tests__/chat-response-bridge.test.ts +0 -131
  50. package/src/__tests__/config-memory-plugins.test.ts +0 -92
  51. package/src/__tests__/config-request-store.test.ts +0 -127
  52. package/src/__tests__/connection-routes.test.ts +0 -144
  53. package/src/__tests__/core-services-store-selection.test.ts +0 -92
  54. package/src/__tests__/docker-deployment.test.ts +0 -1211
  55. package/src/__tests__/embedded-deployment.test.ts +0 -342
  56. package/src/__tests__/grant-store.test.ts +0 -148
  57. package/src/__tests__/http-proxy.test.ts +0 -281
  58. package/src/__tests__/instruction-service.test.ts +0 -37
  59. package/src/__tests__/link-buttons.test.ts +0 -112
  60. package/src/__tests__/lobu.test.ts +0 -32
  61. package/src/__tests__/mcp-config-service.test.ts +0 -347
  62. package/src/__tests__/mcp-proxy.test.ts +0 -694
  63. package/src/__tests__/message-handler-bridge.test.ts +0 -17
  64. package/src/__tests__/model-selection.test.ts +0 -172
  65. package/src/__tests__/oauth-templates.test.ts +0 -39
  66. package/src/__tests__/platform-adapter-slack-send.test.ts +0 -114
  67. package/src/__tests__/platform-helpers-model-resolution.test.ts +0 -253
  68. package/src/__tests__/provider-inheritance.test.ts +0 -212
  69. package/src/__tests__/routes/cli-auth.test.ts +0 -337
  70. package/src/__tests__/routes/interactions.test.ts +0 -121
  71. package/src/__tests__/secret-proxy.test.ts +0 -85
  72. package/src/__tests__/session-manager.test.ts +0 -572
  73. package/src/__tests__/setup.ts +0 -133
  74. package/src/__tests__/skill-and-mcp-registry.test.ts +0 -203
  75. package/src/__tests__/slack-routes.test.ts +0 -161
  76. package/src/__tests__/system-config-resolver.test.ts +0 -75
  77. package/src/__tests__/system-message-limiter.test.ts +0 -89
  78. package/src/__tests__/system-skills-service.test.ts +0 -362
  79. package/src/__tests__/transcription-service.test.ts +0 -222
  80. package/src/__tests__/utils/rate-limiter.test.ts +0 -102
  81. package/src/__tests__/worker-connection-manager.test.ts +0 -497
  82. package/src/__tests__/worker-job-router.test.ts +0 -722
  83. package/src/api/index.ts +0 -1
  84. package/src/api/platform.ts +0 -292
  85. package/src/api/response-renderer.ts +0 -157
  86. package/src/auth/agent-metadata-store.ts +0 -168
  87. package/src/auth/api-auth-middleware.ts +0 -69
  88. package/src/auth/api-key-provider-module.ts +0 -213
  89. package/src/auth/base-provider-module.ts +0 -201
  90. package/src/auth/bedrock/provider-module.ts +0 -110
  91. package/src/auth/chatgpt/chatgpt-oauth-module.ts +0 -185
  92. package/src/auth/chatgpt/device-code-client.ts +0 -218
  93. package/src/auth/chatgpt/index.ts +0 -1
  94. package/src/auth/claude/oauth-module.ts +0 -280
  95. package/src/auth/cli/token-service.ts +0 -249
  96. package/src/auth/external/client.ts +0 -560
  97. package/src/auth/external/device-code-client.ts +0 -235
  98. package/src/auth/mcp/config-service.ts +0 -420
  99. package/src/auth/mcp/proxy.ts +0 -1086
  100. package/src/auth/mcp/string-substitution.ts +0 -17
  101. package/src/auth/mcp/tool-cache.ts +0 -90
  102. package/src/auth/oauth/base-client.ts +0 -267
  103. package/src/auth/oauth/client.ts +0 -153
  104. package/src/auth/oauth/credentials.ts +0 -7
  105. package/src/auth/oauth/providers.ts +0 -69
  106. package/src/auth/oauth/state-store.ts +0 -150
  107. package/src/auth/oauth-templates.ts +0 -179
  108. package/src/auth/provider-catalog.ts +0 -220
  109. package/src/auth/provider-model-options.ts +0 -41
  110. package/src/auth/settings/agent-settings-store.ts +0 -565
  111. package/src/auth/settings/auth-profiles-manager.ts +0 -216
  112. package/src/auth/settings/index.ts +0 -12
  113. package/src/auth/settings/model-preference-store.ts +0 -52
  114. package/src/auth/settings/model-selection.ts +0 -135
  115. package/src/auth/settings/resolved-settings-view.ts +0 -298
  116. package/src/auth/settings/template-utils.ts +0 -44
  117. package/src/auth/settings/token-service.ts +0 -88
  118. package/src/auth/system-env-store.ts +0 -98
  119. package/src/auth/user-agents-store.ts +0 -68
  120. package/src/channels/binding-service.ts +0 -214
  121. package/src/channels/index.ts +0 -4
  122. package/src/cli/gateway.ts +0 -1312
  123. package/src/cli/index.ts +0 -74
  124. package/src/commands/built-in-commands.ts +0 -80
  125. package/src/commands/command-dispatcher.ts +0 -94
  126. package/src/commands/command-reply-adapters.ts +0 -27
  127. package/src/config/file-loader.ts +0 -618
  128. package/src/config/index.ts +0 -588
  129. package/src/config/network-allowlist.ts +0 -71
  130. package/src/connections/chat-instance-manager.ts +0 -1284
  131. package/src/connections/chat-response-bridge.ts +0 -618
  132. package/src/connections/index.ts +0 -7
  133. package/src/connections/interaction-bridge.ts +0 -831
  134. package/src/connections/message-handler-bridge.ts +0 -415
  135. package/src/connections/platform-auth-methods.ts +0 -15
  136. package/src/connections/types.ts +0 -84
  137. package/src/gateway/connection-manager.ts +0 -291
  138. package/src/gateway/index.ts +0 -698
  139. package/src/gateway/job-router.ts +0 -201
  140. package/src/gateway-main.ts +0 -200
  141. package/src/index.ts +0 -41
  142. package/src/infrastructure/queue/index.ts +0 -12
  143. package/src/infrastructure/queue/queue-producer.ts +0 -148
  144. package/src/infrastructure/queue/redis-queue.ts +0 -361
  145. package/src/infrastructure/queue/types.ts +0 -133
  146. package/src/infrastructure/redis/system-message-limiter.ts +0 -94
  147. package/src/interactions/config-request-store.ts +0 -198
  148. package/src/interactions.ts +0 -363
  149. package/src/lobu.ts +0 -311
  150. package/src/metrics/prometheus.ts +0 -159
  151. package/src/modules/module-system.ts +0 -179
  152. package/src/orchestration/base-deployment-manager.ts +0 -900
  153. package/src/orchestration/deployment-utils.ts +0 -98
  154. package/src/orchestration/impl/docker-deployment.ts +0 -620
  155. package/src/orchestration/impl/embedded-deployment.ts +0 -268
  156. package/src/orchestration/impl/index.ts +0 -8
  157. package/src/orchestration/impl/k8s/deployment.ts +0 -1061
  158. package/src/orchestration/impl/k8s/helpers.ts +0 -610
  159. package/src/orchestration/impl/k8s/index.ts +0 -1
  160. package/src/orchestration/index.ts +0 -333
  161. package/src/orchestration/message-consumer.ts +0 -584
  162. package/src/orchestration/scheduled-wakeup.ts +0 -704
  163. package/src/permissions/approval-policy.ts +0 -36
  164. package/src/permissions/grant-store.ts +0 -219
  165. package/src/platform/file-handler.ts +0 -66
  166. package/src/platform/link-buttons.ts +0 -57
  167. package/src/platform/renderer-utils.ts +0 -44
  168. package/src/platform/response-renderer.ts +0 -84
  169. package/src/platform/unified-thread-consumer.ts +0 -187
  170. package/src/platform.ts +0 -318
  171. package/src/proxy/http-proxy.ts +0 -752
  172. package/src/proxy/proxy-manager.ts +0 -81
  173. package/src/proxy/secret-proxy.ts +0 -402
  174. package/src/proxy/token-refresh-job.ts +0 -143
  175. package/src/routes/internal/audio.ts +0 -141
  176. package/src/routes/internal/device-auth.ts +0 -652
  177. package/src/routes/internal/files.ts +0 -226
  178. package/src/routes/internal/history.ts +0 -69
  179. package/src/routes/internal/images.ts +0 -127
  180. package/src/routes/internal/interactions.ts +0 -84
  181. package/src/routes/internal/middleware.ts +0 -23
  182. package/src/routes/internal/schedule.ts +0 -226
  183. package/src/routes/internal/types.ts +0 -22
  184. package/src/routes/openapi-auto.ts +0 -239
  185. package/src/routes/public/agent-access.ts +0 -23
  186. package/src/routes/public/agent-config.ts +0 -675
  187. package/src/routes/public/agent-history.ts +0 -422
  188. package/src/routes/public/agent-schedules.ts +0 -296
  189. package/src/routes/public/agent.ts +0 -1086
  190. package/src/routes/public/agents.ts +0 -373
  191. package/src/routes/public/channels.ts +0 -191
  192. package/src/routes/public/cli-auth.ts +0 -896
  193. package/src/routes/public/connections.ts +0 -574
  194. package/src/routes/public/landing.ts +0 -16
  195. package/src/routes/public/oauth.ts +0 -147
  196. package/src/routes/public/settings-auth.ts +0 -104
  197. package/src/routes/public/slack.ts +0 -173
  198. package/src/routes/shared/agent-ownership.ts +0 -101
  199. package/src/routes/shared/token-verifier.ts +0 -34
  200. package/src/services/bedrock-model-catalog.ts +0 -217
  201. package/src/services/bedrock-openai-service.ts +0 -658
  202. package/src/services/core-services.ts +0 -1072
  203. package/src/services/image-generation-service.ts +0 -257
  204. package/src/services/instruction-service.ts +0 -318
  205. package/src/services/mcp-registry.ts +0 -94
  206. package/src/services/platform-helpers.ts +0 -287
  207. package/src/services/session-manager.ts +0 -262
  208. package/src/services/settings-resolver.ts +0 -74
  209. package/src/services/system-config-resolver.ts +0 -89
  210. package/src/services/system-skills-service.ts +0 -229
  211. package/src/services/transcription-service.ts +0 -684
  212. package/src/session.ts +0 -110
  213. package/src/spaces/index.ts +0 -1
  214. package/src/spaces/space-resolver.ts +0 -17
  215. package/src/stores/in-memory-agent-store.ts +0 -403
  216. package/src/stores/redis-agent-store.ts +0 -279
  217. package/src/utils/public-url.ts +0 -44
  218. package/src/utils/rate-limiter.ts +0 -94
  219. package/tsconfig.json +0 -33
package/src/platform.ts DELETED
@@ -1,318 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import type {
4
- CommandRegistry,
5
- InstructionProvider,
6
- UserSuggestion,
7
- } from "@lobu/core";
8
- import type { AgentMetadataStore } from "./auth/agent-metadata-store";
9
- import type { McpProxy } from "./auth/mcp/proxy";
10
- import type { ProviderOAuthStateStore } from "./auth/oauth/state-store";
11
- import type { AgentSettingsStore } from "./auth/settings";
12
- import type { ModelPreferenceStore } from "./auth/settings/model-preference-store";
13
- import type { UserAgentsStore } from "./auth/user-agents-store";
14
- import type { ChannelBindingService } from "./channels";
15
- import type { WorkerGateway } from "./gateway";
16
- import type { IMessageQueue, QueueProducer } from "./infrastructure/queue";
17
- import type { InteractionService } from "./interactions";
18
- import type { GrantStore } from "./permissions/grant-store";
19
- import type { IFileHandler } from "./platform/file-handler";
20
- import type { ResponseRenderer } from "./platform/response-renderer";
21
- import type { SecretProxy } from "./proxy/secret-proxy";
22
- import type { InstructionService } from "./services/instruction-service";
23
- import type { TranscriptionService } from "./services/transcription-service";
24
- import type { ISessionManager } from "./session";
25
-
26
- // ============================================================================
27
- // Core Services Interface
28
- // ============================================================================
29
-
30
- /**
31
- * Core services interface that platforms receive during initialization
32
- * This allows platforms to access shared infrastructure without tight coupling
33
- */
34
- export interface CoreServices {
35
- getQueue(): IMessageQueue;
36
- getQueueProducer(): QueueProducer;
37
- getSecretProxy(): SecretProxy | undefined;
38
- getWorkerGateway(): WorkerGateway | undefined;
39
- getMcpProxy(): McpProxy | undefined;
40
- getModelPreferenceStore(): ModelPreferenceStore | undefined;
41
- getOAuthStateStore(): ProviderOAuthStateStore | undefined;
42
- getPublicGatewayUrl(): string;
43
- getSessionManager(): ISessionManager;
44
- getInstructionService(): InstructionService | undefined;
45
- getInteractionService(): InteractionService;
46
- getAgentSettingsStore(): AgentSettingsStore;
47
- getChannelBindingService(): ChannelBindingService;
48
- getTranscriptionService(): TranscriptionService | undefined;
49
- getUserAgentsStore(): UserAgentsStore;
50
- getAgentMetadataStore(): AgentMetadataStore;
51
- getCommandRegistry(): CommandRegistry;
52
- getGrantStore(): GrantStore | undefined;
53
- }
54
-
55
- // ============================================================================
56
- // Platform Adapter Interface
57
- // ============================================================================
58
-
59
- /**
60
- * Interface that all platform adapters must implement
61
- * Platforms include: Slack, Discord, Teams, etc.
62
- *
63
- * Each platform adapter:
64
- * 1. Receives CoreServices during initialization
65
- * 2. Sets up platform-specific event handlers
66
- * 3. Manages its own platform client/connection
67
- * 4. Uses core services (MCP, Anthropic, Redis) provided by Gateway
68
- */
69
- export interface PlatformAdapter {
70
- /**
71
- * Platform name
72
- */
73
- readonly name: string;
74
-
75
- /**
76
- * Initialize the platform with core services
77
- * This is called by Gateway after core services are initialized
78
- *
79
- * @param services - Core services provided by Gateway
80
- */
81
- initialize(services: CoreServices): Promise<void>;
82
-
83
- /**
84
- * Start the platform (connect to platform API, start event listeners)
85
- * This is called after initialization
86
- */
87
- start(): Promise<void>;
88
-
89
- /**
90
- * Stop the platform gracefully
91
- */
92
- stop(): Promise<void>;
93
-
94
- /**
95
- * Check if platform is healthy and running
96
- */
97
- isHealthy(): boolean;
98
-
99
- /**
100
- * Optionally provide platform-specific instruction provider
101
- * Returns null if platform doesn't have custom instructions
102
- */
103
- getInstructionProvider?(): InstructionProvider | null;
104
-
105
- /**
106
- * Build platform-specific deployment metadata
107
- * This metadata is used for deployment annotations (e.g., thread URLs, team IDs)
108
- *
109
- * @param conversationId - The conversation identifier
110
- * @param channelId - The channel identifier
111
- * @param platformMetadata - Platform-specific metadata from the queue payload
112
- * @returns Record of metadata key-value pairs for deployment annotations
113
- */
114
- buildDeploymentMetadata(
115
- conversationId: string,
116
- channelId: string,
117
- platformMetadata: Record<string, any>
118
- ): Record<string, string>;
119
-
120
- /**
121
- * Render non-blocking suggestions
122
- * Platform should display this as suggested prompts/quick replies
123
- *
124
- * @param suggestion - The suggestions to render
125
- */
126
- renderSuggestion?(suggestion: UserSuggestion): Promise<void>;
127
-
128
- /**
129
- * Set conversation status indicator
130
- * Used to show "is running...", "Waiting for approval...", etc.
131
- * Pass null/undefined to clear the status
132
- *
133
- * @param channelId - Channel identifier
134
- * @param conversationId - Conversation identifier
135
- * @param status - Status message to display, or null to clear
136
- */
137
- setThreadStatus?(
138
- channelId: string,
139
- conversationId: string,
140
- status: string | null
141
- ): Promise<void>;
142
-
143
- /**
144
- * Check if the provided token matches the platform's configured bot token
145
- * Used to detect self-messaging for direct queueing
146
- *
147
- * @param token - Token to check
148
- * @returns True if this is the platform's own bot token
149
- */
150
- isOwnBotToken?(token: string): boolean;
151
-
152
- /**
153
- * Send a message via the messaging API
154
- * Uses polymorphic routing info extracted from the request
155
- *
156
- * @param token - Auth token from request
157
- * @param message - Message text to send (use @me to mention the bot)
158
- * @param options - Routing and file options
159
- * @param options.agentId - Universal session identifier
160
- * @param options.channelId - Platform-specific channel (or agentId for API)
161
- * @param options.conversationId - Platform-specific conversation (or agentId for API)
162
- * @param options.teamId - Platform-specific team/workspace
163
- * @param options.files - Files to upload with the message (up to 10)
164
- * @returns Message metadata
165
- */
166
- sendMessage?(
167
- token: string,
168
- message: string,
169
- options: {
170
- agentId: string;
171
- channelId: string;
172
- conversationId?: string;
173
- teamId: string;
174
- files?: Array<{ buffer: Buffer; filename: string }>;
175
- }
176
- ): Promise<{
177
- messageId: string;
178
- eventsUrl?: string;
179
- queued?: boolean;
180
- }>;
181
-
182
- /**
183
- * Render authentication status for OAuth providers (MCP servers, Claude, etc.)
184
- * Displays connection status in platform-specific UI (e.g., Slack home tab)
185
- *
186
- * @param userId - User ID to render status for
187
- * @param providers - Array of OAuth providers with their connection status
188
- * @returns Promise that resolves when rendering is complete
189
- */
190
- renderAuthStatus?(
191
- userId: string,
192
- providers: Array<{
193
- id: string;
194
- name: string;
195
- isAuthenticated: boolean;
196
- loginUrl?: string;
197
- logoutUrl?: string;
198
- metadata?: Record<string, any>;
199
- }>
200
- ): Promise<void>;
201
-
202
- /**
203
- * Get the file handler for this platform.
204
- * Used by the file upload/download routes to route files
205
- * to the correct platform-specific handler.
206
- */
207
- getFileHandler?(): IFileHandler | undefined;
208
-
209
- /**
210
- * Get the response renderer for this platform.
211
- * Used by the unified thread response consumer to route responses
212
- * to platform-specific rendering logic.
213
- *
214
- * @returns ResponseRenderer instance or undefined if platform handles responses differently
215
- */
216
- getResponseRenderer?(): ResponseRenderer | undefined;
217
-
218
- /**
219
- * Check if a channel ID represents a group/channel vs a DM.
220
- * Used by space-resolver to determine space type.
221
- *
222
- * @param channelId - Channel identifier to check
223
- * @returns True if this is a group/channel, false if DM
224
- */
225
- isGroupChannel?(channelId: string): boolean;
226
-
227
- /**
228
- * Get display information for the platform.
229
- * Used in UI to show platform-specific icons and names.
230
- *
231
- * @returns Display info with name and icon (SVG or emoji)
232
- */
233
- getDisplayInfo?(): {
234
- /** Human-readable platform name */
235
- name: string;
236
- /** SVG icon markup or emoji */
237
- icon: string;
238
- /** Optional logo URL */
239
- logoUrl?: string;
240
- };
241
-
242
- /**
243
- * Extract routing info from platform-specific request body.
244
- * Used by messaging API to parse platform-specific fields.
245
- *
246
- * @param body - Request body with platform-specific fields
247
- * @returns Routing info or null if platform fields are missing/invalid
248
- */
249
- extractRoutingInfo?(body: Record<string, unknown>): {
250
- channelId: string;
251
- conversationId?: string;
252
- teamId?: string;
253
- } | null;
254
-
255
- /**
256
- * Get conversation history for a channel/thread.
257
- * Used by the GetChannelHistory tool to fetch past messages.
258
- *
259
- * @param channelId - Channel/chat identifier
260
- * @param conversationId - Conversation identifier (optional)
261
- * @param limit - Maximum number of messages to return
262
- * @param before - ISO timestamp cursor for pagination
263
- * @returns History response with messages and pagination info
264
- */
265
- getConversationHistory?(
266
- channelId: string,
267
- conversationId: string | undefined,
268
- limit: number,
269
- before: string | undefined
270
- ): Promise<{
271
- messages: Array<{
272
- timestamp: string;
273
- user: string;
274
- text: string;
275
- isBot?: boolean;
276
- }>;
277
- nextCursor: string | null;
278
- hasMore: boolean;
279
- }>;
280
- }
281
-
282
- // ============================================================================
283
- // Platform Registry
284
- // ============================================================================
285
-
286
- /**
287
- * Global registry for platform adapters
288
- * Allows deployment managers and other services to access platform-specific functionality
289
- */
290
- export class PlatformRegistry {
291
- private platforms: Map<string, PlatformAdapter> = new Map();
292
-
293
- /**
294
- * Register a platform adapter
295
- */
296
- register(platform: PlatformAdapter): void {
297
- this.platforms.set(platform.name, platform);
298
- }
299
-
300
- /**
301
- * Get a platform by name
302
- */
303
- get(name: string): PlatformAdapter | undefined {
304
- return this.platforms.get(name);
305
- }
306
-
307
- /**
308
- * Get list of available platform names
309
- */
310
- getAvailablePlatforms(): string[] {
311
- return Array.from(this.platforms.keys());
312
- }
313
- }
314
-
315
- /**
316
- * Global platform registry instance
317
- */
318
- export const platformRegistry = new PlatformRegistry();