@toa.io/definitions 1.0.0-alpha.324 → 1.0.0-alpha.326
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/digest/extensions.cadence.json +1 -1
- package/digest/extensions.configuration.json +1 -1
- package/digest/extensions.exposition.json +1 -1
- package/package.json +12 -11
- package/schemas/extensions.cadence/declaration.cos.yaml +7 -20
- package/schemas/extensions.cadence/pulse.cos.yaml +26 -0
- package/schemas/extensions.cadence/schedule.cos.yaml +25 -0
- package/schemas/extensions.exposition/routes.cos.yaml +6 -3
- package/transpiled/extensions.cadence/const.d.ts +2 -0
- package/transpiled/extensions.cadence/const.js +5 -1
- package/transpiled/extensions.cadence/const.js.map +1 -1
- package/transpiled/extensions.cadence/deployment.js +12 -5
- package/transpiled/extensions.cadence/deployment.js.map +1 -1
- package/transpiled/extensions.cadence/index.d.ts +3 -1
- package/transpiled/extensions.cadence/index.js +1 -0
- package/transpiled/extensions.cadence/index.js.map +1 -1
- package/transpiled/extensions.cadence/manifest.d.ts +3 -3
- package/transpiled/extensions.cadence/manifest.js +68 -15
- package/transpiled/extensions.cadence/manifest.js.map +1 -1
- package/transpiled/extensions.cadence/schedule.d.ts +11 -0
- package/transpiled/extensions.cadence/schedule.js +25 -0
- package/transpiled/extensions.cadence/schedule.js.map +1 -0
- package/transpiled/extensions.cadence/schemas.d.ts +3 -1
- package/transpiled/extensions.cadence/schemas.js +2 -0
- package/transpiled/extensions.cadence/schemas.js.map +1 -1
- package/transpiled/extensions.cadence/types.d.ts +26 -6
- package/transpiled/extensions.exposition/manifest.js +3 -3
- package/transpiled/extensions.exposition/manifest.js.map +1 -1
- package/transpiled/extensions.exposition/realtime/index.d.ts +1 -1
- package/transpiled/extensions.exposition/realtime/index.js +1 -1
- package/transpiled/extensions.exposition/realtime/index.js.map +1 -1
- package/transpiled/extensions.exposition/realtime/routes.d.ts +10 -1
- package/transpiled/extensions.exposition/realtime/routes.js +17 -5
- package/transpiled/extensions.exposition/realtime/routes.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"label":"exposition-octets","manifest":{"namespace":"exposition","name":"octets","operations":{"put":{"bindings":[],"input":{"properties":{"location":{"type":"string"},"accept":{"type":"string"},"limit":{"type":"number"},"trust":{},"storage":{"type":"string"},"request":{}},"type":"object","required":["storage","request"]},"errors":["LOCATION_UNTRUSTED","LOCATION_LENGTH","LOCATION_UNAVAILABLE","INVALID_ID","NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}},"get":{"bindings":[],"errors":["NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"input":{"properties":{"range":{"type":"string"},"agent":{"type":"string"},"storage":{"type":"string"},"path":{"type":"string"}},"type":"object","required":["storage","path"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}},"head":{"bindings":[],"errors":["NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"input":{"properties":{"range":{"type":"string"},"agent":{"type":"string"},"storage":{"type":"string"},"path":{"type":"string"}},"type":"object","required":["storage","path"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}},"delete":{"bindings":[],"errors":["NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"input":{"properties":{"range":{"type":"string"},"agent":{"type":"string"},"storage":{"type":"string"},"path":{"type":"string"}},"type":"object","required":["storage","path"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}}},"path":"@toa.io/extensions.exposition/components/exposition.octets","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","prototype":null,"extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.storages":[]},"version":"57d89762"},"packages":{"@aws-sdk/client-s3":"3.1140.0","@aws-sdk/lib-storage":"3.1140.0","cloudinary":"2.11.0"}},{"label":"identity-bans","manifest":{"namespace":"identity","name":"bans","entity":{"associated":true,"properties":{"comment":{"type":"string"},"banned":{"type":"boolean"},"originator":{"type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["banned","originator","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"blank":{"banned":false},"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"}],"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"properties":{"comment":{"type":"string"},"banned":{"type":"boolean"},"originator":{"properties":{"id":{"type":"string"}},"type":"object"}},"type":"object","required":["banned","originator"]},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.bans","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/bans","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"PUT","mapping":{"endpoint":"transit","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"bans"},"directives":[]}],"directives":[{"family":"io","name":"output","value":false},{"family":"auth","name":"rule","value":{"role":"system:identity:bans","delegate":"originator"}}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"c1299208","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-basic","manifest":{"namespace":"identity","name":"basic","entity":{"associated":true,"properties":{"authority":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","username","password","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"unique_authority_username","keys":{"authority":"asc","username":"asc"},"unique":true,"partial":{"DELETED":null}}},{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"}}}]}],"custom":false},"operations":{"transit":{"concurrency":"retry","output":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"input":{"properties":{"username":{"type":"string"},"password":{"type":"string"},"authority":{"type":"string"},"inception":{"description":"Whether the credentials are being created rather than changed","type":"boolean"}},"type":"object"},"errors":["PRINCIPAL_LOCKED","INVALID_USERNAME","INVALID_PASSWORD","EXISTS"],"type":"transition","bridge":"@toa.io/bridges.node","scope":"entry","bindings":["@toa.io/bindings.amqp"]},"create":{"forward":"transit","query":false,"input":{"properties":{"authority":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"inception":{"description":"Whether the credentials are being created rather than changed","type":"boolean"}},"type":"object","required":["authority","username","password"]},"errors":["PRINCIPAL_LOCKED","INVALID_USERNAME","INVALID_PASSWORD","EXISTS"],"concurrency":"retry","output":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"type":"transition","bridge":"@toa.io/bridges.node","scope":"entry","bindings":["@toa.io/bindings.amqp"]},"add":{"input":{"properties":{"id":{"type":"string"},"authority":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}},"type":"object","required":["id","authority","username","password"]},"errors":["PRINCIPAL_LOCKED","INVALID_USERNAME","INVALID_PASSWORD","EXISTS"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"incept":{"input":{"properties":{"authority":{"type":"string"},"id":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["authority","id","credentials"]},"output":{"properties":{"id":{"type":"string"}},"type":"object"},"errors":["INVALID_CREDENTIALS"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"authority":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["authority","credentials"]},"output":{"properties":{"identity":{"properties":{"id":{"type":"string"}},"type":"object"}},"type":"object"},"errors":["NOT_FOUND","PASSWORD_MISMATCH"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"check":{"input":{"type":"object","properties":{"username":{"type":"string","minLength":1}},"required":["username"]},"output":{"type":"null"},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"info":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","identity"]},"output":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"username":{"type":"string"}},"required":["username"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"delete":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","identity"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.basic","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/basic","node":{"routes":[{"path":"/","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"auth","name":"anonymous","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"output","value":["id"]}]}],"directives":[]}},{"path":"/:id","node":{"routes":[],"methods":[{"verb":"PATCH","mapping":{"endpoint":"transit","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"auth","name":"scheme","value":"basic"}]},{"verb":"POST","mapping":{"endpoint":"add","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"id":"id"}}]},{"verb":"DELETE","mapping":{"endpoint":"delete","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"id"}},{"family":"io","name":"output","value":false}]}],"directives":[{"family":"io","name":"output","value":["id"]},{"family":"io","name":"input","value":["username","password"]},{"family":"auth","name":"role","value":"system:identity:basic"},{"family":"auth","name":"id","value":"id"}]}},{"path":"/usernames/:username","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"check","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"auth","name":"anonymous","value":true}]}],"directives":[]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"rounds":{"type":"integer","minimum":1},"pepper":{"description":"Hashing pepper, a secret","type":"string","format":"secret"},"principal":{"description":"Basic credentials whose Identity is granted the `system` role","type":"object","properties":{"authority":{"type":"string"},"username":{"type":"string"}},"required":["authority","username"],"additionalProperties":false},"username":{"type":"array","items":{"type":"string"}},"password":{"type":"array","items":{"type":"string"}}},"required":["rounds","username","password"]},"defaults":{"rounds":10,"username":["^.{1,128}$"],"password":["^.{8,32}$"]}}},"version":"2fa3de3e","events":{"principal":{"conditioned":true,"subjective":true,"path":"@toa.io/extensions.exposition/components/identity.basic","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}},"prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}}},"packages":{"@node-rs/bcrypt":"1.10.9"}},{"label":"identity-clients","manifest":{"namespace":"identity","name":"clients","entity":{"associated":true,"properties":{"authority":{"type":"string"},"name":{"description":"client_name","type":"string","maxLength":128},"uris":{"description":"redirect_uris","type":"array","minItems":1,"maxItems":8,"items":{"type":"string","maxLength":2048}},"uri":{"description":"client_uri","type":"string","maxLength":2048},"logo":{"description":"logo_uri","type":"string","maxLength":2048},"scope":{"type":"string","maxLength":512},"expires":{"description":"When a registration nothing has used is swept","type":"number"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","uris","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_authority","keys":{"authority":"asc"}}}]}],"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"type":"object","properties":{"authority":{"type":"string"},"name":{"type":"string"},"uri":{"type":"string"},"logo":{"type":"string"},"scope":{"type":"string"},"uris":{"type":"array","items":{"type":"string"}},"expires":{"type":"number"}},"required":["authority","uris"]},"type":"transition","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"register":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"client_name":{"type":"string","maxLength":128},"client_uri":{"type":"string","maxLength":2048},"logo_uri":{"type":"string","maxLength":2048},"redirect_uris":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"string","maxLength":2048}},"scope":{"type":"string","maxLength":512},"grant_types":{"type":"array","items":{"type":"string"}},"response_types":{"type":"array","items":{"type":"string"}},"token_endpoint_auth_method":{"type":"string"}},"required":["authority","redirect_uris"]},"output":{"type":"object","properties":{"status":{"description":"Read and removed by `map:status`","type":"number"},"client_id":{"type":"string"},"client_id_issued_at":{"type":"number"},"client_name":{"type":"string"},"client_uri":{"type":"string"},"logo_uri":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"}},"grant_types":{"type":"array","items":{"type":"string"}},"response_types":{"type":"array","items":{"type":"string"}},"token_endpoint_auth_method":{"type":"string"},"error":{"type":"string"},"error_description":{"type":"string"}}},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"describe":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"id":{"description":"client_id, which is an https URL when the client publishes its own metadata","type":"string","maxLength":2048},"redirect":{"description":"Asked about together with the client, since only this component may answer it","type":"string","maxLength":2048}},"required":["authority","id"]},"output":{"type":"object","properties":{"client_id":{"type":"string"},"client_name":{"type":"string"},"client_uri":{"type":"string"},"logo_uri":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"}},"permitted":{"description":"Whether `redirect` is one this client may receive a code at","type":"boolean"}}},"errors":["UNKNOWN_CLIENT"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.clients","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/clients","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"describe","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"clients"},"directives":[{"family":"auth","name":"anyone","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"id":"id"}},{"family":"io","name":"output","value":["client_id","client_name","client_uri","logo_uri","redirect_uris"]}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"register","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"clients"},"directives":[{"family":"auth","name":"anonymous","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["client_name","client_uri","logo_uri","redirect_uris","scope","grant_types","response_types","token_endpoint_auth_method"]},{"family":"io","name":"output","value":true},{"family":"io","name":"throttle","value":{"key":"ip","requests":10,"interval":3600}},{"family":"io","name":"status","value":"status"},{"family":"cache","name":"exact","value":"no-store"}]}],"directives":[]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"trust":{"description":"Origins whose Client ID Metadata Documents may be read; none are without one","type":"array","items":{"type":"string","pattern":"^https://"}},"lifetime":{"description":"Seconds a Client ID Metadata Document is held before it is read again","type":"integer","minimum":1},"ttl":{"description":"Seconds a registration nothing has used is kept","type":"integer","minimum":1},"size":{"description":"Bytes of a Client ID Metadata Document that are read","type":"integer","minimum":1},"timeout":{"description":"Milliseconds a Client ID Metadata Document has to arrive","type":"integer","minimum":1}}},"defaults":{"trust":[],"lifetime":3600,"ttl":2592000,"size":16384,"timeout":3000}},"@toa.io/extensions.stash":null},"version":"e472a601","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-credentials","manifest":{"namespace":"identity","name":"credentials","operations":{"list":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"output":{"type":"object","properties":{"basic":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"username":{"type":"string"}},"required":["username"]},"federation":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"iss":{"type":"string"},"CREATED":{"type":"number"}},"required":["id","iss","CREATED"]}},"passkeys":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"aid":{"type":"string"},"synced":{"type":"boolean"},"label":{"type":"string"},"CREATED":{"type":"number"}},"required":["id","aid","synced","CREATED"]}}},"required":["basic","federation","passkeys"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.credentials","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","prototype":null,"extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/credentials","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"credentials"},"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"io","name":"output","value":true}]}],"directives":[]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]}},"version":"1fb913de"}},{"label":"identity-federation","manifest":{"namespace":"identity","name":"federation","entity":{"properties":{"authority":{"description":"The authority token is valid for","type":"string"},"iss":{"description":"The issuer, or signer, of the token, URI like `https://accounts.google.com`","type":"string"},"sub":{"description":"The ID that represents the principal making the request","type":"string"},"identity":{"description":"Identity associated with these credentials","type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","iss","sub","identity","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"unique_token","keys":{"authority":"asc","iss":"asc","sub":"asc"},"unique":true,"partial":{"DELETED":null}}},{"index":{"name":"unique_identity","keys":{"authority":"asc","iss":"asc","identity":"asc"},"unique":true,"partial":{"DELETED":null}}},{"index":{"name":"index_list","keys":{"authority":"asc","identity":"asc","CREATED":"desc"},"sparse":true}}]}],"associated":false,"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"properties":{"authority":{"type":"string"},"iss":{"type":"string"},"sub":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","iss","sub","identity"]},"type":"transition","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"create":{"input":{"properties":{"scheme":{"type":"string","enum":["bearer","code"]},"authority":{"type":"string"},"credentials":{"type":"string"},"id":{"type":"string"}},"type":"object","required":["scheme","authority","credentials","id"]},"errors":["EXISTS","TOKEN","TRUST","RESPONSE","CONFIG","NO_TOKEN","ISS","SUB","EXP","REPLAY","CODE_NOT_ENABLED","CODE_SCHEMA"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"incept":{"input":{"properties":{"scheme":{"type":"string","enum":["bearer","code"]},"authority":{"type":"string"},"credentials":{"type":"string"},"id":{"type":"string"}},"type":"object","required":["scheme","authority","credentials","id"]},"output":{"properties":{"id":{"type":"string"}},"type":"object"},"errors":["EXISTS","TOKEN","TRUST","RESPONSE","CONFIG","NO_TOKEN","ISS","SUB","EXP","REPLAY","CODE_NOT_ENABLED","CODE_SCHEMA"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"scheme":{"type":"string","enum":["bearer","code"]},"authority":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["scheme","authority","credentials"]},"output":{"properties":{"identity":{"properties":{"id":{"type":"string"},"claims":{"properties":{"iss":{"type":"string"},"aud":{"type":"string"},"sub":{"type":"string"}},"additionalProperties":true,"required":["iss","sub"],"type":"object"}},"required":["id","claims"],"type":"object"}},"type":"object"},"errors":["NOT_FOUND","TOKEN","TRUST","RESPONSE","CONFIG","NO_TOKEN","ISS","SUB","EXP","REPLAY","CODE_NOT_ENABLED","CODE_SCHEMA"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"decode":{"input":{"type":"string"},"output":{"properties":{"iss":{"type":"string"},"aud":{"type":"string"},"sub":{"type":"string"}},"additionalProperties":true,"required":["iss","sub"],"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"list":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","identity"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"delete":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"},"credential":{"type":"string"}},"type":"object","required":["authority","identity","credential"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.federation","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/federation","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[{"path":"/:credential","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"delete","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"federation"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"id","credential":"credential"}},{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"federation"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["scheme","credentials"]},{"family":"io","name":"output","value":["id","iss","CREATED"]}]},{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"federation"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"id"}},{"family":"io","name":"output","value":["id","iss","CREATED"]}]}],"directives":[{"family":"auth","name":"id","value":"id"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"trust":{"type":"array","items":{"title":"Trusted Identity Providers","type":"object","additionalProperties":false,"properties":{"iss":{"description":"Allowed values for a token `iss` field","type":"string","format":"uri"},"aud":{"description":"Acceptable `aud` value(s)","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"uniqueItems":true,"minItems":1}]},"signature":{"properties":{"iss":{"type":"string"},"kid":{"type":"string"},"key":{"description":"PKCS8 private key in PEM form","type":"string"}},"required":["iss","kid","key"]},"secret":{"description":"Client secret for the Identity Provider. Required for Authorization Code Flow.","type":"string"}},"required":["iss","aud"]}},"principal":{"title":"Principal","description":"Subject that will be assigned the `system` Role","type":"object","properties":{"authority":{"type":"string"},"iss":{"type":"string","format":"uri"},"sub":{"type":"string"}},"required":["authority","iss","sub"],"additionalProperties":false},"assert":{"title":"Implicitly incept Identity for new credentials","type":"boolean"}},"additionalProperties":false},"defaults":{"trust":[],"assert":true}}},"version":"865f320c","events":{"principal":{"conditioned":true,"subjective":true,"path":"@toa.io/extensions.exposition/components/identity.federation","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}},"prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}}},"packages":{"jose":"6.2.12"}},{"label":"identity-grants","manifest":{"namespace":"identity","name":"grants","entity":{"associated":true,"properties":{"authority":{"type":"string"},"identity":{"type":"string"},"client":{"type":"string"},"scope":{"type":"array","items":{"type":"string"}},"resource":{"type":"array","items":{"type":"string"}},"kid":{"description":"The identity.keys record backing the access token, revoked with the grant","type":"string"},"revokedAt":{"type":"integer"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","identity","client","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_identity","keys":{"authority":"asc","identity":"asc"}}}]}],"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"client":{"type":"string"},"scope":{"type":"array","items":{"type":"string"}},"resource":{"type":"array","items":{"type":"string"}},"kid":{"type":"string"}},"required":["authority","identity","client"]},"type":"transition","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"authorize":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"client":{"type":"string","maxLength":2048},"redirect":{"type":"string","maxLength":2048},"challenge":{"description":"PKCE code challenge, S256 of the verifier","type":"string","minLength":43,"maxLength":128},"method":{"type":"string"},"scope":{"type":"array","items":{"type":"string"}},"resource":{"type":"array","items":{"type":"string","maxLength":2048}}},"required":["authority","identity","client","redirect","challenge","method"]},"output":{"type":"object","properties":{"status":{"description":"Read and removed by `io:status`","type":"number"},"code":{"type":"string"},"expires_in":{"type":"number"},"error":{"type":"string"},"error_description":{"type":"string"}}},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"exchange":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"grant_type":{"type":"string"},"code":{"type":"string","maxLength":512},"code_verifier":{"type":"string","minLength":43,"maxLength":128},"redirect_uri":{"type":"string","maxLength":2048},"client_id":{"type":"string","maxLength":2048},"resource":{"description":"A form repeats a name to say a list, so either shape arrives","type":["string","array"]}},"required":["authority","grant_type"]},"output":{"type":"object","properties":{"status":{"type":"number"},"access_token":{"type":"string"},"token_type":{"type":"string"},"expires_in":{"type":"number"},"scope":{"type":"string"},"error":{"type":"string"},"error_description":{"type":"string"}}},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"list":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"revoke":{"output":{"type":"null"},"concurrency":"retry","input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"errors":["NOT_FOUND"],"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.grants","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/grants","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:identity","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"revoke","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"output","value":["id","client","scope","resource","CREATED"]}]},{"verb":"POST","mapping":{"endpoint":"authorize","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"input","value":["client","redirect","challenge","method","scope","resource"]},{"family":"io","name":"output","value":["code","expires_in","error","error_description","status"]},{"family":"io","name":"status","value":"status"},{"family":"cache","name":"exact","value":"no-store"}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}}]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"exchange","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"auth","name":"anonymous","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["grant_type","code","code_verifier","redirect_uri","client_id","resource"]},{"family":"io","name":"output","value":true},{"family":"io","name":"status","value":"status"},{"family":"io","name":"throttle","value":{"key":"ip","requests":60,"interval":60}},{"family":"cache","name":"exact","value":"no-store"}]}],"directives":[]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"lifetime":{"description":"Seconds an authorization code may be redeemed within","type":"integer","minimum":1,"maximum":600},"token":{"description":"Seconds an access token is valid for; 0 is until it is revoked","type":"integer","minimum":0}},"required":["lifetime","token"]},"defaults":{"lifetime":60,"token":2592000}},"@toa.io/extensions.stash":null},"version":"334eb30d","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-keys","manifest":{"namespace":"identity","name":"keys","entity":{"properties":{"identity":{"type":"string"},"key":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":64},"expires":{"type":"number"},"revokedAt":{"type":"integer"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["identity","key","label","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_identity","keys":{"identity":"asc"}}}]}],"associated":false,"custom":false},"operations":{"create":{"query":false,"input":{"properties":{"identity":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":64},"expires":{"type":"number"}},"required":["identity","label"],"type":"object"},"output":{"properties":{"id":{"type":"string"},"key":{"type":"string"}},"required":["id","key"],"type":"object"},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"revoke":{"output":{"type":"null"},"input":{"properties":{"identity":{"type":"string"}},"required":["identity"],"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"disable":{"concurrency":"retry","type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"receivers":{"identity.bans.created":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.keys","bridge":"@toa.io/bridges.node"},"identity.bans.updated":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.keys","bridge":"@toa.io/bridges.node"},"identity.roles.deleted":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.keys","bridge":"@toa.io/bridges.node"}},"path":"@toa.io/extensions.exposition/components/identity.keys","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/keys","node":{"routes":[{"path":"/:identity","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"terminate","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"keys"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"query":{"sort":"CREATED:desc"},"endpoint":"enumerate","paged":true,"streamed":false,"namespace":"identity","component":"keys"},"directives":[{"family":"io","name":"output","value":["id","label","expires","revokedAt","CREATED"]}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"auth","name":"role","value":"system:identity:keys"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]}},"version":"1894dba0","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-otp","manifest":{"namespace":"identity","name":"otp","entity":{"properties":{"authority":{"type":"string"},"username":{"type":"string","minLength":1,"maxLength":256},"identity":{"type":"string","pattern":"^[0-9a-f]{32}$"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","username","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"}}}]},{"id":"0003-unique-username","steps":[{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"},"unique":true,"partial":{"DELETED":null}}}]}],"associated":false,"custom":false},"operations":{"issue":{"input":{"properties":{"authority":{"type":"string"},"username":{"type":"string","minLength":1,"maxLength":256},"identity":{"type":"string","pattern":"^[0-9a-f]{32}$"},"lifetime":{"description":"OTP expiration time in seconds","type":"number","minimum":1,"maximum":3600}},"required":["authority","username"],"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"authority":{"type":"string"},"credentials":{"type":"string"}},"required":["authority","credentials"],"type":"object"},"output":{"properties":{"identity":{"properties":{"id":{"type":"string"}},"type":"object"}},"type":"object"},"errors":["INVALID_CREDENTIALS","EXPIRED","TOO_MANY_ATTEMPTS","NOT_FOUND"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.otp","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/otp","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"issue","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"otp"},"directives":[{"family":"io","name":"input","value":[]},{"family":"io","name":"output","value":["code"]},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"username":"identity"}}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"auth","name":"role","value":"system:identity:otp"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"properties":{"lifetime":{"description":"OTP expiration time in seconds","type":"number","minimum":1,"maximum":3600},"attempts":{"description":"Failed authentication attempts allowed per username within `lifetime`","type":"integer","minimum":1}},"type":"object"},"defaults":{"lifetime":300,"attempts":5}},"@toa.io/extensions.stash":null},"version":"8e419c9b","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-passkeys","manifest":{"namespace":"identity","name":"passkeys","entity":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"},"kid":{"type":"string"},"aid":{"description":"AAGUID","type":"string"},"synced":{"description":"credentialBackedUp","type":"boolean"},"key":{"description":"Base64-encoded Uint8Array","type":"string"},"counter":{"type":"number","minimum":0},"transports":{"type":"array","items":{"type":"string"}},"label":{"type":"string","minLength":1,"maxLength":64},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","identity","kid","aid","synced","key","counter","CREATED","id","VERSION","UPDATED","DELETED","REGION"],"blank":{"counter":0},"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_list","keys":{"authority":"asc","identity":"asc","CREATED":"desc"}}},{"index":{"name":"index_key","keys":{"authority":"asc","kid":"asc"}}}]}],"associated":false,"custom":false},"operations":{"challenge":{"input":{"type":"object","properties":{"type":{"type":"string","enum":["creation","request"]},"authority":{"type":"string"},"identity":{"type":"string"}},"required":["type","authority"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"create":{"query":false,"errors":["FAILED","INVALID"],"input":{"type":"object","properties":{"authority":{"type":"string"},"origin":{"type":"string"},"identity":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":64},"id":{"type":"string"},"type":{"type":"string"},"response":{"type":"object","properties":{"id":{"type":"string"},"response":{"type":"object","properties":{"attestationObject":{"type":"string"},"clientDataJSON":{"type":"string"},"transports":{"type":"array","items":{"type":"string"}},"publicKeyAlgorithm":{"type":"number"},"publicKey":{"type":"string"},"authenticatorData":{"type":"string"}},"required":["authenticatorData","attestationObject","clientDataJSON","transports","publicKeyAlgorithm","publicKey"]}}},"authenticatorAttachment":{"type":"string","nullable":true},"clientExtensionResults":{"type":"object"}},"required":["authority","identity","origin","label","id","type","response"]},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"use":{"concurrency":"retry","query":true,"errors":["FAILED","INVALID"],"input":{"type":"object","properties":{"origin":{"type":"string"},"id":{"type":"string"},"type":{"type":"string"},"response":{"type":"object","properties":{"authenticatorData":{"type":"string"},"clientDataJSON":{"type":"string"},"signature":{"type":"string"},"userHandle":{"type":"string"}}},"authenticatorAttachment":{"type":"string"},"clientExtensionResults":{"type":"object"}},"required":["origin","id","response"]},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"errors":["MISS","FAILED","INVALID"],"input":{"type":"object","properties":{"authority":{"type":"string"},"origin":{"type":"string"},"id":{"type":"string"},"type":{"type":"string"},"response":{"type":"object","properties":{"authenticatorData":{"type":"string"},"clientDataJSON":{"type":"string"},"signature":{"type":"string"},"userHandle":{"type":"string"}}},"authenticatorAttachment":{"type":"string"},"clientExtensionResults":{"type":"object"}},"required":["authority","origin","id","response"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"list":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"delete":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"id":{"type":"string"}},"required":["authority","identity","id"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.passkeys","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/passkeys","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/challenges","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"challenge","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"io","name":"output","value":["identity","challenge","timeout","userVerification","authenticatorSelection","pubKeyCredParams","allowCredentials","excludeCredentials"]}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"challenge","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"output","value":["identity","challenge","timeout","userVerification","authenticatorSelection","pubKeyCredParams","allowCredentials","excludeCredentials"]},{"family":"auth","name":"incept","value":"identity"}]}],"directives":[{"family":"auth","name":"anonymous","value":true}]}},{"path":"/:identity","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"delete","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity","id":"id"}},{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"map","name":"headers","value":{"origin":"origin"}},{"family":"io","name":"output","value":["id","aid","synced","label","CREATED","UPDATED"]}]},{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"io","name":"output","value":["id","aid","synced","label","CREATED","UPDATED"]}]}],"directives":[{"family":"auth","name":"id","value":"identity"}]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"authenticate","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"auth","name":"incept","value":"identity"},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"headers","value":{"origin":"origin"}},{"family":"io","name":"output","value":["identity"]}]}],"directives":[]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"algorithms":{"type":"array","items":{"type":"number"}},"timeout":{"type":"integer"},"verification":{"description":"AuthenticatorSelectionCriteria.userVerification","type":"string","enum":["required","preferred","discouraged"]},"residence":{"description":"AuthenticatorSelectionCriteria.residentKey","type":"string","enum":["required","preferred","discouraged"]}}},"defaults":{"algorithms":[-7,-257],"timeout":60000,"residence":"required"}},"@toa.io/extensions.stash":null},"version":"4d68865d","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}},"packages":{"@simplewebauthn/server":"14.0.2"}},{"label":"identity-roles","manifest":{"namespace":"identity","name":"roles","entity":{"properties":{"grantor":{"type":"string"},"identity":{"type":"string","pattern":"[a-z0-9]{32}"},"role":{"type":"string","pattern":"^[a-zA-Z0-9]{0,32}(:[a-zA-Z0-9]{0,32}){0,8}$"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["identity","role","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"unique_role","keys":{"identity":"asc","role":"asc"},"unique":true,"partial":{"DELETED":null}}}]}],"associated":false,"custom":false},"operations":{"grant":{"query":false,"input":{"properties":{"grantor":{"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"type":"object"},"identity":{"type":"string","pattern":"[a-z0-9]{32}"},"role":{"type":"string","pattern":"^[a-zA-Z0-9]{0,32}(:[a-zA-Z0-9]{0,32}){0,8}$"}},"type":"object","required":["identity","role"]},"errors":["INACCESSIBLE_SCOPE"],"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"list":{"output":{"type":"array","items":{"type":"string"}},"type":"observation","scope":"entries","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"principal":{"input":{"properties":{"id":{"type":"string"}},"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"receivers":{"identity.basic.principal":{"operation":"principal","conditioned":false,"adaptive":false},"identity.federation.principal":{"operation":"principal","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.roles","bridge":"@toa.io/bridges.node"}},"path":"@toa.io/extensions.exposition/components/identity.roles","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/roles","node":{"routes":[{"path":"/:identity","node":{"routes":[{"path":"/:role","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"terminate","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"grant","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":["id","grantor"]},{"family":"auth","name":"rule","value":{"delegate":"grantor","role":"system:identity:roles:delegation"}}]},{"verb":"GET","mapping":{"endpoint":"list","query":{},"paged":true,"streamed":false,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":true},{"family":"auth","name":"id","value":"identity"}]}],"directives":[{"family":"auth","name":"role","value":"system:identity:roles"}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"52996e8a","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-tokens","manifest":{"namespace":"identity","name":"tokens","entity":{"associated":true,"properties":{"revokedAt":{"type":"integer"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"}],"required":["id","VERSION","CREATED","UPDATED","DELETED","REGION"],"custom":false},"operations":{"encrypt":{"input":{"properties":{"lifetime":{"type":"number","minimum":0},"scopes":{"type":"array","items":{"type":"string"}},"permissions":{"type":"object","patternProperties":{"^.*$":{"type":"array","items":{"type":"string"}}}},"audience":{"description":"Resource URIs this token may be presented at (RFC 8707)","type":"array","items":{"type":"string"}},"key":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"}},"required":["id","key"]},"authority":{"type":"string"},"identity":{"required":["id","roles"],"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"additionalProperties":true,"type":"object"}},"type":"object","required":["authority","identity"]},"output":{"type":"string"},"errors":["INACCESSIBLE_SCOPE"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"decrypt":{"input":{"type":"string"},"output":{"required":["iss","iat","identity","refresh","custom"],"properties":{"iss":{"description":"The authority the token names as its issuer","type":"string"},"identity":{"required":["id","roles"],"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"additionalProperties":true,"type":"object"},"iat":{"type":"string"},"exp":{"type":"string"},"aud":{"description":"Resource URIs this token may be presented at","type":["string","array"]},"custom":{"type":"boolean"},"refresh":{"type":"boolean"}},"type":"object"},"errors":["INVALID_TOKEN","INVALID_KEY","FORGED_KEY","REVOKED_KEY"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"authority":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["authority","credentials"]},"output":{"required":["identity","refresh"],"properties":{"identity":{"required":["id","roles"],"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"additionalProperties":true,"type":"object"},"refresh":{"type":"boolean"}},"type":"object"},"errors":["UNRECOGNIZED","AUTHORITY_MISMATCH","TOKEN_REVOKED","INVALID_TOKEN","INVALID_KEY","FORGED_KEY","REVOKED_KEY"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"issue":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"lifetime":{"type":"number","minimum":0},"scopes":{"type":"array","items":{"type":"string"}},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"audience":{"description":"Resource URIs this token may be presented at (RFC 8707)","type":"array","items":{"type":"string"}},"label":{"type":"string","minLength":1,"maxLength":64}},"required":["authority","identity","label"]},"output":{"required":["kid","token"],"properties":{"kid":{"type":"string"},"exp":{"type":"number"},"token":{"type":"string"}},"type":"object"},"errors":["INACCESSIBLE_SCOPE"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"revoke":{"output":{"type":"null"},"concurrency":"retry","type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"receivers":{"identity.bans.created":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.tokens","bridge":"@toa.io/bridges.node"},"identity.bans.updated":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.tokens","bridge":"@toa.io/bridges.node"}},"path":"@toa.io/extensions.exposition/components/identity.tokens","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/tokens","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"issue","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"tokens"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["lifetime","label","scopes","permissions"]},{"family":"io","name":"output","value":["kid","exp","token","label"]}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"auth","name":"role","value":"system:identity:tokens"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"keys":{"type":"array","minItems":1,"contains":{"not":{"properties":{"format":{"const":"paseto"}},"required":["format"]}},"items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"key":{"type":"string","format":"secret"},"format":{"type":"string","enum":["jwe","paseto"]}},"required":["id","key"],"additionalProperties":false}},"lifetime":{"description":"Token expiration time in seconds (default 30 days)","type":"integer"},"refresh":{"description":"Token refresh time in seconds (default 10 minutes)","type":"integer"},"cache":{"description":"Custom token keys LRU cache configuration","properties":{"max":{"type":"integer"},"ttl":{"type":"integer"}},"required":["max","ttl"]}},"required":["keys","lifetime","refresh","cache"]},"defaults":{"lifetime":2592000,"refresh":600,"cache":{"max":1024,"ttl":600000}}}},"version":"98d65b05","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}},"packages":{"jose":"6.2.12","lru-cache":"11.5.3","paseto":"4.0.1"}}]
|
|
1
|
+
[{"label":"exposition-octets","manifest":{"namespace":"exposition","name":"octets","operations":{"put":{"bindings":[],"input":{"properties":{"location":{"type":"string"},"accept":{"type":"string"},"limit":{"type":"number"},"trust":{},"storage":{"type":"string"},"request":{}},"type":"object","required":["storage","request"]},"errors":["LOCATION_UNTRUSTED","LOCATION_LENGTH","LOCATION_UNAVAILABLE","INVALID_ID","NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}},"get":{"bindings":[],"errors":["NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"input":{"properties":{"range":{"type":"string"},"agent":{"type":"string"},"storage":{"type":"string"},"path":{"type":"string"}},"type":"object","required":["storage","path"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}},"head":{"bindings":[],"errors":["NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"input":{"properties":{"range":{"type":"string"},"agent":{"type":"string"},"storage":{"type":"string"},"path":{"type":"string"}},"type":"object","required":["storage","path"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}},"delete":{"bindings":[],"errors":["NOT_FOUND","LIMIT_EXCEEDED","NOT_ACCEPTABLE","TYPE_MISMATCH"],"input":{"properties":{"range":{"type":"string"},"agent":{"type":"string"},"storage":{"type":"string"},"path":{"type":"string"}},"type":"object","required":["storage","path"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{}}},"path":"@toa.io/extensions.exposition/components/exposition.octets","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","prototype":null,"extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.storages":[]},"version":"2965b33b"},"packages":{"@aws-sdk/client-s3":"3.1145.0","@aws-sdk/lib-storage":"3.1145.0","cloudinary":"2.11.0"}},{"label":"identity-bans","manifest":{"namespace":"identity","name":"bans","entity":{"associated":true,"properties":{"comment":{"type":"string"},"banned":{"type":"boolean"},"originator":{"type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["banned","originator","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"blank":{"banned":false},"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"}],"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"properties":{"comment":{"type":"string"},"banned":{"type":"boolean"},"originator":{"properties":{"id":{"type":"string"}},"type":"object"}},"type":"object","required":["banned","originator"]},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.bans","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/bans","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"PUT","mapping":{"endpoint":"transit","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"bans"},"directives":[]}],"directives":[{"family":"io","name":"output","value":false},{"family":"auth","name":"rule","value":{"role":"system:identity:bans","delegate":"originator"}}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"c1299208","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-basic","manifest":{"namespace":"identity","name":"basic","entity":{"associated":true,"properties":{"authority":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","username","password","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"unique_authority_username","keys":{"authority":"asc","username":"asc"},"unique":true,"partial":{"DELETED":null}}},{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"}}}]}],"custom":false},"operations":{"transit":{"concurrency":"retry","output":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"input":{"properties":{"username":{"type":"string"},"password":{"type":"string"},"authority":{"type":"string"},"inception":{"description":"Whether the credentials are being created rather than changed","type":"boolean"}},"type":"object"},"errors":["PRINCIPAL_LOCKED","INVALID_USERNAME","INVALID_PASSWORD","EXISTS"],"type":"transition","bridge":"@toa.io/bridges.node","scope":"entry","bindings":["@toa.io/bindings.amqp"]},"create":{"forward":"transit","query":false,"input":{"properties":{"authority":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"inception":{"description":"Whether the credentials are being created rather than changed","type":"boolean"}},"type":"object","required":["authority","username","password"]},"errors":["PRINCIPAL_LOCKED","INVALID_USERNAME","INVALID_PASSWORD","EXISTS"],"concurrency":"retry","output":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"type":"transition","bridge":"@toa.io/bridges.node","scope":"entry","bindings":["@toa.io/bindings.amqp"]},"add":{"input":{"properties":{"id":{"type":"string"},"authority":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"}},"type":"object","required":["id","authority","username","password"]},"errors":["PRINCIPAL_LOCKED","INVALID_USERNAME","INVALID_PASSWORD","EXISTS"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"incept":{"input":{"properties":{"authority":{"type":"string"},"id":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["authority","id","credentials"]},"output":{"properties":{"id":{"type":"string"}},"type":"object"},"errors":["INVALID_CREDENTIALS"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"authority":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["authority","credentials"]},"output":{"properties":{"identity":{"properties":{"id":{"type":"string"}},"type":"object"}},"type":"object"},"errors":["NOT_FOUND","PASSWORD_MISMATCH"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"check":{"input":{"type":"object","properties":{"username":{"type":"string","minLength":1}},"required":["username"]},"output":{"type":"null"},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"info":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","identity"]},"output":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"username":{"type":"string"}},"required":["username"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"delete":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","identity"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.basic","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/basic","node":{"routes":[{"path":"/","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"auth","name":"anonymous","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"output","value":["id"]}]}],"directives":[]}},{"path":"/:id","node":{"routes":[],"methods":[{"verb":"PATCH","mapping":{"endpoint":"transit","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"auth","name":"scheme","value":"basic"}]},{"verb":"POST","mapping":{"endpoint":"add","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"id":"id"}}]},{"verb":"DELETE","mapping":{"endpoint":"delete","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"id"}},{"family":"io","name":"output","value":false}]}],"directives":[{"family":"io","name":"output","value":["id"]},{"family":"io","name":"input","value":["username","password"]},{"family":"auth","name":"role","value":"system:identity:basic"},{"family":"auth","name":"id","value":"id"}]}},{"path":"/usernames/:username","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"check","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"basic"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"auth","name":"anonymous","value":true}]}],"directives":[]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"rounds":{"type":"integer","minimum":1},"pepper":{"description":"Hashing pepper, a secret","type":"string","format":"secret"},"principal":{"description":"Basic credentials whose Identity is granted the `system` role","type":"object","properties":{"authority":{"type":"string"},"username":{"type":"string"}},"required":["authority","username"],"additionalProperties":false},"username":{"type":"array","items":{"type":"string"}},"password":{"type":"array","items":{"type":"string"}}},"required":["rounds","username","password"]},"defaults":{"rounds":10,"username":["^.{1,128}$"],"password":["^.{8,32}$"]}}},"version":"e68c2b27","events":{"principal":{"conditioned":true,"subjective":true,"path":"@toa.io/extensions.exposition/components/identity.basic","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}},"prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}}},"packages":{"@node-rs/bcrypt":"1.10.9"}},{"label":"identity-clients","manifest":{"namespace":"identity","name":"clients","entity":{"associated":true,"properties":{"authority":{"type":"string"},"name":{"description":"client_name","type":"string","maxLength":128},"uris":{"description":"redirect_uris","type":"array","minItems":1,"maxItems":8,"items":{"type":"string","maxLength":2048}},"uri":{"description":"client_uri","type":"string","maxLength":2048},"logo":{"description":"logo_uri","type":"string","maxLength":2048},"scope":{"type":"string","maxLength":512},"expires":{"description":"When a registration nothing has used is swept","type":"number"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","uris","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_authority","keys":{"authority":"asc"}}}]}],"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"type":"object","properties":{"authority":{"type":"string"},"name":{"type":"string"},"uri":{"type":"string"},"logo":{"type":"string"},"scope":{"type":"string"},"uris":{"type":"array","items":{"type":"string"}},"expires":{"type":"number"}},"required":["authority","uris"]},"type":"transition","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"register":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"client_name":{"type":"string","maxLength":128},"client_uri":{"type":"string","maxLength":2048},"logo_uri":{"type":"string","maxLength":2048},"redirect_uris":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"string","maxLength":2048}},"scope":{"type":"string","maxLength":512},"grant_types":{"type":"array","items":{"type":"string"}},"response_types":{"type":"array","items":{"type":"string"}},"token_endpoint_auth_method":{"type":"string"}},"required":["authority","redirect_uris"]},"output":{"type":"object","properties":{"status":{"description":"Read and removed by `map:status`","type":"number"},"client_id":{"type":"string"},"client_id_issued_at":{"type":"number"},"client_name":{"type":"string"},"client_uri":{"type":"string"},"logo_uri":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"}},"grant_types":{"type":"array","items":{"type":"string"}},"response_types":{"type":"array","items":{"type":"string"}},"token_endpoint_auth_method":{"type":"string"},"error":{"type":"string"},"error_description":{"type":"string"}}},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"describe":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"id":{"description":"client_id, which is an https URL when the client publishes its own metadata","type":"string","maxLength":2048},"redirect":{"description":"Asked about together with the client, since only this component may answer it","type":"string","maxLength":2048}},"required":["authority","id"]},"output":{"type":"object","properties":{"client_id":{"type":"string"},"client_name":{"type":"string"},"client_uri":{"type":"string"},"logo_uri":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"}},"permitted":{"description":"Whether `redirect` is one this client may receive a code at","type":"boolean"}}},"errors":["UNKNOWN_CLIENT"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.clients","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/clients","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"describe","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"clients"},"directives":[{"family":"auth","name":"anyone","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"id":"id"}},{"family":"io","name":"output","value":["client_id","client_name","client_uri","logo_uri","redirect_uris"]}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"register","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"clients"},"directives":[{"family":"auth","name":"anonymous","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["client_name","client_uri","logo_uri","redirect_uris","scope","grant_types","response_types","token_endpoint_auth_method"]},{"family":"io","name":"output","value":true},{"family":"io","name":"throttle","value":{"key":"ip","requests":10,"interval":3600}},{"family":"io","name":"status","value":"status"},{"family":"cache","name":"exact","value":"no-store"}]}],"directives":[]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"trust":{"description":"Origins whose Client ID Metadata Documents may be read; none are without one","type":"array","items":{"type":"string","pattern":"^https://"}},"lifetime":{"description":"Seconds a Client ID Metadata Document is held before it is read again","type":"integer","minimum":1},"ttl":{"description":"Seconds a registration nothing has used is kept","type":"integer","minimum":1},"size":{"description":"Bytes of a Client ID Metadata Document that are read","type":"integer","minimum":1},"timeout":{"description":"Milliseconds a Client ID Metadata Document has to arrive","type":"integer","minimum":1}}},"defaults":{"trust":[],"lifetime":3600,"ttl":2592000,"size":16384,"timeout":3000}},"@toa.io/extensions.stash":null},"version":"31a3325b","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-credentials","manifest":{"namespace":"identity","name":"credentials","operations":{"list":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"output":{"type":"object","properties":{"basic":{"type":"object","nullable":true,"additionalProperties":false,"properties":{"username":{"type":"string"}},"required":["username"]},"federation":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"iss":{"type":"string"},"CREATED":{"type":"number"}},"required":["id","iss","CREATED"]}},"passkeys":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"aid":{"type":"string"},"synced":{"type":"boolean"},"label":{"type":"string"},"CREATED":{"type":"number"}},"required":["id","aid","synced","CREATED"]}}},"required":["basic","federation","passkeys"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.credentials","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","prototype":null,"extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/credentials","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"credentials"},"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"io","name":"output","value":true}]}],"directives":[]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]}},"version":"1fb913de"}},{"label":"identity-federation","manifest":{"namespace":"identity","name":"federation","entity":{"properties":{"authority":{"description":"The authority token is valid for","type":"string"},"iss":{"description":"The issuer, or signer, of the token, URI like `https://accounts.google.com`","type":"string"},"sub":{"description":"The ID that represents the principal making the request","type":"string"},"identity":{"description":"Identity associated with these credentials","type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","iss","sub","identity","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0001-identity","steps":[{"update":{"filter":{"identity":{"$exists":false}},"update":[{"$set":{"identity":"$_id"}}]}}]},{"id":"0002-indexes","steps":[{"index":{"name":"unique_token","keys":{"authority":"asc","iss":"asc","sub":"asc"},"unique":true,"partial":{"DELETED":null}}},{"index":{"name":"unique_identity","keys":{"authority":"asc","iss":"asc","identity":"asc"},"unique":true,"partial":{"DELETED":null}}},{"index":{"name":"index_list","keys":{"authority":"asc","identity":"asc","CREATED":"desc"},"sparse":true}}]}],"associated":false,"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"properties":{"authority":{"type":"string"},"iss":{"type":"string"},"sub":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","iss","sub","identity"]},"type":"transition","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"create":{"input":{"properties":{"scheme":{"type":"string","enum":["bearer","code"]},"authority":{"type":"string"},"credentials":{"type":"string"},"id":{"type":"string"}},"type":"object","required":["scheme","authority","credentials","id"]},"errors":["EXISTS","TOKEN","TRUST","RESPONSE","CONFIG","NO_TOKEN","ISS","SUB","EXP","REPLAY","CODE_NOT_ENABLED","CODE_SCHEMA"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"incept":{"input":{"properties":{"scheme":{"type":"string","enum":["bearer","code"]},"authority":{"type":"string"},"credentials":{"type":"string"},"id":{"type":"string"}},"type":"object","required":["scheme","authority","credentials","id"]},"output":{"properties":{"id":{"type":"string"}},"type":"object"},"errors":["EXISTS","TOKEN","TRUST","RESPONSE","CONFIG","NO_TOKEN","ISS","SUB","EXP","REPLAY","CODE_NOT_ENABLED","CODE_SCHEMA"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"scheme":{"type":"string","enum":["bearer","code"]},"authority":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["scheme","authority","credentials"]},"output":{"properties":{"identity":{"properties":{"id":{"type":"string"},"claims":{"properties":{"iss":{"type":"string"},"aud":{"type":"string"},"sub":{"type":"string"}},"additionalProperties":true,"required":["iss","sub"],"type":"object"}},"required":["id","claims"],"type":"object"}},"type":"object"},"errors":["NOT_FOUND","TOKEN","TRUST","RESPONSE","CONFIG","NO_TOKEN","ISS","SUB","EXP","REPLAY","CODE_NOT_ENABLED","CODE_SCHEMA"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"decode":{"input":{"type":"string"},"output":{"properties":{"iss":{"type":"string"},"aud":{"type":"string"},"sub":{"type":"string"}},"additionalProperties":true,"required":["iss","sub"],"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"list":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"type":"object","required":["authority","identity"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"delete":{"input":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"},"credential":{"type":"string"}},"type":"object","required":["authority","identity","credential"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.federation","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/federation","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[{"path":"/:credential","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"delete","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"federation"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"id","credential":"credential"}},{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"federation"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["scheme","credentials"]},{"family":"io","name":"output","value":["id","iss","CREATED"]}]},{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"federation"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"id"}},{"family":"io","name":"output","value":["id","iss","CREATED"]}]}],"directives":[{"family":"auth","name":"id","value":"id"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"trust":{"type":"array","items":{"title":"Trusted Identity Providers","type":"object","additionalProperties":false,"properties":{"iss":{"description":"Allowed values for a token `iss` field","type":"string","format":"uri"},"aud":{"description":"Acceptable `aud` value(s)","anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"},"uniqueItems":true,"minItems":1}]},"signature":{"properties":{"iss":{"type":"string"},"kid":{"type":"string"},"key":{"description":"PKCS8 private key in PEM form","type":"string"}},"required":["iss","kid","key"]},"secret":{"description":"Client secret for the Identity Provider. Required for Authorization Code Flow.","type":"string"}},"required":["iss","aud"]}},"principal":{"title":"Principal","description":"Subject that will be assigned the `system` Role","type":"object","properties":{"authority":{"type":"string"},"iss":{"type":"string","format":"uri"},"sub":{"type":"string"}},"required":["authority","iss","sub"],"additionalProperties":false},"assert":{"title":"Implicitly incept Identity for new credentials","type":"boolean"}},"additionalProperties":false},"defaults":{"trust":[],"assert":true}}},"version":"f505f63a","events":{"principal":{"conditioned":true,"subjective":true,"path":"@toa.io/extensions.exposition/components/identity.federation","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}},"prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}}},"packages":{"jose":"6.2.12"}},{"label":"identity-grants","manifest":{"namespace":"identity","name":"grants","entity":{"associated":true,"properties":{"authority":{"type":"string"},"identity":{"type":"string"},"client":{"type":"string"},"scope":{"type":"array","items":{"type":"string"}},"resource":{"type":"array","items":{"type":"string"}},"kid":{"description":"The identity.keys record backing the access token, revoked with the grant","type":"string"},"revokedAt":{"type":"integer"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","identity","client","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_identity","keys":{"authority":"asc","identity":"asc"}}}]}],"custom":false},"operations":{"transit":{"concurrency":"retry","input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"client":{"type":"string"},"scope":{"type":"array","items":{"type":"string"}},"resource":{"type":"array","items":{"type":"string"}},"kid":{"type":"string"}},"required":["authority","identity","client"]},"type":"transition","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"authorize":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"client":{"type":"string","maxLength":2048},"redirect":{"type":"string","maxLength":2048},"challenge":{"description":"PKCE code challenge, S256 of the verifier","type":"string","minLength":43,"maxLength":128},"method":{"type":"string"},"scope":{"type":"array","items":{"type":"string"}},"resource":{"type":"array","items":{"type":"string","maxLength":2048}}},"required":["authority","identity","client","redirect","challenge","method"]},"output":{"type":"object","properties":{"status":{"description":"Read and removed by `io:status`","type":"number"},"code":{"type":"string"},"expires_in":{"type":"number"},"error":{"type":"string"},"error_description":{"type":"string"}}},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"exchange":{"query":false,"input":{"type":"object","properties":{"authority":{"type":"string"},"grant_type":{"type":"string"},"code":{"type":"string","maxLength":512},"code_verifier":{"type":"string","minLength":43,"maxLength":128},"redirect_uri":{"type":"string","maxLength":2048},"client_id":{"type":"string","maxLength":2048},"resource":{"description":"A form repeats a name to say a list, so either shape arrives","type":["string","array"]}},"required":["authority","grant_type"]},"output":{"type":"object","properties":{"status":{"type":"number"},"access_token":{"type":"string"},"token_type":{"type":"string"},"expires_in":{"type":"number"},"scope":{"type":"string"},"error":{"type":"string"},"error_description":{"type":"string"}}},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"list":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"revoke":{"output":{"type":"null"},"concurrency":"retry","input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"errors":["NOT_FOUND"],"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.grants","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/grants","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:identity","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"revoke","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"output","value":["id","client","scope","resource","CREATED"]}]},{"verb":"POST","mapping":{"endpoint":"authorize","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"input","value":["client","redirect","challenge","method","scope","resource"]},{"family":"io","name":"output","value":["code","expires_in","error","error_description","status"]},{"family":"io","name":"status","value":"status"},{"family":"cache","name":"exact","value":"no-store"}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}}]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"exchange","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"grants"},"directives":[{"family":"auth","name":"anonymous","value":true},{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["grant_type","code","code_verifier","redirect_uri","client_id","resource"]},{"family":"io","name":"output","value":true},{"family":"io","name":"status","value":"status"},{"family":"io","name":"throttle","value":{"key":"ip","requests":60,"interval":60}},{"family":"cache","name":"exact","value":"no-store"}]}],"directives":[]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"lifetime":{"description":"Seconds an authorization code may be redeemed within","type":"integer","minimum":1,"maximum":600},"token":{"description":"Seconds an access token is valid for; 0 is until it is revoked","type":"integer","minimum":0}},"required":["lifetime","token"]},"defaults":{"lifetime":60,"token":2592000}},"@toa.io/extensions.stash":null},"version":"92f0d187","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-keys","manifest":{"namespace":"identity","name":"keys","entity":{"properties":{"identity":{"type":"string"},"key":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":64},"expires":{"type":"number"},"revokedAt":{"type":"integer"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["identity","key","label","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_identity","keys":{"identity":"asc"}}}]}],"associated":false,"custom":false},"operations":{"create":{"query":false,"input":{"properties":{"identity":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":64},"expires":{"type":"number"}},"required":["identity","label"],"type":"object"},"output":{"properties":{"id":{"type":"string"},"key":{"type":"string"}},"required":["id","key"],"type":"object"},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"revoke":{"output":{"type":"null"},"input":{"properties":{"identity":{"type":"string"}},"required":["identity"],"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"disable":{"concurrency":"retry","type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"receivers":{"identity.bans.created":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.keys","bridge":"@toa.io/bridges.node"},"identity.bans.updated":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.keys","bridge":"@toa.io/bridges.node"},"identity.roles.deleted":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.keys","bridge":"@toa.io/bridges.node"}},"path":"@toa.io/extensions.exposition/components/identity.keys","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/keys","node":{"routes":[{"path":"/:identity","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"terminate","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"keys"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"query":{"sort":"CREATED:desc"},"endpoint":"enumerate","paged":true,"streamed":false,"namespace":"identity","component":"keys"},"directives":[{"family":"io","name":"output","value":["id","label","expires","revokedAt","CREATED"]}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"auth","name":"role","value":"system:identity:keys"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]}},"version":"1894dba0","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-otp","manifest":{"namespace":"identity","name":"otp","entity":{"properties":{"authority":{"type":"string"},"username":{"type":"string","minLength":1,"maxLength":256},"identity":{"type":"string","pattern":"^[0-9a-f]{32}$"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","username","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"}}}]},{"id":"0003-unique-username","steps":[{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"},"unique":true,"partial":{"DELETED":null}}}]}],"associated":false,"custom":false},"operations":{"issue":{"input":{"properties":{"authority":{"type":"string"},"username":{"type":"string","minLength":1,"maxLength":256},"identity":{"type":"string","pattern":"^[0-9a-f]{32}$"},"lifetime":{"description":"OTP expiration time in seconds","type":"number","minimum":1,"maximum":3600}},"required":["authority","username"],"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"authority":{"type":"string"},"credentials":{"type":"string"}},"required":["authority","credentials"],"type":"object"},"output":{"properties":{"identity":{"properties":{"id":{"type":"string"}},"type":"object"}},"type":"object"},"errors":["INVALID_CREDENTIALS","EXPIRED","TOO_MANY_ATTEMPTS","NOT_FOUND"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.otp","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/otp","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"issue","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"otp"},"directives":[{"family":"io","name":"input","value":[]},{"family":"io","name":"output","value":["code"]},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"username":"identity"}}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"auth","name":"role","value":"system:identity:otp"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"properties":{"lifetime":{"description":"OTP expiration time in seconds","type":"number","minimum":1,"maximum":3600},"attempts":{"description":"Failed authentication attempts allowed per username within `lifetime`","type":"integer","minimum":1}},"type":"object"},"defaults":{"lifetime":300,"attempts":5}},"@toa.io/extensions.stash":null},"version":"0ef85b94","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-passkeys","manifest":{"namespace":"identity","name":"passkeys","entity":{"properties":{"authority":{"type":"string"},"identity":{"type":"string"},"kid":{"type":"string"},"aid":{"description":"AAGUID","type":"string"},"synced":{"description":"credentialBackedUp","type":"boolean"},"key":{"description":"Base64-encoded Uint8Array","type":"string"},"counter":{"type":"number","minimum":0},"transports":{"type":"array","items":{"type":"string"}},"label":{"type":"string","minLength":1,"maxLength":64},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["authority","identity","kid","aid","synced","key","counter","CREATED","id","VERSION","UPDATED","DELETED","REGION"],"blank":{"counter":0},"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"index_list","keys":{"authority":"asc","identity":"asc","CREATED":"desc"}}},{"index":{"name":"index_key","keys":{"authority":"asc","kid":"asc"}}}]}],"associated":false,"custom":false},"operations":{"challenge":{"input":{"type":"object","properties":{"type":{"type":"string","enum":["creation","request"]},"authority":{"type":"string"},"identity":{"type":"string"}},"required":["type","authority"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"create":{"query":false,"errors":["FAILED","INVALID"],"input":{"type":"object","properties":{"authority":{"type":"string"},"origin":{"type":"string"},"identity":{"type":"string"},"label":{"type":"string","minLength":1,"maxLength":64},"id":{"type":"string"},"type":{"type":"string"},"response":{"type":"object","properties":{"id":{"type":"string"},"response":{"type":"object","properties":{"attestationObject":{"type":"string"},"clientDataJSON":{"type":"string"},"transports":{"type":"array","items":{"type":"string"}},"publicKeyAlgorithm":{"type":"number"},"publicKey":{"type":"string"},"authenticatorData":{"type":"string"}},"required":["authenticatorData","attestationObject","clientDataJSON","transports","publicKeyAlgorithm","publicKey"]}}},"authenticatorAttachment":{"type":"string","nullable":true},"clientExtensionResults":{"type":"object"}},"required":["authority","identity","origin","label","id","type","response"]},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"use":{"concurrency":"retry","query":true,"errors":["FAILED","INVALID"],"input":{"type":"object","properties":{"origin":{"type":"string"},"id":{"type":"string"},"type":{"type":"string"},"response":{"type":"object","properties":{"authenticatorData":{"type":"string"},"clientDataJSON":{"type":"string"},"signature":{"type":"string"},"userHandle":{"type":"string"}}},"authenticatorAttachment":{"type":"string"},"clientExtensionResults":{"type":"object"}},"required":["origin","id","response"]},"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"errors":["MISS","FAILED","INVALID"],"input":{"type":"object","properties":{"authority":{"type":"string"},"origin":{"type":"string"},"id":{"type":"string"},"type":{"type":"string"},"response":{"type":"object","properties":{"authenticatorData":{"type":"string"},"clientDataJSON":{"type":"string"},"signature":{"type":"string"},"userHandle":{"type":"string"}}},"authenticatorAttachment":{"type":"string"},"clientExtensionResults":{"type":"object"}},"required":["authority","origin","id","response"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"list":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"}},"required":["authority","identity"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"delete":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"id":{"type":"string"}},"required":["authority","identity","id"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"path":"@toa.io/extensions.exposition/components/identity.passkeys","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/passkeys","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/challenges","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"challenge","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"io","name":"output","value":["identity","challenge","timeout","userVerification","authenticatorSelection","pubKeyCredParams","allowCredentials","excludeCredentials"]}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"challenge","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"output","value":["identity","challenge","timeout","userVerification","authenticatorSelection","pubKeyCredParams","allowCredentials","excludeCredentials"]},{"family":"auth","name":"incept","value":"identity"}]}],"directives":[{"family":"auth","name":"anonymous","value":true}]}},{"path":"/:identity","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"delete","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity","id":"id"}},{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"map","name":"headers","value":{"origin":"origin"}},{"family":"io","name":"output","value":["id","aid","synced","label","CREATED","UPDATED"]}]},{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"segments","value":{"identity":"identity"}},{"family":"io","name":"output","value":["id","aid","synced","label","CREATED","UPDATED"]}]}],"directives":[{"family":"auth","name":"id","value":"identity"}]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"authenticate","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"passkeys"},"directives":[{"family":"auth","name":"incept","value":"identity"},{"family":"map","name":"authority","value":"authority"},{"family":"map","name":"headers","value":{"origin":"origin"}},{"family":"io","name":"output","value":["identity"]}]}],"directives":[]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"algorithms":{"type":"array","items":{"type":"number"}},"timeout":{"type":"integer"},"verification":{"description":"AuthenticatorSelectionCriteria.userVerification","type":"string","enum":["required","preferred","discouraged"]},"residence":{"description":"AuthenticatorSelectionCriteria.residentKey","type":"string","enum":["required","preferred","discouraged"]}}},"defaults":{"algorithms":[-7,-257],"timeout":60000,"residence":"required"}},"@toa.io/extensions.stash":null},"version":"51c7abaa","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}},"packages":{"@simplewebauthn/server":"14.0.3"}},{"label":"identity-roles","manifest":{"namespace":"identity","name":"roles","entity":{"properties":{"grantor":{"type":"string"},"identity":{"type":"string","pattern":"[a-z0-9]{32}"},"role":{"type":"string","pattern":"^[a-zA-Z0-9]{0,32}(:[a-zA-Z0-9]{0,32}){0,8}$"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["identity","role","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"0002-indexes","steps":[{"index":{"name":"unique_role","keys":{"identity":"asc","role":"asc"},"unique":true,"partial":{"DELETED":null}}}]}],"associated":false,"custom":false},"operations":{"grant":{"query":false,"input":{"properties":{"grantor":{"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"type":"object"},"identity":{"type":"string","pattern":"[a-z0-9]{32}"},"role":{"type":"string","pattern":"^[a-zA-Z0-9]{0,32}(:[a-zA-Z0-9]{0,32}){0,8}$"}},"type":"object","required":["identity","role"]},"errors":["INACCESSIBLE_SCOPE"],"type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"list":{"output":{"type":"array","items":{"type":"string"}},"type":"observation","scope":"entries","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"principal":{"input":{"properties":{"id":{"type":"string"}},"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"receivers":{"identity.basic.principal":{"operation":"principal","conditioned":false,"adaptive":false},"identity.federation.principal":{"operation":"principal","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.roles","bridge":"@toa.io/bridges.node"}},"path":"@toa.io/extensions.exposition/components/identity.roles","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/roles","node":{"routes":[{"path":"/:identity","node":{"routes":[{"path":"/:role","node":{"routes":[],"methods":[{"verb":"DELETE","mapping":{"endpoint":"terminate","query":{},"paged":false,"streamed":false,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"grant","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":["id","grantor"]},{"family":"auth","name":"rule","value":{"delegate":"grantor","role":"system:identity:roles:delegation"}}]},{"verb":"GET","mapping":{"endpoint":"list","query":{},"paged":true,"streamed":false,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":true},{"family":"auth","name":"id","value":"identity"}]}],"directives":[{"family":"auth","name":"role","value":"system:identity:roles"}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"d044a1c2","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}}},{"label":"identity-tokens","manifest":{"namespace":"identity","name":"tokens","entity":{"associated":true,"properties":{"revokedAt":{"type":"integer"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"},{"id":"system:0003-assigned-moments","steps":[{"update":{"filter":{"UPDATED":{"$type":"number"}},"update":[{"$set":{"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}}}}]}},{"update":{"filter":{"DELETED":{"$type":"number"}},"update":[{"$set":{"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"}],"required":["id","VERSION","CREATED","UPDATED","DELETED","REGION"],"custom":false},"operations":{"encrypt":{"input":{"properties":{"lifetime":{"type":"number","minimum":0},"scopes":{"type":"array","items":{"type":"string"}},"permissions":{"type":"object","patternProperties":{"^.*$":{"type":"array","items":{"type":"string"}}}},"audience":{"description":"Resource URIs this token may be presented at (RFC 8707)","type":"array","items":{"type":"string"}},"key":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"}},"required":["id","key"]},"authority":{"type":"string"},"identity":{"required":["id","roles"],"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"additionalProperties":true,"type":"object"}},"type":"object","required":["authority","identity"]},"output":{"type":"string"},"errors":["INACCESSIBLE_SCOPE"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"decrypt":{"input":{"type":"string"},"output":{"required":["iss","iat","identity","refresh","custom"],"properties":{"iss":{"description":"The authority the token names as its issuer","type":"string"},"identity":{"required":["id","roles"],"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"additionalProperties":true,"type":"object"},"iat":{"type":"string"},"exp":{"type":"string"},"aud":{"description":"Resource URIs this token may be presented at","type":["string","array"]},"custom":{"type":"boolean"},"refresh":{"type":"boolean"}},"type":"object"},"errors":["INVALID_TOKEN","INVALID_KEY","FORGED_KEY","REVOKED_KEY"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"authenticate":{"input":{"properties":{"authority":{"type":"string"},"credentials":{"type":"string"}},"type":"object","required":["authority","credentials"]},"output":{"required":["identity","refresh"],"properties":{"identity":{"required":["id","roles"],"properties":{"id":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}}},"additionalProperties":true,"type":"object"},"refresh":{"type":"boolean"}},"type":"object"},"errors":["UNRECOGNIZED","AUTHORITY_MISMATCH","TOKEN_REVOKED","INVALID_TOKEN","INVALID_KEY","FORGED_KEY","REVOKED_KEY"],"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"issue":{"input":{"type":"object","properties":{"authority":{"type":"string"},"identity":{"type":"string"},"lifetime":{"type":"number","minimum":0},"scopes":{"type":"array","items":{"type":"string"}},"permissions":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"audience":{"description":"Resource URIs this token may be presented at (RFC 8707)","type":"array","items":{"type":"string"}},"label":{"type":"string","minLength":1,"maxLength":64}},"required":["authority","identity","label"]},"output":{"required":["kid","token"],"properties":{"kid":{"type":"string"},"exp":{"type":"number"},"token":{"type":"string"}},"type":"object"},"errors":["INACCESSIBLE_SCOPE"],"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"bindings":["@toa.io/bindings.amqp"]},"revoke":{"output":{"type":"null"},"concurrency":"retry","type":"transition","scope":"entry","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"assign":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]},"ensure":{"type":"effect","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"entries","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"entry","output":{},"bindings":["@toa.io/bindings.amqp"]},"stream":{"type":"observation","scope":"stream","output":{},"bindings":["@toa.io/bindings.amqp"]},"terminate":{"type":"assignment","scope":"changeset","output":{},"bindings":["@toa.io/bindings.amqp"]}},"receivers":{"identity.bans.created":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.tokens","bridge":"@toa.io/bridges.node"},"identity.bans.updated":{"operation":"revoke","conditioned":false,"adaptive":true,"path":"@toa.io/extensions.exposition/components/identity.tokens","bridge":"@toa.io/bridges.node"}},"path":"@toa.io/extensions.exposition/components/identity.tokens","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/identity/tokens","node":{"routes":[{"path":"/:identity","node":{"routes":[],"methods":[{"verb":"POST","mapping":{"endpoint":"issue","query":null,"paged":false,"streamed":false,"namespace":"identity","component":"tokens"},"directives":[{"family":"map","name":"authority","value":"authority"},{"family":"io","name":"input","value":["lifetime","label","scopes","permissions"]},{"family":"io","name":"output","value":["kid","exp","token","label"]}]}],"directives":[{"family":"auth","name":"id","value":"identity"},{"family":"auth","name":"role","value":"system:identity:tokens"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"type":"object","properties":{"keys":{"type":"array","minItems":1,"contains":{"not":{"properties":{"format":{"const":"paseto"}},"required":["format"]}},"items":{"type":"object","properties":{"id":{"type":"string","minLength":1},"key":{"type":"string","format":"secret"},"format":{"type":"string","enum":["jwe","paseto"]}},"required":["id","key"],"additionalProperties":false}},"lifetime":{"description":"Token expiration time in seconds (default 30 days)","type":"integer"},"refresh":{"description":"Token refresh time in seconds (default 10 minutes)","type":"integer"},"cache":{"description":"Custom token keys LRU cache configuration","properties":{"max":{"type":"integer"},"ttl":{"type":"integer"}},"required":["max","ttl"]}},"required":["keys","lifetime","refresh","cache"]},"defaults":{"lifetime":2592000,"refresh":600,"cache":{"max":1024,"ttl":600000}}}},"version":"690105bf","prototype":{"prototype":null,"path":"@toa.io/prototype","operations":{"transit":{"bridge":"@toa.io/bridges.node"},"assign":{"bridge":"@toa.io/bridges.node"},"ensure":{"bridge":"@toa.io/bridges.node"},"enumerate":{"bridge":"@toa.io/bridges.node"},"observe":{"bridge":"@toa.io/bridges.node"},"stream":{"bridge":"@toa.io/bridges.node"},"terminate":{"bridge":"@toa.io/bridges.node"}}},"events":{"created":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"deleted":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"sync":{"conditioned":false,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"},"updated":{"conditioned":true,"subjective":false,"path":"@toa.io/prototype","bridge":"@toa.io/bridges.node","binding":"@toa.io/bindings.amqp"}}},"packages":{"jose":"6.2.12","lru-cache":"11.5.3","paseto":"4.0.1"}}]
|