mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-04 10:21:40 +00:00
@@ -0,0 +1,233 @@
|
||||
---
|
||||
title: "Motor WASM Service Worker Usage"
|
||||
description: "Comprehensive guide to using the Motor WASM service worker for secure browser-based DWN and Wallet APIs"
|
||||
icon: "microchip"
|
||||
sidebarTitle: "Motor WASM"
|
||||
---
|
||||
|
||||
<Info>
|
||||
Motor is a WebAssembly service worker providing secure, client-side cryptographic operations and decentralized web node (DWN) capabilities.
|
||||
</Info>
|
||||
|
||||
## Overview
|
||||
|
||||
Motor is a WebAssembly-powered service worker that enables:
|
||||
- Secure client-side cryptographic operations
|
||||
- Decentralized Web Node (DWN) APIs
|
||||
- Cross-platform support for browsers and Node.js
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="DWN API" icon="database">
|
||||
Create, read, update, and delete records with optional encryption
|
||||
</Card>
|
||||
<Card title="Wallet API" icon="wallet" color="#22863a">
|
||||
UCAN token generation, digital signatures, and verification
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
## Prerequisites
|
||||
|
||||
<Check>
|
||||
- Node.js 20+ and pnpm
|
||||
- Browser with Service Worker support
|
||||
- HTTP/HTTPS server for WASM files
|
||||
</Check>
|
||||
|
||||
## Installation
|
||||
|
||||
<CodeGroup>
|
||||
```bash npm
|
||||
npm install @sonr.io/es
|
||||
```
|
||||
|
||||
```bash pnpm
|
||||
pnpm add @sonr.io/es
|
||||
```
|
||||
|
||||
```bash yarn
|
||||
yarn add @sonr.io/es
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Basic Initialization
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Browser Auto-Detection">
|
||||
```typescript
|
||||
import { createMotorPlugin } from '@sonr.io/es/client/motor';
|
||||
|
||||
// Automatically detects browser vs Node.js environment
|
||||
const plugin = await createMotorPlugin();
|
||||
|
||||
// Get issuer DID
|
||||
const issuer = await plugin.getIssuerDID();
|
||||
console.log('Issuer DID:', issuer.issuer_did);
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="Browser Service Worker">
|
||||
```typescript
|
||||
import { createMotorPluginForBrowser } from '@sonr.io/es/client/motor';
|
||||
|
||||
const plugin = await createMotorPluginForBrowser('/motor-worker', {
|
||||
auto_register_worker: true,
|
||||
worker_scope: '/',
|
||||
debug: true,
|
||||
});
|
||||
|
||||
// Create UCAN origin token
|
||||
const tokenResponse = await plugin.newOriginToken({
|
||||
audience_did: 'did:sonr:audience123',
|
||||
attenuations: [{ can: ['sign', 'verify'], with: 'vault://my-vault' }],
|
||||
});
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="Node.js">
|
||||
```typescript
|
||||
import { createMotorPluginForNode } from '@sonr.io/es/client/motor';
|
||||
|
||||
const plugin = await createMotorPluginForNode('http://localhost:8080', {
|
||||
max_retries: 3,
|
||||
retry_delay: 1000,
|
||||
timeout: 5000,
|
||||
debug: true,
|
||||
});
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### Record Operations
|
||||
|
||||
<CodeGroup>
|
||||
```typescript DWN Create
|
||||
const createResult = await plugin.createRecord({
|
||||
schema: 'https://schema.org/Person',
|
||||
data: JSON.stringify({ name: 'Alice Smith' }),
|
||||
is_encrypted: false,
|
||||
});
|
||||
```
|
||||
|
||||
```typescript DWN Read
|
||||
const record = await plugin.readRecord({
|
||||
record_id: createResult.record_id,
|
||||
});
|
||||
```
|
||||
|
||||
```typescript DWN Update
|
||||
await plugin.updateRecord({
|
||||
record_id: createResult.record_id,
|
||||
data: JSON.stringify({ name: 'Alice Johnson' }),
|
||||
});
|
||||
```
|
||||
|
||||
```typescript DWN Delete
|
||||
const deleteResult = await plugin.deleteRecord({
|
||||
record_id: createResult.record_id,
|
||||
});
|
||||
```
|
||||
</CodeGroup>
|
||||
|
||||
### Encrypted Records
|
||||
|
||||
```typescript
|
||||
const sensitiveData = {
|
||||
ssn: '123-45-6789',
|
||||
medical_record: 'Confidential information',
|
||||
};
|
||||
|
||||
const encryptedRecord = await plugin.createRecord({
|
||||
schema: 'https://schema.org/MedicalRecord',
|
||||
data: JSON.stringify(sensitiveData),
|
||||
is_encrypted: true, // Enable encryption
|
||||
});
|
||||
|
||||
// Automatic decryption on read
|
||||
const decryptedRecord = await plugin.readRecord({
|
||||
record_id: encryptedRecord.record_id,
|
||||
});
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
<Tabs>
|
||||
<Tab title="Development">
|
||||
```bash
|
||||
cd dist/wasm
|
||||
python3 -m http.server 8080
|
||||
# Access at http://localhost:8080/test.html
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="Production (Nginx)">
|
||||
```nginx
|
||||
location /motor/ {
|
||||
alias /path/to/dist/wasm/;
|
||||
|
||||
# CORS and MIME types
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
|
||||
location ~ \.wasm$ {
|
||||
add_header 'Content-Type' 'application/wasm';
|
||||
}
|
||||
}
|
||||
```
|
||||
</Tab>
|
||||
|
||||
<Tab title="CDN">
|
||||
```html
|
||||
<script src="https://cdn.example.com/motor/wasm_exec.js"></script>
|
||||
<script>
|
||||
navigator.serviceWorker.register(
|
||||
'https://cdn.example.com/motor/motr-sw.js'
|
||||
);
|
||||
</script>
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
<Accordion title="Common Issues">
|
||||
<Accordion.Panel title="Service Worker Not Registering">
|
||||
- Ensure HTTPS or localhost
|
||||
- Check browser console
|
||||
- Verify service worker file path
|
||||
</Accordion.Panel>
|
||||
|
||||
<Accordion.Panel title="WASM Module Loading">
|
||||
- Check MIME type: `application/wasm`
|
||||
- Verify CORS headers
|
||||
- Match `wasm_exec.js` with Go version
|
||||
</Accordion.Panel>
|
||||
</Accordion>
|
||||
|
||||
## Browser Compatibility
|
||||
|
||||
| Browser | Minimum Version | Support |
|
||||
|---------|----------------|---------|
|
||||
| Chrome | 89+ | Full |
|
||||
| Firefox | 89+ | Full |
|
||||
| Safari | 15.4+ | Good |
|
||||
| Edge | 89+ | Full |
|
||||
|
||||
<Warning>
|
||||
Requires HTTPS or localhost for service worker functionality
|
||||
</Warning>
|
||||
|
||||
## Performance Tips
|
||||
|
||||
<Tip>
|
||||
- Use TinyGo for smaller WASM binaries
|
||||
- Enable browser caching
|
||||
- Lazy load Motor plugin
|
||||
- Limit service worker scope
|
||||
</Tip>
|
||||
|
||||
## Support
|
||||
|
||||
- **GitHub**: [Issues](https://github.com/sonr-io/sonr/issues)
|
||||
- **Docs**: [Motor WASM Documentation](https://docs.sonr.io/motor-wasm)
|
||||
- **Discord**: [Sonr Community](https://discord.gg/sonr)
|
||||
Reference in New Issue
Block a user