From 49ba2b6f9e78cecc5a1ea2775ec895d951af99ee Mon Sep 17 00:00:00 2001 From: nitro-neal <5314059+nitro-neal@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:27:58 -0500 Subject: [PATCH] add README (#146) * add README * badge * update readme --- bound/typescript/README.md | 146 +++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 bound/typescript/README.md diff --git a/bound/typescript/README.md b/bound/typescript/README.md new file mode 100644 index 0000000..84fc6b5 --- /dev/null +++ b/bound/typescript/README.md @@ -0,0 +1,146 @@ +# tbDEX SDK + +[![npm version](https://badge.fury.io/js/%40tbdex%2Fsdk.svg)](https://badge.fury.io/js/%40tbdex%2Fsdk) + +A TypeScript SDK for interacting with the tbDEX protocol. This SDK is built on a Rust core with WebAssembly bindings, offering high performance, type safety, and interoperability. This library that can be used to create, parse, verify, and validate the tbDEX Messages and Resources defined in the [protocol specification](https://github.com/TBD54566975/tbdex/blob/main/README.md). This library also includes an HTTP client that can be used to send tbdex messages to PFIs. + + +## Features + +- **Complete tbDEX Protocol Support**: Implements all tbDEX message types and resources +- **Type-Safe**: Full TypeScript support with comprehensive type definitions +- **Cross-Platform**: Works in Node.js and modern browsers + +## Installation + +```bash +npm install @tbdex/sdk +``` + +## Basic Usage + +### Message Creation + +```typescript +import { + Rfq, + CreateRfqData, +} from '@tbdex/sdk'; + +const createRfqData: CreateRfqData = { + claims: [verifiableCredential], + offeringId, + payin: { + amount: '101', + kind: 'USD_LEDGER', + paymentDetails: null, + }, + payout: { + kind: 'MOMO_MPESA', + paymentDetails: { + phoneNumber: '867-5309', + reason: 'cause', + }, + }, +}; + +const rfq = Rfq.create(pfiDidUri, bearerDid.did.uri, createRfqData); + +await rfq.sign(bearerDid); +await rfq.verify(); +``` + +### Message Parsing +```typescript + +import { + Rfq, +} from '@tbdex/sdk'; + +const jsonMessage = "" +const rfq = Rfq.fromJSONString(jsonMessage); +``` + +### Http Client Create Exchange Flow +```typescript +import { + Rfq, + CreateRfqData, + BearerDid, + getOfferings, + createExchange, + getExchange, + Exchange, +} from '@tbdex/sdk'; + +// Step 1: Fetch offerings +console.log('1. Fetching offerings...'); +const offerings = await getOfferings(pfiDidUri); +if (!offerings || offerings.length === 0) { + throw new Error('No offerings available.'); +} + +const offeringId = offerings[0].metadata.id; +console.log(`Successfully fetched offering ID: ${offeringId}\n`); + +// Step 2: Create exchange (RFQ) +console.log('2. Creating exchange...'); +const createRfqData: CreateRfqData = { + claims: [verifiableCredential], + offeringId, + payin: { + amount: '101', + kind: 'USD_LEDGER', + paymentDetails: null, + }, + payout: { + kind: 'PAYOUT_KIND', + paymentDetails: { + phoneNumber: '867-5309', + reason: 'cause', + }, + }, +}; + +const rfq = Rfq.create(pfiDidUri, bearerDid.did.uri, createRfqData); +await rfq.sign(bearerDid); +await rfq.verify(); +await createExchange(rfq); + +const exchangeId = rfq.metadata.exchangeId; +console.log(`Created exchange with ID: ${exchangeId}\n`); +``` + + +## Message Types + +The SDK supports all tbDEX message types: + +- **RFQ (Request for Quote)**: Initial request for exchange +- **Quote**: Response with exchange terms +- **Order**: Acceptance of quote terms +- **OrderInstructions**: Payment process details +- **OrderStatus**: Transaction status updates +- **Close**: Exchange completion notification +- **Cancel**: Exchange cancellation + +## Resources + +Supported tbDEX resources: + +- **Offering**: Defines exchange terms and requirements +- **Balance**: Shows available currency amounts + +## Error Handling + +The SDK provides detailed error information for common scenarios: + +```typescript +try { + await rfq.verify(); +} catch (error) { + if (error instanceof TbdexError) { + console.error('Verification failed:', error.message); + } +} +``` \ No newline at end of file