Script Examples
Update or Delete
A single endpoint that handles create, update, and delete based on the input fields.
Lexicon type: procedure
function handle()
if input.delete and input.uri then
local r = Record.load(input.uri)
if r then r:delete() end
return { success = true }
end
if input.uri then
-- Update existing
local r = Record.load(input.uri)
if not r then error("not found") end
r.status = input.status
r:save()
return { uri = r._uri, cid = r._cid }
end
-- Create new
local r = Record(collection, input)
r:save()
return { uri = r._uri, cid = r._cid }
endHow it works
- If
input.deleteis truthy andinput.uriis provided, load the record withRecord.loadand delete it. - If only
input.uriis provided, load the existing record withRecord.load, update its fields, and save it back. Since_uriis already set,r:save()callsputRecordinstead ofcreateRecord. - If neither condition matches, create a new record from the input.
Usage
Create:
const response = await fetch("http://127.0.0.1:3000/xrpc/xyz.statusphere.setRecord", {
method: "POST",
headers: {
"X-Client-Key": CLIENT_KEY,
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ status: "hello" }),
});
const data = await response.json();Update:
const response = await fetch("http://127.0.0.1:3000/xrpc/xyz.statusphere.setRecord", {
method: "POST",
headers: {
"X-Client-Key": CLIENT_KEY,
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
uri: "at://did:plc:abc/xyz.statusphere.record/abc123",
status: "updated",
}),
});
const data = await response.json();Delete:
const response = await fetch("http://127.0.0.1:3000/xrpc/xyz.statusphere.setRecord", {
method: "POST",
headers: {
"X-Client-Key": CLIENT_KEY,
Authorization: `Bearer ${TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
uri: "at://did:plc:abc/xyz.statusphere.record/abc123",
delete: true,
}),
});
const data = await response.json();Use case
This pattern reduces the number of endpoints your app needs by multiplexing create, update, and delete through a single procedure. The presence of uri and delete fields in the input determines the action.