# `web5.dwn.records` proposal ```javascript= const { web5, myDid } = await Web5.connect(); // write to your agent's dwn (aka write to the dwn of the agent you're _connected_ to) const { record, status } = await web5.dwn.records.write({ data: { amount: 50, sourceCurrency: 'USD', targetCurrency: 'BTC' }, message: { protocol: 'tbdex', schema: 'http://tbdex.io/rfq' } }); // push this record immediately to your did-relative dwns (a.k.a cloud dwns) await record.push(); // send that record to pfi's did await record.send(pfiDid); // query PFI's dwn for reply to RFQ const { records } = await web5.dwn.records.send({ method: 'query', target: pfiDid, message: { filter: { protocol: 'tbdex', contextId: record.contextId } } }); ``` ### `web5.dwn.records.*` usage: **`send(bobDid)`, `store()`, and `push()` instance methods added to `Record`** - calling `record.send(did)` after the initial write will have the effect of transporting the message/data to the service endpoint in the DID document of the specified `did` - calling `record.store()` will have the effect of writing the message/data to your agent's dwn. 1. Your own local: ```typescript= await web5.dwn.records.write({ data: 'hi', message: { "schema": 'whatever' } }); ``` 2. Your own remote: ```typescript= await web5.dwn.records.send({ target: aliceDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); ``` 3. Someone else's remote: ```typescript= const { record } = await web5.dwn.records.send({ target: bobDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); ``` 4. Your own local + your own remote: ```typescript= const { record } = await web5.dwn.records.write({ data: 'hi', message: { "schema": 'whatever' } }); await record.sync() // sugar for dwn.records.send; ``` 5. Your own local + someone else's remote: ```typescript= const { record } = await web5.dwn.records.write({ data: 'hi', message: { "schema": 'whatever' } }); await record.send(bobDid); // sugar for dwn.records.send ``` 6. Your own remote + your own local: ```typescript= const { record } = await web5.dwn.records.send({ target: aliceDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.store(); // sugar for not calling records.write again ``` 7. Your own remote + someone else's remote: ```typescript= const { record } = await web5.dwn.records.send({ target: aliceDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.send(bobDid); ``` 8. Someone else's remote + your own local: ```typescript= const { record } = await web5.dwn.records.send({ target: bobDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.store(); ``` 9. Someone else's remote + your own remote: ```typescript= const { record } = await web5.dwn.records.send({ target: bobDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.send(aliceDid); ``` 10. Your own local + your own remote + someone else's remote: ```typescript= const { record } = await web5.dwn.records.write({ data: 'hi', message: { "schema": 'whatever' } }); await record.push(); await record.send(bobDid); ``` 11. Your own local + someone else's remote + your own remote: ```typescript= const { record } = await web5.dwn.records.write({ data: 'hi', message: { "schema": 'whatever' } }); await record.send(bobDid); await record.push(); ``` 12. Your own remote + your own local + someone else's remote: ```typescript= const { record } = await web5.dwn.records.send({ target: aliceDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.store(); await record.send(bobDid); ``` 13. Your own remote + someone else's remote + your own local: ```typescript= const { record } = await web5.dwn.records.send({ target: aliceDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.send(bobDid); await record.store(); ``` 14. Someone else's remote + your own local + your own remote: ```typescript= const { record } = await web5.dwn.records.send({ target: bobDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.store(); await record.push(); ``` 15. Someone else's remote + your own remote + your own local: ```typescript= const sendOpts = { } const { record } = await web5.dwn.records.send({ target: bobDid, method: 'write', data: 'hi', message: { "schema": 'whatever' } }); await record.send(aliceDid) await record.store(); ``` Given this, the supporting all other methods fits in the same: * query, delete, read from someone else? use `.send` * your own? uses `records.*` * methods hanging off `record`