@npaw/forge-react-native 9.7.1 → 9.7.3

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 (38) hide show
  1. package/android/build.gradle +1 -1
  2. package/android/src/main/java/com/npaw/forge/reactnative/ForgeDtoMapper.java +10 -0
  3. package/android/src/main/java/com/npaw/forge/reactnative/ForgeInstanceRegistry.java +59 -1
  4. package/android/src/main/java/com/npaw/forge/reactnative/NPAWForgeModule.java +33 -0
  5. package/android/src/test/java/com/npaw/forge/reactnative/ForgeInstanceRegistryTest.java +65 -0
  6. package/app.plugin.js +17 -0
  7. package/ios/ForgeApple/ForgeKernelFFI.xcframework/Info.plist +8 -8
  8. package/ios/ForgeApple/ForgeKernelFFI.xcframework/ios-arm64/Headers/forge_kernelFFI.h +71 -0
  9. package/ios/ForgeApple/ForgeKernelFFI.xcframework/ios-arm64/libForgeKernelFFI.a +0 -0
  10. package/ios/ForgeApple/ForgeKernelFFI.xcframework/ios-arm64_x86_64-simulator/Headers/forge_kernelFFI.h +71 -0
  11. package/ios/ForgeApple/ForgeKernelFFI.xcframework/ios-arm64_x86_64-simulator/libForgeKernelFFI.a +0 -0
  12. package/ios/ForgeApple/ForgeKernelFFI.xcframework/tvos-arm64/Headers/forge_kernelFFI.h +71 -0
  13. package/ios/ForgeApple/ForgeKernelFFI.xcframework/tvos-arm64/libForgeKernelFFI.a +0 -0
  14. package/ios/ForgeApple/ForgeKernelFFI.xcframework/tvos-arm64-simulator/Headers/forge_kernelFFI.h +71 -0
  15. package/ios/ForgeApple/ForgeKernelFFI.xcframework/tvos-arm64-simulator/libForgeKernelFFI.a +0 -0
  16. package/ios/ForgeApple/Sources/ForgeKernelUniFFI/forge_kernel.swift +198 -1
  17. package/ios/ForgeApple/Sources/ForgeKernelUniFFI/forge_kernelFFI.h +71 -0
  18. package/ios/ForgeApple/Sources/NPAWForgeAVPlayerAdapter/AVPlayerAdapter.swift +12 -0
  19. package/ios/ForgeApple/Sources/NPAWForgeCore/ConnectionType.swift +125 -0
  20. package/ios/ForgeApple/Sources/NPAWForgeCore/ForgeApple.swift +67 -1
  21. package/ios/ForgeApple/Sources/NPAWForgeCore/ForgeCapturePlan.swift +4 -0
  22. package/ios/ForgeApple/Sources/NPAWForgeCore/ForgeLogging.swift +80 -3
  23. package/ios/ForgeApple/Sources/NPAWForgeCore/ForgeRuntime.swift +44 -0
  24. package/ios/ForgeApple/Sources/NPAWForgeCore/LocationObserver.swift +183 -0
  25. package/ios/ForgeApple/Sources/NPAWForgeCore/NPAWForge.swift +123 -2
  26. package/ios/ForgeApple/Sources/NPAWForgeCore/NativeUniFFIRuntime.swift +59 -0
  27. package/ios/ForgeApple/Sources/NPAWForgeCore/PlayerAdapter.swift +17 -1
  28. package/ios/ForgeInstanceRegistry.swift +69 -0
  29. package/ios/ForgeModuleImpl.swift +53 -6
  30. package/ios/NPAWForgeTurboModule.mm +6 -1
  31. package/package.json +3 -1
  32. package/plugin/index.js +82 -0
  33. package/plugin/mutations.js +140 -0
  34. package/src/NPAWForge.ts +12 -1
  35. package/src/events.ts +21 -1
  36. package/src/index.ts +11 -1
  37. package/src/sections.ts +292 -0
  38. package/src/types.ts +23 -2
@@ -28,7 +28,7 @@ def safeExtGet(prop, fallback) {
28
28
  // FORGE_CORE_VERSION (see scripts/react-native/hydrate-natives.sh).
29
29
  def forgeCoreVersion = project.hasProperty('NpawForge_forgeCoreVersion')
30
30
  ? project.property('NpawForge_forgeCoreVersion')
31
- : (System.getenv('FORGE_CORE_VERSION') ?: '9.7.1')
31
+ : (System.getenv('FORGE_CORE_VERSION') ?: '9.7.3')
32
32
 
33
33
  android {
34
34
  namespace 'com.npaw.forge.reactnative'
@@ -22,6 +22,7 @@ import com.facebook.react.bridge.WritableMap;
22
22
  import com.npaw.forge.android.NPAWForge;
23
23
  import com.npaw.forge.android.core.ForgeOutcome;
24
24
  import com.npaw.forge.android.core.ForgeRecordedEvent;
25
+ import com.npaw.forge.android.core.ForgeRenderedLog;
25
26
  import com.npaw.forge.android.network.NetworkRequestOutcome;
26
27
  import com.npaw.forge.android.network.NetworkRequestRecord;
27
28
  import com.npaw.forge.android.network.NetworkRequestSource;
@@ -220,6 +221,15 @@ public final class ForgeDtoMapper {
220
221
  return result;
221
222
  }
222
223
 
224
+ public static WritableMap renderedLogToMap(String instanceId, ForgeRenderedLog log) {
225
+ WritableMap result = Arguments.createMap();
226
+ result.putString("instanceId", instanceId);
227
+ result.putString("level", log.getLevel().getWireName());
228
+ result.putString("tag", log.getTag());
229
+ result.putString("message", log.getMessage());
230
+ return result;
231
+ }
232
+
223
233
  public static WritableMap snapshotToMap(String instanceId, List<ForgeRecordedEvent> events) {
224
234
  WritableArray items = Arguments.createArray();
225
235
  for (ForgeRecordedEvent event : events) {
@@ -9,7 +9,7 @@
9
9
  *
10
10
  *
11
11
  * @author: Victor Soto <victor.soto@nicepeopleatwork.com>
12
- * @description: Process-wide registry mapping React Native instance ids to live NPAWForge facades; the compile-time seam the video package uses to reach core instances. Written in Java so the module compiles under any host-app Kotlin version despite the Kotlin-2.3-built Forge AAR.
12
+ * @description: Public lookup from a React Native instance id to the live NPAWForge facade, so application code can attach a native adapter to a player the shipped packages do not cover. Written in Java so the module compiles under any host-app Kotlin version despite the Kotlin-2.3-built Forge AAR.
13
13
  */
14
14
 
15
15
  package com.npaw.forge.reactnative;
@@ -23,36 +23,94 @@ import java.util.Map;
23
23
  import java.util.concurrent.ConcurrentHashMap;
24
24
  import androidx.annotation.Nullable;
25
25
 
26
+ /**
27
+ * Resolves the native Forge facade behind a React Native instance id.
28
+ *
29
+ * <p><b>{@link #resolve} and {@link #resolveVideoAdapter} are public API</b> and
30
+ * carry the usual stability commitment: they will not be renamed or removed
31
+ * without a major version and a release note. The remaining methods are
32
+ * lifecycle plumbing owned by the module — they are {@code public} only because
33
+ * the video package lives in a different Java package, and application code
34
+ * must not call them.
35
+ *
36
+ * <p>This exists because the React Native packages bind two players — Media3
37
+ * here and AVPlayer on Apple, both through {@code react-native-video} — while
38
+ * Forge ships native adapters for many more. Rather than wait for a first-party
39
+ * package per player, application code can host its own native view, resolve
40
+ * the facade from the instance id it already has in JS, and attach any Forge
41
+ * adapter to it.
42
+ *
43
+ * <p>The React Native design deliberately keeps native player instances off the
44
+ * bridge, and this does not weaken that: only the opaque instance id crosses
45
+ * it. Resolution and attachment happen entirely in native code.
46
+ *
47
+ * <pre>{@code
48
+ * NPAWForge forge = ForgeInstanceRegistry.resolve(instanceId);
49
+ * if (forge == null) return;
50
+ * VideoAdapter video = forge.getVideoAdapter(null);
51
+ * if (video != null) video.setPlayerAdapter(new MyPlayerAdapter(player));
52
+ * }</pre>
53
+ *
54
+ * <p>Detach symmetrically when the view goes away — the registry holds the
55
+ * facade, not your player, and it will not release the adapter for you.
56
+ *
57
+ * <p>Writing a native view puts the Forge native API on the application's
58
+ * compile classpath. The Forge AARs carry Kotlin 2.3 metadata, so applications
59
+ * compiling Kotlin below 2.2 need {@code -Xskip-metadata-version-check}.
60
+ *
61
+ * <p>The Apple counterpart is {@code ForgeInstanceRegistry} in
62
+ * {@code @npaw/forge-react-native} and carries the same two members with the
63
+ * same meaning.
64
+ */
26
65
  public final class ForgeInstanceRegistry {
27
66
 
28
67
  private static final ConcurrentHashMap<String, NPAWForge> INSTANCES = new ConcurrentHashMap<>();
29
68
 
30
69
  private ForgeInstanceRegistry() {}
31
70
 
71
+ /** Module-internal lifecycle. Not public API; do not call from application code. */
32
72
  public static void register(String instanceId, NPAWForge forge) {
33
73
  INSTANCES.put(instanceId, forge);
34
74
  }
35
75
 
76
+ /** Module-internal lifecycle. Not public API; do not call from application code. */
36
77
  @Nullable
37
78
  public static NPAWForge remove(String instanceId) {
38
79
  return INSTANCES.remove(instanceId);
39
80
  }
40
81
 
82
+ /**
83
+ * The live facade for {@code instanceId}, or {@code null} if no such instance
84
+ * exists or it has already been destroyed.
85
+ *
86
+ * <p>Public API.
87
+ */
41
88
  @Nullable
42
89
  public static NPAWForge resolve(String instanceId) {
43
90
  return INSTANCES.get(instanceId);
44
91
  }
45
92
 
93
+ /**
94
+ * The video adapter registered under {@code identifier} on the instance's
95
+ * facade, or {@code null} if either the instance or the adapter is absent.
96
+ *
97
+ * <p>Pass {@code null} for {@code identifier} to get the default adapter,
98
+ * matching {@code NPAWForge.getVideoAdapter(String)}.
99
+ *
100
+ * <p>Public API.
101
+ */
46
102
  @Nullable
47
103
  public static VideoAdapter resolveVideoAdapter(String instanceId, @Nullable String identifier) {
48
104
  NPAWForge forge = INSTANCES.get(instanceId);
49
105
  return forge == null ? null : forge.getVideoAdapter(identifier);
50
106
  }
51
107
 
108
+ /** Module-internal lifecycle. Not public API; do not call from application code. */
52
109
  public static Map<String, NPAWForge> snapshot() {
53
110
  return new HashMap<>(INSTANCES);
54
111
  }
55
112
 
113
+ /** Module-internal lifecycle. Not public API; do not call from application code. */
56
114
  public static List<NPAWForge> clear() {
57
115
  List<NPAWForge> live = new ArrayList<>(INSTANCES.values());
58
116
  INSTANCES.clear();
@@ -25,6 +25,7 @@ import com.npaw.forge.android.NPAWForge;
25
25
  import com.npaw.forge.android.core.ForgeEventSubscription;
26
26
  import com.npaw.forge.android.core.ForgeOutcome;
27
27
  import com.npaw.forge.android.core.ForgeRecordedEvent;
28
+ import com.npaw.forge.android.core.ForgeRenderedLog;
28
29
  import com.npaw.forge.android.video.ManualAdReporter;
29
30
  import com.npaw.forge.android.video.VideoAdapter;
30
31
  import com.npaw.forge.android.video.VideoOptions;
@@ -36,6 +37,12 @@ public class NPAWForgeModule extends NativeNPAWForgeSpec {
36
37
 
37
38
  public static final String NAME = "NPAWForgeRN";
38
39
  public static final String FORGE_EVENT_CHANNEL = "NPAWForgeEvent";
40
+ public static final String FORGE_LOG_CHANNEL = "NPAWForgeLog";
41
+ /**
42
+ * Declared to the native facade so React Native traffic is distinguishable in
43
+ * {@code pluginInfo}; the reported platform stays {@code android}.
44
+ */
45
+ private static final String FRAMEWORK_MARKER = "react-native";
39
46
  private static final String E_UNKNOWN_INSTANCE = "E_FORGE_UNKNOWN_INSTANCE";
40
47
  private static final String E_UNKNOWN_REPORTER = "E_FORGE_UNKNOWN_REPORTER";
41
48
  private static final String E_BAD_ARGUMENT = "E_FORGE_BAD_ARGUMENT";
@@ -54,6 +61,8 @@ public class NPAWForgeModule extends NativeNPAWForgeSpec {
54
61
 
55
62
  private final ConcurrentHashMap<String, ForgeEventSubscription> eventSubscriptions =
56
63
  new ConcurrentHashMap<>();
64
+ private final ConcurrentHashMap<String, ForgeEventSubscription> logSubscriptions =
65
+ new ConcurrentHashMap<>();
57
66
  private final ConcurrentHashMap<Integer, ManualAdReporter> adReporters = new ConcurrentHashMap<>();
58
67
  private final AtomicInteger nextInstanceId = new AtomicInteger(1);
59
68
  private final AtomicInteger nextReporterId = new AtomicInteger(1);
@@ -82,6 +91,8 @@ public class NPAWForgeModule extends NativeNPAWForgeSpec {
82
91
  appContext instanceof Application
83
92
  ? new NPAWForge.Builder((Application) appContext, accountCode)
84
93
  : new NPAWForge.Builder(accountCode);
94
+ // The binding knows what it is; this is not a host-settable config key.
95
+ builder.setFramework(FRAMEWORK_MARKER);
85
96
  ForgeDtoMapper.applyConfig(builder, config);
86
97
  NPAWForge forge = builder.build();
87
98
  String instanceId = "forge-" + nextInstanceId.getAndIncrement();
@@ -106,6 +117,10 @@ public class NPAWForgeModule extends NativeNPAWForgeSpec {
106
117
  if (subscription != null) {
107
118
  subscription.cancel();
108
119
  }
120
+ ForgeEventSubscription logSubscription = logSubscriptions.remove(instanceId);
121
+ if (logSubscription != null) {
122
+ logSubscription.cancel();
123
+ }
109
124
  promise.resolve(ForgeDtoMapper.outcomeToMap(forge.destroy()));
110
125
  }
111
126
 
@@ -664,11 +679,19 @@ public class NPAWForgeModule extends NativeNPAWForgeSpec {
664
679
  subscription.cancel();
665
680
  }
666
681
  eventSubscriptions.clear();
682
+ for (ForgeEventSubscription subscription : logSubscriptions.values()) {
683
+ subscription.cancel();
684
+ }
685
+ logSubscriptions.clear();
667
686
  }
668
687
 
669
688
  private void subscribeInstanceEvents(final String instanceId, NPAWForge forge) {
670
689
  eventSubscriptions.computeIfAbsent(
671
690
  instanceId, key -> forge.subscribeEvents((event, outcome) -> emitForgeEvent(instanceId, event)));
691
+ // The kernel's decision log rides its own channel: it is not an event, and
692
+ // hosts subscribe to it separately.
693
+ logSubscriptions.computeIfAbsent(
694
+ instanceId, key -> forge.addLogListener(log -> emitForgeLog(instanceId, log)));
672
695
  }
673
696
 
674
697
  private void emitForgeEvent(String instanceId, ForgeRecordedEvent event) {
@@ -681,6 +704,16 @@ public class NPAWForgeModule extends NativeNPAWForgeSpec {
681
704
  .emit(FORGE_EVENT_CHANNEL, ForgeDtoMapper.recordedEventToMap(instanceId, event));
682
705
  }
683
706
 
707
+ private void emitForgeLog(String instanceId, ForgeRenderedLog log) {
708
+ ReactApplicationContext context = getReactApplicationContext();
709
+ if (!context.hasActiveReactInstance()) {
710
+ return;
711
+ }
712
+ context
713
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
714
+ .emit(FORGE_LOG_CHANNEL, ForgeDtoMapper.renderedLogToMap(instanceId, log));
715
+ }
716
+
684
717
  @Nullable
685
718
  private NPAWForge resolveOrReject(String instanceId, Promise promise) {
686
719
  NPAWForge forge = ForgeInstanceRegistry.resolve(instanceId);
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Copyright (C) NPAW - All Rights Reserved
3
+ *
4
+ * This source code is protected under international copyright law. All rights
5
+ * reserved and protected by the copyright holders.
6
+ * This file is confidential and only available to authorized individuals with the
7
+ * permission of the copyright holders. If you encounter this file and do not have
8
+ * permission, please contact the copyright holders and delete this file.
9
+ *
10
+ *
11
+ * @author: Victor Soto <victor.soto@nicepeopleatwork.com>
12
+ * @description: JVM unit tests pinning the ForgeInstanceRegistry lookup contract integrators build against - a stale or unknown instance id must yield null rather than throwing.
13
+ */
14
+
15
+ package com.npaw.forge.reactnative;
16
+
17
+ import static org.junit.Assert.assertNull;
18
+ import static org.junit.Assert.assertTrue;
19
+
20
+ import org.junit.Test;
21
+
22
+ /**
23
+ * These pin the null behaviour of the two members declared public API in the
24
+ * surface contract.
25
+ *
26
+ * <p>That is the part integrators actually depend on. They hold an instance id
27
+ * that came over the bridge from JS, and by the time their native view resolves
28
+ * it the instance may already have been destroyed. The documented answer is
29
+ * {@code null}; a throw there would crash the host app from inside a view
30
+ * lifecycle callback, which is the worst place to surface it.
31
+ *
32
+ * <p>Deliberately absent: a register/resolve round-trip. Storing a facade means
33
+ * constructing one, and {@code NPAWForge.Builder.build()} loads the native
34
+ * runtime, which is not available to a JVM unit test - {@link
35
+ * ForgeDtoMapperTest} exercises the Builder for the same reason but stops short
36
+ * of {@code build()}. Round-trip coverage belongs in an instrumented test on a
37
+ * device, where a real facade exists.
38
+ */
39
+ public class ForgeInstanceRegistryTest {
40
+
41
+ @Test
42
+ public void resolveReturnsNullForAnIdThatWasNeverRegistered() {
43
+ assertNull(ForgeInstanceRegistry.resolve("forge-does-not-exist"));
44
+ }
45
+
46
+ @Test
47
+ public void resolveVideoAdapterReturnsNullForAnUnknownInstanceInsteadOfThrowing() {
48
+ // The registry must not dereference a missing facade. This is the call an
49
+ // integrator makes first, so it is the one most likely to meet a stale id.
50
+ assertNull(ForgeInstanceRegistry.resolveVideoAdapter("forge-does-not-exist", null));
51
+ assertNull(ForgeInstanceRegistry.resolveVideoAdapter("forge-does-not-exist", "named"));
52
+ }
53
+
54
+ @Test
55
+ public void removeReturnsNullForAnUnknownInstance() {
56
+ assertNull(ForgeInstanceRegistry.remove("forge-never-registered"));
57
+ }
58
+
59
+ @Test
60
+ public void snapshotOfAnEmptyRegistryIsEmptyAndDetached() {
61
+ // snapshot() is module-internal, but it is the only way to assert the
62
+ // registry starts clean without constructing a facade.
63
+ assertTrue(ForgeInstanceRegistry.snapshot().isEmpty());
64
+ }
65
+ }
package/app.plugin.js ADDED
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (C) NPAW - All Rights Reserved
3
+ *
4
+ * This source code is protected under international copyright law. All rights
5
+ * reserved and protected by the copyright holders.
6
+ * This file is confidential and only available to authorized individuals with the
7
+ * permission of the copyright holders. If you encounter this file and do not have
8
+ * permission, please contact the copyright holders and delete this file.
9
+ *
10
+ *
11
+ * @author: Victor Soto <victor.soto@nicepeopleatwork.com>
12
+ * @description: Expo config plugin entry point; Expo resolves this exact filename at the package root.
13
+ */
14
+
15
+ 'use strict';
16
+
17
+ module.exports = require('./plugin');
@@ -10,7 +10,7 @@
10
10
  <key>HeadersPath</key>
11
11
  <string>Headers</string>
12
12
  <key>LibraryIdentifier</key>
13
- <string>ios-arm64</string>
13
+ <string>tvos-arm64</string>
14
14
  <key>LibraryPath</key>
15
15
  <string>libForgeKernelFFI.a</string>
16
16
  <key>SupportedArchitectures</key>
@@ -18,7 +18,7 @@
18
18
  <string>arm64</string>
19
19
  </array>
20
20
  <key>SupportedPlatform</key>
21
- <string>ios</string>
21
+ <string>tvos</string>
22
22
  </dict>
23
23
  <dict>
24
24
  <key>BinaryPath</key>
@@ -26,18 +26,15 @@
26
26
  <key>HeadersPath</key>
27
27
  <string>Headers</string>
28
28
  <key>LibraryIdentifier</key>
29
- <string>ios-arm64_x86_64-simulator</string>
29
+ <string>ios-arm64</string>
30
30
  <key>LibraryPath</key>
31
31
  <string>libForgeKernelFFI.a</string>
32
32
  <key>SupportedArchitectures</key>
33
33
  <array>
34
34
  <string>arm64</string>
35
- <string>x86_64</string>
36
35
  </array>
37
36
  <key>SupportedPlatform</key>
38
37
  <string>ios</string>
39
- <key>SupportedPlatformVariant</key>
40
- <string>simulator</string>
41
38
  </dict>
42
39
  <dict>
43
40
  <key>BinaryPath</key>
@@ -45,15 +42,18 @@
45
42
  <key>HeadersPath</key>
46
43
  <string>Headers</string>
47
44
  <key>LibraryIdentifier</key>
48
- <string>tvos-arm64</string>
45
+ <string>ios-arm64_x86_64-simulator</string>
49
46
  <key>LibraryPath</key>
50
47
  <string>libForgeKernelFFI.a</string>
51
48
  <key>SupportedArchitectures</key>
52
49
  <array>
53
50
  <string>arm64</string>
51
+ <string>x86_64</string>
54
52
  </array>
55
53
  <key>SupportedPlatform</key>
56
- <string>tvos</string>
54
+ <string>ios</string>
55
+ <key>SupportedPlatformVariant</key>
56
+ <string>simulator</string>
57
57
  </dict>
58
58
  <dict>
59
59
  <key>BinaryPath</key>
@@ -256,6 +256,13 @@ typedef void (*UniffiCallbackInterfaceAppleContentMetadataProviderMethod0)(uint6
256
256
  RustCallStatus *_Nonnull uniffiCallStatus
257
257
  );
258
258
 
259
+ #endif
260
+ #ifndef UNIFFI_FFIDEF_CALLBACK_INTERFACE_APPLE_LOG_LISTENER_METHOD0
261
+ #define UNIFFI_FFIDEF_CALLBACK_INTERFACE_APPLE_LOG_LISTENER_METHOD0
262
+ typedef void (*UniffiCallbackInterfaceAppleLogListenerMethod0)(uint64_t, RustBuffer, void* _Nonnull,
263
+ RustCallStatus *_Nonnull uniffiCallStatus
264
+ );
265
+
259
266
  #endif
260
267
  #ifndef UNIFFI_FFIDEF_CALLBACK_INTERFACE_APPLE_SESSION_PRE_SEND_HOOK_METHOD0
261
268
  #define UNIFFI_FFIDEF_CALLBACK_INTERFACE_APPLE_SESSION_PRE_SEND_HOOK_METHOD0
@@ -288,6 +295,15 @@ typedef struct UniffiVTableCallbackInterfaceAppleContentMetadataProvider {
288
295
  UniffiCallbackInterfaceAppleContentMetadataProviderMethod0 _Nonnull metadataSnapshot;
289
296
  } UniffiVTableCallbackInterfaceAppleContentMetadataProvider;
290
297
 
298
+ #endif
299
+ #ifndef UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_APPLE_LOG_LISTENER
300
+ #define UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_APPLE_LOG_LISTENER
301
+ typedef struct UniffiVTableCallbackInterfaceAppleLogListener {
302
+ UniffiCallbackInterfaceFree _Nonnull uniffiFree;
303
+ UniffiCallbackInterfaceClone _Nonnull uniffiClone;
304
+ UniffiCallbackInterfaceAppleLogListenerMethod0 _Nonnull onLog;
305
+ } UniffiVTableCallbackInterfaceAppleLogListener;
306
+
291
307
  #endif
292
308
  #ifndef UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_APPLE_SESSION_PRE_SEND_HOOK
293
309
  #define UNIFFI_FFIDEF_V_TABLE_CALLBACK_INTERFACE_APPLE_SESSION_PRE_SEND_HOOK
@@ -337,6 +353,11 @@ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_clear_capture
337
353
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_clear_content_metadata_provider(uint64_t ptr, uint64_t view_id, RustCallStatus *_Nonnull out_status
338
354
  );
339
355
  #endif
356
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_CLEAR_LOG_LISTENER
357
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_CLEAR_LOG_LISTENER
358
+ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_clear_log_listener(uint64_t ptr, RustCallStatus *_Nonnull out_status
359
+ );
360
+ #endif
340
361
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_CLEAR_SESSION_PRE_SEND_HOOK
341
362
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_CLEAR_SESSION_PRE_SEND_HOOK
342
363
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_clear_session_pre_send_hook(uint64_t ptr, RustCallStatus *_Nonnull out_status
@@ -372,6 +393,11 @@ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_record_applic
372
393
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_record_identity_event(uint64_t ptr, RustBuffer kind, uint64_t timemark_ms, RustBuffer fields, RustCallStatus *_Nonnull out_status
373
394
  );
374
395
  #endif
396
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_RECORD_LOCATION_FIX
397
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_RECORD_LOCATION_FIX
398
+ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_record_location_fix(uint64_t ptr, double latitude, double longitude, double accuracy_m, uint64_t timestamp_ms, RustCallStatus *_Nonnull out_status
399
+ );
400
+ #endif
375
401
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_RECORD_NETWORK_EVENT
376
402
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_RECORD_NETWORK_EVENT
377
403
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_record_network_event(uint64_t ptr, RustBuffer observation, RustCallStatus *_Nonnull out_status
@@ -387,6 +413,11 @@ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_record_player
387
413
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_record_session_event(uint64_t ptr, RustBuffer event_name, uint64_t timemark_ms, RustBuffer params, RustCallStatus *_Nonnull out_status
388
414
  );
389
415
  #endif
416
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_AUTO_CONNECTION_TYPE
417
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_AUTO_CONNECTION_TYPE
418
+ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_set_auto_connection_type(uint64_t ptr, RustBuffer connection_type, RustCallStatus *_Nonnull out_status
419
+ );
420
+ #endif
390
421
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_CAPTURE_PLAN_LISTENER
391
422
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_CAPTURE_PLAN_LISTENER
392
423
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_set_capture_plan_listener(uint64_t ptr, uint64_t listener, RustCallStatus *_Nonnull out_status
@@ -402,6 +433,11 @@ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_set_content_m
402
433
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_set_log_level(uint64_t ptr, RustBuffer log_level, RustCallStatus *_Nonnull out_status
403
434
  );
404
435
  #endif
436
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_LOG_LISTENER
437
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_LOG_LISTENER
438
+ RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_set_log_listener(uint64_t ptr, uint64_t listener, RustCallStatus *_Nonnull out_status
439
+ );
440
+ #endif
405
441
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_SESSION_PRE_SEND_HOOK
406
442
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_METHOD_FORGERUNTIMEBRIDGE_SET_SESSION_PRE_SEND_HOOK
407
443
  RustBuffer uniffi_forge_kernel_uniffi_fn_method_forgeruntimebridge_set_session_pre_send_hook(uint64_t ptr, uint64_t hook, RustCallStatus *_Nonnull out_status
@@ -432,6 +468,11 @@ void uniffi_forge_kernel_uniffi_fn_init_callback_vtable_applecaptureplanlistener
432
468
  void uniffi_forge_kernel_uniffi_fn_init_callback_vtable_applecontentmetadataprovider(const UniffiVTableCallbackInterfaceAppleContentMetadataProvider* _Nonnull vtable
433
469
  );
434
470
  #endif
471
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_INIT_CALLBACK_VTABLE_APPLELOGLISTENER
472
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_INIT_CALLBACK_VTABLE_APPLELOGLISTENER
473
+ void uniffi_forge_kernel_uniffi_fn_init_callback_vtable_appleloglistener(const UniffiVTableCallbackInterfaceAppleLogListener* _Nonnull vtable
474
+ );
475
+ #endif
435
476
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_INIT_CALLBACK_VTABLE_APPLESESSIONPRESENDHOOK
436
477
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_FN_INIT_CALLBACK_VTABLE_APPLESESSIONPRESENDHOOK
437
478
  void uniffi_forge_kernel_uniffi_fn_init_callback_vtable_applesessionpresendhook(const UniffiVTableCallbackInterfaceAppleSessionPreSendHook* _Nonnull vtable
@@ -730,6 +771,12 @@ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_clear_cap
730
771
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_CLEAR_CONTENT_METADATA_PROVIDER
731
772
  uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_clear_content_metadata_provider(void
732
773
 
774
+ );
775
+ #endif
776
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_CLEAR_LOG_LISTENER
777
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_CLEAR_LOG_LISTENER
778
+ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_clear_log_listener(void
779
+
733
780
  );
734
781
  #endif
735
782
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_CLEAR_SESSION_PRE_SEND_HOOK
@@ -772,6 +819,12 @@ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_record_ap
772
819
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_RECORD_IDENTITY_EVENT
773
820
  uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_record_identity_event(void
774
821
 
822
+ );
823
+ #endif
824
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_RECORD_LOCATION_FIX
825
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_RECORD_LOCATION_FIX
826
+ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_record_location_fix(void
827
+
775
828
  );
776
829
  #endif
777
830
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_RECORD_NETWORK_EVENT
@@ -790,6 +843,12 @@ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_record_pl
790
843
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_RECORD_SESSION_EVENT
791
844
  uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_record_session_event(void
792
845
 
846
+ );
847
+ #endif
848
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_AUTO_CONNECTION_TYPE
849
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_AUTO_CONNECTION_TYPE
850
+ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_set_auto_connection_type(void
851
+
793
852
  );
794
853
  #endif
795
854
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_CAPTURE_PLAN_LISTENER
@@ -808,6 +867,12 @@ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_set_conte
808
867
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_LOG_LEVEL
809
868
  uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_set_log_level(void
810
869
 
870
+ );
871
+ #endif
872
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_LOG_LISTENER
873
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_LOG_LISTENER
874
+ uint16_t uniffi_forge_kernel_uniffi_checksum_method_forgeruntimebridge_set_log_listener(void
875
+
811
876
  );
812
877
  #endif
813
878
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_FORGERUNTIMEBRIDGE_SET_SESSION_PRE_SEND_HOOK
@@ -850,6 +915,12 @@ uint16_t uniffi_forge_kernel_uniffi_checksum_method_applecaptureplanlistener_on_
850
915
  #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_APPLECONTENTMETADATAPROVIDER_METADATA_SNAPSHOT
851
916
  uint16_t uniffi_forge_kernel_uniffi_checksum_method_applecontentmetadataprovider_metadata_snapshot(void
852
917
 
918
+ );
919
+ #endif
920
+ #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_APPLELOGLISTENER_ON_LOG
921
+ #define UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_APPLELOGLISTENER_ON_LOG
922
+ uint16_t uniffi_forge_kernel_uniffi_checksum_method_appleloglistener_on_log(void
923
+
853
924
  );
854
925
  #endif
855
926
  #ifndef UNIFFI_FFIDEF_UNIFFI_FORGE_KERNEL_UNIFFI_CHECKSUM_METHOD_APPLESESSIONPRESENDHOOK_WILL_SEND