mirror of
https://github.com/sonr-io/sonr.git
synced 2026-08-02 09:21:39 +00:00
233 lines
5.3 KiB
Plaintext
233 lines
5.3 KiB
Plaintext
---
|
|
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) |