tenzro-sdk 0.2.0 → 0.3.0

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 (98) hide show
  1. package/README.md +1 -1
  2. package/dist/adaptive-burn.js +4 -4
  3. package/dist/adaptive-burn.js.map +1 -1
  4. package/dist/agent.d.ts +119 -11
  5. package/dist/agent.d.ts.map +1 -1
  6. package/dist/agent.js +162 -13
  7. package/dist/agent.js.map +1 -1
  8. package/dist/app.js +1 -1
  9. package/dist/app.js.map +1 -1
  10. package/dist/auth.d.ts +37 -0
  11. package/dist/auth.d.ts.map +1 -1
  12. package/dist/auth.js +11 -0
  13. package/dist/auth.js.map +1 -1
  14. package/dist/client.d.ts +81 -0
  15. package/dist/client.d.ts.map +1 -1
  16. package/dist/client.js +99 -0
  17. package/dist/client.js.map +1 -1
  18. package/dist/eip7702.d.ts +110 -0
  19. package/dist/eip7702.d.ts.map +1 -0
  20. package/dist/eip7702.js +73 -0
  21. package/dist/eip7702.js.map +1 -0
  22. package/dist/erc7683.d.ts +79 -0
  23. package/dist/erc7683.d.ts.map +1 -0
  24. package/dist/erc7683.js +82 -0
  25. package/dist/erc7683.js.map +1 -0
  26. package/dist/events.d.ts +45 -15
  27. package/dist/events.d.ts.map +1 -1
  28. package/dist/events.js +38 -8
  29. package/dist/events.js.map +1 -1
  30. package/dist/identity.d.ts +1 -1
  31. package/dist/identity.js +1 -1
  32. package/dist/index.d.ts +25 -3
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +36 -2
  35. package/dist/index.js.map +1 -1
  36. package/dist/iroh.d.ts +104 -0
  37. package/dist/iroh.d.ts.map +1 -0
  38. package/dist/iroh.js +102 -0
  39. package/dist/iroh.js.map +1 -0
  40. package/dist/marketplace.d.ts +2 -2
  41. package/dist/marketplace.js +2 -2
  42. package/dist/memory.d.ts +78 -0
  43. package/dist/memory.d.ts.map +1 -0
  44. package/dist/memory.js +60 -0
  45. package/dist/memory.js.map +1 -0
  46. package/dist/multimodal.d.ts +294 -0
  47. package/dist/multimodal.d.ts.map +1 -0
  48. package/dist/multimodal.js +160 -0
  49. package/dist/multimodal.js.map +1 -0
  50. package/dist/passkey.d.ts +193 -0
  51. package/dist/passkey.d.ts.map +1 -0
  52. package/dist/passkey.js +481 -0
  53. package/dist/passkey.js.map +1 -0
  54. package/dist/provider.d.ts +5 -4
  55. package/dist/provider.d.ts.map +1 -1
  56. package/dist/provider.js +8 -5
  57. package/dist/provider.js.map +1 -1
  58. package/dist/seed-agent.js +7 -7
  59. package/dist/seed-agent.js.map +1 -1
  60. package/dist/settlement.d.ts +23 -6
  61. package/dist/settlement.d.ts.map +1 -1
  62. package/dist/settlement.js +30 -7
  63. package/dist/settlement.js.map +1 -1
  64. package/dist/signer.d.ts +181 -0
  65. package/dist/signer.d.ts.map +1 -0
  66. package/dist/signer.js +69 -0
  67. package/dist/signer.js.map +1 -0
  68. package/dist/sla.d.ts +95 -0
  69. package/dist/sla.d.ts.map +1 -0
  70. package/dist/sla.js +70 -0
  71. package/dist/sla.js.map +1 -0
  72. package/dist/snapshot.d.ts +122 -0
  73. package/dist/snapshot.d.ts.map +1 -0
  74. package/dist/snapshot.js +80 -0
  75. package/dist/snapshot.js.map +1 -0
  76. package/dist/staking.d.ts +5 -5
  77. package/dist/staking.d.ts.map +1 -1
  78. package/dist/staking.js +8 -6
  79. package/dist/staking.js.map +1 -1
  80. package/dist/task.d.ts +56 -22
  81. package/dist/task.d.ts.map +1 -1
  82. package/dist/task.js +65 -31
  83. package/dist/task.js.map +1 -1
  84. package/dist/token.d.ts +41 -11
  85. package/dist/token.d.ts.map +1 -1
  86. package/dist/token.js.map +1 -1
  87. package/dist/training.d.ts +108 -0
  88. package/dist/training.d.ts.map +1 -0
  89. package/dist/training.js +53 -0
  90. package/dist/training.js.map +1 -0
  91. package/dist/types.d.ts +72 -11
  92. package/dist/types.d.ts.map +1 -1
  93. package/dist/types.js.map +1 -1
  94. package/dist/validator.d.ts +76 -0
  95. package/dist/validator.d.ts.map +1 -0
  96. package/dist/validator.js +47 -0
  97. package/dist/validator.js.map +1 -0
  98. package/package.json +2 -1
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultimodalClient = void 0;
4
+ /**
5
+ * Multi-modal AI client — covers all 7 ONNX-backed runtimes on a Tenzro
6
+ * node: forecast (timeseries), vision encoders, text embeddings,
7
+ * segmentation, detection, audio (ASR), and video.
8
+ *
9
+ * Each modality has the same surface shape: `list{Modality}Catalog()` to
10
+ * browse curated models, `list{Modality}Models()` to inspect what is
11
+ * currently loaded, `load{Modality}Model()` to bring a model online,
12
+ * `unload{Modality}Model()` to drop it, and one inference verb.
13
+ *
14
+ * **Wave-1 stubs.** Four modality loaders (`loadTextEmbeddingModel`,
15
+ * `loadSegmentationModel`, `loadDetectionModel`, `loadVideoModel`)
16
+ * currently return JSON-RPC `-32004` from the node ("not yet wired in
17
+ * wave 1") — the surface is exposed for discovery and symmetry, but the
18
+ * ONNX session-loader is pending. `forecast`, `vision`, and `audio` are
19
+ * fully wired. Catalog + list + unload endpoints work for all seven.
20
+ */
21
+ class MultimodalClient {
22
+ rpc;
23
+ constructor(rpc) {
24
+ this.rpc = rpc;
25
+ }
26
+ // ── Forecast ──
27
+ async listForecastCatalog() {
28
+ return this.rpc.call("tenzro_listForecastCatalog");
29
+ }
30
+ async listForecastModels() {
31
+ return this.rpc.call("tenzro_listForecastModels");
32
+ }
33
+ async loadForecastModel(params) {
34
+ return this.rpc.call("tenzro_loadForecastModel", [params]);
35
+ }
36
+ async unloadForecastModel(modelId) {
37
+ return this.rpc.call("tenzro_unloadForecastModel", [{ model_id: modelId }]);
38
+ }
39
+ async forecast(params) {
40
+ return this.rpc.call("tenzro_forecast", [params]);
41
+ }
42
+ // ── Vision encoders ──
43
+ async listVisionCatalog() {
44
+ return this.rpc.call("tenzro_listVisionCatalog");
45
+ }
46
+ async listVisionModels() {
47
+ return this.rpc.call("tenzro_listVisionModels");
48
+ }
49
+ async loadVisionModel(params) {
50
+ return this.rpc.call("tenzro_loadVisionModel", [params]);
51
+ }
52
+ async unloadVisionModel(modelId) {
53
+ return this.rpc.call("tenzro_unloadVisionModel", [{ model_id: modelId }]);
54
+ }
55
+ /** Embed a single image. Note: the node RPC is `tenzro_imageEmbed`. */
56
+ async imageEmbed(params) {
57
+ return this.rpc.call("tenzro_imageEmbed", [params]);
58
+ }
59
+ /**
60
+ * Pure cosine similarity between two embeddings of identical dimension.
61
+ * Pair an image embedding from `imageEmbed` with a text-tower embedding
62
+ * (CLIP / SigLIP). Node RPC: `tenzro_imageTextSimilarity`.
63
+ */
64
+ async imageTextSimilarity(imageEmbedding, textEmbedding) {
65
+ return this.rpc.call("tenzro_imageTextSimilarity", [
66
+ { image_embedding: imageEmbedding, text_embedding: textEmbedding },
67
+ ]);
68
+ }
69
+ // ── Text embeddings ──
70
+ async listTextEmbeddingCatalog() {
71
+ return this.rpc.call("tenzro_listTextEmbeddingCatalog");
72
+ }
73
+ async listTextEmbeddingModels() {
74
+ return this.rpc.call("tenzro_listTextEmbeddingModels");
75
+ }
76
+ /** Wave-1 stub: returns JSON-RPC `-32004` from the node until ONNX
77
+ * loading lands. Exposed for surface symmetry. */
78
+ async loadTextEmbeddingModel(params) {
79
+ return this.rpc.call("tenzro_loadTextEmbeddingModel", [params]);
80
+ }
81
+ async unloadTextEmbeddingModel(modelId) {
82
+ return this.rpc.call("tenzro_unloadTextEmbeddingModel", [{ model_id: modelId }]);
83
+ }
84
+ async textEmbed(params) {
85
+ return this.rpc.call("tenzro_textEmbed", [params]);
86
+ }
87
+ // ── Segmentation ──
88
+ async listSegmentationCatalog() {
89
+ return this.rpc.call("tenzro_listSegmentationCatalog");
90
+ }
91
+ async listSegmentationModels() {
92
+ return this.rpc.call("tenzro_listSegmentationModels");
93
+ }
94
+ /** Wave-1 stub: returns JSON-RPC `-32004` from the node until ONNX
95
+ * loading lands. Exposed for surface symmetry. */
96
+ async loadSegmentationModel(params) {
97
+ return this.rpc.call("tenzro_loadSegmentationModel", [params]);
98
+ }
99
+ async unloadSegmentationModel(modelId) {
100
+ return this.rpc.call("tenzro_unloadSegmentationModel", [{ model_id: modelId }]);
101
+ }
102
+ async segment(params) {
103
+ return this.rpc.call("tenzro_segment", [params]);
104
+ }
105
+ // ── Detection ──
106
+ async listDetectionCatalog() {
107
+ return this.rpc.call("tenzro_listDetectionCatalog");
108
+ }
109
+ async listDetectionModels() {
110
+ return this.rpc.call("tenzro_listDetectionModels");
111
+ }
112
+ /** Wave-1 stub: returns JSON-RPC `-32004` from the node until ONNX
113
+ * loading lands. Exposed for surface symmetry. */
114
+ async loadDetectionModel(params) {
115
+ return this.rpc.call("tenzro_loadDetectionModel", [params]);
116
+ }
117
+ async unloadDetectionModel(modelId) {
118
+ return this.rpc.call("tenzro_unloadDetectionModel", [{ model_id: modelId }]);
119
+ }
120
+ async detect(params) {
121
+ return this.rpc.call("tenzro_detect", [params]);
122
+ }
123
+ // ── Audio ASR ──
124
+ async listAudioCatalog() {
125
+ return this.rpc.call("tenzro_listAudioCatalog");
126
+ }
127
+ async listAudioModels() {
128
+ return this.rpc.call("tenzro_listAudioModels");
129
+ }
130
+ async loadAudioModel(params) {
131
+ return this.rpc.call("tenzro_loadAudioModel", [params]);
132
+ }
133
+ async unloadAudioModel(modelId) {
134
+ return this.rpc.call("tenzro_unloadAudioModel", [{ model_id: modelId }]);
135
+ }
136
+ async transcribe(params) {
137
+ return this.rpc.call("tenzro_transcribe", [params]);
138
+ }
139
+ // ── Video ──
140
+ /** Wave-1 catalog is empty pending license clearance + ONNX export. */
141
+ async listVideoCatalog() {
142
+ return this.rpc.call("tenzro_listVideoCatalog");
143
+ }
144
+ async listVideoModels() {
145
+ return this.rpc.call("tenzro_listVideoModels");
146
+ }
147
+ /** Wave-1 stub: returns JSON-RPC `-32004` from the node — catalog is
148
+ * empty pending license clearance + ONNX export (`tools/video-export`). */
149
+ async loadVideoModel(params) {
150
+ return this.rpc.call("tenzro_loadVideoModel", [params]);
151
+ }
152
+ async unloadVideoModel(modelId) {
153
+ return this.rpc.call("tenzro_unloadVideoModel", [{ model_id: modelId }]);
154
+ }
155
+ async videoEmbed(params) {
156
+ return this.rpc.call("tenzro_videoEmbed", [params]);
157
+ }
158
+ }
159
+ exports.MultimodalClient = MultimodalClient;
160
+ //# sourceMappingURL=multimodal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multimodal.js","sourceRoot":"","sources":["../src/multimodal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Passkey wallet — high-level "three-line" composition.
3
+ *
4
+ * TypeScript mirror of `tenzro_sdk::passkey` (Rust). See
5
+ * `docs/SPECIFICATION.md` §15.10.1.
6
+ *
7
+ * ```ts
8
+ * import { createPasskeyWallet, signWithPasskey } from "@tenzro/sdk";
9
+ *
10
+ * const wallet = await createPasskeyWallet({
11
+ * rpId: "keys.tenzro.network",
12
+ * });
13
+ * const sig = await signWithPasskey(wallet, userOp);
14
+ * ```
15
+ *
16
+ * # Where the actual ceremony runs
17
+ *
18
+ * - **Browser:** `navigator.credentials.create/get`. The SDK detects
19
+ * the browser environment automatically.
20
+ * - **Tauri desktop:** Tauri commands `device_create_passkey` /
21
+ * `device_sign_passkey` (implemented in
22
+ * `apps/tenzro-desktop/src-tauri/src/device_key.rs`). Pass a
23
+ * {@link PlatformAuthenticator} adapter that posts to those
24
+ * commands via `@tauri-apps/api/core`.
25
+ * - **Headless:** {@link SoftwareP256Authenticator} via Web Crypto
26
+ * `subtle.generateKey` / `subtle.sign`. Returns `false` from
27
+ * `isPlatformAuthenticatorAvailable` so production configs reject
28
+ * it (the safe default).
29
+ *
30
+ * # Cross-device QR (FIDO hybrid / caBLE)
31
+ *
32
+ * When `isPlatformAuthenticatorAvailable()` returns false and the
33
+ * caller used a production config, the SDK throws and recommends
34
+ * {@link startCrossDeviceLink} which returns a QR payload + a
35
+ * promise that resolves once the remote authenticator completes.
36
+ * The actual caBLE wire is implemented by the host adapter; the SDK
37
+ * ships only the surface.
38
+ */
39
+ import type { PackedUserOperation, Signer, SignerKind, SignerSignature, Validator } from "./signer";
40
+ import { Erc7579ModuleType } from "./signer";
41
+ import type { Address } from "./types";
42
+ /** Bytes of a registered passkey credential. */
43
+ export interface PasskeyCredential {
44
+ /** Authenticator-assigned credential ID (opaque blob). */
45
+ credentialId: Uint8Array;
46
+ /** 64-byte uncompressed P-256 public key (`x || y`, no SEC1 0x04 prefix). */
47
+ publicKey: Uint8Array;
48
+ }
49
+ /** WebAuthn ceremony configuration. */
50
+ export interface PasskeyConfig {
51
+ /** Relying-party ID (registrable domain only — no scheme/path). */
52
+ rpId: string;
53
+ /** Human-readable RP name shown in OS prompts. Defaults to "Tenzro Network". */
54
+ rpName?: string;
55
+ /** Require user verification (biometric/PIN). MUST be `true` in production. */
56
+ requireUserVerification?: boolean;
57
+ /** Require platform authenticator (Touch ID / Face ID / Windows Hello). */
58
+ requirePlatformAuthenticator?: boolean;
59
+ }
60
+ /** Per-ceremony output from `create`. */
61
+ export interface AuthenticatorRegistration {
62
+ credential: PasskeyCredential;
63
+ /** Raw `attestationObject` bytes (CBOR). Empty for `none` attestation. */
64
+ attestationObject: Uint8Array;
65
+ }
66
+ /** Per-ceremony output from `get` (assertion). */
67
+ export interface AuthenticatorAssertion {
68
+ /** 64-byte raw P-256 signature (`r || s`). */
69
+ signature: Uint8Array;
70
+ /** WebAuthn `authenticatorData` blob. */
71
+ authenticatorData: Uint8Array;
72
+ /** Raw `clientDataJSON` bytes. */
73
+ clientDataJson: Uint8Array;
74
+ }
75
+ /** QR + channel for the FIDO hybrid (caBLE) cross-device flow. */
76
+ export interface CrossDeviceLink {
77
+ /** `FIDO:/...` URI — render as QR code. */
78
+ qrUri: string;
79
+ /** Channel ID used to await remote completion. */
80
+ channelId: string;
81
+ }
82
+ /**
83
+ * Trait every host implements once. Not a class — implementations
84
+ * vary radically (browser vs Tauri vs headless), so we pin only the
85
+ * shape.
86
+ */
87
+ export interface PlatformAuthenticator {
88
+ isPlatformAuthenticatorAvailable(): Promise<boolean>;
89
+ createCredential(config: ResolvedPasskeyConfig, challenge: Uint8Array): Promise<AuthenticatorRegistration>;
90
+ signAssertion(config: ResolvedPasskeyConfig, credentialId: Uint8Array, challenge: Uint8Array): Promise<AuthenticatorAssertion>;
91
+ startCrossDeviceLink(config: ResolvedPasskeyConfig): Promise<CrossDeviceLink>;
92
+ }
93
+ /** {@link PasskeyConfig} after defaults applied. */
94
+ export interface ResolvedPasskeyConfig {
95
+ rpId: string;
96
+ rpName: string;
97
+ requireUserVerification: boolean;
98
+ requirePlatformAuthenticator: boolean;
99
+ }
100
+ /** Production preset: strict UV, platform attachment required. */
101
+ export declare function productionConfig(rpId: string): ResolvedPasskeyConfig;
102
+ /** Development preset: strict UV, allows cross-platform (YubiKey on Linux). */
103
+ export declare function developmentConfig(rpId: string): ResolvedPasskeyConfig;
104
+ /** {@link Signer} impl that delegates to a {@link PlatformAuthenticator}. */
105
+ export declare class WebAuthnSigner implements Signer {
106
+ private readonly authenticator;
107
+ private readonly credentialBytes;
108
+ private readonly config;
109
+ constructor(authenticator: PlatformAuthenticator, credentialBytes: PasskeyCredential, config: ResolvedPasskeyConfig);
110
+ describe(): SignerKind;
111
+ credential(): PasskeyCredential;
112
+ sign(hash: Uint8Array): Promise<SignerSignature>;
113
+ }
114
+ /** {@link Validator} impl that targets the on-chain `WebAuthnValidator` module. */
115
+ export declare class WebAuthnValidator implements Validator {
116
+ private readonly module;
117
+ private readonly signer;
118
+ constructor(module: Address, signer: WebAuthnSigner);
119
+ moduleAddress(): Address;
120
+ moduleType(): Erc7579ModuleType;
121
+ buildValidatorData(userOp: PackedUserOperation): Promise<Uint8Array>;
122
+ }
123
+ /** The composed wallet returned by {@link createPasskeyWallet}. */
124
+ export interface PasskeyWallet {
125
+ /** Underlying credential — useful for "Touch ID with key XX:..." UI. */
126
+ credential: PasskeyCredential;
127
+ /** Resolved config (post-defaults). */
128
+ config: ResolvedPasskeyConfig;
129
+ /** The {@link Signer} the wallet wraps. */
130
+ signer: WebAuthnSigner;
131
+ /** Bind the on-chain `WebAuthnValidator` module address after bootstrap. */
132
+ bindValidatorModule(address: Address): void;
133
+ /** The currently-bound validator module address, if any. */
134
+ validatorModule(): Address | null;
135
+ /** Render a QR for the cross-device hybrid (caBLE) flow. */
136
+ startCrossDeviceLink(): Promise<CrossDeviceLink>;
137
+ }
138
+ /**
139
+ * One-shot create. Per Spec §15.10.1 step 1, when no platform
140
+ * authenticator is available the SDK MUST switch to the cross-device
141
+ * flow rather than silently using a software key — this is enforced
142
+ * here.
143
+ */
144
+ export declare function createPasskeyWallet(config: PasskeyConfig, authenticator?: PlatformAuthenticator): Promise<PasskeyWallet>;
145
+ /**
146
+ * Sign a user op. Returns the bytes ready to drop into
147
+ * `UserOperation.signature`. Fails until `bindValidatorModule` has
148
+ * been called with the on-chain module address.
149
+ */
150
+ export declare function signWithPasskey(wallet: PasskeyWallet, userOp: PackedUserOperation): Promise<Uint8Array>;
151
+ /**
152
+ * Pick the right {@link PlatformAuthenticator} for the current host.
153
+ * Browsers use `navigator.credentials`; Tauri / Node fall back to the
154
+ * software reference. Custom hosts pass an explicit authenticator to
155
+ * {@link createPasskeyWallet}.
156
+ */
157
+ export declare function defaultAuthenticator(): PlatformAuthenticator;
158
+ /**
159
+ * Browser-native authenticator using `navigator.credentials`. This is
160
+ * the production path on the web.
161
+ */
162
+ export declare class BrowserWebAuthnAuthenticator implements PlatformAuthenticator {
163
+ isPlatformAuthenticatorAvailable(): Promise<boolean>;
164
+ createCredential(config: ResolvedPasskeyConfig, challenge: Uint8Array): Promise<AuthenticatorRegistration>;
165
+ signAssertion(config: ResolvedPasskeyConfig, credentialId: Uint8Array, challenge: Uint8Array): Promise<AuthenticatorAssertion>;
166
+ startCrossDeviceLink(_config: ResolvedPasskeyConfig): Promise<CrossDeviceLink>;
167
+ }
168
+ /**
169
+ * Software-only authenticator backed by Web Crypto's `subtle.sign`.
170
+ *
171
+ * **Not for production wallets.** The whole point of a passkey is that
172
+ * the secret never leaves dedicated hardware; a software keypair gives
173
+ * you the API shape but none of the security. The SDK exposes this so
174
+ * Node tests, CI, and reference docs can exercise the full surface
175
+ * without touching a real authenticator.
176
+ *
177
+ * `isPlatformAuthenticatorAvailable()` returns `false` so production
178
+ * configs refuse to use it (the safe default — opting into software
179
+ * keys requires {@link developmentConfig}).
180
+ */
181
+ export declare class SoftwareP256Authenticator implements PlatformAuthenticator {
182
+ private readonly readyPromise;
183
+ private keyPair;
184
+ private credentialId;
185
+ private publicKey;
186
+ constructor();
187
+ private init;
188
+ isPlatformAuthenticatorAvailable(): Promise<boolean>;
189
+ createCredential(_config: ResolvedPasskeyConfig, _challenge: Uint8Array): Promise<AuthenticatorRegistration>;
190
+ signAssertion(_config: ResolvedPasskeyConfig, credentialId: Uint8Array, challenge: Uint8Array): Promise<AuthenticatorAssertion>;
191
+ startCrossDeviceLink(_config: ResolvedPasskeyConfig): Promise<CrossDeviceLink>;
192
+ }
193
+ //# sourceMappingURL=passkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../src/passkey.ts"],"names":[],"mappings":"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"}