@runanywhere/web 0.1.0-beta.1

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 (205) hide show
  1. package/README.md +795 -0
  2. package/dist/Foundation/ErrorTypes.d.ts +61 -0
  3. package/dist/Foundation/ErrorTypes.d.ts.map +1 -0
  4. package/dist/Foundation/ErrorTypes.js +90 -0
  5. package/dist/Foundation/ErrorTypes.js.map +1 -0
  6. package/dist/Foundation/EventBus.d.ts +171 -0
  7. package/dist/Foundation/EventBus.d.ts.map +1 -0
  8. package/dist/Foundation/EventBus.js +113 -0
  9. package/dist/Foundation/EventBus.js.map +1 -0
  10. package/dist/Foundation/PlatformAdapter.d.ts +101 -0
  11. package/dist/Foundation/PlatformAdapter.d.ts.map +1 -0
  12. package/dist/Foundation/PlatformAdapter.js +417 -0
  13. package/dist/Foundation/PlatformAdapter.js.map +1 -0
  14. package/dist/Foundation/SDKLogger.d.ts +33 -0
  15. package/dist/Foundation/SDKLogger.d.ts.map +1 -0
  16. package/dist/Foundation/SDKLogger.js +82 -0
  17. package/dist/Foundation/SDKLogger.js.map +1 -0
  18. package/dist/Foundation/SherpaONNXBridge.d.ts +134 -0
  19. package/dist/Foundation/SherpaONNXBridge.d.ts.map +1 -0
  20. package/dist/Foundation/SherpaONNXBridge.js +332 -0
  21. package/dist/Foundation/SherpaONNXBridge.js.map +1 -0
  22. package/dist/Foundation/StructOffsets.d.ts +147 -0
  23. package/dist/Foundation/StructOffsets.d.ts.map +1 -0
  24. package/dist/Foundation/StructOffsets.js +161 -0
  25. package/dist/Foundation/StructOffsets.js.map +1 -0
  26. package/dist/Foundation/WASMBridge.d.ts +241 -0
  27. package/dist/Foundation/WASMBridge.d.ts.map +1 -0
  28. package/dist/Foundation/WASMBridge.js +393 -0
  29. package/dist/Foundation/WASMBridge.js.map +1 -0
  30. package/dist/Infrastructure/ArchiveUtility.d.ts +25 -0
  31. package/dist/Infrastructure/ArchiveUtility.d.ts.map +1 -0
  32. package/dist/Infrastructure/ArchiveUtility.js +139 -0
  33. package/dist/Infrastructure/ArchiveUtility.js.map +1 -0
  34. package/dist/Infrastructure/AudioCapture.d.ts +87 -0
  35. package/dist/Infrastructure/AudioCapture.d.ts.map +1 -0
  36. package/dist/Infrastructure/AudioCapture.js +231 -0
  37. package/dist/Infrastructure/AudioCapture.js.map +1 -0
  38. package/dist/Infrastructure/AudioPlayback.d.ts +53 -0
  39. package/dist/Infrastructure/AudioPlayback.d.ts.map +1 -0
  40. package/dist/Infrastructure/AudioPlayback.js +117 -0
  41. package/dist/Infrastructure/AudioPlayback.js.map +1 -0
  42. package/dist/Infrastructure/DeviceCapabilities.d.ts +39 -0
  43. package/dist/Infrastructure/DeviceCapabilities.d.ts.map +1 -0
  44. package/dist/Infrastructure/DeviceCapabilities.js +111 -0
  45. package/dist/Infrastructure/DeviceCapabilities.js.map +1 -0
  46. package/dist/Infrastructure/ExtensionRegistry.d.ts +30 -0
  47. package/dist/Infrastructure/ExtensionRegistry.d.ts.map +1 -0
  48. package/dist/Infrastructure/ExtensionRegistry.js +41 -0
  49. package/dist/Infrastructure/ExtensionRegistry.js.map +1 -0
  50. package/dist/Infrastructure/ModelDownloader.d.ts +98 -0
  51. package/dist/Infrastructure/ModelDownloader.d.ts.map +1 -0
  52. package/dist/Infrastructure/ModelDownloader.js +431 -0
  53. package/dist/Infrastructure/ModelDownloader.js.map +1 -0
  54. package/dist/Infrastructure/ModelLoaderTypes.d.ts +34 -0
  55. package/dist/Infrastructure/ModelLoaderTypes.d.ts.map +1 -0
  56. package/dist/Infrastructure/ModelLoaderTypes.js +12 -0
  57. package/dist/Infrastructure/ModelLoaderTypes.js.map +1 -0
  58. package/dist/Infrastructure/ModelManager.d.ts +219 -0
  59. package/dist/Infrastructure/ModelManager.d.ts.map +1 -0
  60. package/dist/Infrastructure/ModelManager.js +885 -0
  61. package/dist/Infrastructure/ModelManager.js.map +1 -0
  62. package/dist/Infrastructure/ModelRegistry.d.ts +131 -0
  63. package/dist/Infrastructure/ModelRegistry.d.ts.map +1 -0
  64. package/dist/Infrastructure/ModelRegistry.js +122 -0
  65. package/dist/Infrastructure/ModelRegistry.js.map +1 -0
  66. package/dist/Infrastructure/OPFSStorage.d.ts +143 -0
  67. package/dist/Infrastructure/OPFSStorage.d.ts.map +1 -0
  68. package/dist/Infrastructure/OPFSStorage.js +330 -0
  69. package/dist/Infrastructure/OPFSStorage.js.map +1 -0
  70. package/dist/Infrastructure/VLMWorkerBridge.d.ts +211 -0
  71. package/dist/Infrastructure/VLMWorkerBridge.d.ts.map +1 -0
  72. package/dist/Infrastructure/VLMWorkerBridge.js +264 -0
  73. package/dist/Infrastructure/VLMWorkerBridge.js.map +1 -0
  74. package/dist/Infrastructure/VLMWorkerRuntime.d.ts +38 -0
  75. package/dist/Infrastructure/VLMWorkerRuntime.d.ts.map +1 -0
  76. package/dist/Infrastructure/VLMWorkerRuntime.js +503 -0
  77. package/dist/Infrastructure/VLMWorkerRuntime.js.map +1 -0
  78. package/dist/Infrastructure/VideoCapture.d.ts +118 -0
  79. package/dist/Infrastructure/VideoCapture.d.ts.map +1 -0
  80. package/dist/Infrastructure/VideoCapture.js +207 -0
  81. package/dist/Infrastructure/VideoCapture.js.map +1 -0
  82. package/dist/Public/Extensions/DiffusionTypes.d.ts +64 -0
  83. package/dist/Public/Extensions/DiffusionTypes.d.ts.map +1 -0
  84. package/dist/Public/Extensions/DiffusionTypes.js +28 -0
  85. package/dist/Public/Extensions/DiffusionTypes.js.map +1 -0
  86. package/dist/Public/Extensions/EmbeddingsTypes.d.ts +33 -0
  87. package/dist/Public/Extensions/EmbeddingsTypes.d.ts.map +1 -0
  88. package/dist/Public/Extensions/EmbeddingsTypes.js +13 -0
  89. package/dist/Public/Extensions/EmbeddingsTypes.js.map +1 -0
  90. package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts +44 -0
  91. package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts.map +1 -0
  92. package/dist/Public/Extensions/RunAnywhere+Diffusion.js +189 -0
  93. package/dist/Public/Extensions/RunAnywhere+Diffusion.js.map +1 -0
  94. package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts +56 -0
  95. package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts.map +1 -0
  96. package/dist/Public/Extensions/RunAnywhere+Embeddings.js +240 -0
  97. package/dist/Public/Extensions/RunAnywhere+Embeddings.js.map +1 -0
  98. package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts +53 -0
  99. package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts.map +1 -0
  100. package/dist/Public/Extensions/RunAnywhere+ModelManagement.js +153 -0
  101. package/dist/Public/Extensions/RunAnywhere+ModelManagement.js.map +1 -0
  102. package/dist/Public/Extensions/RunAnywhere+STT.d.ts +95 -0
  103. package/dist/Public/Extensions/RunAnywhere+STT.d.ts.map +1 -0
  104. package/dist/Public/Extensions/RunAnywhere+STT.js +417 -0
  105. package/dist/Public/Extensions/RunAnywhere+STT.js.map +1 -0
  106. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts +69 -0
  107. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts.map +1 -0
  108. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js +196 -0
  109. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js.map +1 -0
  110. package/dist/Public/Extensions/RunAnywhere+TTS.d.ts +55 -0
  111. package/dist/Public/Extensions/RunAnywhere+TTS.d.ts.map +1 -0
  112. package/dist/Public/Extensions/RunAnywhere+TTS.js +253 -0
  113. package/dist/Public/Extensions/RunAnywhere+TTS.js.map +1 -0
  114. package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts +80 -0
  115. package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts.map +1 -0
  116. package/dist/Public/Extensions/RunAnywhere+TextGeneration.js +436 -0
  117. package/dist/Public/Extensions/RunAnywhere+TextGeneration.js.map +1 -0
  118. package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts +82 -0
  119. package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts.map +1 -0
  120. package/dist/Public/Extensions/RunAnywhere+ToolCalling.js +576 -0
  121. package/dist/Public/Extensions/RunAnywhere+ToolCalling.js.map +1 -0
  122. package/dist/Public/Extensions/RunAnywhere+VAD.d.ts +70 -0
  123. package/dist/Public/Extensions/RunAnywhere+VAD.d.ts.map +1 -0
  124. package/dist/Public/Extensions/RunAnywhere+VAD.js +231 -0
  125. package/dist/Public/Extensions/RunAnywhere+VAD.js.map +1 -0
  126. package/dist/Public/Extensions/RunAnywhere+VLM.d.ts +58 -0
  127. package/dist/Public/Extensions/RunAnywhere+VLM.d.ts.map +1 -0
  128. package/dist/Public/Extensions/RunAnywhere+VLM.js +262 -0
  129. package/dist/Public/Extensions/RunAnywhere+VLM.js.map +1 -0
  130. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts +49 -0
  131. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts.map +1 -0
  132. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js +222 -0
  133. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js.map +1 -0
  134. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts +63 -0
  135. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts.map +1 -0
  136. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js +168 -0
  137. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js.map +1 -0
  138. package/dist/Public/Extensions/STTTypes.d.ts +53 -0
  139. package/dist/Public/Extensions/STTTypes.d.ts.map +1 -0
  140. package/dist/Public/Extensions/STTTypes.js +16 -0
  141. package/dist/Public/Extensions/STTTypes.js.map +1 -0
  142. package/dist/Public/Extensions/TTSTypes.d.ts +31 -0
  143. package/dist/Public/Extensions/TTSTypes.d.ts.map +1 -0
  144. package/dist/Public/Extensions/TTSTypes.js +3 -0
  145. package/dist/Public/Extensions/TTSTypes.js.map +1 -0
  146. package/dist/Public/Extensions/ToolCallingTypes.d.ts +78 -0
  147. package/dist/Public/Extensions/ToolCallingTypes.d.ts.map +1 -0
  148. package/dist/Public/Extensions/ToolCallingTypes.js +8 -0
  149. package/dist/Public/Extensions/ToolCallingTypes.js.map +1 -0
  150. package/dist/Public/Extensions/VADTypes.d.ts +30 -0
  151. package/dist/Public/Extensions/VADTypes.d.ts.map +1 -0
  152. package/dist/Public/Extensions/VADTypes.js +8 -0
  153. package/dist/Public/Extensions/VADTypes.js.map +1 -0
  154. package/dist/Public/Extensions/VLMTypes.d.ts +56 -0
  155. package/dist/Public/Extensions/VLMTypes.d.ts.map +1 -0
  156. package/dist/Public/Extensions/VLMTypes.js +24 -0
  157. package/dist/Public/Extensions/VLMTypes.js.map +1 -0
  158. package/dist/Public/Extensions/VoiceAgentTypes.d.ts +42 -0
  159. package/dist/Public/Extensions/VoiceAgentTypes.d.ts.map +1 -0
  160. package/dist/Public/Extensions/VoiceAgentTypes.js +12 -0
  161. package/dist/Public/Extensions/VoiceAgentTypes.js.map +1 -0
  162. package/dist/Public/Extensions/VoicePipelineTypes.d.ts +69 -0
  163. package/dist/Public/Extensions/VoicePipelineTypes.d.ts.map +1 -0
  164. package/dist/Public/Extensions/VoicePipelineTypes.js +9 -0
  165. package/dist/Public/Extensions/VoicePipelineTypes.js.map +1 -0
  166. package/dist/Public/RunAnywhere.d.ts +121 -0
  167. package/dist/Public/RunAnywhere.d.ts.map +1 -0
  168. package/dist/Public/RunAnywhere.js +332 -0
  169. package/dist/Public/RunAnywhere.js.map +1 -0
  170. package/dist/index.d.ts +67 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +53 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/types/LLMTypes.d.ts +48 -0
  175. package/dist/types/LLMTypes.d.ts.map +1 -0
  176. package/dist/types/LLMTypes.js +8 -0
  177. package/dist/types/LLMTypes.js.map +1 -0
  178. package/dist/types/enums.d.ts +144 -0
  179. package/dist/types/enums.d.ts.map +1 -0
  180. package/dist/types/enums.js +159 -0
  181. package/dist/types/enums.js.map +1 -0
  182. package/dist/types/index.d.ts +9 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +8 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/models.d.ts +154 -0
  187. package/dist/types/models.d.ts.map +1 -0
  188. package/dist/types/models.js +8 -0
  189. package/dist/types/models.js.map +1 -0
  190. package/dist/workers/vlm-worker.d.ts +9 -0
  191. package/dist/workers/vlm-worker.d.ts.map +1 -0
  192. package/dist/workers/vlm-worker.js +10 -0
  193. package/dist/workers/vlm-worker.js.map +1 -0
  194. package/package.json +62 -0
  195. package/wasm/racommons-webgpu.js +156 -0
  196. package/wasm/racommons-webgpu.wasm +0 -0
  197. package/wasm/racommons.js +126 -0
  198. package/wasm/racommons.wasm +0 -0
  199. package/wasm/sherpa/sherpa-onnx-asr.js +1538 -0
  200. package/wasm/sherpa/sherpa-onnx-glue-original.js +19 -0
  201. package/wasm/sherpa/sherpa-onnx-glue.js +17 -0
  202. package/wasm/sherpa/sherpa-onnx-tts.js +657 -0
  203. package/wasm/sherpa/sherpa-onnx-vad.js +337 -0
  204. package/wasm/sherpa/sherpa-onnx-wave.js +88 -0
  205. package/wasm/sherpa/sherpa-onnx.wasm +0 -0
@@ -0,0 +1,417 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Platform Adapter
3
+ *
4
+ * Implements rac_platform_adapter_t callbacks using browser Web APIs.
5
+ * This is the web equivalent of:
6
+ * - SwiftPlatformAdapter (iOS)
7
+ * - KotlinPlatformAdapter (Android/JVM)
8
+ * - DartPlatformAdapter (Flutter)
9
+ *
10
+ * Each callback is registered as a C function pointer via Emscripten's
11
+ * Module.addFunction(), then written into the rac_platform_adapter_t
12
+ * struct in WASM memory.
13
+ */
14
+ import { WASMBridge } from './WASMBridge';
15
+ import { SDKLogger } from './SDKLogger';
16
+ const logger = new SDKLogger('PlatformAdapter');
17
+ /**
18
+ * PlatformAdapter - Bridges browser Web APIs to RACommons C callbacks.
19
+ *
20
+ * The rac_platform_adapter_t struct is a collection of C function pointers.
21
+ * JavaScript provides implementations via Emscripten's addFunction(),
22
+ * which creates callable C function pointers from JS closures.
23
+ */
24
+ export class PlatformAdapter {
25
+ callbacks = null;
26
+ adapterPtr = 0;
27
+ /**
28
+ * Create and register the platform adapter with RACommons.
29
+ * Must be called after WASM module is loaded but before rac_init().
30
+ */
31
+ register() {
32
+ const bridge = WASMBridge.shared;
33
+ const m = bridge.module;
34
+ logger.info('Registering platform adapter callbacks...');
35
+ // Allocate the rac_platform_adapter_t struct
36
+ const adapterSize = m._rac_wasm_sizeof_platform_adapter();
37
+ this.adapterPtr = m._malloc(adapterSize);
38
+ // Zero-initialize
39
+ for (let i = 0; i < adapterSize; i++) {
40
+ m.setValue(this.adapterPtr + i, 0, 'i8');
41
+ }
42
+ // Register each callback as a C function pointer
43
+ this.callbacks = {
44
+ fileExists: this.registerFileExists(m),
45
+ fileRead: this.registerFileRead(m),
46
+ fileWrite: this.registerFileWrite(m),
47
+ fileDelete: this.registerFileDelete(m),
48
+ secureGet: this.registerSecureGet(m),
49
+ secureSet: this.registerSecureSet(m),
50
+ secureDelete: this.registerSecureDelete(m),
51
+ log: this.registerLog(m),
52
+ nowMs: this.registerNowMs(m),
53
+ getMemoryInfo: this.registerGetMemoryInfo(m),
54
+ httpDownload: this.registerHttpDownload(m),
55
+ extractArchive: this.registerExtractArchive(m),
56
+ };
57
+ // Write function pointers into the struct.
58
+ // The struct layout matches rac_platform_adapter.h field order.
59
+ // Each field is a function pointer (4 bytes on wasm32).
60
+ const PTR_SIZE = 4;
61
+ let offset = 0;
62
+ m.setValue(this.adapterPtr + offset, this.callbacks.fileExists, '*');
63
+ offset += PTR_SIZE;
64
+ m.setValue(this.adapterPtr + offset, this.callbacks.fileRead, '*');
65
+ offset += PTR_SIZE;
66
+ m.setValue(this.adapterPtr + offset, this.callbacks.fileWrite, '*');
67
+ offset += PTR_SIZE;
68
+ m.setValue(this.adapterPtr + offset, this.callbacks.fileDelete, '*');
69
+ offset += PTR_SIZE;
70
+ m.setValue(this.adapterPtr + offset, this.callbacks.secureGet, '*');
71
+ offset += PTR_SIZE;
72
+ m.setValue(this.adapterPtr + offset, this.callbacks.secureSet, '*');
73
+ offset += PTR_SIZE;
74
+ m.setValue(this.adapterPtr + offset, this.callbacks.secureDelete, '*');
75
+ offset += PTR_SIZE;
76
+ m.setValue(this.adapterPtr + offset, this.callbacks.log, '*');
77
+ offset += PTR_SIZE;
78
+ // track_error: optional, set to 0 (null)
79
+ m.setValue(this.adapterPtr + offset, 0, '*');
80
+ offset += PTR_SIZE;
81
+ m.setValue(this.adapterPtr + offset, this.callbacks.nowMs, '*');
82
+ offset += PTR_SIZE;
83
+ m.setValue(this.adapterPtr + offset, this.callbacks.getMemoryInfo, '*');
84
+ offset += PTR_SIZE;
85
+ m.setValue(this.adapterPtr + offset, this.callbacks.httpDownload, '*');
86
+ offset += PTR_SIZE;
87
+ // http_download_cancel: optional, set to 0 (null)
88
+ m.setValue(this.adapterPtr + offset, 0, '*');
89
+ offset += PTR_SIZE;
90
+ m.setValue(this.adapterPtr + offset, this.callbacks.extractArchive, '*');
91
+ offset += PTR_SIZE;
92
+ // user_data: set to 0 (null)
93
+ m.setValue(this.adapterPtr + offset, 0, '*');
94
+ // Register with RACommons
95
+ const result = m._rac_set_platform_adapter(this.adapterPtr);
96
+ if (result !== 0) {
97
+ logger.error(`Failed to set platform adapter: ${result}`);
98
+ this.cleanup();
99
+ return;
100
+ }
101
+ logger.info('Platform adapter registered successfully');
102
+ }
103
+ /**
104
+ * Get the WASM pointer to the adapter struct.
105
+ * Used by RunAnywhere.initialize() to populate rac_config_t.
106
+ */
107
+ getAdapterPtr() {
108
+ return this.adapterPtr;
109
+ }
110
+ /**
111
+ * Clean up allocated callbacks and memory.
112
+ */
113
+ cleanup() {
114
+ const m = WASMBridge.shared.module;
115
+ if (this.callbacks) {
116
+ for (const ptr of Object.values(this.callbacks)) {
117
+ if (ptr !== 0) {
118
+ try {
119
+ m.removeFunction(ptr);
120
+ }
121
+ catch { /* ignore */ }
122
+ }
123
+ }
124
+ this.callbacks = null;
125
+ }
126
+ if (this.adapterPtr !== 0) {
127
+ m._free(this.adapterPtr);
128
+ this.adapterPtr = 0;
129
+ }
130
+ }
131
+ // -----------------------------------------------------------------------
132
+ // Callback Implementations
133
+ // -----------------------------------------------------------------------
134
+ /** file_exists: rac_bool_t (*)(const char* path, void* user_data) */
135
+ registerFileExists(m) {
136
+ return m.addFunction((pathPtr, _userData) => {
137
+ try {
138
+ const path = m.UTF8ToString(pathPtr);
139
+ const result = m.FS.analyzePath(path);
140
+ return result.exists ? 1 : 0;
141
+ }
142
+ catch {
143
+ return 0;
144
+ }
145
+ }, 'iii');
146
+ }
147
+ /** file_read: rac_result_t (*)(const char* path, void** out_data, size_t* out_size, void* user_data) */
148
+ registerFileRead(m) {
149
+ return m.addFunction((pathPtr, outDataPtr, outSizePtr, _userData) => {
150
+ try {
151
+ const path = m.UTF8ToString(pathPtr);
152
+ const data = m.FS.readFile(path);
153
+ const wasmPtr = m._malloc(data.length);
154
+ WASMBridge.shared.writeBytes(data, wasmPtr);
155
+ m.setValue(outDataPtr, wasmPtr, '*');
156
+ m.setValue(outSizePtr, data.length, 'i32');
157
+ return 0; // RAC_OK
158
+ }
159
+ catch {
160
+ return -182; // RAC_ERROR_FILE_NOT_FOUND
161
+ }
162
+ }, 'iiiii');
163
+ }
164
+ /** file_write: rac_result_t (*)(const char* path, const void* data, size_t size, void* user_data) */
165
+ registerFileWrite(m) {
166
+ return m.addFunction((pathPtr, dataPtr, size, _userData) => {
167
+ try {
168
+ const path = m.UTF8ToString(pathPtr);
169
+ const data = WASMBridge.shared.readBytes(dataPtr, size);
170
+ m.FS.writeFile(path, data);
171
+ return 0;
172
+ }
173
+ catch {
174
+ return -183; // RAC_ERROR_FILE_WRITE_FAILED
175
+ }
176
+ }, 'iiiii');
177
+ }
178
+ /** file_delete: rac_result_t (*)(const char* path, void* user_data) */
179
+ registerFileDelete(m) {
180
+ return m.addFunction((pathPtr, _userData) => {
181
+ try {
182
+ const path = m.UTF8ToString(pathPtr);
183
+ m.FS.unlink(path);
184
+ return 0;
185
+ }
186
+ catch {
187
+ return -182;
188
+ }
189
+ }, 'iii');
190
+ }
191
+ /**
192
+ * secure_get: rac_result_t (*)(const char* key, char** out_value, void* user_data)
193
+ *
194
+ * SECURITY NOTE: On web, "secure" storage uses localStorage which is NOT
195
+ * truly secure. Data is accessible to any script running on the same origin
196
+ * (including XSS attacks). Do NOT store sensitive secrets (API keys, tokens,
197
+ * PII) here. On native platforms (iOS/Android) the equivalent callback uses
198
+ * Keychain / KeyStore which are hardware-backed and encrypted.
199
+ *
200
+ * For the web platform this is intentionally best-effort: the RACommons C
201
+ * layer only uses it for non-sensitive SDK state (e.g. cached environment).
202
+ */
203
+ registerSecureGet(m) {
204
+ return m.addFunction((keyPtr, outValuePtr, _userData) => {
205
+ try {
206
+ const key = m.UTF8ToString(keyPtr);
207
+ const value = localStorage.getItem(`rac_sdk_${key}`);
208
+ if (value === null) {
209
+ m.setValue(outValuePtr, 0, '*');
210
+ return -182;
211
+ }
212
+ const strPtr = WASMBridge.shared.allocString(value);
213
+ m.setValue(outValuePtr, strPtr, '*');
214
+ return 0;
215
+ }
216
+ catch {
217
+ return -180;
218
+ }
219
+ }, 'iiii');
220
+ }
221
+ /**
222
+ * secure_set: rac_result_t (*)(const char* key, const char* value, void* user_data)
223
+ *
224
+ * SECURITY NOTE: See registerSecureGet — localStorage is NOT secure on web.
225
+ * Do not use for sensitive data.
226
+ */
227
+ registerSecureSet(m) {
228
+ return m.addFunction((keyPtr, valuePtr, _userData) => {
229
+ try {
230
+ const key = m.UTF8ToString(keyPtr);
231
+ const value = m.UTF8ToString(valuePtr);
232
+ localStorage.setItem(`rac_sdk_${key}`, value);
233
+ return 0;
234
+ }
235
+ catch {
236
+ return -180;
237
+ }
238
+ }, 'iiii');
239
+ }
240
+ /**
241
+ * secure_delete: rac_result_t (*)(const char* key, void* user_data)
242
+ *
243
+ * SECURITY NOTE: See registerSecureGet — localStorage is NOT secure on web.
244
+ */
245
+ registerSecureDelete(m) {
246
+ return m.addFunction((keyPtr, _userData) => {
247
+ try {
248
+ const key = m.UTF8ToString(keyPtr);
249
+ localStorage.removeItem(`rac_sdk_${key}`);
250
+ return 0;
251
+ }
252
+ catch {
253
+ return -180;
254
+ }
255
+ }, 'iii');
256
+ }
257
+ /** log: void (*)(rac_log_level_t level, const char* category, const char* message, void* user_data) */
258
+ registerLog(m) {
259
+ return m.addFunction((level, categoryPtr, messagePtr, _userData) => {
260
+ const category = m.UTF8ToString(categoryPtr);
261
+ const message = m.UTF8ToString(messagePtr);
262
+ const prefix = `[RAC:${category}]`;
263
+ switch (level) {
264
+ case 0: // TRACE
265
+ case 1: // DEBUG
266
+ console.debug(prefix, message);
267
+ break;
268
+ case 2: // INFO
269
+ console.info(prefix, message);
270
+ break;
271
+ case 3: // WARNING
272
+ console.warn(prefix, message);
273
+ break;
274
+ case 4: // ERROR
275
+ case 5: // FATAL
276
+ console.error(prefix, message);
277
+ break;
278
+ default:
279
+ console.log(prefix, message);
280
+ }
281
+ }, 'viiii');
282
+ }
283
+ /** now_ms: int64_t (*)(void* user_data) */
284
+ registerNowMs(m) {
285
+ // Note: Emscripten represents int64_t as two i32 values (lo, hi) in some cases.
286
+ // For simplicity, we use 'ii' return (returns i32 which truncates but is fine for ms).
287
+ return m.addFunction((_userData) => {
288
+ return Date.now();
289
+ }, 'ii');
290
+ }
291
+ /** get_memory_info: rac_result_t (*)(rac_memory_info_t* out_info, void* user_data) */
292
+ registerGetMemoryInfo(m) {
293
+ return m.addFunction((outInfoPtr, _userData) => {
294
+ try {
295
+ // rac_memory_info_t: { uint64_t total, available, used }
296
+ // Estimate browser memory
297
+ const nav = navigator;
298
+ const totalMB = nav.deviceMemory ?? 4; // deviceMemory API (GB)
299
+ const totalBytes = totalMB * 1024 * 1024 * 1024;
300
+ // performance.memory is Chrome-only (non-standard)
301
+ const perf = performance;
302
+ const jsHeapUsed = perf.memory?.usedJSHeapSize ?? 0;
303
+ const jsHeapTotal = perf.memory?.jsHeapSizeLimit ?? totalBytes;
304
+ // Write as uint64 (two i32 values each for wasm32)
305
+ // Simplified: write lower 32 bits only
306
+ m.setValue(outInfoPtr, jsHeapTotal & 0xFFFFFFFF, 'i32'); // total low
307
+ m.setValue(outInfoPtr + 4, 0, 'i32'); // total high
308
+ m.setValue(outInfoPtr + 8, (jsHeapTotal - jsHeapUsed) & 0xFFFFFFFF, 'i32'); // available low
309
+ m.setValue(outInfoPtr + 12, 0, 'i32'); // available high
310
+ m.setValue(outInfoPtr + 16, jsHeapUsed & 0xFFFFFFFF, 'i32'); // used low
311
+ m.setValue(outInfoPtr + 20, 0, 'i32'); // used high
312
+ return 0;
313
+ }
314
+ catch {
315
+ return -180;
316
+ }
317
+ }, 'iii');
318
+ }
319
+ /**
320
+ * http_download: rac_result_t (*)(const char* url, const char* dest_path,
321
+ * progress_cb, complete_cb, void* cb_user_data, char** out_task_id, void* user_data)
322
+ * Note: 7 params in C
323
+ */
324
+ registerHttpDownload(m) {
325
+ return m.addFunction((urlPtr, destPathPtr, progressCbPtr, completeCbPtr, cbUserData, outTaskIdPtr, _userData) => {
326
+ const url = m.UTF8ToString(urlPtr);
327
+ const destPath = m.UTF8ToString(destPathPtr);
328
+ // Generate task ID string
329
+ const taskId = `dl_${Date.now()}`;
330
+ if (outTaskIdPtr !== 0) {
331
+ const strPtr = WASMBridge.shared.allocString(taskId);
332
+ m.setValue(outTaskIdPtr, strPtr, '*');
333
+ }
334
+ // Async download via fetch
335
+ this.performDownload(m, url, destPath, progressCbPtr, completeCbPtr, cbUserData)
336
+ .catch((err) => {
337
+ logger.error(`Download failed: ${err}`);
338
+ });
339
+ return 0;
340
+ }, 'iiiiiiii');
341
+ }
342
+ /**
343
+ * extract_archive: rac_result_t (*)(const char* archive_path, const char* dest_dir,
344
+ * progress_cb, void* cb_user_data, void* user_data)
345
+ * Note: 5 params in C
346
+ */
347
+ registerExtractArchive(m) {
348
+ return m.addFunction((_archivePtr, _destPtr, _progressCb, _cbUserData, _userData) => {
349
+ // Archive extraction not yet implemented for WASM
350
+ logger.warning('Archive extraction not yet implemented for WASM');
351
+ return -180;
352
+ }, 'iiiiii');
353
+ }
354
+ // -----------------------------------------------------------------------
355
+ // Helpers
356
+ // -----------------------------------------------------------------------
357
+ /**
358
+ * Perform an HTTP download using fetch() and stream to Emscripten FS.
359
+ */
360
+ async performDownload(m, url, destPath, progressCbPtr, completeCbPtr, cbUserData) {
361
+ try {
362
+ const response = await fetch(url);
363
+ if (!response.ok) {
364
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
365
+ }
366
+ const contentLength = parseInt(response.headers.get('content-length') ?? '0', 10);
367
+ const reader = response.body?.getReader();
368
+ if (!reader) {
369
+ throw new Error('ReadableStream not supported');
370
+ }
371
+ const chunks = [];
372
+ let downloaded = 0;
373
+ while (true) {
374
+ const { done, value } = await reader.read();
375
+ if (done)
376
+ break;
377
+ chunks.push(value);
378
+ downloaded += value.length;
379
+ // Report progress via C callback
380
+ if (progressCbPtr !== 0) {
381
+ m.dynCall('viii', progressCbPtr, [downloaded, contentLength, cbUserData]);
382
+ }
383
+ }
384
+ // Combine chunks and write to Emscripten FS
385
+ const totalData = new Uint8Array(downloaded);
386
+ let offset = 0;
387
+ for (const chunk of chunks) {
388
+ totalData.set(chunk, offset);
389
+ offset += chunk.length;
390
+ }
391
+ // Ensure parent directory exists
392
+ const parentDir = destPath.substring(0, destPath.lastIndexOf('/'));
393
+ if (parentDir) {
394
+ try {
395
+ m.FS.mkdir(parentDir);
396
+ }
397
+ catch { /* exists */ }
398
+ }
399
+ m.FS.writeFile(destPath, totalData);
400
+ // Report completion via C callback
401
+ if (completeCbPtr !== 0) {
402
+ const pathPtr = WASMBridge.shared.allocString(destPath);
403
+ m.dynCall('viii', completeCbPtr, [0, pathPtr, cbUserData]); // 0 = RAC_OK
404
+ m._free(pathPtr);
405
+ }
406
+ }
407
+ catch (error) {
408
+ logger.error(`Download failed for ${url}: ${error}`);
409
+ if (completeCbPtr !== 0) {
410
+ const pathPtr = WASMBridge.shared.allocString('');
411
+ m.dynCall('viii', completeCbPtr, [-160, pathPtr, cbUserData]); // RAC_ERROR_DOWNLOAD_FAILED
412
+ m._free(pathPtr);
413
+ }
414
+ }
415
+ }
416
+ }
417
+ //# sourceMappingURL=PlatformAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlatformAdapter.js","sourceRoot":"","sources":["../../src/Foundation/PlatformAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Logger
3
+ *
4
+ * Logging system matching the pattern across all SDKs.
5
+ * Routes to console.* methods in the browser.
6
+ */
7
+ export declare enum LogLevel {
8
+ Trace = 0,
9
+ Debug = 1,
10
+ Info = 2,
11
+ Warning = 3,
12
+ Error = 4,
13
+ Fatal = 5
14
+ }
15
+ /** Map LogLevel to RACommons rac_log_level_t values */
16
+ export declare const LOG_LEVEL_TO_RAC: Record<LogLevel, number>;
17
+ export declare class SDKLogger {
18
+ private static _level;
19
+ private static _enabled;
20
+ private readonly category;
21
+ constructor(category: string);
22
+ static get level(): LogLevel;
23
+ static set level(level: LogLevel);
24
+ static get enabled(): boolean;
25
+ static set enabled(value: boolean);
26
+ trace(message: string): void;
27
+ debug(message: string): void;
28
+ info(message: string): void;
29
+ warning(message: string): void;
30
+ error(message: string): void;
31
+ private log;
32
+ }
33
+ //# sourceMappingURL=SDKLogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SDKLogger.d.ts","sourceRoot":"","sources":["../../src/Foundation/SDKLogger.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,IAAI,IAAI;IACR,OAAO,IAAI;IACX,KAAK,IAAI;IACT,KAAK,IAAI;CACV;AAED,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAOrD,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAC,MAAM,CAA2B;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAQ;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAI5B,MAAM,KAAK,KAAK,IAAI,QAAQ,CAE3B;IAED,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,QAAQ,EAE/B;IAED,MAAM,KAAK,OAAO,IAAI,OAAO,CAE5B;IAED,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,OAAO,EAEhC;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI5B,OAAO,CAAC,GAAG;CAwBZ"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * RunAnywhere Web SDK - Logger
3
+ *
4
+ * Logging system matching the pattern across all SDKs.
5
+ * Routes to console.* methods in the browser.
6
+ */
7
+ export var LogLevel;
8
+ (function (LogLevel) {
9
+ LogLevel[LogLevel["Trace"] = 0] = "Trace";
10
+ LogLevel[LogLevel["Debug"] = 1] = "Debug";
11
+ LogLevel[LogLevel["Info"] = 2] = "Info";
12
+ LogLevel[LogLevel["Warning"] = 3] = "Warning";
13
+ LogLevel[LogLevel["Error"] = 4] = "Error";
14
+ LogLevel[LogLevel["Fatal"] = 5] = "Fatal";
15
+ })(LogLevel || (LogLevel = {}));
16
+ /** Map LogLevel to RACommons rac_log_level_t values */
17
+ export const LOG_LEVEL_TO_RAC = {
18
+ [LogLevel.Trace]: 0,
19
+ [LogLevel.Debug]: 1,
20
+ [LogLevel.Info]: 2,
21
+ [LogLevel.Warning]: 3,
22
+ [LogLevel.Error]: 4,
23
+ [LogLevel.Fatal]: 5,
24
+ };
25
+ export class SDKLogger {
26
+ static _level = LogLevel.Info;
27
+ static _enabled = true;
28
+ category;
29
+ constructor(category) {
30
+ this.category = category;
31
+ }
32
+ static get level() {
33
+ return SDKLogger._level;
34
+ }
35
+ static set level(level) {
36
+ SDKLogger._level = level;
37
+ }
38
+ static get enabled() {
39
+ return SDKLogger._enabled;
40
+ }
41
+ static set enabled(value) {
42
+ SDKLogger._enabled = value;
43
+ }
44
+ trace(message) {
45
+ this.log(LogLevel.Trace, message);
46
+ }
47
+ debug(message) {
48
+ this.log(LogLevel.Debug, message);
49
+ }
50
+ info(message) {
51
+ this.log(LogLevel.Info, message);
52
+ }
53
+ warning(message) {
54
+ this.log(LogLevel.Warning, message);
55
+ }
56
+ error(message) {
57
+ this.log(LogLevel.Error, message);
58
+ }
59
+ log(level, message) {
60
+ if (!SDKLogger._enabled || level < SDKLogger._level) {
61
+ return;
62
+ }
63
+ const prefix = `[RunAnywhere:${this.category}]`;
64
+ switch (level) {
65
+ case LogLevel.Trace:
66
+ case LogLevel.Debug:
67
+ console.debug(prefix, message);
68
+ break;
69
+ case LogLevel.Info:
70
+ console.info(prefix, message);
71
+ break;
72
+ case LogLevel.Warning:
73
+ console.warn(prefix, message);
74
+ break;
75
+ case LogLevel.Error:
76
+ case LogLevel.Fatal:
77
+ console.error(prefix, message);
78
+ break;
79
+ }
80
+ }
81
+ }
82
+ //# sourceMappingURL=SDKLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SDKLogger.js","sourceRoot":"","sources":["../../src/Foundation/SDKLogger.ts"],"names":[],"mappings":"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"}