-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1ac377d
commit 96119da
Showing
26 changed files
with
389 additions
and
386 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,37 +1,33 @@ | ||
[package] | ||
name = "parside-wasm" | ||
description = "Parser library to handle Composable Event Streaming Representation (CESR)" | ||
license = "Apache-2.0" | ||
keywords = ["cesr", "keri", "acdc"] | ||
version = "0.1.0" | ||
authors = ['Dmitry Kuzmenko <[email protected]>'] | ||
authors = ['Artem Ivanov <[email protected]>', 'Dmitry Kuzmenko <[email protected]>'] | ||
edition = "2021" | ||
|
||
[lib] | ||
crate-type = ["cdylib", "rlib"] | ||
|
||
[dependencies.getrandom] | ||
version = '0.2' | ||
features = ['js'] | ||
|
||
[dependencies.parside_core] | ||
path = '..' | ||
package = "parside" | ||
|
||
[dependencies.cesride_wasm] | ||
git = "https://github.com/DSRCorporation/cesride.git" | ||
branch = "wasm-parside" | ||
branch = "fix/wasm-readme" | ||
package = "cesride-wasm" | ||
|
||
[dependencies.cesride] | ||
git = "https://github.com/DSRCorporation/cesride.git" | ||
branch = "wasm-parside" | ||
|
||
[dependencies.wasm-bindgen] | ||
version = '0.2' | ||
features = ['serde-serialize'] | ||
|
||
[dependencies.web-sys] | ||
version = "0.3" | ||
features = ["console", ] | ||
branch = "fix/wasm-readme" | ||
|
||
[dependencies] | ||
getrandom = { version = "0.2", features = ['js'] } | ||
js-sys = '0.3' | ||
serde_json = "1.0" | ||
serde = { version = "1.0", features = ["derive"] } | ||
serde-wasm-bindgen = "0.4" | ||
wasm-bindgen = { version = "0.2", features = ['serde-serialize'] } | ||
web-sys = { version = "0.3", features = ["console", ] } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,19 @@ | ||
# WASM FFI for CESRIDE | ||
# WASM FFI for Parside | ||
|
||
You can build the FFI with | ||
``` | ||
$ wasm-pack build | ||
``` | ||
Parser library to handle Composable Event Streaming Representation (CESR) | ||
|
||
You can run an PoC test with | ||
### How to build with wasm-pack build | ||
Install wasm-pack from https://rustwasm.github.io/wasm-pack/installer/ and then | ||
|
||
``` | ||
$ npm run serve | ||
wasm-pack build # Will output modules best-suited to be bundled with webpack | ||
wasm-pack build --target=nodejs # Will output modules that can be directly consumed by NodeJS | ||
wasm-pack build --target=web # Will output modules that can be directly consumed in browser without bundler usage | ||
``` | ||
|
||
and then visiting http://localhost:8080 in a browser should run the example! | ||
### Run NodeJS demo | ||
``` | ||
cd demo/node | ||
yarn install | ||
yarn start | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,36 +1,86 @@ | ||
import { ControllerIdxSigs, ControllerIdxSig, Message, Siger } from "parside-wasm"; | ||
import { ControllerIdxSigs, ControllerIdxSig, Message, Siger, CesrGroup, MessageList } from "parside-wasm"; | ||
|
||
function main() { | ||
const bytes2 = Buffer.from("-AABAABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O", 'utf8'); | ||
const result = Message.from_stream_bytes(bytes2) | ||
console.log('rest') | ||
console.log(result.rest()) | ||
console.log('message') | ||
console.log(result.message()) | ||
const message = result.message() | ||
const group = message.group() | ||
const controllerIdxSigs = group?.controllerIdxSigs() | ||
const size = controllerIdxSigs?.size() || 0 | ||
console.log('controllerIdxSig') | ||
const messageStream = "-AABAABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O" | ||
const messageListStream = "{\"v\":\"KERI10JSON00012b_\",\"t\":\"icp\"}-CABBD8-gMSJ6K1PQ7_gG5ZJn2NkHQJgdkiNrTBz_FWWS_cC0BDc1i44ZX0jaIHh5oNDx-TITbPnI6VEn2nKlqPwkkTF452X7XxYh80tolDpReYwZpnD8TF4Or2v3CpSCikyt6EG{\"v\":\"KERI20JSON00981b_\",\"t\":\"tcp\"}-AABAABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0Orest" | ||
console.log(`--Start--`) | ||
parseMessage(Buffer.from(messageStream)) | ||
parseMessageList(Buffer.from(messageListStream)) | ||
|
||
const newGroup = buildGroup() | ||
console.log(`--Assert parsed and built groups--`) | ||
console.assert(messageStream, newGroup.qb64()) | ||
console.log(`--End--`) | ||
} | ||
|
||
function parseMessage(bytes: Uint8Array) { | ||
console.log('--Parse message from bytes--') | ||
const result = Message.from_stream_bytes(bytes) | ||
console.log(` Rest: ${result.rest}`) | ||
console.log(` Message: ${result.message}`) | ||
handleMessage(result.message) | ||
} | ||
|
||
function parseMessageList(bytes: Uint8Array) { | ||
console.log('--Parse message list from bytes--') | ||
const result = MessageList.from_stream_bytes(bytes) | ||
console.log(` Rest: ${result.rest}`) | ||
console.log(` Messages: ${result.messages.length}`) | ||
if (result.messages) { | ||
for (const message of result.messages) { | ||
handleMessage(message) | ||
} | ||
} | ||
} | ||
|
||
function handleMessage(message: Message) { | ||
if (message.group) { | ||
iterateOverGroup(message.group) | ||
} | ||
if (message.payload) { | ||
console.log(`Parsed Payload: ${message.payload.toString()}`) | ||
} | ||
} | ||
|
||
function iterateOverGroup(group: CesrGroup) { | ||
console.log(' --Iterate over parsed group--') | ||
if (group.controllerIdxSigs) handleControllerIdxSigs(group.controllerIdxSigs) | ||
if (group.firstSeenReplayCouples) console.log(' Handle FirstSeenReplayCouples') | ||
if (group.nonTransReceipt) console.log(' Handle NonTransReceipt') | ||
if (group.pathedMaterialQuadlets) console.log(' Handle PathedMaterialQuadlets') | ||
if (group.sadPathSigGroups) console.log(' Handle SadPathSigGroups') | ||
if (group.sadPathSigs) console.log(' Handle SadPathSigs') | ||
if (group.sealSourceCouples) console.log(' Handle SealSourceCouples') | ||
if (group.transIdxSigGroups) console.log(' Handle TransIdxSigGroups') | ||
if (group.transLastIdxSigGroups) console.log(' Handle TransLastIdxSigGroups') | ||
if (group.transReceiptQuadruples) console.log(' Handle TransReceiptQuadruples') | ||
if (group.witnessIdxSigs) console.log(' Handle WitnessIdxSigs') | ||
} | ||
|
||
function handleControllerIdxSigs(controllerIdxSigs: ControllerIdxSigs) { | ||
console.log(' Handle ControllerIdxSigs') | ||
console.log(' Option 1: for index loop') | ||
const size = controllerIdxSigs.size() || 0 | ||
for (let i = 0; i < size; i++) { | ||
const controllerIdxSig = controllerIdxSigs?.value(i); | ||
console.log('controllerIdxSig') | ||
const siger = controllerIdxSig?.siger() | ||
console.log(siger?.qb64()) | ||
const controllerIdxSig = controllerIdxSigs.value(i); | ||
console.log(` Siger: ${controllerIdxSig?.siger.qb64()}`) | ||
} | ||
|
||
const values = controllerIdxSigs?.values() || [] | ||
for (const val of values) { | ||
console.log('value') | ||
console.log(val?.siger()?.qb64()) | ||
const values = controllerIdxSigs.values() ?? [] | ||
console.log(' Option 2: for of loop') | ||
for (const controllerIdxSig of values) { | ||
console.log(` Siger: ${controllerIdxSig.siger.qb64()}`) | ||
} | ||
} | ||
|
||
const siger2 = Siger.new_with_qb64("AABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O") | ||
const controllerIdxSig2 = new ControllerIdxSig(siger2) | ||
const controllerIdxSigs2 = new ControllerIdxSigs([controllerIdxSig2]) | ||
console.log('controllerIdxSigs2') | ||
console.log(controllerIdxSigs2) | ||
console.log(controllerIdxSigs2.qb64()) | ||
function buildGroup(): ControllerIdxSigs { | ||
console.log('--Build a group--') | ||
const siger = Siger.new_with_qb64("AABg3q8uNg1A2jhEAdbKGf-QupQhNnmZQx3zIyPLWBe6qqLT5ynytivf9EwJhxyhy87a0x2cezDdil4SsM2xxs0O") | ||
console.log(` Siger: ${siger.qb64()}`) | ||
const controllerIdxSig = new ControllerIdxSig(siger) | ||
const controllerIdxSigs = new ControllerIdxSigs([ controllerIdxSig ]) | ||
console.log(` ControllerIdxSigs: ${controllerIdxSigs.qb64()}`) | ||
return controllerIdxSigs | ||
} | ||
|
||
main() |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
use crate::error::*; | ||
use parside_core::CustomPayload; | ||
use wasm_bindgen::prelude::*; | ||
|
||
#[wasm_bindgen(js_name = CustomPayload)] | ||
#[derive(Clone)] | ||
pub struct CustomPayloadWrapper(pub(crate) CustomPayload); | ||
|
||
#[wasm_bindgen(js_class = CustomPayload)] | ||
impl CustomPayloadWrapper { | ||
#[wasm_bindgen(getter)] | ||
pub fn value(&self) -> Result<JsValue> { | ||
serde_wasm_bindgen::to_value(&self.0.value).map_err(|e| JsValue::from(&e.to_string())) | ||
} | ||
|
||
#[wasm_bindgen(js_name = toString)] | ||
pub fn to_string(&self) -> String { | ||
self.0.value.to_string().clone() | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.