@toa.io/definitions 1.0.0-alpha.293 → 1.0.0-alpha.294
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.configuration.json +1 -1
- package/digest/extensions.exposition.json +1 -1
- package/package.json +2 -2
- package/transpiled/extensions.configuration/deployment.js +4 -2
- package/transpiled/extensions.configuration/deployment.js.map +1 -1
- package/transpiled/extensions.configuration/index.d.ts +1 -0
- package/transpiled/extensions.configuration/index.js +1 -0
- package/transpiled/extensions.configuration/index.js.map +1 -1
- package/transpiled/extensions.configuration/secrets.d.ts +4 -0
- package/transpiled/extensions.configuration/secrets.js +42 -0
- package/transpiled/extensions.configuration/secrets.js.map +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"label":"configuration-values","manifest":{"namespace":"configuration","name":"values","entity":{"properties":{"component":{"type":"string"},"epoch":{"type":"string"},"configuration":{"type":"object"},"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}},"required":["component","epoch","configuration","originator","id"],"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":"0002-indexes","steps":[{"index":{"name":"index_lookup","keys":{"component":"asc","epoch":"asc","CREATED":"desc"},"sparse":true}}]}],"associated":false,"custom":false},"operations":{"get":{"query":false,"input":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"}},"required":["component"]},"output":{"type":"object","nullable":true,"properties":{"configuration":{"type":"object"},"schema":{"type":"object"},"epoch":{"type":"string"}},"required":["configuration","epoch"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"fetch":{"query":false,"input":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"}},"required":["component","epoch"]}},"output":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"},"configuration":{"type":"object","nullable":true},"created":{"type":"integer"}},"required":["component","epoch","configuration","created"]}},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"list":{"query":false,"output":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"},"schema":{"type":"object"},"configuration":{"type":"object"}},"required":["component","epoch","schema","configuration"]}},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"create":{"query":false,"input":{"type":"object","properties":{"component":{"type":"string"},"configuration":{"type":"object"},"originator":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["component","configuration","originator"]},"errors":["UNKNOWN_COMPONENT","INVALID_CONFIGURATION"],"type":"transition","scope":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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.configuration/components/configuration.values","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":null,"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/configuration/values","node":{"routes":[{"path":"/","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"namespace":"configuration","component":"values"},"directives":[{"family":"io","name":"output","value":true},{"family":"auth","name":"role","value":"system:configuration:get"}]}],"directives":[]}},{"path":"/:component","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"get","query":null,"paged":false,"namespace":"configuration","component":"values"},"directives":[{"family":"io","name":"output","value":true},{"family":"auth","name":"role","value":"system:configuration:get"}]},{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"namespace":"configuration","component":"values"},"directives":[{"family":"io","name":"output","value":["id","epoch"]},{"family":"auth","name":"rule","value":{"role":"system:configuration:create","delegate":"originator"}}]}],"directives":[{"family":"map","name":"segments","value":{"component":"component"}}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"
|
|
1
|
+
[{"label":"configuration-values","manifest":{"namespace":"configuration","name":"values","entity":{"properties":{"component":{"type":"string"},"epoch":{"type":"string"},"configuration":{"type":"object"},"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}},"required":["component","epoch","configuration","originator","id"],"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":"0002-indexes","steps":[{"index":{"name":"index_lookup","keys":{"component":"asc","epoch":"asc","CREATED":"desc"},"sparse":true}}]}],"associated":false,"custom":false},"operations":{"get":{"query":false,"input":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"}},"required":["component"]},"output":{"type":"object","nullable":true,"properties":{"configuration":{"type":"object"},"schema":{"type":"object"},"epoch":{"type":"string"}},"required":["configuration","epoch"]},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"fetch":{"query":false,"input":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"}},"required":["component","epoch"]}},"output":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"},"configuration":{"type":"object","nullable":true},"created":{"type":"integer"}},"required":["component","epoch","configuration","created"]}},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"list":{"query":false,"output":{"type":"array","items":{"type":"object","properties":{"component":{"type":"string"},"epoch":{"type":"string"},"schema":{"type":"object"},"configuration":{"type":"object"}},"required":["component","epoch","schema","configuration"]}},"type":"computation","scope":"none","bridge":"@toa.io/bridges.node","bindings":["@toa.io/bindings.amqp"]},"create":{"query":false,"input":{"type":"object","properties":{"component":{"type":"string"},"configuration":{"type":"object"},"originator":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]}},"required":["component","configuration","originator"]},"errors":["UNKNOWN_COMPONENT","INVALID_CONFIGURATION"],"type":"transition","scope":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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.configuration/components/configuration.values","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":null,"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/configuration/values","node":{"routes":[{"path":"/","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":false,"namespace":"configuration","component":"values"},"directives":[{"family":"io","name":"output","value":true},{"family":"auth","name":"role","value":"system:configuration:get"}]}],"directives":[]}},{"path":"/:component","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"get","query":null,"paged":false,"namespace":"configuration","component":"values"},"directives":[{"family":"io","name":"output","value":true},{"family":"auth","name":"role","value":"system:configuration:get"}]},{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"namespace":"configuration","component":"values"},"directives":[{"family":"io","name":"output","value":["id","epoch"]},{"family":"auth","name":"rule","value":{"role":"system:configuration:create","delegate":"originator"}}]}],"directives":[{"family":"map","name":"segments","value":{"component":"component"}}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"f3d51d3b","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"}}}}]
|
|
@@ -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":null,"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.storages":[]},"version":"a6f00a83"}},{"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}},"required":["banned","originator","id"],"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"}],"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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":"c11888a7","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}},"required":["authority","username","password","id"],"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":"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","scope":"object","bridge":"@toa.io/bridges.node","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","scope":"object","bridge":"@toa.io/bridges.node","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":"effect","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"namespace":"identity","component":"basic"},"directives":[{"family":"auth","name":"scheme","value":"basic"}]},{"verb":"POST","mapping":{"endpoint":"add","query":null,"paged":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,"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,"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":"b4235b37","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.8"}},{"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}},"required":["authority","uris","id"],"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":"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"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":"f53951fa","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":null,"@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,"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":"7c0d8cab"}},{"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}},"required":["authority","iss","sub","identity","id"],"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":"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"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,"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":"429a52a1","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.10"}},{"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}},"required":["authority","identity","client","id"],"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":"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":"object","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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":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,"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"]},{"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,"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":"84bcd571","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}},"required":["identity","key","label","id"],"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":"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":"object","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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"namespace":"identity","component":"keys"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"query":{"sort":"CREATED:desc"},"endpoint":"enumerate","paged":true,"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":"fa74b9a4","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}},"required":["authority","username","id"],"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":"0002-indexes","steps":[{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"}}}]}],"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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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":"d6921af1","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}},"required":["authority","identity","kid","aid","synced","key","counter","CREATED","id"],"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":"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":"object","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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"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,"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,"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,"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,"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":"9ab2aaae","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.0"}},{"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}},"required":["identity","role","id"],"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":"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":"object","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"list":{"output":{"type":"array","items":{"type":"string"}},"type":"observation","scope":"objects","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"grant","query":null,"paged":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,"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":"8af74c97","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}},"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"}],"required":["id"],"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"}}}},"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"},"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"}}},"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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":"38114964","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.10","lru-cache":"11.5.2","paseto":"4.0.0"}}]
|
|
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":null,"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.storages":[]},"version":"a6f00a83"}},{"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}},"required":["banned","originator","id"],"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"}],"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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":"c11888a7","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}},"required":["authority","username","password","id"],"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":"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","scope":"object","bridge":"@toa.io/bridges.node","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","scope":"object","bridge":"@toa.io/bridges.node","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":"effect","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"namespace":"identity","component":"basic"},"directives":[{"family":"auth","name":"scheme","value":"basic"}]},{"verb":"POST","mapping":{"endpoint":"add","query":null,"paged":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,"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,"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":"7eacefc4","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.8"}},{"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}},"required":["authority","uris","id"],"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":"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"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":"f53951fa","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":null,"@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,"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":"7c0d8cab"}},{"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}},"required":["authority","iss","sub","identity","id"],"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":"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"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,"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":"4ec25579","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.10"}},{"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}},"required":["authority","identity","client","id"],"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":"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":"object","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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"namespace":"identity","component":"grants"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"list","query":null,"paged":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,"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"]},{"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,"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":"84bcd571","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}},"required":["identity","key","label","id"],"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":"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":"object","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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"namespace":"identity","component":"keys"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"query":{"sort":"CREATED:desc"},"endpoint":"enumerate","paged":true,"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":"fa74b9a4","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}},"required":["authority","username","id"],"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":"0002-indexes","steps":[{"index":{"name":"index_username","keys":{"authority":"asc","username":"asc"}}}]}],"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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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":"d6921af1","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}},"required":["authority","identity","kid","aid","synced","key","counter","CREATED","id"],"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":"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":"object","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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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,"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,"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,"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,"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,"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":"9ab2aaae","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.0"}},{"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}},"required":["identity","role","id"],"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":"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":"object","bridge":"@toa.io/bridges.node","output":{},"bindings":["@toa.io/bindings.amqp"]},"list":{"output":{"type":"array","items":{"type":"string"}},"type":"observation","scope":"objects","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"namespace":"identity","component":"roles"},"directives":[{"family":"io","name":"output","value":false}]}],"directives":[]}}],"methods":[{"verb":"POST","mapping":{"endpoint":"grant","query":null,"paged":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,"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":"8af74c97","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}},"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"}],"required":["id"],"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"}}}},"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"},"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"}}},"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":"object","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":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"enumerate":{"type":"observation","scope":"objects","output":{},"bindings":["@toa.io/bindings.amqp"]},"observe":{"type":"observation","scope":"object","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":null,"@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,"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":"74d37b72","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.10","lru-cache":"11.5.2","paseto":"4.0.0"}}]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/definitions",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.294",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "What Toa packages declare, read without running them",
|
|
6
6
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"optional": true
|
|
57
57
|
}
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "50b2b596a46a4d639d9f198f834d70c190f0a3c6"
|
|
60
60
|
}
|
|
@@ -4,6 +4,7 @@ import { components } from './components.js';
|
|
|
4
4
|
import { version } from '../version.js';
|
|
5
5
|
import { EVENT, PREFIX, SECRET_RX, UI_PATH, UI_PORT, VALUES } from './const.js';
|
|
6
6
|
import { epoch } from './epoch.js';
|
|
7
|
+
import { assertSecrets } from './secrets.js';
|
|
7
8
|
import * as validators from './schemas.js';
|
|
8
9
|
/** Where Toa's release publishes this service's image. An application takes it
|
|
9
10
|
* instead of building one when its context says `registry.services: published`. */
|
|
@@ -95,10 +96,11 @@ function split(annotation) {
|
|
|
95
96
|
/** Validated, keyed by full component ids, and checked against the components that ask. */
|
|
96
97
|
function prepare(annotation, instances) {
|
|
97
98
|
const normalized = {};
|
|
98
|
-
const requested = instances.map((instance) => instance.locator.id);
|
|
99
99
|
for (const [key, values] of Object.entries(annotation)) {
|
|
100
100
|
const id = key.includes('.') ? key : 'default.' + key;
|
|
101
|
-
|
|
101
|
+
const instance = instances.find((instance) => instance.locator.id === id);
|
|
102
|
+
assert.ok(instance !== undefined, `Component '${id}' does not request configuration or does not exist.`);
|
|
103
|
+
assertSecrets(instance.manifest.schema, values);
|
|
102
104
|
normalized[id] = values;
|
|
103
105
|
}
|
|
104
106
|
return normalized;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../source/extensions.configuration/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAQhC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAI1C;oFACoF;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,+CAA+C,CAAA;AAEpE,MAAM,UAAU,UAAU,CACxB,SAAqB,EACrB,UAAU,GAAe,EAAE;IAE3B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;IAE/C,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEvC,MAAM,SAAS,GAAc,EAAE,CAAA;IAE/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE9C,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAElC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;QAErC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;IACrE,CAAC;IAED,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,QAAQ;QACd,KAAK;QACL,OAAO;QACP,UAAU,EAAE,UAAU,EAAE,CAAC,MAAM;QAC/B,SAAS;QACT,yEAAyE;QACzE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QAC1B,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;aACvD;SACF;KACF,CAAA;IAED,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;AAC5D,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,QAAQ,CAAC,SAAqB,EAAE,UAAU,GAAe,EAAE;IACzE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEzD,MAAM,MAAM,GAAW,EAAE,CAAA;IAEzB,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEvC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;YACnB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,kFAAkF;YAClF,oEAAoE;YACpE,QAAQ,EACN,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,QAAQ,CAAC,QAAQ;gBACnB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC9D,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,OAAO,GAAe,EAAE,CAAA;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAe,CAAC,CAAC,CAAA;QAEjD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAQ;QAEvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAEpC,IAAI,KAAK,KAAK,IAAI;YAAE,SAAQ;QAE5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAA;QAEnC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;QAE7B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;YACzB,MAAM,EAAE;gBACN,IAAI,EAAE,mBAAmB;gBACzB,GAAG,EAAE,IAAI;aACV;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,KAAK,CAAC,UAAsB;IACnC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAE1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,UAAoD,CAAA;IAErF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;AAC9B,CAAC;AAED,2FAA2F;AAC3F,SAAS,OAAO,CAAC,UAAsB,EAAE,SAAqB;IAC5D,MAAM,UAAU,GAAe,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../source/extensions.configuration/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAQhC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC/E,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAI1C;oFACoF;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,+CAA+C,CAAA;AAEpE,MAAM,UAAU,UAAU,CACxB,SAAqB,EACrB,UAAU,GAAe,EAAE;IAE3B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,CAAA;IAE/C,UAAU,GAAG,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEvC,MAAM,SAAS,GAAc,EAAE,CAAA;IAE/B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE9C,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAElC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;QAErC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;IACrE,CAAC;IAED,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,QAAQ;QACd,KAAK;QACL,OAAO;QACP,UAAU,EAAE,UAAU,EAAE,CAAC,MAAM;QAC/B,SAAS;QACT,yEAAyE;QACzE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;QAC1B,SAAS,EAAE;YACT;gBACE,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;aACvD;SACF;KACF,CAAA;IAED,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;AAC5D,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,QAAQ,CAAC,SAAqB,EAAE,UAAU,GAAe,EAAE;IACzE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IAEzD,MAAM,MAAM,GAAW,EAAE,CAAA;IAEzB,KAAK,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEvC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG;YACnB,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,kFAAkF;YAClF,oEAAoE;YACpE,QAAQ,EACN,QAAQ,KAAK,SAAS;gBACpB,CAAC,CAAC,QAAQ,CAAC,QAAQ;gBACnB,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC;SAC9D,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,MAAM,OAAO,GAAe,EAAE,CAAA;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,KAAe,CAAC,CAAC,CAAA;QAEjD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAQ;QAEvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAEpC,IAAI,KAAK,KAAK,IAAI;YAAE,SAAQ;QAE5B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAA;QAEnC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;QAE7B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;YACzB,MAAM,EAAE;gBACN,IAAI,EAAE,mBAAmB;gBACzB,GAAG,EAAE,IAAI;aACV;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,KAAK,CAAC,UAAsB;IACnC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAE1C,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,UAAoD,CAAA;IAErF,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAA;AAC9B,CAAC;AAED,2FAA2F;AAC3F,SAAS,OAAO,CAAC,UAAsB,EAAE,SAAqB;IAC5D,MAAM,UAAU,GAAe,EAAE,CAAA;IAEjC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,CAAA;QACrD,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAEzE,MAAM,CAAC,EAAE,CACP,QAAQ,KAAK,SAAS,EACtB,cAAc,EAAE,qDAAqD,CACtE,CAAA;QAED,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAE/C,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;IACzB,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
@@ -3,6 +3,7 @@ export { components } from './components.js';
|
|
|
3
3
|
export { deployment, describe, image } from './deployment.js';
|
|
4
4
|
export { epoch } from './epoch.js';
|
|
5
5
|
export { context } from './context.js';
|
|
6
|
+
export { assertSecrets } from './secrets.js';
|
|
6
7
|
export * from './const.js';
|
|
7
8
|
export * as schemas from './schemas.js';
|
|
8
9
|
export type { Manifest } from './manifest.js';
|
|
@@ -3,6 +3,7 @@ export { components } from './components.js';
|
|
|
3
3
|
export { deployment, describe, image } from './deployment.js';
|
|
4
4
|
export { epoch } from './epoch.js';
|
|
5
5
|
export { context } from './context.js';
|
|
6
|
+
export { assertSecrets } from './secrets.js';
|
|
6
7
|
export * from './const.js';
|
|
7
8
|
export * as schemas from './schemas.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/extensions.configuration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/extensions.configuration/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,cAAc,YAAY,CAAA;AAC1B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { SECRET_RX } from './const.js';
|
|
3
|
+
/**
|
|
4
|
+
* A property declared `format: secret` is a `$NAME` reference, not a string.
|
|
5
|
+
*/
|
|
6
|
+
export function assertSecrets(schema, value, path = '') {
|
|
7
|
+
if (format(schema) === 'secret') {
|
|
8
|
+
if (value === undefined)
|
|
9
|
+
return;
|
|
10
|
+
assert.ok(typeof value === 'string' && SECRET_RX.test(value), `'${path || '.'}' is a secret and must be given as a $NAME reference.`);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (typeof value !== 'object' || value === null)
|
|
14
|
+
return;
|
|
15
|
+
const record = schema;
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
if (typeof record.items !== 'object' ||
|
|
18
|
+
record.items === null ||
|
|
19
|
+
Array.isArray(record.items))
|
|
20
|
+
return;
|
|
21
|
+
for (let i = 0; i < value.length; i++)
|
|
22
|
+
assertSecrets(record.items, value[i], join(path, String(i)));
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const properties = record.properties;
|
|
26
|
+
const additional = record.additionalProperties;
|
|
27
|
+
for (const [key, child] of Object.entries(value)) {
|
|
28
|
+
const name = key.split('@')[0];
|
|
29
|
+
const nested = properties?.[name] ??
|
|
30
|
+
(typeof additional === 'object' && additional !== null ? additional : undefined);
|
|
31
|
+
if (nested === undefined)
|
|
32
|
+
continue;
|
|
33
|
+
assertSecrets(nested, child, join(path, key));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function format(schema) {
|
|
37
|
+
return schema.format;
|
|
38
|
+
}
|
|
39
|
+
function join(path, key) {
|
|
40
|
+
return path === '' ? key : path + '.' + key;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../source/extensions.configuration/secrets.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,KAAc,EAAE,IAAI,GAAG,EAAE;IACrE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAM;QAE/B,MAAM,CAAC,EAAE,CACP,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAClD,IAAI,IAAI,IAAI,GAAG,uDAAuD,CACvE,CAAA;QAED,OAAM;IACR,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAM;IAEvD,MAAM,MAAM,GAAG,MAAiC,CAAA;IAEhD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IACE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAChC,MAAM,CAAC,KAAK,KAAK,IAAI;YACrB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAE3B,OAAM;QAER,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;YACnC,aAAa,CAAC,MAAM,CAAC,KAAe,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAExE,OAAM;IACR,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAgD,CAAA;IAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,oBAAoB,CAAA;IAE9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,MAAM,GACV,UAAU,EAAE,CAAC,IAAI,CAAC;YAClB,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QAElF,IAAI,MAAM,KAAK,SAAS;YAAE,SAAQ;QAElC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,MAAc;IAC5B,OAAQ,MAA8B,CAAC,MAAM,CAAA;AAC/C,CAAC;AAED,SAAS,IAAI,CAAC,IAAY,EAAE,GAAW;IACrC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,CAAA;AAC7C,CAAC"}
|