sparkbun 0.1.0

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 (131) hide show
  1. package/bin/sparkbun.cjs +18 -0
  2. package/dist-linux-arm64/bsdiff +0 -0
  3. package/dist-linux-arm64/bspatch +0 -0
  4. package/dist-linux-arm64/libElectrobunCore.so +0 -0
  5. package/dist-linux-arm64/libNativeWrapper.so +0 -0
  6. package/dist-linux-arm64/libasar.so +0 -0
  7. package/dist-linux-x64/bsdiff +0 -0
  8. package/dist-linux-x64/bspatch +0 -0
  9. package/dist-linux-x64/libElectrobunCore.so +0 -0
  10. package/dist-linux-x64/libNativeWrapper.so +0 -0
  11. package/dist-linux-x64/libasar.so +0 -0
  12. package/dist-macos-arm64/bsdiff +0 -0
  13. package/dist-macos-arm64/bspatch +0 -0
  14. package/dist-macos-arm64/libElectrobunCore.dylib +0 -0
  15. package/dist-macos-arm64/libNativeWrapper.dylib +0 -0
  16. package/dist-macos-arm64/libasar.dylib +0 -0
  17. package/dist-macos-arm64/libwebgpu_dawn.dylib +0 -0
  18. package/dist-macos-arm64/preload-full.js +885 -0
  19. package/dist-macos-arm64/preload-sandboxed.js +111 -0
  20. package/dist-macos-arm64/process_helper +0 -0
  21. package/dist-win-x64/ElectrobunCore.dll +0 -0
  22. package/dist-win-x64/WebView2Loader.dll +0 -0
  23. package/dist-win-x64/bsdiff.exe +0 -0
  24. package/dist-win-x64/bspatch.exe +0 -0
  25. package/dist-win-x64/libNativeWrapper.dll +0 -0
  26. package/dist-win-x64/zig-asar/arm64/libasar.dll +0 -0
  27. package/dist-win-x64/zig-asar/x64/libasar.dll +0 -0
  28. package/package.json +47 -0
  29. package/scripts/build-and-upload-artifacts.js +207 -0
  30. package/scripts/gen-webgpu-ffi.mjs +162 -0
  31. package/scripts/install-windows-deps.ps1 +80 -0
  32. package/scripts/package-release.js +237 -0
  33. package/scripts/push-version.js +84 -0
  34. package/scripts/update-bun-version.ts +122 -0
  35. package/scripts/update-cef-version.ts +145 -0
  36. package/src/browser/builtinrpcSchema.ts +19 -0
  37. package/src/browser/global.d.ts +36 -0
  38. package/src/browser/index.ts +234 -0
  39. package/src/browser/webviewtag.ts +88 -0
  40. package/src/browser/wgputag.ts +48 -0
  41. package/src/bun/SparkBunConfig.ts +497 -0
  42. package/src/bun/__tests__/ffi-contract.test.ts +105 -0
  43. package/src/bun/core/ApplicationMenu.ts +70 -0
  44. package/src/bun/core/BrowserView.ts +416 -0
  45. package/src/bun/core/BrowserWindow.ts +396 -0
  46. package/src/bun/core/BuildConfig.ts +71 -0
  47. package/src/bun/core/ContextMenu.ts +75 -0
  48. package/src/bun/core/GpuWindow.ts +289 -0
  49. package/src/bun/core/Paths.ts +5 -0
  50. package/src/bun/core/Socket.ts +22 -0
  51. package/src/bun/core/Tray.ts +197 -0
  52. package/src/bun/core/Updater.ts +1131 -0
  53. package/src/bun/core/Utils.ts +487 -0
  54. package/src/bun/core/WGPUView.ts +167 -0
  55. package/src/bun/core/menuRoles.ts +181 -0
  56. package/src/bun/events/ApplicationEvents.ts +22 -0
  57. package/src/bun/events/event.ts +27 -0
  58. package/src/bun/events/eventEmitter.ts +45 -0
  59. package/src/bun/events/trayEvents.ts +11 -0
  60. package/src/bun/events/webviewEvents.ts +39 -0
  61. package/src/bun/events/windowEvents.ts +23 -0
  62. package/src/bun/index.ts +120 -0
  63. package/src/bun/preload/.generated/compiled.ts +2 -0
  64. package/src/bun/preload/build.ts +65 -0
  65. package/src/bun/preload/dragRegions.ts +41 -0
  66. package/src/bun/preload/encryption.ts +86 -0
  67. package/src/bun/preload/events.ts +171 -0
  68. package/src/bun/preload/globals.d.ts +45 -0
  69. package/src/bun/preload/index-sandboxed.ts +28 -0
  70. package/src/bun/preload/index.ts +77 -0
  71. package/src/bun/preload/internalRpc.ts +80 -0
  72. package/src/bun/preload/overlaySync.ts +107 -0
  73. package/src/bun/preload/webviewTag.ts +451 -0
  74. package/src/bun/preload/wgpuTag.ts +246 -0
  75. package/src/bun/proc/linux.md +43 -0
  76. package/src/bun/proc/native.ts +3253 -0
  77. package/src/bun/webGPU.ts +346 -0
  78. package/src/bun/webgpuAdapter.ts +3011 -0
  79. package/src/cli/bun.lockb +0 -0
  80. package/src/cli/index.ts +4653 -0
  81. package/src/cli/package-lock.json +81 -0
  82. package/src/cli/package.json +11 -0
  83. package/src/cli/templates/embedded.ts +2 -0
  84. package/src/core/build.zig +16 -0
  85. package/src/core/main.zig +3378 -0
  86. package/src/extractor/build.zig +22 -0
  87. package/src/installer/installer-template.ts +216 -0
  88. package/src/launcher/main.ts +221 -0
  89. package/src/native/build/libNativeWrapper.so +0 -0
  90. package/src/native/linux/build/nativeWrapper.o +0 -0
  91. package/src/native/linux/cef_loader.cpp +110 -0
  92. package/src/native/linux/cef_loader.h +28 -0
  93. package/src/native/linux/cef_process_helper_linux.cpp +160 -0
  94. package/src/native/linux/nativeWrapper.cpp +11768 -0
  95. package/src/native/macos/cef_process_helper_mac.cc +160 -0
  96. package/src/native/macos/nativeWrapper.mm +9172 -0
  97. package/src/native/shared/accelerator_parser.h +72 -0
  98. package/src/native/shared/app_paths.h +110 -0
  99. package/src/native/shared/asar.h +35 -0
  100. package/src/native/shared/cache_migration.h +244 -0
  101. package/src/native/shared/callbacks.h +57 -0
  102. package/src/native/shared/cef_response_filter.h +189 -0
  103. package/src/native/shared/chromium_flags.h +181 -0
  104. package/src/native/shared/config.h +66 -0
  105. package/src/native/shared/download_event.h +197 -0
  106. package/src/native/shared/ffi_helpers.h +139 -0
  107. package/src/native/shared/glob_match.h +59 -0
  108. package/src/native/shared/json_menu_parser.h +223 -0
  109. package/src/native/shared/mime_types.h +101 -0
  110. package/src/native/shared/navigation_rules.h +98 -0
  111. package/src/native/shared/partition_context.h +137 -0
  112. package/src/native/shared/pending_resize_queue.h +45 -0
  113. package/src/native/shared/permissions.h +118 -0
  114. package/src/native/shared/permissions_cef.h +74 -0
  115. package/src/native/shared/preload_script.h +71 -0
  116. package/src/native/shared/shutdown_guard.h +134 -0
  117. package/src/native/shared/thread_safe_map.h +138 -0
  118. package/src/native/shared/webview_storage.h +91 -0
  119. package/src/native/win/cef_process_helper_win.cpp +143 -0
  120. package/src/native/win/dcomp_compositor.h +352 -0
  121. package/src/native/win/nativeWrapper.cpp +12434 -0
  122. package/src/npmbin/index.js +34 -0
  123. package/src/shared/bun-version.ts +3 -0
  124. package/src/shared/cef-version.ts +5 -0
  125. package/src/shared/naming.test.ts +327 -0
  126. package/src/shared/naming.ts +188 -0
  127. package/src/shared/platform.ts +48 -0
  128. package/src/shared/rpc.ts +541 -0
  129. package/src/shared/sparkbun-version.ts +2 -0
  130. package/src/types/three.d.ts +1 -0
  131. package/tsconfig.json +31 -0
@@ -0,0 +1,160 @@
1
+ #include <iostream>
2
+ #include <map>
3
+ #include <mutex>
4
+ #include "include/cef_app.h"
5
+ #include "include/cef_client.h"
6
+ #include "include/cef_v8.h"
7
+
8
+ // Simple CEF app for the helper process
9
+ class HelperApp : public CefApp, public CefRenderProcessHandler {
10
+ public:
11
+ HelperApp() {}
12
+
13
+ // CefApp methods:
14
+ virtual void OnRegisterCustomSchemes(CefRawPtr<CefSchemeRegistrar> registrar) override {
15
+ registrar->AddCustomScheme("views",
16
+ CEF_SCHEME_OPTION_STANDARD |
17
+ CEF_SCHEME_OPTION_CORS_ENABLED |
18
+ CEF_SCHEME_OPTION_SECURE | // treat it like https
19
+ CEF_SCHEME_OPTION_CSP_BYPASSING | // allow things like crypto.subtle
20
+ CEF_SCHEME_OPTION_FETCH_ENABLED);
21
+ }
22
+
23
+ virtual CefRefPtr<CefRenderProcessHandler> GetRenderProcessHandler() override {
24
+ return this;
25
+ }
26
+
27
+ // CefRenderProcessHandler methods:
28
+
29
+ // Called when a browser is created - receive sandbox flag via extra_info
30
+ virtual void OnBrowserCreated(CefRefPtr<CefBrowser> browser,
31
+ CefRefPtr<CefDictionaryValue> extra_info) override {
32
+ if (extra_info && extra_info->HasKey("sandbox")) {
33
+ bool sandbox = extra_info->GetBool("sandbox");
34
+ std::lock_guard<std::mutex> lock(sandbox_map_mutex_);
35
+ sandbox_map_[browser->GetIdentifier()] = sandbox;
36
+ }
37
+ }
38
+
39
+ // Called when a browser is destroyed - cleanup sandbox flag
40
+ virtual void OnBrowserDestroyed(CefRefPtr<CefBrowser> browser) override {
41
+ std::lock_guard<std::mutex> lock(sandbox_map_mutex_);
42
+ sandbox_map_.erase(browser->GetIdentifier());
43
+ }
44
+
45
+ virtual void OnContextCreated(CefRefPtr<CefBrowser> browser,
46
+ CefRefPtr<CefFrame> frame,
47
+ CefRefPtr<CefV8Context> context) override {
48
+ // Check if this browser is sandboxed
49
+ bool is_sandboxed = false;
50
+ {
51
+ std::lock_guard<std::mutex> lock(sandbox_map_mutex_);
52
+ auto it = sandbox_map_.find(browser->GetIdentifier());
53
+ if (it != sandbox_map_.end()) {
54
+ is_sandboxed = it->second;
55
+ }
56
+ }
57
+
58
+ // Log the context creation
59
+ std::string frameUrl = frame->GetURL().ToString();
60
+
61
+ // Get the global window object
62
+ CefRefPtr<CefV8Context> v8Context = frame->GetV8Context();
63
+ v8Context->Enter();
64
+
65
+ CefRefPtr<CefV8Value> window = context->GetGlobal();
66
+
67
+ // Create eventBridge - event-only bridge (always available for all webviews, including sandboxed)
68
+ CefRefPtr<CefV8Value> eventBridge = CefV8Value::CreateObject(nullptr, nullptr);
69
+ CefRefPtr<CefV8Value> eventPostMessage = CreatePostMessageFunction(browser, "EventBridgeMessage");
70
+ eventBridge->SetValue("postMessage", eventPostMessage, V8_PROPERTY_ATTRIBUTE_NONE);
71
+ window->SetValue("__electrobunEventBridge", eventBridge, V8_PROPERTY_ATTRIBUTE_NONE);
72
+
73
+ // Only create hostBridge/bunBridge aliases and internalBridge for non-sandboxed webviews
74
+ if (!is_sandboxed) {
75
+ // Create hostBridge - user RPC bridge
76
+ CefRefPtr<CefV8Value> bunBridge = CefV8Value::CreateObject(nullptr, nullptr);
77
+ CefRefPtr<CefV8Value> bunPostMessage = CreatePostMessageFunction(browser, "BunBridgeMessage");
78
+ bunBridge->SetValue("postMessage", bunPostMessage, V8_PROPERTY_ATTRIBUTE_NONE);
79
+ window->SetValue("__electrobunHostBridge", bunBridge, V8_PROPERTY_ATTRIBUTE_NONE);
80
+ window->SetValue("__electrobunBunBridge", bunBridge, V8_PROPERTY_ATTRIBUTE_NONE);
81
+
82
+ // Create internalBridge - internal RPC bridge
83
+ CefRefPtr<CefV8Value> internalBridge = CefV8Value::CreateObject(nullptr, nullptr);
84
+ CefRefPtr<CefV8Value> internalPostMessage = CreatePostMessageFunction(browser, "internalMessage");
85
+ internalBridge->SetValue("postMessage", internalPostMessage, V8_PROPERTY_ATTRIBUTE_NONE);
86
+ window->SetValue("__electrobunInternalBridge", internalBridge, V8_PROPERTY_ATTRIBUTE_NONE);
87
+ }
88
+
89
+ v8Context->Exit();
90
+ }
91
+
92
+ private:
93
+ // Map of browser ID to sandbox flag
94
+ std::map<int, bool> sandbox_map_;
95
+ std::mutex sandbox_map_mutex_;
96
+ // Helper class to handle V8 function calls
97
+ class V8Handler : public CefV8Handler {
98
+ public:
99
+ V8Handler(CefRefPtr<CefBrowser> browser, const CefString& messageName)
100
+ : browser_(browser), message_name_(messageName) {}
101
+
102
+ virtual bool Execute(const CefString& name,
103
+ CefRefPtr<CefV8Value> object,
104
+ const CefV8ValueList& arguments,
105
+ CefRefPtr<CefV8Value>& retval,
106
+ CefString& exception) override {
107
+ if (arguments.size() > 0 && arguments[0]->IsString()) {
108
+ std::string msgContent = arguments[0]->GetStringValue();
109
+
110
+ // Create and send process message to the main process
111
+ CefRefPtr<CefFrame> mainFrame = browser_->GetMainFrame();
112
+ if (mainFrame) {
113
+ CefRefPtr<CefProcessMessage> message = CefProcessMessage::Create(message_name_);
114
+ message->GetArgumentList()->SetString(0, msgContent);
115
+ mainFrame->SendProcessMessage(PID_BROWSER, message);
116
+ }
117
+ return true;
118
+ }
119
+ return false;
120
+ }
121
+
122
+ private:
123
+ CefRefPtr<CefBrowser> browser_;
124
+ CefString message_name_;
125
+ IMPLEMENT_REFCOUNTING(V8Handler);
126
+ };
127
+
128
+ CefRefPtr<CefV8Value> CreatePostMessageFunction(CefRefPtr<CefBrowser> browser,
129
+ const CefString& messageName) {
130
+ return CefV8Value::CreateFunction(
131
+ "postMessage",
132
+ new V8Handler(browser, messageName)
133
+ );
134
+ }
135
+
136
+ // Include the default reference counting implementation.
137
+ IMPLEMENT_REFCOUNTING(HelperApp);
138
+ };
139
+
140
+ // Entry point function for all processes.
141
+ int main(int argc, char* argv[]) {
142
+ // CEF helper process starting
143
+
144
+ // Provide CEF with command-line arguments.
145
+ CefMainArgs main_args(argc, argv);
146
+
147
+ // CEF applications have multiple sub-processes (render, plugin, GPU, etc)
148
+ // that share the same executable. This function checks the command-line and,
149
+ // if this is a sub-process, executes the appropriate logic.
150
+ int exit_code = CefExecuteProcess(main_args, new HelperApp(), nullptr);
151
+ if (exit_code >= 0) {
152
+ // The sub-process has completed so return here.
153
+ printf("CEF Helper: Helper process exiting with code %d\n", exit_code);
154
+ return exit_code;
155
+ }
156
+
157
+ // Should not reach here for helper processes
158
+ std::cerr << "CEF helper process failed to initialize properly" << std::endl;
159
+ return -1;
160
+ }