react-native-zeroconf 0.17.3 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/NOTICE +2 -6
  2. package/README.md +1 -1
  3. package/android/CMakeLists.txt +64 -0
  4. package/android/build.gradle +1 -17
  5. package/android/generated/java/com/balthazargronon/RCTZeroconf/NativeZeroconfSpec.java +96 -0
  6. package/android/generated/jni/CMakeLists.txt +28 -0
  7. package/android/generated/jni/RNZeroconfSpec-generated.cpp +77 -0
  8. package/android/generated/jni/RNZeroconfSpec.h +31 -0
  9. package/android/generated/jni/react/renderer/components/RNZeroconfSpec/RNZeroconfSpecJSI.h +798 -0
  10. package/android/src/main/java/com/balthazargronon/RCTZeroconf/{ZeroconfModule.java → NsdHost.java} +97 -140
  11. package/android/src/main/java/com/balthazargronon/RCTZeroconf/NsdPayload.java +87 -0
  12. package/android/src/main/java/com/balthazargronon/RCTZeroconf/NsdPromise.java +40 -0
  13. package/android/src/main/java/com/balthazargronon/RCTZeroconf/Zeroconf.java +4 -6
  14. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfNativeSupport.java +60 -0
  15. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfOptions.java +15 -26
  16. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroconfReactPackage.java +5 -15
  17. package/android/src/main/java/com/balthazargronon/RCTZeroconf/nsd/NsdServiceImpl.java +90 -96
  18. package/android/src/main/jni/mdnsresponder/mDNSShared/dnssd_clientshim.c +31 -6
  19. package/cpp/Backend.cpp +16 -0
  20. package/cpp/Backend.h +116 -0
  21. package/cpp/ZeroconfModule.cpp +280 -0
  22. package/cpp/ZeroconfModule.h +144 -0
  23. package/cpp/android/NsdBackend.cpp +462 -0
  24. package/cpp/android/NsdBackend.h +61 -0
  25. package/cpp/android/ZeroconfAndroidModule.cpp +49 -0
  26. package/cpp/android/ZeroconfAndroidModule.h +15 -0
  27. package/cpp/apple/DispatchExecutor.cpp +66 -0
  28. package/cpp/apple/DispatchExecutor.h +37 -0
  29. package/cpp/apple/LocalNetworkAccess.h +19 -0
  30. package/cpp/apple/LocalNetworkAccess.mm +87 -0
  31. package/cpp/dnssd/DnssdBackend.cpp +976 -0
  32. package/cpp/dnssd/DnssdBackend.h +114 -0
  33. package/cpp/dnssd/Executor.h +28 -0
  34. package/cpp/embedded/EmbeddedExecutor.cpp +124 -0
  35. package/cpp/embedded/EmbeddedExecutor.h +57 -0
  36. package/ios/ZeroconfOnLoad.mm +34 -0
  37. package/ios/generated/ReactCodegen/RNZeroconfSpec/RNZeroconfSpec-generated.mm +140 -0
  38. package/ios/generated/ReactCodegen/RNZeroconfSpec/RNZeroconfSpec.h +189 -0
  39. package/ios/generated/ReactCodegen/RNZeroconfSpecJSI.h +798 -0
  40. package/lib/module/NativeZeroconf.js +15 -0
  41. package/lib/module/NativeZeroconf.js.map +1 -0
  42. package/lib/module/bridge.js +124 -0
  43. package/lib/module/bridge.js.map +1 -0
  44. package/{dist → lib/module}/index.js +149 -149
  45. package/lib/module/index.js.map +1 -0
  46. package/lib/module/package.json +1 -0
  47. package/lib/module/types.js +24 -0
  48. package/lib/module/types.js.map +1 -0
  49. package/lib/typescript/package.json +1 -0
  50. package/lib/typescript/src/NativeZeroconf.d.ts +75 -0
  51. package/lib/typescript/src/NativeZeroconf.d.ts.map +1 -0
  52. package/lib/typescript/src/bridge.d.ts +22 -0
  53. package/lib/typescript/src/bridge.d.ts.map +1 -0
  54. package/lib/typescript/src/index.d.ts +111 -0
  55. package/lib/typescript/src/index.d.ts.map +1 -0
  56. package/lib/typescript/src/types.d.ts +175 -0
  57. package/lib/typescript/src/types.d.ts.map +1 -0
  58. package/package.json +64 -29
  59. package/react-native-zeroconf.podspec +2 -1
  60. package/react-native.config.js +17 -0
  61. package/src/NativeZeroconf.ts +120 -0
  62. package/src/bridge.ts +153 -0
  63. package/src/index.ts +607 -0
  64. package/{index.d.ts → src/types.ts} +5 -99
  65. package/windows/RNZeroconf/RNZeroconf.vcxproj +17 -2
  66. package/windows/RNZeroconf/RNZeroconf.vcxproj.filters +0 -6
  67. package/windows/RNZeroconf/ReactPackageProvider.cpp +23 -20
  68. package/windows/RNZeroconf/WindowsBackend.cpp +156 -0
  69. package/windows/RNZeroconf/WindowsBackend.h +13 -0
  70. package/windows/RNZeroconf/ZeroconfCore.cpp +2 -2
  71. package/windows/RNZeroconf/ZeroconfCore.h +2 -2
  72. package/windows/RNZeroconf/ZeroconfWindowsModule.cpp +22 -0
  73. package/windows/RNZeroconf/ZeroconfWindowsModule.h +14 -0
  74. package/android/src/main/java/com/balthazargronon/RCTZeroconf/ZeroConfImplFactory.java +0 -56
  75. package/android/src/main/java/com/balthazargronon/RCTZeroconf/dnssd/DnssdImpl.java +0 -654
  76. package/android/src/main/java/com/github/druk/dnssd/BaseListener.java +0 -33
  77. package/android/src/main/java/com/github/druk/dnssd/BrowseListener.java +0 -67
  78. package/android/src/main/java/com/github/druk/dnssd/DNSRecord.java +0 -47
  79. package/android/src/main/java/com/github/druk/dnssd/DNSSD.java +0 -681
  80. package/android/src/main/java/com/github/druk/dnssd/DNSSDEmbedded.java +0 -198
  81. package/android/src/main/java/com/github/druk/dnssd/DNSSDException.java +0 -66
  82. package/android/src/main/java/com/github/druk/dnssd/DNSSDRecordRegistrar.java +0 -55
  83. package/android/src/main/java/com/github/druk/dnssd/DNSSDRegistration.java +0 -54
  84. package/android/src/main/java/com/github/druk/dnssd/DNSSDService.java +0 -35
  85. package/android/src/main/java/com/github/druk/dnssd/DomainListener.java +0 -57
  86. package/android/src/main/java/com/github/druk/dnssd/InternalBrowseListener.java +0 -76
  87. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSD.java +0 -870
  88. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRecordRegistrar.java +0 -30
  89. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDRegistration.java +0 -34
  90. package/android/src/main/java/com/github/druk/dnssd/InternalDNSSDService.java +0 -29
  91. package/android/src/main/java/com/github/druk/dnssd/InternalDomainListener.java +0 -62
  92. package/android/src/main/java/com/github/druk/dnssd/InternalQueryListener.java +0 -61
  93. package/android/src/main/java/com/github/druk/dnssd/InternalRegisterListener.java +0 -51
  94. package/android/src/main/java/com/github/druk/dnssd/InternalResolveListener.java +0 -58
  95. package/android/src/main/java/com/github/druk/dnssd/NSClass.java +0 -16
  96. package/android/src/main/java/com/github/druk/dnssd/NSType.java +0 -58
  97. package/android/src/main/java/com/github/druk/dnssd/QueryListener.java +0 -54
  98. package/android/src/main/java/com/github/druk/dnssd/RegisterListener.java +0 -46
  99. package/android/src/main/java/com/github/druk/dnssd/RegisterRecordListener.java +0 -35
  100. package/android/src/main/java/com/github/druk/dnssd/ResolveListener.java +0 -55
  101. package/android/src/main/java/com/github/druk/dnssd/TXTRecord.java +0 -293
  102. package/android/src/main/jni/Android.mk +0 -73
  103. package/android/src/main/jni/Application.mk +0 -3
  104. package/android/src/main/jni/DNSSD.java.h +0 -290
  105. package/android/src/main/jni/JNISupport.c +0 -1221
  106. package/ios/RNZeroconf/RNNetServiceSerializer.h +0 -31
  107. package/ios/RNZeroconf/RNNetServiceSerializer.m +0 -84
  108. package/ios/RNZeroconf/RNZeroconf.h +0 -17
  109. package/ios/RNZeroconf/RNZeroconf.m +0 -1025
  110. package/ios/RNZeroconf.xcodeproj/project.pbxproj +0 -261
  111. package/ios/RNZeroconf.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  112. package/src/index.js +0 -563
  113. package/windows/RNZeroconf/RNZeroconf.cpp +0 -228
  114. package/windows/RNZeroconf/RNZeroconf.h +0 -70
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ // The native module's interface: codegen generates its C++ spec (cpp/ZeroconfModule implements it).
4
+ // JavaScript only reaches it through src/index.ts.
5
+ import { TurboModuleRegistry } from 'react-native';
6
+
7
+ // code is a string for domain 'RNZeroconf' ('TIMEOUT'), the platform's number as a string otherwise ('-65555')
8
+
9
+ // A promise settles with one or the other: rejections would lose code and domain on some platforms
10
+
11
+ // scanId is empty for errors that are not about a scan
12
+
13
+ // Null when the module isn't in the app: Expo Go, or an app not rebuilt after installing the library
14
+ export default TurboModuleRegistry.get('Zeroconf');
15
+ //# sourceMappingURL=NativeZeroconf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","get"],"sourceRoot":"../../src","sources":["NativeZeroconf.ts"],"mappings":";;AAAA;AACA;AACA,SAASA,mBAAmB,QAA6C,cAAc;;AAgBvF;;AAQA;;AAyBA;;AAmEA;AACA,eAAeA,mBAAmB,CAACC,GAAG,CAAO,UAAU,CAAC","ignoreList":[]}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ // The C++ module (src/NativeZeroconf.ts) in the shapes the class works with: TXT records as pairs,
4
+ // error codes as numbers for the platform domains, and promises rejecting with { userInfo }
5
+ import NativeZeroconf from "./NativeZeroconf.js";
6
+
7
+ // Event payloads as the class handles them: scan events carry their scan id, errors are
8
+ // { message, code, domain, serviceName }
9
+
10
+ // The C++ module
11
+
12
+ // Codes are strings natively: numbers for the platform domains ('-65555'), names for the library's ('TIMEOUT')
13
+ const fromNativeError = error => ({
14
+ message: error.message,
15
+ code: error.domain === 'RNZeroconf' ? error.code : Number(error.code),
16
+ domain: error.domain,
17
+ ...(error.serviceName ? {
18
+ serviceName: error.serviceName
19
+ } : {})
20
+ });
21
+ const fromNativeService = service => ({
22
+ name: service.name,
23
+ fullName: service.fullName,
24
+ host: service.host,
25
+ port: service.port,
26
+ addresses: service.addresses,
27
+ txt: Object.fromEntries(service.txt.map(({
28
+ key,
29
+ value
30
+ }) => [key, value]))
31
+ });
32
+ const toTxtEntries = txt => txt.map(([key, value]) => ({
33
+ key,
34
+ value
35
+ }));
36
+
37
+ // A rejection carries the same payload as error events, in userInfo
38
+ const settled = async result => {
39
+ const {
40
+ service,
41
+ error
42
+ } = await result;
43
+ if (error) {
44
+ throw {
45
+ userInfo: fromNativeError(error)
46
+ };
47
+ }
48
+ return service ? fromNativeService(service) : null;
49
+ };
50
+ const turboBridge = module => ({
51
+ scan: (scanId, type, protocol, domain, implType, options) => module.scan(scanId, type, protocol, domain, implType, options),
52
+ stop: (scanId, implType) => module.stop(scanId, implType),
53
+ registerService: async (type, protocol, domain, name, port, txt, implType, options) => await settled(module.registerService(type, protocol, domain, name, port, toTxtEntries(txt), implType, options)),
54
+ updateService: async (name, txt, implType) => await settled(module.updateService(name, toTxtEntries(txt), implType)),
55
+ unregisterService: async (name, implType) => await settled(module.unregisterService(name, implType)),
56
+ resolveService: (name, type, protocol, domain, implType, options) => settled(module.resolveService(name, type, protocol, domain, implType, options)),
57
+ checkLocalNetworkAccess: async (type, timeout) => {
58
+ const {
59
+ status,
60
+ error
61
+ } = await module.checkLocalNetworkAccess(type ?? '', timeout);
62
+ if (error) {
63
+ throw {
64
+ userInfo: fromNativeError(error)
65
+ };
66
+ }
67
+ return status ?? 'unknown';
68
+ },
69
+ listen: (event, handler) => {
70
+ // An empty scan id means the event is not about a scan: it reaches every instance
71
+ const withScan = (scanId, payload) => handler(scanId ? {
72
+ ...payload,
73
+ scanId
74
+ } : payload);
75
+ switch (event) {
76
+ case 'start':
77
+ return module.onStart(({
78
+ scanId
79
+ }) => withScan(scanId, {}));
80
+ case 'stop':
81
+ return module.onStop(({
82
+ scanId
83
+ }) => withScan(scanId, {}));
84
+ case 'found':
85
+ return module.onFound(({
86
+ scanId,
87
+ name
88
+ }) => withScan(scanId, {
89
+ name
90
+ }));
91
+ case 'remove':
92
+ return module.onRemove(({
93
+ scanId,
94
+ name
95
+ }) => withScan(scanId, {
96
+ name
97
+ }));
98
+ case 'resolved':
99
+ return module.onResolved(({
100
+ scanId,
101
+ service
102
+ }) => withScan(scanId, {
103
+ ...fromNativeService(service)
104
+ }));
105
+ case 'error':
106
+ return module.onError(({
107
+ scanId,
108
+ error
109
+ }) => withScan(scanId, {
110
+ ...fromNativeError(error)
111
+ }));
112
+ case 'published':
113
+ return module.onPublished(service => handler({
114
+ ...fromNativeService(service)
115
+ }));
116
+ case 'unpublished':
117
+ return module.onUnpublished(service => handler({
118
+ ...fromNativeService(service)
119
+ }));
120
+ }
121
+ }
122
+ });
123
+ export const getBridge = () => NativeZeroconf ? turboBridge(NativeZeroconf) : null;
124
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeZeroconf","fromNativeError","error","message","code","domain","Number","serviceName","fromNativeService","service","name","fullName","host","port","addresses","txt","Object","fromEntries","map","key","value","toTxtEntries","settled","result","userInfo","turboBridge","module","scan","scanId","type","protocol","implType","options","stop","registerService","updateService","unregisterService","resolveService","checkLocalNetworkAccess","timeout","status","listen","event","handler","withScan","payload","onStart","onStop","onFound","onRemove","onResolved","onError","onPublished","onUnpublished","getBridge"],"sourceRoot":"../../src","sources":["bridge.ts"],"mappings":"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","ignoreList":[]}