@qntx/nostr-native 0.15.0 → 0.15.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.
@@ -16,6 +16,9 @@ Pod::Spec.new do |s|
16
16
  s.source_files = [
17
17
  # Implementation (C core + C++ HybridObject)
18
18
  "cpp/**/*.{h,hpp,c,cpp}",
19
+ # The public C ABI — consumers resolve "nostr_native.h" through the pod's
20
+ # public headers; it is the only header exported to dependents.
21
+ "include/**/*.h",
19
22
  # Vendored libsecp256k1: headers plus the two precomputed-table TUs. secp256k1.c is
20
23
  # intentionally not here — cpp/nostr_core.c includes it as a single translation unit.
21
24
  "vendor/secp256k1/include/**/*.h",
@@ -24,6 +27,8 @@ Pod::Spec.new do |s|
24
27
  "vendor/secp256k1/src/precomputed_ecmult_gen.c",
25
28
  ]
26
29
 
30
+ s.public_header_files = "include/nostr_native.h"
31
+
27
32
  s.pod_target_xcconfig = {
28
33
  "GCC_PREPROCESSOR_DEFINITIONS" => "$(inherited) ENABLE_MODULE_ECDH=1 ENABLE_MODULE_EXTRAKEYS=1 ENABLE_MODULE_SCHNORRSIG=1",
29
34
  }
@@ -26,6 +26,7 @@ include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/NostrNative+autolinkin
26
26
 
27
27
  include_directories(
28
28
  "../cpp"
29
+ "../include"
29
30
  "../vendor/secp256k1/include"
30
31
  )
31
32
 
@@ -90,7 +90,16 @@ android {
90
90
 
91
91
  buildFeatures {
92
92
  buildConfig = true
93
+ // Consumes dependency prefabs (fbjni/ReactAndroid/Nitro) and publishes the
94
+ // built library itself so sibling packages can find_package(NostrNative).
93
95
  prefab = true
96
+ prefabPublishing = true
97
+ }
98
+
99
+ prefab {
100
+ NostrNative {
101
+ headers "../include"
102
+ }
94
103
  }
95
104
 
96
105
  buildTypes {
@@ -17,6 +17,8 @@ public:
17
17
  std::shared_ptr<ArrayBuffer> sign(const std::shared_ptr<ArrayBuffer>& id,
18
18
  const std::shared_ptr<ArrayBuffer>& secretKey,
19
19
  const std::shared_ptr<ArrayBuffer>& auxRand) override;
20
+ std::shared_ptr<ArrayBuffer> ecdhX(const std::shared_ptr<ArrayBuffer>& secretKey,
21
+ const std::shared_ptr<ArrayBuffer>& publicKeyX) override;
20
22
  };
21
23
 
22
24
  } // namespace margelo::nitro::nostrnative
package/dist/index.d.mts CHANGED
@@ -7,10 +7,10 @@ import { NostrBackend } from "@qntx/nostr/core";
7
7
  */
8
8
  export declare const verifySerialized: NostrBackend["verifySerialized"];
9
9
  /**
10
- * `NostrBackend` (without `ecdhX`, which lands in T4 with the native `ecdh_x` export) backed by
11
- * native libsecp256k1 — plug into `Keys.fromSecretKey(secretKey, signing)` or
12
- * `Keys.generate(signing)` so signing runs on the same randomized context as verification. Throws
13
- * on an invalid secret key or wrong-length input.
10
+ * `NostrBackend` backed by native libsecp256k1 — plug into `Keys.fromSecretKey(secretKey,
11
+ * signing)`, `Keys.generate(signing)`, `new KeysSigner(secretKey, { backend: signing })` or
12
+ * `createEventVerifier(signing)` so signing, ECDH and verification share one randomized context.
13
+ * Throws on an invalid secret key or wrong-length input.
14
14
  */
15
15
  export declare const signing: NostrBackend;
16
16
  //#endregion
package/dist/index.mjs CHANGED
@@ -13,10 +13,10 @@ function asArrayBuffer(view) {
13
13
  */
14
14
  const verifySerialized = (serializedUtf8, id, pubkey, sig) => nostrNative.verifySerialized(asArrayBuffer(serializedUtf8), asArrayBuffer(id), asArrayBuffer(pubkey), asArrayBuffer(sig));
15
15
  /**
16
- * `NostrBackend` (without `ecdhX`, which lands in T4 with the native `ecdh_x` export) backed by
17
- * native libsecp256k1 — plug into `Keys.fromSecretKey(secretKey, signing)` or
18
- * `Keys.generate(signing)` so signing runs on the same randomized context as verification. Throws
19
- * on an invalid secret key or wrong-length input.
16
+ * `NostrBackend` backed by native libsecp256k1 — plug into `Keys.fromSecretKey(secretKey,
17
+ * signing)`, `Keys.generate(signing)`, `new KeysSigner(secretKey, { backend: signing })` or
18
+ * `createEventVerifier(signing)` so signing, ECDH and verification share one randomized context.
19
+ * Throws on an invalid secret key or wrong-length input.
20
20
  */
21
21
  const signing = {
22
22
  ecdhX: (secretKey, publicKeyX) => new Uint8Array(nostrNative.ecdhX(asArrayBuffer(secretKey), asArrayBuffer(publicKeyX))),
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { NitroModules } from \"react-native-nitro-modules\";\n\nimport type { NostrBackend } from \"@qntx/nostr/core\";\n\nimport type { NostrNative } from \"./specs/nostr-native.nitro.ts\";\n\nconst nostrNative = NitroModules.createHybridObject<NostrNative>(\"NostrNative\");\n\nfunction asArrayBuffer(view: Uint8Array): ArrayBuffer {\n const { buffer, byteOffset, byteLength } = view;\n if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {\n return buffer;\n }\n return new Uint8Array(view).buffer;\n}\n\n/**\n * `NostrBackend[\"verifySerialized\"]` backed by native libsecp256k1 — plug into\n * `createEventVerifier` from `@qntx/nostr/core`. The Nitro hybrid object is created once at module\n * load.\n */\nexport const verifySerialized: NostrBackend[\"verifySerialized\"] = (\n serializedUtf8,\n id,\n pubkey,\n sig,\n) =>\n nostrNative.verifySerialized(\n asArrayBuffer(serializedUtf8),\n asArrayBuffer(id),\n asArrayBuffer(pubkey),\n asArrayBuffer(sig),\n );\n\n/**\n * `NostrBackend` (without `ecdhX`, which lands in T4 with the native `ecdh_x` export) backed by\n * native libsecp256k1 — plug into `Keys.fromSecretKey(secretKey, signing)` or\n * `Keys.generate(signing)` so signing runs on the same randomized context as verification. Throws\n * on an invalid secret key or wrong-length input.\n */\nexport const signing: NostrBackend = {\n ecdhX: (secretKey, publicKeyX) =>\n new Uint8Array(nostrNative.ecdhX(asArrayBuffer(secretKey), asArrayBuffer(publicKeyX))),\n verifySerialized,\n publicKey: (secretKey) => new Uint8Array(nostrNative.publicKey(asArrayBuffer(secretKey))),\n sign: (id, secretKey, auxRand) =>\n new Uint8Array(\n nostrNative.sign(asArrayBuffer(id), asArrayBuffer(secretKey), asArrayBuffer(auxRand)),\n ),\n};\n"],"mappings":";;AAMA,MAAM,cAAc,aAAa,mBAAgC,aAAa;AAE9E,SAAS,cAAc,MAA+B;CACpD,MAAM,EAAE,QAAQ,YAAY,eAAe;CAC3C,IAAI,kBAAkB,eAAe,eAAe,KAAK,eAAe,OAAO,YAC7E,OAAO;CAET,OAAO,IAAI,WAAW,IAAI,CAAC,CAAC;AAC9B;;;;;;AAOA,MAAa,oBACX,gBACA,IACA,QACA,QAEA,YAAY,iBACV,cAAc,cAAc,GAC5B,cAAc,EAAE,GAChB,cAAc,MAAM,GACpB,cAAc,GAAG,CACnB;;;;;;;AAQF,MAAa,UAAwB;CACnC,QAAQ,WAAW,eACjB,IAAI,WAAW,YAAY,MAAM,cAAc,SAAS,GAAG,cAAc,UAAU,CAAC,CAAC;CACvF;CACA,YAAY,cAAc,IAAI,WAAW,YAAY,UAAU,cAAc,SAAS,CAAC,CAAC;CACxF,OAAO,IAAI,WAAW,YACpB,IAAI,WACF,YAAY,KAAK,cAAc,EAAE,GAAG,cAAc,SAAS,GAAG,cAAc,OAAO,CAAC,CACtF;AACJ"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { NitroModules } from \"react-native-nitro-modules\";\n\nimport type { NostrBackend } from \"@qntx/nostr/core\";\n\nimport type { NostrNative } from \"./specs/nostr-native.nitro.ts\";\n\nconst nostrNative = NitroModules.createHybridObject<NostrNative>(\"NostrNative\");\n\nfunction asArrayBuffer(view: Uint8Array): ArrayBuffer {\n const { buffer, byteOffset, byteLength } = view;\n if (buffer instanceof ArrayBuffer && byteOffset === 0 && byteLength === buffer.byteLength) {\n return buffer;\n }\n return new Uint8Array(view).buffer;\n}\n\n/**\n * `NostrBackend[\"verifySerialized\"]` backed by native libsecp256k1 — plug into\n * `createEventVerifier` from `@qntx/nostr/core`. The Nitro hybrid object is created once at module\n * load.\n */\nexport const verifySerialized: NostrBackend[\"verifySerialized\"] = (\n serializedUtf8,\n id,\n pubkey,\n sig,\n) =>\n nostrNative.verifySerialized(\n asArrayBuffer(serializedUtf8),\n asArrayBuffer(id),\n asArrayBuffer(pubkey),\n asArrayBuffer(sig),\n );\n\n/**\n * `NostrBackend` backed by native libsecp256k1 — plug into `Keys.fromSecretKey(secretKey,\n * signing)`, `Keys.generate(signing)`, `new KeysSigner(secretKey, { backend: signing })` or\n * `createEventVerifier(signing)` so signing, ECDH and verification share one randomized context.\n * Throws on an invalid secret key or wrong-length input.\n */\nexport const signing: NostrBackend = {\n ecdhX: (secretKey, publicKeyX) =>\n new Uint8Array(nostrNative.ecdhX(asArrayBuffer(secretKey), asArrayBuffer(publicKeyX))),\n verifySerialized,\n publicKey: (secretKey) => new Uint8Array(nostrNative.publicKey(asArrayBuffer(secretKey))),\n sign: (id, secretKey, auxRand) =>\n new Uint8Array(\n nostrNative.sign(asArrayBuffer(id), asArrayBuffer(secretKey), asArrayBuffer(auxRand)),\n ),\n};\n"],"mappings":";;AAMA,MAAM,cAAc,aAAa,mBAAgC,aAAa;AAE9E,SAAS,cAAc,MAA+B;CACpD,MAAM,EAAE,QAAQ,YAAY,eAAe;CAC3C,IAAI,kBAAkB,eAAe,eAAe,KAAK,eAAe,OAAO,YAC7E,OAAO;CAET,OAAO,IAAI,WAAW,IAAI,CAAC,CAAC;AAC9B;;;;;;AAOA,MAAa,oBACX,gBACA,IACA,QACA,QAEA,YAAY,iBACV,cAAc,cAAc,GAC5B,cAAc,EAAE,GAChB,cAAc,MAAM,GACpB,cAAc,GAAG,CACnB;;;;;;;AAQF,MAAa,UAAwB;CACnC,QAAQ,WAAW,eACjB,IAAI,WAAW,YAAY,MAAM,cAAc,SAAS,GAAG,cAAc,UAAU,CAAC,CAAC;CACvF;CACA,YAAY,cAAc,IAAI,WAAW,YAAY,UAAU,cAAc,SAAS,CAAC,CAAC;CACxF,OAAO,IAAI,WAAW,YACpB,IAAI,WACF,YAAY,KAAK,cAAc,EAAE,GAAG,cAAc,SAAS,GAAG,cAAc,OAAO,CAAC,CACtF;AACJ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qntx/nostr-native",
3
- "version": "0.15.0",
3
+ "version": "0.15.2",
4
4
  "description": "Native libsecp256k1 (Nitro) verification and signing backend for @qntx/nostr on React Native",
5
5
  "keywords": [
6
6
  "bip340",
@@ -23,6 +23,7 @@
23
23
  "files": [
24
24
  "dist",
25
25
  "cpp",
26
+ "include",
26
27
  "android/build.gradle",
27
28
  "android/CMakeLists.txt",
28
29
  "android/gradle.properties",
@@ -61,17 +62,17 @@
61
62
  "@arethetypeswrong/cli": "0.18.5",
62
63
  "@noble/curves": "2.4.0",
63
64
  "@noble/hashes": "2.4.0",
64
- "@qntx/nostr": "0.15.0",
65
+ "@qntx/nostr": "0.15.2",
65
66
  "@qntx/tsconfig": "1.0.1",
66
67
  "@types/node": "26.6.5",
67
68
  "nitrogen": "0.37.1",
68
69
  "publint": "0.3.25",
69
70
  "react-native-nitro-modules": "0.37.1",
70
71
  "typescript": "7.0.2",
71
- "vite-plus": "1.2.0"
72
+ "vite-plus": "1.3.0"
72
73
  },
73
74
  "peerDependencies": {
74
- "@qntx/nostr": "^0.15.0",
75
+ "@qntx/nostr": "^0.15.2",
75
76
  "react-native": "*",
76
77
  "react-native-nitro-modules": "^0.37.1"
77
78
  },
File without changes