santa-free.openapps.xyz

Source

This app’s code and revision history are public. Download a copy or explore the files below.

Public
The app’s code and revision history are public.
Owned app · rev b8b257a837b1
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone c7891873549c9ca1004894b3
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
← All files
policy-tests/draw.json
{
 "version": "1",
 "name": "only the API draws; Santas, wish lists and anonymous questions (written by the API)",
 "actors": {
  "Org": "org_user",
  "Sam": "sam_user",
  "Eve": "eve_user",
  "Api": "api_principal"
 },
 "constants": {
  "BOUNDED_PUBLIC_PRINCIPAL_API": "api_principal"
 },
 "steps": [
  {
   "op": "setTime",
   "epoch": 1800000000
  },
  {
   "op": "as",
   "who": "Org"
  },
  {
   "op": "setMany",
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "name": "Family",
      "budget": "$25",
      "date": "2026-12-18",
      "notes": "",
      "allowJoin": true,
      "organizerSees": false,
      "revealAt": 0,
      "status": "open",
      "round": 0,
      "drawnAt": 0,
      "createdBy": "$Org",
      "createdAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/joins/org_user",
     "data": {
      "at": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/owners/org_user",
     "data": {
      "at": 1800000000
     }
    },
    {
     "path": "exchangekeys/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "key": "kexkexkexkexkexkexkexkex"
     }
    },
    {
     "path": "keepapart/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "pairs": "[]"
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/people/pann",
     "data": {
      "name": "Ann",
      "addedBy": "$Org",
      "self": false,
      "createdAt": 1800000000
     }
    },
    {
     "path": "personkeys/pann",
     "data": {
      "key": "kannkannkannkannkannkann",
      "exchangeId": "exaaaaaaaaaaaaaaaaaa"
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/people/pben",
     "data": {
      "name": "Ben",
      "addedBy": "$Org",
      "self": false,
      "createdAt": 1800000000
     }
    },
    {
     "path": "personkeys/pben",
     "data": {
      "key": "kbenkbenkbenkbenkbenkben",
      "exchangeId": "exaaaaaaaaaaaaaaaaaa"
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/people/pcat",
     "data": {
      "name": "Cat",
      "addedBy": "$Org",
      "self": false,
      "createdAt": 1800000000
     }
    },
    {
     "path": "personkeys/pcat",
     "data": {
      "key": "kcatkcatkcatkcatkcatkcat",
      "exchangeId": "exaaaaaaaaaaaaaaaaaa"
     }
    },
    {
     "path": "personclaims/pann/c/org_user",
     "data": {
      "key": "kannkannkannkannkannkann",
      "exchangeId": "exaaaaaaaaaaaaaaaaaa",
      "openId": "pann_org_user"
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/opens/pann_org_user",
     "data": {
      "pid": "pann",
      "by": "org_user",
      "via": "web",
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "setMany",
   "shouldFail": true,
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "status": "drawn",
      "round": 1,
      "drawnAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
     "data": {
      "to": "pben",
      "round": 1,
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
   "data": {
    "to": "pben",
    "round": 0,
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/wishes/pann",
   "data": {
    "text": "Socks, a good book",
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/wishes/pben",
   "data": {
    "text": "I want everything",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Api"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/joins/api_principal",
   "data": {
    "at": 1800000000
   }
  },
  {
   "op": "setMany",
   "writes": [
    {
     "path": "exchangeclaims/exaaaaaaaaaaaaaaaaaa/c/api_principal",
     "data": {
      "key": "kexkexkexkexkexkexkexkex"
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/owners/api_principal",
     "data": {
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
   "data": {
    "to": "pben",
    "round": 0,
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "setMany",
   "shouldFail": true,
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "status": "drawn",
      "round": 1,
      "drawnAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
     "data": {
      "to": "pann",
      "round": 1,
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "setMany",
   "shouldFail": true,
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "status": "drawn",
      "round": 1,
      "drawnAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
     "data": {
      "to": "nobody",
      "round": 1,
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "setMany",
   "shouldFail": true,
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "status": "drawn",
      "round": 1,
      "drawnAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
     "data": {
      "to": "pben",
      "round": 2,
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "setMany",
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "status": "drawn",
      "round": 1,
      "drawnAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
     "data": {
      "to": "pben",
      "round": 1,
      "at": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pben",
     "data": {
      "to": "pcat",
      "round": 1,
      "at": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pcat",
     "data": {
      "to": "pann",
      "round": 1,
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "as",
   "who": "Org"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pcat/s/org_user",
   "data": {
    "from": "pann",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pben/s/org_user",
   "data": {
    "from": "pben",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pben/s/org_user",
   "data": {
    "from": "pann",
    "round": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pben/s/org_user",
   "data": {
    "from": "pann",
    "round": 1
   }
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "text": "Do you like jazz?",
    "answer": "",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "askrequests/q1",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "Do you like jazz?",
    "round": 1
   }
  },
  {
   "op": "set",
   "path": "askrequests/q2",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "askrequests/q4",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pcat",
    "text": "Who are you?",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "askrequests/q3",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "Pre-answered?",
    "round": 1
   }
  },
  {
   "op": "set",
   "path": "askrequests/q3",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "Changed",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Api"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q9",
   "data": {
    "text": "No request",
    "answer": "",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "text": "Something else",
    "answer": "",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pcat/q/q1",
   "data": {
    "text": "Do you like jazz?",
    "answer": "",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q3",
   "data": {
    "text": "Pre-answered?",
    "answer": "yes",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "text": "Do you like jazz?",
    "answer": "",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   }
  },
  {
   "op": "expect",
   "expr": "get(/exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1).text == 'Do you like jazz?' && get(/exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1).answer == '' && get(/exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1)._createdBy == 'api_principal'"
  },
  {
   "op": "as",
   "who": "Org"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "answer": "Answering my own question"
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Sam"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/joins/sam_user",
   "data": {
    "at": 1800000000
   }
  },
  {
   "op": "setMany",
   "writes": [
    {
     "path": "personclaims/pben/c/sam_user",
     "data": {
      "key": "kbenkbenkbenkbenkbenkben",
      "exchangeId": "exaaaaaaaaaaaaaaaaaa",
      "openId": "pben_sam_user"
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/opens/pben_sam_user",
     "data": {
      "pid": "pben",
      "by": "sam_user",
      "via": "web",
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/wishes/pben",
   "data": {
    "text": "Jazz records",
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "answer": "Yes, Coltrane",
    "answeredAt": 1800000000
   }
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "text": "Changed question"
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pcat/s/sam_user",
   "data": {
    "from": "pben",
    "round": 1
   }
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pcat/s/org_user",
   "data": {
    "from": "pben",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Eve"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/joins/eve_user",
   "data": {
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/wishes/pben",
   "data": {
    "text": "spam",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "askrequests/q5",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "spam",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pben/s/eve_user",
   "data": {
    "from": "pann",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q1",
   "data": {
    "answer": "hijacked"
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Org"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
   "data": {
    "status": "open"
   }
  },
  {
   "op": "set",
   "path": "askrequests/q6",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "Still there?",
    "round": 1
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Api"
  },
  {
   "op": "setMany",
   "writes": [
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa",
     "data": {
      "status": "drawn",
      "round": 2,
      "drawnAt": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pann",
     "data": {
      "to": "pcat",
      "round": 2,
      "at": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pben",
     "data": {
      "to": "pann",
      "round": 2,
      "at": 1800000000
     }
    },
    {
     "path": "exchanges/exaaaaaaaaaaaaaaaaaa/matches/pcat",
     "data": {
      "to": "pben",
      "round": 2,
      "at": 1800000000
     }
    }
   ]
  },
  {
   "op": "as",
   "who": "Org"
  },
  {
   "op": "set",
   "path": "askrequests/q7",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pben",
    "text": "Still there?",
    "round": 2
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pben/s/org_user",
   "data": {
    "from": "pann",
    "round": 2
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/santas/pcat/s/org_user",
   "data": {
    "from": "pann",
    "round": 2
   }
  },
  {
   "op": "set",
   "path": "askrequests/q8",
   "data": {
    "exchangeId": "exaaaaaaaaaaaaaaaaaa",
    "to": "pcat",
    "text": "Tea or coffee?",
    "round": 2
   }
  },
  {
   "op": "as",
   "who": "Api"
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q3",
   "data": {
    "text": "Pre-answered?",
    "answer": "",
    "round": 1,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pben/q/q3",
   "data": {
    "text": "Pre-answered?",
    "answer": "",
    "round": 2,
    "askedAt": 1800000000,
    "answeredAt": 0
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "exchanges/exaaaaaaaaaaaaaaaaaa/asks/pcat/q/q8",
   "data": {
    "text": "Tea or coffee?",
    "answer": "",
    "round": 2,
    "askedAt": 1800000000,
    "answeredAt": 0
   }
  }
 ]
}

Change history

Point OpenApps links to openapps.free
b8b257a837 · 18 hours ago
Bind agent address in policy constants
9a72d0200b · 20 hours ago
Use functions.openapps.xyz alias, add OpenApp contribution strip
60038fa63d · 20 hours ago
Bounded source sync
a2e0247232 · 1 day ago
Bounded source sync
c84c736f8b · 1 day ago
Bounded source sync
3a54a80cdc · 1 day ago
Bounded source sync
2eed41b4de · 1 day ago