canvas-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 93fdaafeda16
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 788ba0fa01083b300ad50913
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/links.json
{
 "version": "1",
 "name": "the edit key edits, the board id only views, and owners can turn either link off or replace the edit key",
 "actors": {
  "Ana": "ana_device",
  "Bo": "bo_device",
  "Vic": "vic_device",
  "Eve": "eve_device"
 },
 "constants": {
  "BOUNDED_PUBLIC_PRINCIPAL_API": "api_principal"
 },
 "steps": [
  {
   "op": "setTime",
   "epoch": 1800000000
  },
  {
   "op": "as",
   "who": "Ana"
  },
  {
   "op": "setMany",
   "writes": [
    {
     "path": "boards/b1aaaaaaaaaaaaaaaaa",
     "data": {
      "title": "Plan",
      "editOn": true,
      "viewOn": true,
      "seed": "",
      "createdBy": "$Ana",
      "createdAt": 1800000000
     }
    },
    {
     "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/ana_device",
     "data": {
      "at": 1800000000,
      "key": "EEEEEEEEEEEEEEEEEEEEEEEE"
     }
    },
    {
     "path": "boards/b1aaaaaaaaaaaaaaaaa/owners/ana_device",
     "data": {
      "at": 1800000000
     }
    },
    {
     "path": "boardkeys/b1aaaaaaaaaaaaaaaaa",
     "data": {
      "key": "AAAAAAAAAAAAAAAAAAAAAAAA"
     }
    },
    {
     "path": "editkeys/b1aaaaaaaaaaaaaaaaa",
     "data": {
      "key": "EEEEEEEEEEEEEEEEEEEEEEEE"
     }
    }
   ]
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_ana",
   "data": {
    "json": "{\"id\":\"el_ana\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   }
  },
  {
   "op": "as",
   "who": "Vic"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_vic",
   "data": {
    "json": "{\"id\":\"el_vic\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/vic_device",
   "data": {
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/ana_device",
   "data": {
    "at": 1800000000,
    "key": "XXXXXXXXXXXXXXXXXXXXXXXX"
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_vic",
   "data": {
    "json": "{\"id\":\"el_vic\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/vic_device",
   "data": {
    "key": "XXXXXXXXXXXXXXXXXXXXXXXX"
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_vic",
   "data": {
    "json": "{\"id\":\"el_vic\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/vic_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/bo_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Bo"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/bo_device",
   "data": {
    "at": 1800000000,
    "key": "EEEEEEEEEEEEEEEEEEEEEEEE"
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_bo",
   "data": {
    "json": "{\"id\":\"el_bo\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_ana",
   "data": {
    "json": "{\"id\":\"el_ana\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_old",
   "data": {
    "json": "{\"id\":\"el_old\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1799999900
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_future",
   "data": {
    "json": "{\"id\":\"el_future\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000100
   },
   "shouldFail": true
  },
  {
   "op": "delete",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_bo",
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "editOn": false
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "editkeys/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "key": "FFFFFFFFFFFFFFFFFFFFFFFF"
   },
   "shouldFail": true
  },
  {
   "op": "expect",
   "expr": "get(/boards/b1aaaaaaaaaaaaaaaaa/els/el_bo).at == 1800000000"
  },
  {
   "op": "as",
   "who": "Ana"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "editOn": false
   }
  },
  {
   "op": "as",
   "who": "Bo"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_bo",
   "data": {
    "json": "{\"id\":\"el_bo\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/bo_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   }
  },
  {
   "op": "as",
   "who": "Ana"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_ana",
   "data": {
    "json": "{\"id\":\"el_ana\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "editOn": true
   }
  },
  {
   "op": "set",
   "path": "editkeys/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "key": "short"
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "editkeys/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "key": "FFFFFFFFFFFFFFFFFFFFFFFF"
   }
  },
  {
   "op": "as",
   "who": "Bo"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_bo",
   "data": {
    "json": "{\"id\":\"el_bo\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/bo_device",
   "data": {
    "key": "FFFFFFFFFFFFFFFFFFFFFFFF"
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_bo",
   "data": {
    "json": "{\"id\":\"el_bo\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   }
  },
  {
   "op": "as",
   "who": "Ana"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa",
   "data": {
    "viewOn": false
   }
  },
  {
   "op": "as",
   "who": "Vic"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/vic_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Bo"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/bo_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   }
  },
  {
   "op": "as",
   "who": "Eve"
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/eve_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/joins/eve_device",
   "data": {
    "at": 1800000000,
    "key": "EEEEEEEEEEEEEEEEEEEEEEEE"
   }
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_eve",
   "data": {
    "json": "{\"id\":\"el_eve\",\"type\":\"rectangle\",\"version\":1}",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "set",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/eve_device",
   "data": {
    "x": 10.5,
    "y": -3,
    "name": "Someone",
    "tool": "pointer",
    "down": false,
    "sel": "[]",
    "at": 1800000000
   },
   "shouldFail": true
  },
  {
   "op": "as",
   "who": "Ana"
  },
  {
   "op": "delete",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/els/el_bo"
  },
  {
   "op": "delete",
   "path": "boards/b1aaaaaaaaaaaaaaaaa/cursors/bo_device"
  },
  {
   "op": "expect",
   "expr": "get(/boards/b1aaaaaaaaaaaaaaaaa/els/el_bo) == null"
  }
 ]
}

Change history

Point OpenApps links to openapps.free
93fdaafeda · 18 hours ago
Bind AGENT_ADDRESS in policy constants
bf8f43b096 · 20 hours ago
Use functions.openapps.xyz alias, add OpenApp contribution strip
56f1a381b2 · 20 hours ago
Bounded source sync
9ec707aeb8 · 1 day ago
Bounded source sync
5645481c23 · 1 day ago
Bounded source sync
c38fe71874 · 1 day ago
Bounded source sync
28c0350b40 · 1 day ago