quickwin 3.0.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +3 -0
- package/README.md +2 -0
- package/lib/abort.d.ts +21 -0
- package/lib/assert.d.ts +2 -0
- package/lib/bitmap.d.ts +7 -0
- package/lib/cache-utils.d.ts +6 -0
- package/lib/certs.d.ts +1 -0
- package/lib/dpi.d.ts +9 -0
- package/lib/dumpRects.d.ts +2 -0
- package/lib/exec-log.d.ts +23 -0
- package/lib/fetch.d.ts +4 -0
- package/lib/ffi/bind.d.ts +70 -0
- package/lib/ffi/ctype.d.ts +117 -0
- package/lib/ffi/index.d.ts +2 -0
- package/lib/ffi/struct.d.ts +174 -0
- package/lib/http-common.d.ts +143 -0
- package/lib/http-server.d.ts +59 -0
- package/lib/polyfill.d.ts +22 -0
- package/lib/react-qw/components/Button.d.ts +9 -0
- package/lib/react-qw/components/CheckBox.d.ts +11 -0
- package/lib/react-qw/components/ComboBox.d.ts +11 -0
- package/lib/react-qw/components/DateTimePicker.d.ts +15 -0
- package/lib/react-qw/components/Input.d.ts +15 -0
- package/lib/react-qw/components/Link.d.ts +12 -0
- package/lib/react-qw/components/ListBox.d.ts +13 -0
- package/lib/react-qw/components/ListView.d.ts +37 -0
- package/lib/react-qw/components/PathPicker.d.ts +23 -0
- package/lib/react-qw/components/ProgressBar.d.ts +9 -0
- package/lib/react-qw/components/RadioButton.d.ts +11 -0
- package/lib/react-qw/components/ScrollView.d.ts +9 -0
- package/lib/react-qw/components/Slider.d.ts +12 -0
- package/lib/react-qw/components/Tab.d.ts +14 -0
- package/lib/react-qw/components/Tooltip.d.ts +7 -0
- package/lib/react-qw/components/TreeView.d.ts +18 -0
- package/lib/react-qw/components/index.d.ts +16 -0
- package/lib/react-qw/index.d.ts +24 -0
- package/lib/react-qw/layout.d.ts +29 -0
- package/lib/react-qw/nmhdr.d.ts +1 -0
- package/lib/react-qw/props.d.ts +2 -0
- package/lib/react-qw/reconciler.d.ts +21 -0
- package/lib/stream.d.ts +20 -0
- package/lib/text-codec.d.ts +39 -0
- package/lib/text-measure.d.ts +14 -0
- package/lib/url.d.ts +54 -0
- package/lib/websocket.d.ts +73 -0
- package/lib/windows/{advapi32.ts → advapi32.d.ts} +6 -21
- package/lib/windows/comctl32.d.ts +14 -0
- package/lib/windows/comdlg32.d.ts +4 -0
- package/lib/windows/{gdi32.ts → gdi32.d.ts} +161 -98
- package/lib/windows/{kernel32.ts → kernel32.d.ts} +138 -115
- package/lib/windows/{msimg32.ts → msimg32.d.ts} +11 -14
- package/lib/windows/ntdll.d.ts +5 -0
- package/lib/windows/ole32.d.ts +3 -0
- package/lib/windows/{psapi.ts → psapi.d.ts} +9 -18
- package/lib/windows/{shell32.ts → shell32.d.ts} +25 -24
- package/lib/windows/structs.d.ts +3141 -0
- package/lib/windows/{user32.ts → user32.d.ts} +196 -193
- package/lib/windows/version.d.ts +27 -0
- package/lib/windows/{winspool.ts → winspool.d.ts} +18 -32
- package/package.json +15 -8
- package/qwin-nowasm-x86.exe +0 -0
- package/qwin-nowasm.exe +0 -0
- package/qwin-x86.exe +0 -0
- package/qwin.exe +0 -0
- package/examples/PdfCanvas.js +0 -38
- package/examples/PdfCanvas.tsx +0 -54
- package/examples/execd/main.js +0 -23379
- package/examples/execd/tray.js +0 -192
- package/examples/execd/worker.js +0 -122
- package/examples/pdf_preview2.js +0 -398
- package/examples/pdf_preview2.ts +0 -353
- package/examples/pdf_viewer.js +0 -22515
- package/examples/pdf_viewer.tsx +0 -228
- package/examples/test_gallery.js +0 -18692
- package/examples/test_gallery.tsx +0 -291
- package/examples/test_react_lazy.js +0 -18560
- package/examples/test_react_lazy.tsx +0 -65
- package/examples/test_react_listbox.js +0 -18562
- package/examples/test_react_listbox.tsx +0 -73
- package/examples/test_root_window.js +0 -18532
- package/examples/test_root_window.tsx +0 -41
- package/examples/test_tab.js +0 -18563
- package/examples/test_tab.tsx +0 -77
- package/examples/tray_demo.js +0 -86
- package/examples/tray_demo.tsx +0 -89
- package/lib/abort.ts +0 -69
- package/lib/assert.ts +0 -7
- package/lib/bitmap.ts +0 -39
- package/lib/cache-utils.ts +0 -40
- package/lib/certs.ts +0 -258
- package/lib/dpi.ts +0 -31
- package/lib/dumpRects.ts +0 -34
- package/lib/exec-log.ts +0 -30
- package/lib/fetch.ts +0 -589
- package/lib/ffi/bind.ts +0 -540
- package/lib/ffi/ctype.ts +0 -371
- package/lib/ffi/index.ts +0 -6
- package/lib/ffi/struct.ts +0 -780
- package/lib/http-common.ts +0 -441
- package/lib/http-server.ts +0 -604
- package/lib/polyfill.ts +0 -171
- package/lib/react-qw/components/index.ts +0 -17
- package/lib/react-qw/index.ts +0 -96
- package/lib/react-qw/layout.ts +0 -111
- package/lib/react-qw/nmhdr.ts +0 -7
- package/lib/react-qw/props.ts +0 -41
- package/lib/react-qw/reconciler.ts +0 -379
- package/lib/stream.ts +0 -22
- package/lib/text-codec.ts +0 -171
- package/lib/text-measure.ts +0 -44
- package/lib/url.ts +0 -201
- package/lib/websocket.ts +0 -600
- package/lib/windows/comctl32.ts +0 -20
- package/lib/windows/comdlg32.ts +0 -10
- package/lib/windows/ntdll.ts +0 -11
- package/lib/windows/ole32.ts +0 -9
- package/lib/windows/structs.ts +0 -807
- package/lib/windows/version.ts +0 -35
- package/test/add.wasm +0 -0
- package/test/bench_ffi_callraw.js +0 -235
- package/test/bench_ffi_callraw.ts +0 -235
- package/test/bench_ffi_overhead.js +0 -139
- package/test/bench_ffi_overhead.ts +0 -141
- package/test/bench_sendmessage.js +0 -104
- package/test/bench_sendmessage.ts +0 -100
- package/test/bench_sendmessage_nonnull.js +0 -187
- package/test/bench_sendmessage_nonnull.ts +0 -188
- package/test/complex.wasm +0 -0
- package/test/complex_imports.wasm +0 -0
- package/test/debug/http_server_e2e.js +0 -31
- package/test/debug/minwasm.js +0 -52
- package/test/debug/mupdf_debug.js +0 -86
- package/test/debug/wasm.js +0 -122
- package/test/debug/wasm_export_debug.js +0 -54
- package/test/debug/wasm_names.js +0 -36
- package/test/example.pdf +0 -0
- package/test/global_imports.wasm +0 -0
- package/test/import_func.wasm +0 -0
- package/test/imports.wasm +0 -0
- package/test/mupdf-cdn.js +0 -40
- package/test/mupdf-cdn.ts +0 -43
- package/test/run.js +0 -111
- package/test/run.ts +0 -116
- package/test/sjlj.wasm +0 -0
- package/test/test_basic.js +0 -7
- package/test/test_basic.ts +0 -9
- package/test/test_basic_fetch.js +0 -63
- package/test/test_basic_fetch.ts +0 -59
- package/test/test_brotli.js +0 -48
- package/test/test_brotli.ts +0 -52
- package/test/test_fetch_cache.js +0 -169
- package/test/test_fetch_cache.ts +0 -187
- package/test/test_ffi.js +0 -157
- package/test/test_ffi.ts +0 -170
- package/test/test_ffi_abi.js +0 -290
- package/test/test_ffi_abi.ts +0 -274
- package/test/test_ffi_array.js +0 -116
- package/test/test_ffi_array.ts +0 -141
- package/test/test_ffi_bind.js +0 -656
- package/test/test_ffi_bind.ts +0 -670
- package/test/test_ffi_struct.js +0 -779
- package/test/test_ffi_struct.ts +0 -828
- package/test/test_ffi_struct_layout.js +0 -495
- package/test/test_ffi_struct_layout.ts +0 -543
- package/test/test_ffi_user32.js +0 -103
- package/test/test_ffi_user32.ts +0 -113
- package/test/test_ffi_windows.js +0 -172
- package/test/test_ffi_windows.ts +0 -187
- package/test/test_files.js +0 -102
- package/test/test_files.ts +0 -121
- package/test/test_frame_encoding.js +0 -128
- package/test/test_frame_encoding.ts +0 -132
- package/test/test_gdi_draw.js +0 -681
- package/test/test_gdi_draw.ts +0 -725
- package/test/test_helper.js +0 -91
- package/test/test_helper.ts +0 -88
- package/test/test_http_import.js +0 -96
- package/test/test_http_import.ts +0 -93
- package/test/test_http_server.js +0 -214
- package/test/test_http_server.ts +0 -211
- package/test/test_import_dir.js +0 -4
- package/test/test_import_dir.ts +0 -5
- package/test/test_ipv6.js +0 -134
- package/test/test_ipv6.ts +0 -130
- package/test/test_jsx.js +0 -1314
- package/test/test_meta_url.js +0 -3
- package/test/test_meta_url.ts +0 -4
- package/test/test_mupdf_render.js +0 -51
- package/test/test_mupdf_render.ts +0 -55
- package/test/test_mupdf_twice.js +0 -62
- package/test/test_mupdf_twice.ts +0 -65
- package/test/test_mupdf_wasm.js +0 -39
- package/test/test_mupdf_wasm.ts +0 -32
- package/test/test_net_event.js +0 -57
- package/test/test_net_event.ts +0 -56
- package/test/test_net_fetch.js +0 -384
- package/test/test_net_fetch.ts +0 -373
- package/test/test_net_websocket.js +0 -180
- package/test/test_net_websocket.ts +0 -164
- package/test/test_polyfill.js +0 -144
- package/test/test_polyfill.ts +0 -159
- package/test/test_printer.js +0 -137
- package/test/test_printer.ts +0 -148
- package/test/test_proc.js +0 -141
- package/test/test_proc.ts +0 -163
- package/test/test_react_complex.js +0 -18678
- package/test/test_react_counter.js +0 -18555
- package/test/test_react_flex.js +0 -18871
- package/test/test_react_hidden.js +0 -18560
- package/test/test_react_listview_link.js +0 -18590
- package/test/test_react_notify.js +0 -18797
- package/test/test_react_render.js +0 -18550
- package/test/test_registry.js +0 -74
- package/test/test_registry.ts +0 -95
- package/test/test_sysinfo.js +0 -122
- package/test/test_sysinfo.ts +0 -141
- package/test/test_url.js +0 -173
- package/test/test_url.ts +0 -183
- package/test/test_wasm_basic.js +0 -85
- package/test/test_wasm_basic.ts +0 -73
- package/test/test_wasm_import_global.js +0 -41
- package/test/test_wasm_import_global.ts +0 -45
- package/test/test_wasm_sjlj.js +0 -145
- package/test/test_wasm_sjlj.ts +0 -125
- package/test/test_wasm_types.js +0 -97
- package/test/test_wasm_types.ts +0 -124
- package/test/test_wolfssl_read.js +0 -203
- package/test/test_wolfssl_read.ts +0 -184
- package/test/test_worker.js +0 -21
- package/test/test_worker.ts +0 -24
- package/test/test_worker_concurrent.js +0 -45
- package/test/test_worker_concurrent.ts +0 -56
- package/test/test_worker_data_url.js +0 -46
- package/test/test_worker_data_url.ts +0 -51
- package/test/test_worker_fetch.js +0 -26
- package/test/test_worker_fetch.ts +0 -27
- package/test/test_worker_net.js +0 -69
- package/test/test_worker_net.ts +0 -66
- package/test/test_worker_wasm_concurrent.js +0 -44
- package/test/test_worker_wasm_concurrent.ts +0 -45
- package/test/types.wasm +0 -0
- package/test/worker_fetch.js +0 -13
- package/test/worker_fetch.ts +0 -13
- package/test/worker_helper.js +0 -1
- package/test/worker_helper.ts +0 -1
- package/test/worker_http.js +0 -18
- package/test/worker_http.ts +0 -20
- package/test/worker_import_lib.js +0 -12
- package/test/worker_import_lib.ts +0 -13
- package/test/worker_module.js +0 -16
- package/test/worker_module.ts +0 -17
- package/test/worker_wasm_concurrent.js +0 -22
- package/test/worker_wasm_concurrent.ts +0 -22
package/examples/test_tab.tsx
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import '../lib/polyfill.js'
|
|
2
|
-
import * as gui from 'gui'
|
|
3
|
-
import { useState } from 'react'
|
|
4
|
-
import { render, Button, Tab } from '../lib/react-qw/index.js'
|
|
5
|
-
import { ShowWindowCmd, WindowStyle, WmMsg } from '../constants'
|
|
6
|
-
import { PostQuitMessage, ShowWindow } from '../lib/windows/user32.js'
|
|
7
|
-
|
|
8
|
-
gui.RegisterClass('TabDemo', (hwnd, msg, wParam, lParam) => {
|
|
9
|
-
if (!hwnd) return gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
10
|
-
if (msg === WmMsg.DESTROY) {
|
|
11
|
-
PostQuitMessage(0)
|
|
12
|
-
return 0
|
|
13
|
-
}
|
|
14
|
-
return gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
function App() {
|
|
18
|
-
const [tabIndex, setTabIndex] = useState(0)
|
|
19
|
-
|
|
20
|
-
return (
|
|
21
|
-
<w type="STATIC"
|
|
22
|
-
ws={WindowStyle.VISIBLE}
|
|
23
|
-
style={{ flexDirection: 'column', width: 600, height: 400, padding: 10 }}
|
|
24
|
-
>
|
|
25
|
-
<Tab
|
|
26
|
-
tabs={[
|
|
27
|
-
{
|
|
28
|
-
title: 'Counter',
|
|
29
|
-
content: (
|
|
30
|
-
<w type="STATIC"
|
|
31
|
-
ws={WindowStyle.VISIBLE | WindowStyle.CLIPCHILDREN}
|
|
32
|
-
style={{ flexDirection: 'column', gap: 10, padding: 10, width: 580, height: 300 }}>
|
|
33
|
-
<Button onClick={() => setTabIndex(1)}>Go to Tab 2</Button>
|
|
34
|
-
</w>
|
|
35
|
-
),
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
title: 'Buttons',
|
|
39
|
-
content: (
|
|
40
|
-
<w type="STATIC"
|
|
41
|
-
ws={WindowStyle.VISIBLE | WindowStyle.CLIPCHILDREN}
|
|
42
|
-
style={{ flexDirection: 'row', gap: 10, padding: 10, width: 580, height: 300, alignItems: 'stretch' }}>
|
|
43
|
-
<Button onClick={() => setTabIndex(2)}>Go to Tab 3</Button>
|
|
44
|
-
<Button onClick={() => setTabIndex(0)} style={{ width: 120 }}>Back</Button>
|
|
45
|
-
</w>
|
|
46
|
-
),
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
title: 'Final',
|
|
50
|
-
content: (
|
|
51
|
-
<w type="STATIC"
|
|
52
|
-
ws={WindowStyle.VISIBLE | WindowStyle.CLIPCHILDREN}
|
|
53
|
-
style={{ flexDirection: 'column', gap: 10, padding: 10, width: 580, height: 300 }}>
|
|
54
|
-
<Button onClick={() => setTabIndex(0)}>Back to Tab 1</Button>
|
|
55
|
-
<Button onClick={() => setTabIndex(1)}>Back to Tab 2</Button>
|
|
56
|
-
</w>
|
|
57
|
-
),
|
|
58
|
-
},
|
|
59
|
-
]}
|
|
60
|
-
style={{ flexGrow: 1 }}
|
|
61
|
-
selectedIndex={tabIndex}
|
|
62
|
-
onChange={(i) => setTabIndex(i)}
|
|
63
|
-
/>
|
|
64
|
-
</w>
|
|
65
|
-
)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const hwnd = gui.CreateWindow(
|
|
69
|
-
'TabDemo', 'Tab Demo',
|
|
70
|
-
WindowStyle.OVERLAPPEDWINDOW,
|
|
71
|
-
100, 100, 640, 480, null, null
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
if (hwnd) {
|
|
75
|
-
ShowWindow(hwnd, ShowWindowCmd.SHOWNORMAL)
|
|
76
|
-
render(<App />, hwnd)
|
|
77
|
-
}
|
package/examples/tray_demo.js
DELETED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import * as gui from 'gui';
|
|
2
|
-
import * as std from 'std';
|
|
3
|
-
import { NULL } from '../lib/ffi/ctype.js';
|
|
4
|
-
import { GetCursorPos, CreatePopupMenu, AppendMenu, TrackPopupMenu, DestroyMenu, GetSystemMetrics, LoadImageOrdinal, PostQuitMessage, SetForegroundWindow, ShowWindow } from '../lib/windows/user32.js';
|
|
5
|
-
import { NOTIFYICONDATAW, POINT } from '../lib/windows/structs.js';
|
|
6
|
-
import { ShellNotifyIcon } from '../lib/windows/shell32.js';
|
|
7
|
-
import { createSystemDpiFont } from '../lib/dpi.js';
|
|
8
|
-
const WM_TRAY = 0x8001;
|
|
9
|
-
gui.RegisterClass('TrayApp', (hwnd, msg, wParam, lParam) => {
|
|
10
|
-
if (msg === WM_TRAY) {
|
|
11
|
-
const evt = lParam;
|
|
12
|
-
if (evt === 513 /* WmMsg.LBUTTONDOWN */) {
|
|
13
|
-
ShowWindow(hwnd, 5 /* ShowWindowCmd.SHOW */);
|
|
14
|
-
SetForegroundWindow(hwnd);
|
|
15
|
-
}
|
|
16
|
-
else if (evt === 516 /* WmMsg.RBUTTONDOWN */ || evt === 123 /* WmMsg.CONTEXTMENU */) {
|
|
17
|
-
SetForegroundWindow(hwnd);
|
|
18
|
-
const pt = POINT.alloc();
|
|
19
|
-
const pos = GetCursorPos(pt.ptr) ? POINT.decode(pt) : null;
|
|
20
|
-
const x = pos ? pos.x : 0;
|
|
21
|
-
const y = pos ? pos.y : 0;
|
|
22
|
-
const hMenu = CreatePopupMenu();
|
|
23
|
-
if (hMenu !== NULL) {
|
|
24
|
-
AppendMenu(hMenu, 0, 1, '显示窗口');
|
|
25
|
-
AppendMenu(hMenu, 2048 /* MenuFlag.SEPARATOR */, 0, NULL);
|
|
26
|
-
AppendMenu(hMenu, 0, 2, '退出');
|
|
27
|
-
const cmd = TrackPopupMenu(hMenu, 256 /* TrackPopupMenuFlag.RETURNCMD */ | 2 /* TrackPopupMenuFlag.RIGHTBUTTON */, x, y, 0, hwnd, NULL);
|
|
28
|
-
DestroyMenu(hMenu);
|
|
29
|
-
if (cmd === 1) {
|
|
30
|
-
ShowWindow(hwnd, 5 /* ShowWindowCmd.SHOW */);
|
|
31
|
-
}
|
|
32
|
-
else if (cmd === 2) {
|
|
33
|
-
ShellNotifyIcon(2 /* NotifyIconCmd.DELETE */, { cbSize: NOTIFYICONDATAW.size, hWnd: hwnd, uID: 1 });
|
|
34
|
-
PostQuitMessage(0);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return 0;
|
|
39
|
-
}
|
|
40
|
-
if (msg === 16 /* WmMsg.CLOSE */) {
|
|
41
|
-
ShowWindow(hwnd, 0 /* ShowWindowCmd.HIDE */);
|
|
42
|
-
return 0;
|
|
43
|
-
}
|
|
44
|
-
return gui.DefWindowProc(hwnd, msg, wParam, lParam);
|
|
45
|
-
});
|
|
46
|
-
// 创建窗口
|
|
47
|
-
const W = 500, H = 400;
|
|
48
|
-
const scr = [GetSystemMetrics(0 /* SysMetrics.CXSCREEN */), GetSystemMetrics(1 /* SysMetrics.CYSCREEN */)];
|
|
49
|
-
const x = (scr[0] - W) >> 1;
|
|
50
|
-
const y = (scr[1] - H) >> 1;
|
|
51
|
-
const hwnd = gui.CreateWindow('TrayApp', '系统托盘示例', 13565952 /* WindowStyle.OVERLAPPEDWINDOW */, x, y, W, H, null, null);
|
|
52
|
-
if (!hwnd)
|
|
53
|
-
std.exit(0);
|
|
54
|
-
ShowWindow(hwnd, 1 /* ShowWindowCmd.SHOWNORMAL */);
|
|
55
|
-
// 添加说明文字
|
|
56
|
-
const style = 1073741824 /* WindowStyle.CHILD */ | 268435456 /* WindowStyle.VISIBLE */ | 4 /* EditStyle.MULTILINE */ | 2048 /* EditStyle.READONLY */;
|
|
57
|
-
const text = gui.CreateWindow('EDIT', 'QuickWin 系统托盘示例\r\n'
|
|
58
|
-
+ '\r\n'
|
|
59
|
-
+ '右键点击托盘图标打开上下文菜单。\r\n'
|
|
60
|
-
+ '关闭此窗口将隐藏到托盘。\r\n'
|
|
61
|
-
+ '从菜单中选择"显示窗口"恢复窗口,"退出"结束程序。', style, 15, 15, W - 30, H - 70, hwnd, null);
|
|
62
|
-
if (text) {
|
|
63
|
-
const font = createSystemDpiFont();
|
|
64
|
-
if (font)
|
|
65
|
-
gui.SendMessage(text, 48 /* WmMsg.SETFONT */, font, 1);
|
|
66
|
-
}
|
|
67
|
-
// LoadImageW 返回的句柄随 uType 变(HICON/HCURSOR/HBITMAP),绑定只能给裸地址档;
|
|
68
|
-
// LoadAppIcon 的 HICON 是同一档的品牌子型,故变量按裸地址声明
|
|
69
|
-
let hIcon = gui.LoadAppIcon();
|
|
70
|
-
if (!hIcon)
|
|
71
|
-
hIcon = LoadImageOrdinal(NULL, 32512 /* IDI.APPLICATION */, 1 /* ImageType.ICON */, 0, 0, 32768 /* LoadImageFlag.SHARED */);
|
|
72
|
-
if (hIcon) {
|
|
73
|
-
const ok = ShellNotifyIcon(0 /* NotifyIconCmd.ADD */, {
|
|
74
|
-
cbSize: NOTIFYICONDATAW.size,
|
|
75
|
-
hWnd: hwnd, uID: 1,
|
|
76
|
-
uFlags: 1 /* NotifyIconFlag.MESSAGE */ | 2 /* NotifyIconFlag.ICON */,
|
|
77
|
-
uCallbackMessage: WM_TRAY,
|
|
78
|
-
hIcon,
|
|
79
|
-
});
|
|
80
|
-
std.out.printf('tray icon %s\n', ok ? 'added' : 'FAILED');
|
|
81
|
-
std.out.flush();
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
std.out.printf('failed to load icon\n');
|
|
85
|
-
std.out.flush();
|
|
86
|
-
}
|
package/examples/tray_demo.tsx
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import * as gui from 'gui'
|
|
2
|
-
import * as std from 'std'
|
|
3
|
-
import { NULL, type MaybePtr } from '../lib/ffi/ctype.js'
|
|
4
|
-
import { GetCursorPos, CreatePopupMenu, AppendMenu, TrackPopupMenu, DestroyMenu, GetSystemMetrics, LoadImageOrdinal, PostQuitMessage, SetForegroundWindow, ShowWindow } from '../lib/windows/user32.js'
|
|
5
|
-
import { NOTIFYICONDATAW, POINT } from '../lib/windows/structs.js'
|
|
6
|
-
import { ShellNotifyIcon } from '../lib/windows/shell32.js'
|
|
7
|
-
import { createSystemDpiFont } from '../lib/dpi.js'
|
|
8
|
-
import { EditStyle, IDI, ImageType, LoadImageFlag, MenuFlag, NotifyIconCmd, NotifyIconFlag, ShowWindowCmd, SysMetrics, TrackPopupMenuFlag, WindowStyle, WmMsg } from '../constants'
|
|
9
|
-
|
|
10
|
-
const WM_TRAY = 0x8001
|
|
11
|
-
|
|
12
|
-
gui.RegisterClass('TrayApp', (hwnd, msg, wParam, lParam) => {
|
|
13
|
-
if (msg === WM_TRAY) {
|
|
14
|
-
const evt = lParam
|
|
15
|
-
if (evt === WmMsg.LBUTTONDOWN) {
|
|
16
|
-
ShowWindow(hwnd, ShowWindowCmd.SHOW)
|
|
17
|
-
SetForegroundWindow(hwnd)
|
|
18
|
-
} else if (evt === WmMsg.RBUTTONDOWN || evt === WmMsg.CONTEXTMENU) {
|
|
19
|
-
SetForegroundWindow(hwnd)
|
|
20
|
-
const pt = POINT.alloc()
|
|
21
|
-
const pos = GetCursorPos(pt.ptr) ? POINT.decode(pt) : null
|
|
22
|
-
const x = pos ? pos.x : 0
|
|
23
|
-
const y = pos ? pos.y : 0
|
|
24
|
-
const hMenu = CreatePopupMenu()
|
|
25
|
-
if (hMenu !== NULL) {
|
|
26
|
-
AppendMenu(hMenu, 0, 1, '显示窗口')
|
|
27
|
-
AppendMenu(hMenu, MenuFlag.SEPARATOR, 0, NULL)
|
|
28
|
-
AppendMenu(hMenu, 0, 2, '退出')
|
|
29
|
-
const cmd = TrackPopupMenu(hMenu, TrackPopupMenuFlag.RETURNCMD | TrackPopupMenuFlag.RIGHTBUTTON, x, y, 0, hwnd, NULL)
|
|
30
|
-
DestroyMenu(hMenu)
|
|
31
|
-
if (cmd === 1) {
|
|
32
|
-
ShowWindow(hwnd, ShowWindowCmd.SHOW)
|
|
33
|
-
} else if (cmd === 2) {
|
|
34
|
-
ShellNotifyIcon(NotifyIconCmd.DELETE, { cbSize: NOTIFYICONDATAW.size, hWnd: hwnd, uID: 1 })
|
|
35
|
-
PostQuitMessage(0)
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
return 0
|
|
40
|
-
}
|
|
41
|
-
if (msg === WmMsg.CLOSE) {
|
|
42
|
-
ShowWindow(hwnd, ShowWindowCmd.HIDE)
|
|
43
|
-
return 0
|
|
44
|
-
}
|
|
45
|
-
return gui.DefWindowProc(hwnd, msg, wParam, lParam)
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
// 创建窗口
|
|
49
|
-
const W = 500, H = 400
|
|
50
|
-
const scr: [number, number] = [GetSystemMetrics(SysMetrics.CXSCREEN), GetSystemMetrics(SysMetrics.CYSCREEN)]
|
|
51
|
-
const x = (scr[0] - W) >> 1
|
|
52
|
-
const y = (scr[1] - H) >> 1
|
|
53
|
-
const hwnd = gui.CreateWindow('TrayApp', '系统托盘示例', WindowStyle.OVERLAPPEDWINDOW, x, y, W, H, null, null)
|
|
54
|
-
if (!hwnd) std.exit(0)
|
|
55
|
-
ShowWindow(hwnd, ShowWindowCmd.SHOWNORMAL)
|
|
56
|
-
|
|
57
|
-
// 添加说明文字
|
|
58
|
-
const style = WindowStyle.CHILD | WindowStyle.VISIBLE | EditStyle.MULTILINE | EditStyle.READONLY
|
|
59
|
-
const text = gui.CreateWindow('EDIT',
|
|
60
|
-
'QuickWin 系统托盘示例\r\n'
|
|
61
|
-
+ '\r\n'
|
|
62
|
-
+ '右键点击托盘图标打开上下文菜单。\r\n'
|
|
63
|
-
+ '关闭此窗口将隐藏到托盘。\r\n'
|
|
64
|
-
+ '从菜单中选择"显示窗口"恢复窗口,"退出"结束程序。',
|
|
65
|
-
style, 15, 15, W - 30, H - 70, hwnd, null)
|
|
66
|
-
if (text) {
|
|
67
|
-
const font = createSystemDpiFont()
|
|
68
|
-
if (font)
|
|
69
|
-
gui.SendMessage(text, WmMsg.SETFONT, font, 1)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// LoadImageW 返回的句柄随 uType 变(HICON/HCURSOR/HBITMAP),绑定只能给裸地址档;
|
|
73
|
-
// LoadAppIcon 的 HICON 是同一档的品牌子型,故变量按裸地址声明
|
|
74
|
-
let hIcon: MaybePtr<''> | null = gui.LoadAppIcon()
|
|
75
|
-
if (!hIcon) hIcon = LoadImageOrdinal(NULL, IDI.APPLICATION, ImageType.ICON, 0, 0, LoadImageFlag.SHARED)
|
|
76
|
-
if (hIcon) {
|
|
77
|
-
const ok = ShellNotifyIcon(NotifyIconCmd.ADD, {
|
|
78
|
-
cbSize: NOTIFYICONDATAW.size,
|
|
79
|
-
hWnd: hwnd, uID: 1,
|
|
80
|
-
uFlags: NotifyIconFlag.MESSAGE | NotifyIconFlag.ICON,
|
|
81
|
-
uCallbackMessage: WM_TRAY,
|
|
82
|
-
hIcon,
|
|
83
|
-
})
|
|
84
|
-
std.out.printf('tray icon %s\n', ok ? 'added' : 'FAILED')
|
|
85
|
-
std.out.flush()
|
|
86
|
-
} else {
|
|
87
|
-
std.out.printf('failed to load icon\n')
|
|
88
|
-
std.out.flush()
|
|
89
|
-
}
|
package/lib/abort.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
// ── Minimal AbortSignal / AbortController ──
|
|
2
|
-
//
|
|
3
|
-
// quickwin has no EventTarget/DOM runtime, so this is a self-contained,
|
|
4
|
-
// dependency-free subset of the WHATWG API used for client-disconnect
|
|
5
|
-
// notifications on the HTTP server (and fetch cancellation).
|
|
6
|
-
//
|
|
7
|
-
// Semantics mirror the web platform on the points that matter:
|
|
8
|
-
// - abort() fires listeners synchronously (same call stack), once, idempotently;
|
|
9
|
-
// - listeners registered AFTER the signal already aborted are ignored
|
|
10
|
-
// (late listeners are never called); consumers must pre-check signal.aborted.
|
|
11
|
-
|
|
12
|
-
export interface AbortEvent {
|
|
13
|
-
readonly type: 'abort'
|
|
14
|
-
readonly target: unknown
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class AbortSignal {
|
|
18
|
-
private _aborted = false
|
|
19
|
-
private _reason: unknown = undefined
|
|
20
|
-
private _listeners: ((e: AbortEvent) => void)[] = []
|
|
21
|
-
onabort: ((e: AbortEvent) => void) | null = null
|
|
22
|
-
|
|
23
|
-
get aborted(): boolean {
|
|
24
|
-
return this._aborted
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
get reason(): unknown {
|
|
28
|
-
return this._reason
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
addEventListener(type: string, listener: (e: AbortEvent) => void): void {
|
|
32
|
-
if (this._aborted || type !== 'abort') return
|
|
33
|
-
this._listeners.push(listener)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
removeEventListener(type: string, listener: (e: AbortEvent) => void): void {
|
|
37
|
-
if (this._aborted || type !== 'abort') return
|
|
38
|
-
const i = this._listeners.indexOf(listener)
|
|
39
|
-
if (i >= 0) this._listeners.splice(i, 1)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/** @internal fired by AbortController.abort() */
|
|
43
|
-
_fire(reason: unknown): void {
|
|
44
|
-
if (this._aborted) return
|
|
45
|
-
this._aborted = true
|
|
46
|
-
this._reason = reason
|
|
47
|
-
const ev: AbortEvent = { type: 'abort', target: this }
|
|
48
|
-
const ls = this._listeners
|
|
49
|
-
this._listeners = []
|
|
50
|
-
if (this.onabort) {
|
|
51
|
-
try { this.onabort(ev) } catch (e) { console.error('[abort] onabort handler error:', e) }
|
|
52
|
-
}
|
|
53
|
-
for (const l of ls) {
|
|
54
|
-
try { l(ev) } catch (e) { console.error('[abort] listener error:', e) }
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
throwIfAborted(): void {
|
|
59
|
-
if (this._aborted) throw this._reason
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
export class AbortController {
|
|
64
|
-
readonly signal = new AbortSignal()
|
|
65
|
-
|
|
66
|
-
abort(reason?: unknown): void {
|
|
67
|
-
this.signal._fire(reason)
|
|
68
|
-
}
|
|
69
|
-
}
|
package/lib/assert.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export function assertNonNullable<T>(v: T, msg?: string): asserts v is NonNullable<T> {
|
|
2
|
-
if (v === null || v === undefined) throw new Error(msg ?? `Assert failed: unexpected ${v}`)
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
export function assertArrayBuffer(v: ArrayBufferLike): asserts v is ArrayBuffer {
|
|
6
|
-
if (!(v instanceof ArrayBuffer)) throw new Error('Assert failed: expected ArrayBuffer')
|
|
7
|
-
}
|
package/lib/bitmap.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
// 按像素建位图 —— gui 模块下沉到 JS 层的复合逻辑(原 js_createBitmapFromPixels)。
|
|
2
|
-
// 旧 C 体是 CreateDIBSection + memcpy 直写位数据;FFI 侧没有「JS 缓冲 → 原生地址」的
|
|
3
|
-
// 批量写原语(ffi 只导出 readBytes / writeByte,逐字节循环不值当),改用 GDI 自带的
|
|
4
|
-
// SetDIBits 把调用方缓冲装进 DIB 段:ColorUse.RGB_COLORS 下 hdc 被忽略(MSDN:
|
|
5
|
-
// "used only if the DIB_PAL_COLORS constant is set ... otherwise it is ignored"),
|
|
6
|
-
// 双机实测传 NULL 可用、GetDIBits 读回逐字节一致(含 alpha),与旧 C 的 memcpy 等价。
|
|
7
|
-
import { NULL, PtrArrayBuffer, type MaybePtr } from './ffi/ctype.js'
|
|
8
|
-
import { CreateDIBSection, DeleteObject, SetDIBits } from './windows/gdi32.js'
|
|
9
|
-
import { BITMAPINFOHEADER } from './windows/structs.js'
|
|
10
|
-
import { ColorUse } from '../constants'
|
|
11
|
-
|
|
12
|
-
/** 建 32bpp 自顶向下 DIB 段位图(像素为 BGRA,[B,G,R,A] 字节序,alpha 保留 —— 可喂
|
|
13
|
-
* ImageListAdd(ILC_COLOR32) 等)。width/height ≤ 0 或像素缓冲不足 width*height*4 →
|
|
14
|
-
* NULL(同旧 gui.CreateBitmapFromPixels 语义:非法入参静默返空,由调用方按「无图」处理);
|
|
15
|
-
* GDI 失败同样返 NULL(已建的位图当场回收)。
|
|
16
|
-
* 位图归调用方所有:用完 DeleteObject。 */
|
|
17
|
-
export function createBitmapFromPixels(width: number, height: number, pixels: ArrayBuffer): MaybePtr<'HGDIOBJ'> {
|
|
18
|
-
if (width <= 0 || height <= 0) return NULL
|
|
19
|
-
const len = width * height * 4
|
|
20
|
-
if (pixels.byteLength < len) return NULL
|
|
21
|
-
// 32bpp BI_RGB:头部即全部(无颜色表);负 biHeight = 自顶向下,与 JS 缓冲行序一致
|
|
22
|
-
const bi = BITMAPINFOHEADER.encode({
|
|
23
|
-
biSize: BITMAPINFOHEADER.size,
|
|
24
|
-
biWidth: width,
|
|
25
|
-
biHeight: -height,
|
|
26
|
-
biPlanes: 1,
|
|
27
|
-
biBitCount: 32,
|
|
28
|
-
})
|
|
29
|
-
const hbm = CreateDIBSection(NULL, bi.ptr, ColorUse.RGB_COLORS, NULL, NULL, 0)
|
|
30
|
-
if (!hbm) return NULL
|
|
31
|
-
// 像素先落自有原生缓冲(BYTE.encode 需带 .ptr 的缓冲),再让 GDI 装进 DIB 段
|
|
32
|
-
const src = new PtrArrayBuffer<'BYTE'>(len)
|
|
33
|
-
new Uint8Array(src).set(new Uint8Array(pixels, 0, len))
|
|
34
|
-
if (SetDIBits(NULL, hbm, 0, height, src, bi.ptr, ColorUse.RGB_COLORS) !== height) {
|
|
35
|
-
DeleteObject(hbm)
|
|
36
|
-
return NULL
|
|
37
|
-
}
|
|
38
|
-
return hbm
|
|
39
|
-
}
|
package/lib/cache-utils.ts
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// ── INI-format cache helpers ──
|
|
2
|
-
|
|
3
|
-
export interface IniCache {
|
|
4
|
-
headers: Record<string, string>
|
|
5
|
-
meta: Record<string, string>
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function parseIni(text: string): IniCache {
|
|
9
|
-
const headers: Record<string, string> = {}
|
|
10
|
-
const meta: Record<string, string> = {}
|
|
11
|
-
let section = ''
|
|
12
|
-
for (const line of text.split('\n')) {
|
|
13
|
-
const trimmed = line.trim()
|
|
14
|
-
if (trimmed === '[headers]') { section = 'headers'; continue }
|
|
15
|
-
if (trimmed === '[meta]') { section = 'meta'; continue }
|
|
16
|
-
if (!section || !trimmed) continue
|
|
17
|
-
const colon = trimmed.indexOf(':')
|
|
18
|
-
if (colon < 0) continue
|
|
19
|
-
const key = trimmed.slice(0, colon).trim()
|
|
20
|
-
const val = trimmed.slice(colon + 1).trim()
|
|
21
|
-
if (section === 'headers') headers[key] = val
|
|
22
|
-
else if (section === 'meta') meta[key] = val
|
|
23
|
-
}
|
|
24
|
-
return { headers, meta }
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export function toIni(headers: Record<string, string>, meta: Record<string, string>): string {
|
|
28
|
-
let s = ''
|
|
29
|
-
if (Object.keys(headers).length > 0) {
|
|
30
|
-
s += '[headers]\n'
|
|
31
|
-
for (const k in headers) {
|
|
32
|
-
s += k + ': ' + headers[k] + '\n'
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
s += '[meta]\n'
|
|
36
|
-
for (const k in meta) {
|
|
37
|
-
s += k + ': ' + meta[k] + '\n'
|
|
38
|
-
}
|
|
39
|
-
return s
|
|
40
|
-
}
|
package/lib/certs.ts
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
// ── Trusted CA bundle ──
|
|
2
|
-
//
|
|
3
|
-
// XP SP3 ships a root store frozen in 2008, so modern chains terminate
|
|
4
|
-
// in roots the OS does not know. Those roots are inlined here instead of
|
|
5
|
-
// being read from disk at handshake time: they travel inside the JS
|
|
6
|
-
// bundle and are pushed into wolfSSL's process-wide trust store as soon
|
|
7
|
-
// as this module is imported.
|
|
8
|
-
//
|
|
9
|
-
// The process-wide store has a fixed QW_CA_SLOTS (16) capacity; this
|
|
10
|
-
// bundle uses 8, leaving headroom for future anchors. If the bundle
|
|
11
|
-
// ever outgrows it, raise QW_CA_SLOTS in src/quickjs-wolfssl.c first —
|
|
12
|
-
// a full store throws at import time.
|
|
13
|
-
//
|
|
14
|
-
// Each anchor covers a different root hierarchy, and none is
|
|
15
|
-
// interchangeable: wolfSSL resolves a CA by AKID/SKID and does not walk
|
|
16
|
-
// every candidate, so a missing anchor fails the handshake with
|
|
17
|
-
// ASN_NO_SIGNER_E rather than falling back.
|
|
18
|
-
//
|
|
19
|
-
// * GLOBALSIGN_R3 — cross-signed R3 (issued by R1, notAfter 2028-01-28,
|
|
20
|
-
// SHA256 44:5E:EC:78:...:94:3D:4E:BB, RSA 2048). This is what the
|
|
21
|
-
// post-2018 GlobalSign intermediates chain to: baidu.com, cdn.jsdelivr,
|
|
22
|
-
// bilibili.com, jd.com.
|
|
23
|
-
// * GLOBALSIGN_R1 — self-signed R1, the signer of the cross-signed R3.
|
|
24
|
-
// * USERTRUST_ECC_CA — cross-signature parent of Sectigo Root E46
|
|
25
|
-
// (github.com), EC P-384.
|
|
26
|
-
// * DIGICERT_GLOBAL_G2 — cross-signature parent of Microsoft TLS RSA Root
|
|
27
|
-
// G2 (bing.com), RSA 2048.
|
|
28
|
-
// * GLOBALSIGN_R46, ISRG_X1, ISRG_X2 — the newer GlobalSign R46 and
|
|
29
|
-
// Let's Encrypt hierarchies (taobao.com, qq.com).
|
|
30
|
-
// * GTS_R4 — cross-signed GTS Root R4 (issued by GlobalSign Root CA,
|
|
31
|
-
// notAfter 2028-01-28, EC P-256). unpkg.com and other properties
|
|
32
|
-
// whose chains terminate at Google Trust Services (WE1/E5/E6
|
|
33
|
-
// intermediates).
|
|
34
|
-
//
|
|
35
|
-
// Known limitation (wolfSSL, not the bundle): GLOBALSIGN_R46 and ISRG_X1
|
|
36
|
-
// are RSA 4096, and this wolfSSL build compiles the SP bignum with
|
|
37
|
-
// SP_INT_BITS=3072 (the default when no FFDHE >= 4096 is enabled, see
|
|
38
|
-
// wolfcrypt/sp_int.h), so RSA_MAX_SIZE resolves to 3072 and wc_RsaVerify
|
|
39
|
-
// rejects a 4096-bit key with WC_KEY_SIZE_E (-234). asn.c flattens every
|
|
40
|
-
// crypto failure to ASN_SIG_CONFIRM_E, so those handshakes surface as
|
|
41
|
-
// -155. Raising SP_INT_BITS to 4096 in WOLFSSL_CMAKE_OPTS clears it; until
|
|
42
|
-
// then taobao.com, qq.com and bing.com fail.
|
|
43
|
-
//
|
|
44
|
-
// Import this module wherever the bundle needs to trust the public web.
|
|
45
|
-
// It is a no-op side effect: entries are registered at import time and
|
|
46
|
-
// picked up lazily by fetch()/WebSocket/the C module loader.
|
|
47
|
-
|
|
48
|
-
import * as wolfssl from 'wolfssl'
|
|
49
|
-
|
|
50
|
-
const GLOBALSIGN_R3 = `-----BEGIN CERTIFICATE-----
|
|
51
|
-
MIIETjCCAzagAwIBAgINAe5fFp3/lzUrZGXWajANBgkqhkiG9w0BAQsFADBXMQsw
|
|
52
|
-
CQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UECxMH
|
|
53
|
-
Um9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTE4MDkxOTAw
|
|
54
|
-
MDAwMFoXDTI4MDEyODEyMDAwMFowTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290
|
|
55
|
-
IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNp
|
|
56
|
-
Z24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMJXaQeQZ4Ihb1wIO2
|
|
57
|
-
hMoonv0FdhHFrYhy/EYCQ8eyip0EXyTLLkvhYIJG4VKrDIFHcGzdZNHr9SyjD4I9
|
|
58
|
-
DCuul9e2FIYQebs7E4B3jAjhSdJqYi8fXvqWaN+JJ5U4nwbXPsnLJlkNc96wyOkm
|
|
59
|
-
DoMVxu9bi9IEYMpJpij2aTv2y8gokeWdimFXN6x0FNx04Druci8unPvQu7/1PQDh
|
|
60
|
-
BjPogiuuU6Y6FnOM3UEOIDrAtKeh6bJPkC4yYOlXy7kEkmho5TgmYHWyn3f/kRTv
|
|
61
|
-
riBJ/K1AFUjRAjFhGV64l++td7dkmnq/X8ET75ti+w1s4FRpFqkD2m7pg5NxdsZp
|
|
62
|
-
hYIXAgMBAAGjggEiMIIBHjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
|
|
63
|
-
/zAdBgNVHQ4EFgQUj/BLf6guRSSuTVD6Y5qL3uLdG7wwHwYDVR0jBBgwFoAUYHtm
|
|
64
|
-
GkUNl8qJUC99BM00qP/8/UswPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFo
|
|
65
|
-
dHRwOi8vb2NzcC5nbG9iYWxzaWduLmNvbS9yb290cjEwMwYDVR0fBCwwKjAooCag
|
|
66
|
-
JIYiaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LmNybDBHBgNVHSAEQDA+
|
|
67
|
-
MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5j
|
|
68
|
-
b20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBACNw6c/ivvVZrpRCb8RD
|
|
69
|
-
M6rNPzq5ZBfyYgZLSPFAiAYXof6r0V88xjPy847dHx0+zBpgmYILrMf8fpqHKqV9
|
|
70
|
-
D6ZX7qw7aoXW3r1AY/itpsiIsBL89kHfDwmXHjjqU5++BfQ+6tOfUBJ2vgmLwgtI
|
|
71
|
-
fR4uUfaNU9OrH0Abio7tfftPeVZwXwzTjhuzp3ANNyuXlava4BJrHEDOxcd+7cJi
|
|
72
|
-
WOx37XMiwor1hkOIreoTbv3Y/kIvuX1erRjvlJDKPSerJpSZdcfL03v3ykzTr1Eh
|
|
73
|
-
kluEfSufFT90y1HonoMOFm8b50bOI7355KKL0jlrqnkckSziYSQtjipIcJDEHsXo
|
|
74
|
-
4HA=
|
|
75
|
-
-----END CERTIFICATE-----
|
|
76
|
-
`
|
|
77
|
-
|
|
78
|
-
const GLOBALSIGN_R1 = `-----BEGIN CERTIFICATE-----
|
|
79
|
-
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
|
80
|
-
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
|
81
|
-
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
|
|
82
|
-
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
|
83
|
-
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
|
|
84
|
-
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
|
|
85
|
-
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
|
|
86
|
-
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
|
|
87
|
-
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
|
|
88
|
-
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
|
|
89
|
-
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
|
|
90
|
-
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
|
|
91
|
-
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
|
|
92
|
-
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
|
|
93
|
-
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
|
|
94
|
-
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
|
|
95
|
-
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
|
|
96
|
-
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
|
|
97
|
-
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
|
98
|
-
-----END CERTIFICATE-----
|
|
99
|
-
`
|
|
100
|
-
|
|
101
|
-
const USERTRUST_ECC_CA = `-----BEGIN CERTIFICATE-----
|
|
102
|
-
MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL
|
|
103
|
-
MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl
|
|
104
|
-
eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT
|
|
105
|
-
JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx
|
|
106
|
-
MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT
|
|
107
|
-
Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg
|
|
108
|
-
VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm
|
|
109
|
-
aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo
|
|
110
|
-
I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng
|
|
111
|
-
o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G
|
|
112
|
-
A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD
|
|
113
|
-
VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB
|
|
114
|
-
zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW
|
|
115
|
-
RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
|
|
116
|
-
-----END CERTIFICATE-----`
|
|
117
|
-
|
|
118
|
-
const DIGICERT_GLOBAL_G2 = `-----BEGIN CERTIFICATE-----
|
|
119
|
-
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh
|
|
120
|
-
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
|
121
|
-
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH
|
|
122
|
-
MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT
|
|
123
|
-
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
|
|
124
|
-
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG
|
|
125
|
-
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI
|
|
126
|
-
2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx
|
|
127
|
-
1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ
|
|
128
|
-
q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz
|
|
129
|
-
tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ
|
|
130
|
-
vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP
|
|
131
|
-
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV
|
|
132
|
-
5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY
|
|
133
|
-
1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4
|
|
134
|
-
NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG
|
|
135
|
-
Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91
|
|
136
|
-
8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe
|
|
137
|
-
pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
|
|
138
|
-
MrY=
|
|
139
|
-
-----END CERTIFICATE-----`
|
|
140
|
-
|
|
141
|
-
const GLOBALSIGN_R46 = `-----BEGIN CERTIFICATE-----
|
|
142
|
-
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
-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
-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
-
MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt
|
|
146
|
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-
4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV
|
|
159
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
|
171
|
-
-----END CERTIFICATE-----`
|
|
172
|
-
|
|
173
|
-
const ISRG_X1 = `-----BEGIN CERTIFICATE-----
|
|
174
|
-
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
|
|
175
|
-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
-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
-
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
|
|
178
|
-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
-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
-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
-
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
|
|
182
|
-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
-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
-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
-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
-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
-
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
|
|
188
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
|
|
198
|
-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
-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
-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
-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
-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
|
|
203
|
-
-----END CERTIFICATE-----`
|
|
204
|
-
|
|
205
|
-
const ISRG_X2 = `-----BEGIN CERTIFICATE-----
|
|
206
|
-
MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw
|
|
207
|
-
CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg
|
|
208
|
-
R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00
|
|
209
|
-
MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT
|
|
210
|
-
ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw
|
|
211
|
-
EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW
|
|
212
|
-
+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9
|
|
213
|
-
ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
|
|
214
|
-
AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI
|
|
215
|
-
zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW
|
|
216
|
-
tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1
|
|
217
|
-
/q4AaOeMSQ+2b1tbFfLn
|
|
218
|
-
-----END CERTIFICATE-----`
|
|
219
|
-
|
|
220
|
-
const GTS_R4 = `-----BEGIN CERTIFICATE-----
|
|
221
|
-
MIIDejCCAmKgAwIBAgIQf+UwvzMTQ77dghYQST2KGzANBgkqhkiG9w0BAQsFADBX
|
|
222
|
-
MQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTEQMA4GA1UE
|
|
223
|
-
CxMHUm9vdCBDQTEbMBkGA1UEAxMSR2xvYmFsU2lnbiBSb290IENBMB4XDTIzMTEx
|
|
224
|
-
NTAzNDMyMVoXDTI4MDEyODAwMDA0MlowRzELMAkGA1UEBhMCVVMxIjAgBgNVBAoT
|
|
225
|
-
GUdvb2dsZSBUcnVzdCBTZXJ2aWNlcyBMTEMxFDASBgNVBAMTC0dUUyBSb290IFI0
|
|
226
|
-
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE83Rzp2iLYK5DuDXFgTB7S0md+8Fhzube
|
|
227
|
-
Rr1r1WEYNa5A3XP3iZEwWus87oV8okB2O6nGuEfYKueSkWpz6bFyOZ8pn6KY019e
|
|
228
|
-
WIZlD6GEZQbR3IvJx3PIjGov5cSr0R2Ko4H/MIH8MA4GA1UdDwEB/wQEAwIBhjAd
|
|
229
|
-
BgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDwYDVR0TAQH/BAUwAwEB/zAd
|
|
230
|
-
BgNVHQ4EFgQUgEzW63T/STaj1dj8tT7FavCUHYwwHwYDVR0jBBgwFoAUYHtmGkUN
|
|
231
|
-
l8qJUC99BM00qP/8/UswNgYIKwYBBQUHAQEEKjAoMCYGCCsGAQUFBzAChhpodHRw
|
|
232
|
-
Oi8vaS5wa2kuZ29vZy9nc3IxLmNydDAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8v
|
|
233
|
-
Yy5wa2kuZ29vZy9yL2dzcjEuY3JsMBMGA1UdIAQMMAowCAYGZ4EMAQIBMA0GCSqG
|
|
234
|
-
SIb3DQEBCwUAA4IBAQAYQrsPBtYDh5bjP2OBDwmkoWhIDDkic574y04tfzHpn+cJ
|
|
235
|
-
odI2D4SseesQ6bDrarZ7C30ddLibZatoKiws3UL9xnELz4ct92vID24FfVbiI1hY
|
|
236
|
-
+SW6FoVHkNeWIP0GCbaM4C6uVdF5dTUsMVs/ZbzNnIdCp5Gxmx5ejvEau8otR/Cs
|
|
237
|
-
kGN+hr/W5GvT1tMBjgWKZ1i4//emhA1JG1BbPzoLJQvyEotc03lXjTaCzv8mEbep
|
|
238
|
-
8RqZ7a2CPsgRbuvTPBwcOMBBmuFeU88+FSBX6+7iP0il8b4Z0QFqIwwMHfs/L6K1
|
|
239
|
-
vepuoxtGzi4CZ68zJpiq1UvSqTbFJjtbD4seiMHl
|
|
240
|
-
-----END CERTIFICATE-----`
|
|
241
|
-
|
|
242
|
-
// Register at import time. Importers of this module get the anchors
|
|
243
|
-
// without writing any code themselves. addTrustedCA only returns the
|
|
244
|
-
// slot count (-1 when full/empty); the fatal-vs-not decision is ours.
|
|
245
|
-
function trust(pem: string): void {
|
|
246
|
-
if (wolfssl.addTrustedCA(pem) < 0)
|
|
247
|
-
throw new Error('certs: trust store full or empty PEM')
|
|
248
|
-
}
|
|
249
|
-
trust(GLOBALSIGN_R3)
|
|
250
|
-
trust(GLOBALSIGN_R1)
|
|
251
|
-
trust(USERTRUST_ECC_CA)
|
|
252
|
-
trust(DIGICERT_GLOBAL_G2)
|
|
253
|
-
trust(GLOBALSIGN_R46)
|
|
254
|
-
trust(ISRG_X1)
|
|
255
|
-
trust(ISRG_X2)
|
|
256
|
-
trust(GTS_R4)
|
|
257
|
-
|
|
258
|
-
export const TRUSTED_CA_COUNT = 8
|