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.
- package/README.md +1 -1
- package/dist/adaptive-burn.js +4 -4
- package/dist/adaptive-burn.js.map +1 -1
- package/dist/agent.d.ts +119 -11
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +162 -13
- package/dist/agent.js.map +1 -1
- package/dist/app.js +1 -1
- package/dist/app.js.map +1 -1
- package/dist/auth.d.ts +37 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +11 -0
- package/dist/auth.js.map +1 -1
- package/dist/client.d.ts +81 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +99 -0
- package/dist/client.js.map +1 -1
- package/dist/eip7702.d.ts +110 -0
- package/dist/eip7702.d.ts.map +1 -0
- package/dist/eip7702.js +73 -0
- package/dist/eip7702.js.map +1 -0
- package/dist/erc7683.d.ts +79 -0
- package/dist/erc7683.d.ts.map +1 -0
- package/dist/erc7683.js +82 -0
- package/dist/erc7683.js.map +1 -0
- package/dist/events.d.ts +45 -15
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +38 -8
- package/dist/events.js.map +1 -1
- package/dist/identity.d.ts +1 -1
- package/dist/identity.js +1 -1
- package/dist/index.d.ts +25 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/iroh.d.ts +104 -0
- package/dist/iroh.d.ts.map +1 -0
- package/dist/iroh.js +102 -0
- package/dist/iroh.js.map +1 -0
- package/dist/marketplace.d.ts +2 -2
- package/dist/marketplace.js +2 -2
- package/dist/memory.d.ts +78 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +60 -0
- package/dist/memory.js.map +1 -0
- package/dist/multimodal.d.ts +294 -0
- package/dist/multimodal.d.ts.map +1 -0
- package/dist/multimodal.js +160 -0
- package/dist/multimodal.js.map +1 -0
- package/dist/passkey.d.ts +193 -0
- package/dist/passkey.d.ts.map +1 -0
- package/dist/passkey.js +481 -0
- package/dist/passkey.js.map +1 -0
- package/dist/provider.d.ts +5 -4
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +8 -5
- package/dist/provider.js.map +1 -1
- package/dist/seed-agent.js +7 -7
- package/dist/seed-agent.js.map +1 -1
- package/dist/settlement.d.ts +23 -6
- package/dist/settlement.d.ts.map +1 -1
- package/dist/settlement.js +30 -7
- package/dist/settlement.js.map +1 -1
- package/dist/signer.d.ts +181 -0
- package/dist/signer.d.ts.map +1 -0
- package/dist/signer.js +69 -0
- package/dist/signer.js.map +1 -0
- package/dist/sla.d.ts +95 -0
- package/dist/sla.d.ts.map +1 -0
- package/dist/sla.js +70 -0
- package/dist/sla.js.map +1 -0
- package/dist/snapshot.d.ts +122 -0
- package/dist/snapshot.d.ts.map +1 -0
- package/dist/snapshot.js +80 -0
- package/dist/snapshot.js.map +1 -0
- package/dist/staking.d.ts +5 -5
- package/dist/staking.d.ts.map +1 -1
- package/dist/staking.js +8 -6
- package/dist/staking.js.map +1 -1
- package/dist/task.d.ts +56 -22
- package/dist/task.d.ts.map +1 -1
- package/dist/task.js +65 -31
- package/dist/task.js.map +1 -1
- package/dist/token.d.ts +41 -11
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js.map +1 -1
- package/dist/training.d.ts +108 -0
- package/dist/training.d.ts.map +1 -0
- package/dist/training.js +53 -0
- package/dist/training.js.map +1 -0
- package/dist/types.d.ts +72 -11
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validator.d.ts +76 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +47 -0
- package/dist/validator.js.map +1 -0
- 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":";;;AA6NA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAa,gBAAgB;IACP;IAApB,YAAoB,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;IAAG,CAAC;IAEtC,iBAAiB;IAEjB,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAA+B;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,OAAe;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAsB;QACnC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,wBAAwB;IAExB,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAA6B;QACjD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB,CACvB,cAAwB,EACxB,aAAuB;QAEvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACjD,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE;SACnE,CAAC,CAAC;IACL,CAAC;IAED,wBAAwB;IAExB,KAAK,CAAC,wBAAwB;QAC5B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACzD,CAAC;IAED;sDACkD;IAClD,KAAK,CAAC,sBAAsB,CAAC,MAK5B;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,OAAe;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAuB;QACrC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,qBAAqB;IAErB,KAAK,CAAC,uBAAuB;QAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACxD,CAAC;IAED;sDACkD;IAClD,KAAK,CAAC,qBAAqB,CAAC,MAK3B;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,OAAe;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAqB;QACjC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,kBAAkB;IAElB,KAAK,CAAC,oBAAoB;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACrD,CAAC;IAED;sDACkD;IAClD,KAAK,CAAC,kBAAkB,CAAC,MAIxB;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,OAAe;QACxC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAoB;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,kBAAkB;IAElB,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAA4B;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,cAAc;IAEd,uEAAuE;IACvE,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;IAED;+EAC2E;IAC3E,KAAK,CAAC,cAAc,CAAC,MAIpB;QACC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAe;QACpC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,CAAC;CACF;AAtMD,4CAsMC"}
|
|
@@ -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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"}
|