@gjsify/tls-native 0.22.0 → 0.24.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.
package/README.md CHANGED
@@ -36,7 +36,33 @@ if (hasNativeTls()) {
36
36
  }
37
37
  ```
38
38
 
39
- Ships as a prebuilt `.so` + `.typelib` for `linux-x86_64`. Requires `glib-networking` with a GnuTLS backend (the default on Fedora / GNOME platforms).
39
+ Requires `glib-networking` with a GnuTLS backend (the default on Fedora / GNOME platforms) for the Phase-2 session APIs. See [Platform coverage](#platform-coverage) for the prebuilt platforms.
40
+
41
+ ## Platform coverage
42
+
43
+ | Platform | Prebuild | Built by |
44
+ |---|---|---|
45
+ | `linux-x64` | ✅ `.so` + `.gir` + `.typelib` | native runner |
46
+ | `linux-arm64` | ✅ | native runner |
47
+ | `linux-ppc64`, `linux-s390x`, `linux-riscv64` | ✅ | QEMU emulation |
48
+ | `darwin-arm64` (macOS, Apple silicon) | ✅ `.dylib` + `.gir` + `.typelib` | `macos-latest` runner |
49
+ | `darwin-x64` (macOS, Intel) | ❌ | — no runner leg yet |
50
+ | Windows | ❌ | — no Vala/GI bridge in this repo targets Windows |
51
+
52
+ All prebuilds are produced by [`.github/workflows/prebuilds.yml`](../../../.github/workflows/prebuilds.yml)
53
+ and committed back to the repository.
54
+
55
+ The macOS prebuild links GnuTLS from Homebrew, so **Phase 1 (OCSP response parsing) is fully
56
+ functional there**. Phase 2 (`SessionAccess`, channel bindings, session resumption) additionally
57
+ requires `glib-networking` built with the GnuTLS backend at *runtime*; where that backend is
58
+ absent, `hasTlsSessionAccess()` reports `false` and the API degrades to the documented
59
+ `undefined` / `false` / no-op contract — exactly as Node behaves on a build without session
60
+ support. No runtime verification of Phase 2 on macOS has been done.
61
+
62
+ **Known gap — a `darwin-arm64` prebuild is built and shipped, but the CLI does not
63
+ load it yet.** `detectNativePackages()` (`packages/infra/cli/src/utils/detect-native-packages.ts`)
64
+ hardcodes a `linux-` directory prefix, and `buildNativeEnv()` exports `LD_LIBRARY_PATH`,
65
+ which macOS `dyld` ignores in favour of `DYLD_LIBRARY_PATH`.
40
66
 
41
67
  ## License
42
68
 
package/meson.build CHANGED
@@ -45,12 +45,32 @@ libGjsifyTls = library('gjsifytls', sources,
45
45
  install_dir: [true, true, true, true],
46
46
  )
47
47
 
48
+ # ----------------------------------------------------------------------------
49
+ # Host-dependent shared-library leaf name.
50
+ #
51
+ # The typelib records the exact filename gjs' g_module_open() resolves at load
52
+ # time, and meson names the shared library per host convention: lib<name>.so on
53
+ # ELF hosts, lib<name>.dylib on macOS. Recording the wrong leaf yields a typelib
54
+ # that IS found via GI_TYPELIB_PATH but whose library never loads — a silent,
55
+ # confusing failure. Mirrors the branch in packages/napi/napi/meson.build.
56
+ #
57
+ # Windows is deliberately absent: this bridge has had no Windows portability
58
+ # work, so `else` (ELF naming) is the honest fallback rather than a .dll branch
59
+ # that would imply support which does not exist.
60
+ # ----------------------------------------------------------------------------
61
+ host_system = host_machine.system()
62
+ if host_system == 'darwin'
63
+ shared_lib_name = 'libgjsifytls.dylib'
64
+ else
65
+ shared_lib_name = 'libgjsifytls.so'
66
+ endif
67
+
48
68
  g_ir_compiler = find_program('g-ir-compiler')
49
69
 
50
70
  custom_target(meson.project_name() + '-1.0.typelib',
51
71
  command: [
52
72
  g_ir_compiler,
53
- '--shared-library', 'libgjsifytls.so',
73
+ '--shared-library', shared_lib_name,
54
74
  '--output', '@OUTPUT@',
55
75
  meson.current_build_dir() / meson.project_name() + '-1.0.gir',
56
76
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gjsify/tls-native",
3
- "version": "0.22.0",
3
+ "version": "0.24.1",
4
4
  "description": "Optional Vala/GObject bridge providing GnuTLS capabilities not exposed by Gio.TlsConnection — OCSP-response parsing (RFC 6960), session resumption data extraction, channel binding (tls-finished bytes for SCRAM-SHA-*). Enhances @gjsify/tls when installed.",
5
5
  "type": "module",
6
6
  "main": "lib/esm/index.js",
@@ -19,6 +19,14 @@
19
19
  "src/vala"
20
20
  ],
21
21
  "gjsify": {
22
+ "platforms": [
23
+ "linux-x64",
24
+ "linux-arm64",
25
+ "linux-ppc64",
26
+ "linux-s390x",
27
+ "linux-riscv64",
28
+ "darwin-arm64"
29
+ ],
22
30
  "prebuilds": "prebuilds",
23
31
  "runtimes": {
24
32
  "gjs": "polyfill",
@@ -52,16 +60,16 @@
52
60
  "init:meson": "meson setup build .",
53
61
  "init:meson:wipe": "gjsify run init:meson --wipe",
54
62
  "build:meson": "gjsify run init:meson && meson compile -C build",
55
- "build:prebuilds": "gjsify run build:meson && mkdir -p prebuilds/linux-x86_64 && cp build/libgjsifytls.so build/GjsifyTls-1.0.gir build/GjsifyTls-1.0.typelib prebuilds/linux-x86_64/",
56
- "build:gir-types": "ts-for-gir generate --externalDeps --allowMissingDeps --girDirectories=./prebuilds/linux-x86_64 --girDirectories=/usr/share/gir-1.0 --modules=GjsifyTls-1.0 --outdir=src/ts --npmScope=@girs --package=false --ignoreVersionConflicts=true"
63
+ "build:prebuilds": "gjsify run build:meson && node ../../../scripts/stage-prebuild.mjs .",
64
+ "build:gir-types": "ts-for-gir generate --externalDeps --allowMissingDeps --girDirectories=./prebuilds/linux-x64 --girDirectories=/usr/share/gir-1.0 --modules=GjsifyTls-1.0 --outdir=src/ts --npmScope=@girs --package=false --ignoreVersionConflicts=true"
57
65
  },
58
66
  "dependencies": {
59
67
  "@girs/glib-2.0": "^4.1.0",
60
68
  "@girs/gobject-2.0": "^4.1.0"
61
69
  },
62
70
  "devDependencies": {
63
- "@gjsify/cli": "^0.22.0",
64
- "@gjsify/unit": "^0.22.0",
71
+ "@gjsify/cli": "^0.24.1",
72
+ "@gjsify/unit": "^0.24.1",
65
73
  "@ts-for-gir/cli": "^4.1.0",
66
74
  "@types/node": "^25.9.2",
67
75
  "typescript": "^6.0.3"
@@ -0,0 +1,276 @@
1
+ <?xml version="1.0"?>
2
+ <!-- GjsifyTls-1.0.gir generated by valac 0.56.19, do not modify. -->
3
+ <repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:doc="http://www.gtk.org/introspection/doc/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
4
+ <include name="GObject" version="2.0"/>
5
+ <include name="Gio" version="2.0"/>
6
+ <include name="GLib" version="2.0"/>
7
+ <package name="gjsifytls"/>
8
+ <c:include name="gjsifytls.h"/>
9
+ <doc:format name="unknown"/>
10
+ <namespace name="GjsifyTls" version="1.0" shared-library="libgjsifytls.dylib" c:prefix="GjsifyTls" c:identifier-prefixes="GjsifyTls" c:symbol-prefixes="gjsify_tls">
11
+ <enumeration name="ChannelBindingType" c:type="GjsifyTlsChannelBindingType" glib:type-name="GjsifyTlsChannelBindingType" glib:get-type="gjsify_tls_channel_binding_type_get_type">
12
+ <member name="tls_unique" c:identifier="GJSIFY_TLS_CHANNEL_BINDING_TYPE_TLS_UNIQUE" value="0"/>
13
+ <member name="tls_server_end_point" c:identifier="GJSIFY_TLS_CHANNEL_BINDING_TYPE_TLS_SERVER_END_POINT" value="1"/>
14
+ <member name="tls_exporter" c:identifier="GJSIFY_TLS_CHANNEL_BINDING_TYPE_TLS_EXPORTER" value="2"/>
15
+ </enumeration>
16
+ <enumeration name="SessionAccessError" c:type="GjsifyTlsSessionAccessError" glib:type-name="GjsifyTlsSessionAccessError" glib:get-type="gjsify_tls_session_access_error_get_type" glib:error-domain="gjsify-tls-session-access-error-quark">
17
+ <member name="not_supported" c:identifier="GJSIFY_TLS_SESSION_ACCESS_ERROR_NOT_SUPPORTED" value="0"/>
18
+ <member name="not_ready" c:identifier="GJSIFY_TLS_SESSION_ACCESS_ERROR_NOT_READY" value="1"/>
19
+ <member name="gnutls_error" c:identifier="GJSIFY_TLS_SESSION_ACCESS_ERROR_GNUTLS_ERROR" value="2"/>
20
+ </enumeration>
21
+ <class name="OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo" c:symbol-prefix="ocsp_response_info" glib:type-name="GjsifyTlsOcspResponseInfo" glib:get-type="gjsify_tls_ocsp_response_info_get_type" glib:type-struct="OcspResponseInfoClass" parent="GObject.Object">
22
+ <field name="parent_instance" readable="0" private="1">
23
+ <type name="GObject.Object" c:type="GObject"/>
24
+ </field>
25
+ <field name="priv" readable="0" private="1">
26
+ <type name="OcspResponseInfoPrivate" c:type="GjsifyTlsOcspResponseInfoPrivate*"/>
27
+ </field>
28
+ <constructor name="new" c:identifier="gjsify_tls_ocsp_response_info_new">
29
+ <return-value transfer-ownership="full">
30
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
31
+ </return-value>
32
+ </constructor>
33
+ <property name="response-status" writable="1">
34
+ <type name="gint" c:type="gint"/>
35
+ </property>
36
+ <method name="get_response_status" c:identifier="gjsify_tls_ocsp_response_info_get_response_status">
37
+ <return-value transfer-ownership="none">
38
+ <type name="gint" c:type="gint"/>
39
+ </return-value>
40
+ <parameters>
41
+ <instance-parameter name="self" transfer-ownership="none">
42
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
43
+ </instance-parameter>
44
+ </parameters>
45
+ </method>
46
+ <property name="produced-at" writable="1">
47
+ <type name="gint64" c:type="gint64"/>
48
+ </property>
49
+ <method name="get_produced_at" c:identifier="gjsify_tls_ocsp_response_info_get_produced_at">
50
+ <return-value transfer-ownership="none">
51
+ <type name="gint64" c:type="gint64"/>
52
+ </return-value>
53
+ <parameters>
54
+ <instance-parameter name="self" transfer-ownership="none">
55
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
56
+ </instance-parameter>
57
+ </parameters>
58
+ </method>
59
+ <property name="cert-status" writable="1">
60
+ <type name="gint" c:type="gint"/>
61
+ </property>
62
+ <method name="get_cert_status" c:identifier="gjsify_tls_ocsp_response_info_get_cert_status">
63
+ <return-value transfer-ownership="none">
64
+ <type name="gint" c:type="gint"/>
65
+ </return-value>
66
+ <parameters>
67
+ <instance-parameter name="self" transfer-ownership="none">
68
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
69
+ </instance-parameter>
70
+ </parameters>
71
+ </method>
72
+ <property name="this-update" writable="1">
73
+ <type name="gint64" c:type="gint64"/>
74
+ </property>
75
+ <method name="get_this_update" c:identifier="gjsify_tls_ocsp_response_info_get_this_update">
76
+ <return-value transfer-ownership="none">
77
+ <type name="gint64" c:type="gint64"/>
78
+ </return-value>
79
+ <parameters>
80
+ <instance-parameter name="self" transfer-ownership="none">
81
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
82
+ </instance-parameter>
83
+ </parameters>
84
+ </method>
85
+ <property name="next-update" writable="1">
86
+ <type name="gint64" c:type="gint64"/>
87
+ </property>
88
+ <method name="get_next_update" c:identifier="gjsify_tls_ocsp_response_info_get_next_update">
89
+ <return-value transfer-ownership="none">
90
+ <type name="gint64" c:type="gint64"/>
91
+ </return-value>
92
+ <parameters>
93
+ <instance-parameter name="self" transfer-ownership="none">
94
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
95
+ </instance-parameter>
96
+ </parameters>
97
+ </method>
98
+ <property name="revocation-time" writable="1">
99
+ <type name="gint64" c:type="gint64"/>
100
+ </property>
101
+ <method name="get_revocation_time" c:identifier="gjsify_tls_ocsp_response_info_get_revocation_time">
102
+ <return-value transfer-ownership="none">
103
+ <type name="gint64" c:type="gint64"/>
104
+ </return-value>
105
+ <parameters>
106
+ <instance-parameter name="self" transfer-ownership="none">
107
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
108
+ </instance-parameter>
109
+ </parameters>
110
+ </method>
111
+ <property name="revocation-reason" writable="1">
112
+ <type name="gint" c:type="gint"/>
113
+ </property>
114
+ <method name="get_revocation_reason" c:identifier="gjsify_tls_ocsp_response_info_get_revocation_reason">
115
+ <return-value transfer-ownership="none">
116
+ <type name="gint" c:type="gint"/>
117
+ </return-value>
118
+ <parameters>
119
+ <instance-parameter name="self" transfer-ownership="none">
120
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
121
+ </instance-parameter>
122
+ </parameters>
123
+ </method>
124
+ </class>
125
+ <record name="OcspResponseInfoClass" c:type="GjsifyTlsOcspResponseInfoClass" glib:is-gtype-struct-for="OcspResponseInfo">
126
+ <field name="parent_class" readable="0" private="1">
127
+ <type name="GObject.ObjectClass" c:type="GObjectClass"/>
128
+ </field>
129
+ </record>
130
+ <record name="OcspResponseInfoPrivate" c:type="GjsifyTlsOcspResponseInfoPrivate" disguised="1"/>
131
+ <class name="Tls" c:type="GjsifyTlsTls" c:symbol-prefix="tls" glib:type-name="GjsifyTlsTls" glib:get-type="gjsify_tls_tls_get_type" glib:type-struct="TlsClass" parent="GObject.Object">
132
+ <field name="parent_instance" readable="0" private="1">
133
+ <type name="GObject.Object" c:type="GObject"/>
134
+ </field>
135
+ <field name="priv" readable="0" private="1">
136
+ <type name="TlsPrivate" c:type="GjsifyTlsTlsPrivate*"/>
137
+ </field>
138
+ <function name="parse_ocsp_response" c:identifier="gjsify_tls_tls_parse_ocsp_response">
139
+ <return-value transfer-ownership="full" nullable="1">
140
+ <type name="GjsifyTls.OcspResponseInfo" c:type="GjsifyTlsOcspResponseInfo*"/>
141
+ </return-value>
142
+ <parameters>
143
+ <parameter name="bytes" transfer-ownership="none">
144
+ <array length="1" c:type="guint8*">
145
+ <type name="guint8" c:type="guint8"/>
146
+ </array>
147
+ </parameter>
148
+ <parameter name="bytes_length1" transfer-ownership="none">
149
+ <type name="gint" c:type="gint"/>
150
+ </parameter>
151
+ </parameters>
152
+ </function>
153
+ <constructor name="new" c:identifier="gjsify_tls_tls_new">
154
+ <return-value transfer-ownership="full">
155
+ <type name="GjsifyTls.Tls" c:type="GjsifyTlsTls*"/>
156
+ </return-value>
157
+ </constructor>
158
+ </class>
159
+ <record name="TlsClass" c:type="GjsifyTlsTlsClass" glib:is-gtype-struct-for="Tls">
160
+ <field name="parent_class" readable="0" private="1">
161
+ <type name="GObject.ObjectClass" c:type="GObjectClass"/>
162
+ </field>
163
+ </record>
164
+ <record name="TlsPrivate" c:type="GjsifyTlsTlsPrivate" disguised="1"/>
165
+ <class name="SessionAccess" c:type="GjsifyTlsSessionAccess" c:symbol-prefix="session_access" glib:type-name="GjsifyTlsSessionAccess" glib:get-type="gjsify_tls_session_access_get_type" glib:type-struct="SessionAccessClass" parent="GObject.Object">
166
+ <field name="parent_instance" readable="0" private="1">
167
+ <type name="GObject.Object" c:type="GObject"/>
168
+ </field>
169
+ <field name="priv" readable="0" private="1">
170
+ <type name="SessionAccessPrivate" c:type="GjsifyTlsSessionAccessPrivate*"/>
171
+ </field>
172
+ <function name="is_supported" c:identifier="gjsify_tls_session_access_is_supported">
173
+ <return-value transfer-ownership="full">
174
+ <type name="gboolean" c:type="gboolean"/>
175
+ </return-value>
176
+ </function>
177
+ <function name="for_connection" c:identifier="gjsify_tls_session_access_for_connection">
178
+ <return-value transfer-ownership="full" nullable="1">
179
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
180
+ </return-value>
181
+ <parameters>
182
+ <parameter name="connection" transfer-ownership="none" nullable="1">
183
+ <type name="Gio.TlsConnection" c:type="GTlsConnection*"/>
184
+ </parameter>
185
+ </parameters>
186
+ </function>
187
+ <method name="is_session_reused" c:identifier="gjsify_tls_session_access_is_session_reused" throws="1">
188
+ <return-value transfer-ownership="full">
189
+ <type name="gboolean" c:type="gboolean"/>
190
+ </return-value>
191
+ <parameters>
192
+ <instance-parameter name="self" transfer-ownership="none">
193
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
194
+ </instance-parameter>
195
+ </parameters>
196
+ </method>
197
+ <method name="get_session_data" c:identifier="gjsify_tls_session_access_get_session_data" throws="1">
198
+ <return-value transfer-ownership="full">
199
+ <type name="GLib.Bytes" c:type="GBytes*"/>
200
+ </return-value>
201
+ <parameters>
202
+ <instance-parameter name="self" transfer-ownership="none">
203
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
204
+ </instance-parameter>
205
+ </parameters>
206
+ </method>
207
+ <method name="set_session_data" c:identifier="gjsify_tls_session_access_set_session_data" throws="1">
208
+ <return-value transfer-ownership="full">
209
+ <type name="none" c:type="void"/>
210
+ </return-value>
211
+ <parameters>
212
+ <instance-parameter name="self" transfer-ownership="none">
213
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
214
+ </instance-parameter>
215
+ <parameter name="data" transfer-ownership="none">
216
+ <type name="GLib.Bytes" c:type="GBytes*"/>
217
+ </parameter>
218
+ </parameters>
219
+ </method>
220
+ <method name="get_channel_binding" c:identifier="gjsify_tls_session_access_get_channel_binding" throws="1">
221
+ <return-value transfer-ownership="full">
222
+ <type name="GLib.Bytes" c:type="GBytes*"/>
223
+ </return-value>
224
+ <parameters>
225
+ <instance-parameter name="self" transfer-ownership="none">
226
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
227
+ </instance-parameter>
228
+ <parameter name="binding" transfer-ownership="none">
229
+ <type name="GjsifyTls.ChannelBindingType" c:type="GjsifyTlsChannelBindingType"/>
230
+ </parameter>
231
+ </parameters>
232
+ </method>
233
+ <method name="get_finished" c:identifier="gjsify_tls_session_access_get_finished" throws="1">
234
+ <return-value transfer-ownership="full">
235
+ <type name="GLib.Bytes" c:type="GBytes*"/>
236
+ </return-value>
237
+ <parameters>
238
+ <instance-parameter name="self" transfer-ownership="none">
239
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
240
+ </instance-parameter>
241
+ </parameters>
242
+ </method>
243
+ <method name="get_peer_finished" c:identifier="gjsify_tls_session_access_get_peer_finished" throws="1">
244
+ <return-value transfer-ownership="full">
245
+ <type name="GLib.Bytes" c:type="GBytes*"/>
246
+ </return-value>
247
+ <parameters>
248
+ <instance-parameter name="self" transfer-ownership="none">
249
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
250
+ </instance-parameter>
251
+ </parameters>
252
+ </method>
253
+ <method name="get_negotiated_protocol_version" c:identifier="gjsify_tls_session_access_get_negotiated_protocol_version">
254
+ <return-value transfer-ownership="full">
255
+ <type name="utf8" c:type="gchar*"/>
256
+ </return-value>
257
+ <parameters>
258
+ <instance-parameter name="self" transfer-ownership="none">
259
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
260
+ </instance-parameter>
261
+ </parameters>
262
+ </method>
263
+ <constructor name="new" c:identifier="gjsify_tls_session_access_new">
264
+ <return-value transfer-ownership="full">
265
+ <type name="GjsifyTls.SessionAccess" c:type="GjsifyTlsSessionAccess*"/>
266
+ </return-value>
267
+ </constructor>
268
+ </class>
269
+ <record name="SessionAccessClass" c:type="GjsifyTlsSessionAccessClass" glib:is-gtype-struct-for="SessionAccess">
270
+ <field name="parent_class" readable="0" private="1">
271
+ <type name="GObject.ObjectClass" c:type="GObjectClass"/>
272
+ </field>
273
+ </record>
274
+ <record name="SessionAccessPrivate" c:type="GjsifyTlsSessionAccessPrivate" disguised="1"/>
275
+ </namespace>
276
+ </repository>
index 1585c0b..a34e4e3 100644
Binary file
index 2add461..1fdfc2f 100755
Binary file