@toa.io/definitions 1.0.0-alpha.305 → 1.0.0-alpha.306

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.
Files changed (30) hide show
  1. package/digest/extensions.configuration.json +1 -1
  2. package/digest/extensions.exposition.json +1 -1
  3. package/digest/extensions.introspection.json +1 -1
  4. package/digest/extensions.realtime.json +1 -1
  5. package/package.json +3 -3
  6. package/schemas/extensions.introspection/annotation.cos.yaml +13 -2
  7. package/transpiled/extensions.introspection/annotation.d.ts +23 -20
  8. package/transpiled/extensions.introspection/annotation.js +20 -23
  9. package/transpiled/extensions.introspection/annotation.js.map +1 -1
  10. package/transpiled/extensions.introspection/components.js +17 -1
  11. package/transpiled/extensions.introspection/components.js.map +1 -1
  12. package/transpiled/extensions.introspection/const.d.ts +42 -6
  13. package/transpiled/extensions.introspection/const.js +40 -6
  14. package/transpiled/extensions.introspection/const.js.map +1 -1
  15. package/transpiled/extensions.introspection/deployment.d.ts +2 -2
  16. package/transpiled/extensions.introspection/deployment.js +19 -2
  17. package/transpiled/extensions.introspection/deployment.js.map +1 -1
  18. package/transpiled/extensions.introspection/manifest.d.ts +2 -1
  19. package/transpiled/extensions.introspection/manifest.js +3 -7
  20. package/transpiled/extensions.introspection/manifest.js.map +1 -1
  21. package/transpiled/extensions.introspection/schemas.d.ts +1 -2
  22. package/transpiled/extensions.introspection/schemas.js +0 -1
  23. package/transpiled/extensions.introspection/schemas.js.map +1 -1
  24. package/transpiled/index.d.ts +1 -0
  25. package/transpiled/index.js +1 -0
  26. package/transpiled/index.js.map +1 -1
  27. package/transpiled/map.d.ts +9 -0
  28. package/transpiled/map.js +10 -0
  29. package/transpiled/map.js.map +1 -0
  30. package/schemas/extensions.introspection/declaration.cos.yaml +0 -5
@@ -1 +1 @@
1
- [{"label":"introspection-edges","manifest":{"namespace":"introspection","name":"edges","entity":{"associated":true,"properties":{"src":{"description":"What caused the call — another operation, an event, or a service","type":"object","properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"},"event":{"type":"string"},"service":{"type":"string"}}},"dst":{"description":"What was called","type":"object","required":["namespace","component","operation"],"properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"}}},"sample":{"description":"The last call observed on this edge","type":"object","required":["at","outcome"],"properties":{"at":{"type":"integer"},"input":{},"outcome":{"type":"string"}}},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["src","dst","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"}],"custom":false},"operations":{"merge":{"concurrency":"retry","input":{"type":"object","properties":{"edges":{"description":"What each replica observed since its last flush, by edge id","type":"object","additionalProperties":{"type":"object","properties":{"src":{"description":"What caused the call — another operation, an event, or a service","type":"object","properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"},"event":{"type":"string"},"service":{"type":"string"}}},"dst":{"description":"What was called","type":"object","required":["namespace","component","operation"],"properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"}}},"sample":{"description":"The last call observed on this edge","type":"object","required":["at","outcome"],"properties":{"at":{"type":"integer"},"input":{},"outcome":{"type":"string"}}}},"required":["src","dst"]}}},"required":["edges"]},"type":"transition","scope":"objects","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.introspection/components/introspection.edges","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":false,"@toa.io/extensions.exposition":{"routes":[{"path":"/introspection/edges","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"observe","query":{},"paged":false,"namespace":"introspection","component":"edges"},"directives":[]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"enumerate","query":{"limit":{"value":10000,"range":[1,10000]}},"paged":true,"namespace":"introspection","component":"edges"},"directives":[]}],"directives":[{"family":"auth","name":"role","value":"system:introspection"},{"family":"io","name":"output","value":true},{"family":"cache","name":"control","value":"max-age=60, public"}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"a9bac400","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":"introspection-nodes","manifest":{"namespace":"introspection","name":"nodes","entity":{"associated":true,"properties":{"version":{"type":"string"},"entity":{},"operations":{},"events":{},"receivers":{},"extensions":{},"namespace":{"type":"string"},"component":{"type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["namespace","component","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"}],"custom":false},"operations":{"merge":{"concurrency":"retry","input":{"type":"object","properties":{"nodes":{"description":"What each announced component describes of itself, by its id","type":"object","additionalProperties":{"type":"object","properties":{"version":{"type":"string"},"entity":{},"operations":{},"events":{},"receivers":{},"extensions":{},"namespace":{"type":"string"},"component":{"type":"string"}},"required":["namespace","component"]}}},"required":["nodes"]},"type":"transition","scope":"objects","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.introspection/components/introspection.nodes","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":false,"@toa.io/extensions.exposition":{"routes":[{"path":"/introspection/nodes","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"observe","query":{},"paged":false,"namespace":"introspection","component":"nodes"},"directives":[]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"enumerate","query":{"limit":{"value":1000,"range":[1,1000]}},"paged":true,"namespace":"introspection","component":"nodes"},"directives":[]}],"directives":[{"family":"auth","name":"role","value":"system:introspection"},{"family":"io","name":"output","value":true},{"family":"cache","name":"control","value":"max-age=60, public"}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"a85adfe3","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
+ [{"label":"introspection-edges","manifest":{"namespace":"introspection","name":"edges","entity":{"associated":true,"properties":{"src":{"description":"What caused the call — another operation, an event, or a service","type":"object","properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"},"event":{"type":"string"},"service":{"type":"string"}}},"dst":{"description":"What was called","type":"object","required":["namespace","component","operation"],"properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"}}},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["src","dst","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"}],"custom":false},"operations":{"merge":{"concurrency":"retry","input":{"type":"object","properties":{"edges":{"description":"What each replica observed since its last flush, by edge id","type":"object","additionalProperties":{"type":"object","properties":{"src":{"description":"What caused the call — another operation, an event, or a service","type":"object","properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"},"event":{"type":"string"},"service":{"type":"string"}}},"dst":{"description":"What was called","type":"object","required":["namespace","component","operation"],"properties":{"namespace":{"type":"string"},"component":{"type":"string"},"operation":{"type":"string"}}}},"required":["src","dst"]}}},"required":["edges"]},"type":"transition","scope":"objects","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.introspection/components/introspection.edges","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":false,"@toa.io/extensions.exposition":{"routes":[{"path":"/introspection/edges","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"observe","query":{},"paged":false,"namespace":"introspection","component":"edges"},"directives":[]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"enumerate","query":{"limit":{"value":10000,"range":[1,10000]}},"paged":true,"namespace":"introspection","component":"edges"},"directives":[]}],"directives":[{"family":"auth","name":"role","value":"system:introspection"},{"family":"io","name":"output","value":true},{"family":"cache","name":"control","value":"max-age=60, public"}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"fab9050a","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":"introspection-nodes","manifest":{"namespace":"introspection","name":"nodes","entity":{"associated":true,"properties":{"version":{"type":"string"},"entity":{},"operations":{},"events":{},"receivers":{},"extensions":{},"namespace":{"type":"string"},"component":{"type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["namespace","component","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"}],"custom":false},"operations":{"merge":{"concurrency":"retry","input":{"type":"object","properties":{"nodes":{"description":"What each announced component describes of itself, by its id","type":"object","additionalProperties":{"type":"object","properties":{"version":{"type":"string"},"entity":{},"operations":{},"events":{},"receivers":{},"extensions":{},"namespace":{"type":"string"},"component":{"type":"string"}},"required":["namespace","component"]}}},"required":["nodes"]},"type":"transition","scope":"objects","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.introspection/components/introspection.nodes","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":false,"@toa.io/extensions.exposition":{"routes":[{"path":"/introspection/nodes","node":{"routes":[{"path":"/","node":{"routes":[{"path":"/:id","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"observe","query":{},"paged":false,"namespace":"introspection","component":"nodes"},"directives":[]}],"directives":[]}}],"methods":[{"verb":"GET","mapping":{"endpoint":"enumerate","query":{"limit":{"value":1000,"range":[1,1000]}},"paged":true,"namespace":"introspection","component":"nodes"},"directives":[]}],"directives":[{"family":"auth","name":"role","value":"system:introspection"},{"family":"io","name":"output","value":true},{"family":"cache","name":"control","value":"max-age=60, public"}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"9885a051","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":"introspection-signals","manifest":{"namespace":"introspection","name":"signals","entity":{"properties":{"type":{"description":"What the processes are being told to do","type":"string","enum":["halt","stop"]},"seconds":{"description":"How long every process stays disconnected before it builds itself again","type":"integer","minimum":0},"quiescence":{"description":"How long the deployment is given to go quiet before the map is read","type":"integer","minimum":0},"grace":{"description":"How long a process that has found the deployment busy waits before it leaves","type":"integer","minimum":2,"maximum":120},"signal":{"description":"The halt a stop answers","type":"string"},"id":{"type":"string","pattern":"^[a-fA-F0-9]{32}$"},"VERSION":{"type":"integer","minimum":0},"CREATED":{"type":"integer","format":"epoch-millis"},"UPDATED":{"type":"integer","format":"epoch-millis"},"DELETED":{"type":"integer","format":"epoch-millis","nullable":true},"REGION":{"type":"integer","minimum":0}},"required":["type","seconds","quiescence","id","VERSION","CREATED","UPDATED","DELETED","REGION"],"storage":"@toa.io/storages.mongodb","migrations":[{"id":"system:0000-property-names","steps":[{"update":{"filter":{"_version":{"$exists":true}},"update":{"$rename":{"_version":"VERSION","_created":"CREATED","_updated":"UPDATED","_deleted":"DELETED"}}}}],"prototype":"system"},{"id":"system:0001-epoch-millis","steps":[{"update":{"filter":{"CREATED":{"$type":"number"}},"update":[{"$set":{"CREATED":{"$toDate":{"$toLong":"$CREATED"}},"UPDATED":{"$toDate":{"$toLong":"$UPDATED"}},"DELETED":{"$toDate":{"$toLong":"$DELETED"}}}}]}}],"prototype":"system"},{"id":"system:0002-region","steps":[{"update":{"filter":{"REGION":{"$exists":false}},"update":{"$set":{"REGION":0}}}}],"prototype":"system"}],"associated":false,"custom":false},"operations":{"create":{"description":"Tell every process of this deployment to do something.","query":false,"forward":"transit","input":{"type":"object","properties":{"type":{"type":"string"},"seconds":{"type":"integer"},"quiescence":{"type":"integer"},"grace":{"type":"integer"},"signal":{"type":"string"}},"required":["type","seconds","quiescence"]},"concurrency":"retry","type":"transition","scope":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"transit":{"concurrency":"retry","input":{"type":"object","properties":{"type":{"type":"string"},"seconds":{"type":"integer"},"quiescence":{"type":"integer"},"grace":{"type":"integer"},"signal":{"type":"string"}},"required":["type","seconds","quiescence"]},"type":"transition","scope":"object","output":{},"bindings":["@toa.io/bindings.amqp"]},"configuration":{"description":"What a signal of this deployment may ask for, in seconds.","output":{"type":"object","properties":{"halt":{"type":"object","properties":{"duration":{"type":"array","items":{"type":"integer"},"minItems":2,"maxItems":2},"quiescence":{"type":"array","items":{"type":"integer"},"minItems":2,"maxItems":2}},"required":["duration","quiescence"]}}},"type":"computation","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.introspection/components/introspection.signals","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":false,"@toa.io/extensions.exposition":{"routes":[{"path":"/introspection/signals","node":{"routes":[{"path":"/","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"configuration","query":null,"paged":false,"namespace":"introspection","component":"signals"},"directives":[]},{"verb":"POST","mapping":{"endpoint":"create","query":null,"paged":false,"namespace":"introspection","component":"signals"},"directives":[]}],"directives":[{"family":"auth","name":"role","value":"system:halt"},{"family":"io","name":"output","value":true}]}}],"methods":[],"directives":[],"isolated":true}}],"methods":[],"directives":[]}},"version":"c927e495","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":"realtime-streams","manifest":{"namespace":"realtime","name":"streams","operations":{"create":{"input":{"properties":{"key":{"type":"string"},"token":{"type":"string"}},"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"push":{"output":{"type":"null"},"bindings":[],"input":{"properties":{"data":{},"key":{"type":"string"},"event":{"type":"string"}},"type":"object","required":["key","event"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false}},"path":"@toa.io/extensions.realtime/components/realtime.streams","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","prototype":null,"extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/realtime/streams","node":{"routes":[{"path":"/:key","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"create","query":null,"paged":false,"namespace":"realtime","component":"streams"},"directives":[{"family":"io","name":"readonly","value":false}]}],"directives":[{"family":"auth","name":"id","value":"key"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"properties":{"maxlen":{"type":"number"},"expire":{"type":"number"}},"type":"object","required":["maxlen","expire"]},"defaults":{"maxlen":1000,"expire":300}},"@toa.io/extensions.state":null,"@toa.io/extensions.stash":null},"version":"5bb51c26"}}]
1
+ [{"label":"realtime-streams","manifest":{"namespace":"realtime","name":"streams","operations":{"create":{"input":{"properties":{"key":{"type":"string"},"token":{"type":"string"}},"type":"object"},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false,"output":{},"bindings":["@toa.io/bindings.amqp"]},"push":{"output":{"type":"null"},"bindings":[],"input":{"properties":{"data":{},"key":{"type":"string"},"event":{"type":"string"}},"type":"object","required":["key","event"]},"type":"effect","scope":"none","bridge":"@toa.io/bridges.node","query":false}},"path":"@toa.io/extensions.realtime/components/realtime.streams","bindings":["@toa.io/bindings.amqp"],"bridge":"@toa.io/bridges.node","prototype":null,"extensions":{"@toa.io/extensions.telemetry":{},"@toa.io/extensions.fetch":null,"@toa.io/extensions.introspection":{},"@toa.io/extensions.exposition":{"routes":[{"path":"/realtime/streams","node":{"routes":[{"path":"/:key","node":{"routes":[],"methods":[{"verb":"GET","mapping":{"endpoint":"create","query":null,"paged":false,"namespace":"realtime","component":"streams"},"directives":[{"family":"io","name":"readonly","value":false}]}],"directives":[{"family":"auth","name":"id","value":"key"}]}}],"methods":[],"directives":[]}}],"methods":[],"directives":[]},"@toa.io/extensions.configuration":{"schema":{"properties":{"maxlen":{"type":"number"},"expire":{"type":"number"}},"type":"object","required":["maxlen","expire"]},"defaults":{"maxlen":1000,"expire":300}},"@toa.io/extensions.state":null,"@toa.io/extensions.stash":null},"version":"e959f550"}}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toa.io/definitions",
3
- "version": "1.0.0-alpha.305",
3
+ "version": "1.0.0-alpha.306",
4
4
  "type": "module",
5
5
  "description": "What Toa packages declare, read without running them",
6
6
  "author": "temich <tema.gurtovoy@gmail.com>",
@@ -44,7 +44,7 @@
44
44
  "./*": "./transpiled/*/index.js"
45
45
  },
46
46
  "devDependencies": {
47
- "@toa.io/core": "1.0.0-alpha.305",
47
+ "@toa.io/core": "1.0.0-alpha.306",
48
48
  "openspan": "1.0.0-alpha.305",
49
49
  "oxc-parser": "0.149.0"
50
50
  },
@@ -56,5 +56,5 @@
56
56
  "optional": true
57
57
  }
58
58
  },
59
- "gitHead": "6a28476303826e2484cc2ea6306efee6f19fb594"
59
+ "gitHead": "0693d180a8053a7d07dca879dac2a3c4784d6d45"
60
60
  }
@@ -1,7 +1,5 @@
1
1
  # context.toa.yaml introspection annotation
2
2
  properties:
3
- samples:
4
- type: boolean
5
3
  interval:
6
4
  type: integer
7
5
  minimum: 1
@@ -10,6 +8,19 @@ properties:
10
8
  minimum: 1
11
9
  ui:
12
10
  type: boolean
11
+ halt:
12
+ # `true` takes what the runtime holds a halt to; a pair of seconds narrows it
13
+ type: [boolean, object]
14
+ properties:
15
+ duration: &bounds
16
+ type: array
17
+ items:
18
+ type: integer
19
+ minimum: 0
20
+ minItems: 2
21
+ maxItems: 2
22
+ quiescence: *bounds
23
+ additionalProperties: false
13
24
  resources:
14
25
  # `null` deploys the service without any, which every deployment has to state one way
15
26
  # or the other — see `migrations/262.md`.
@@ -1,40 +1,43 @@
1
+ import type { Bounds } from './const.ts';
1
2
  import type { Resources } from '@toa.io/operations';
2
3
  /** `context.toa.yaml` */
3
4
  export type Annotation = false | {
4
- /** Capture real payloads. Off by default: this is production data. */
5
- samples?: boolean;
6
5
  /** Flush period, seconds. */
7
6
  interval?: number;
8
7
  /** Flush as soon as this many distinct edges are buffered. */
9
8
  threshold?: number;
10
9
  /** Publish the UI. On by default. */
11
10
  ui?: boolean;
11
+ /**
12
+ * Accept halt signals. Off by default: a stop button for the whole deployment,
13
+ * reachable over HTTP, is a thing an application asks for rather than inherits.
14
+ *
15
+ * `true` takes what the runtime holds a halt to; an object narrows it, because how long
16
+ * a deployment needs to drain and how long it can afford to be down are its own.
17
+ */
18
+ halt?: boolean | Halt;
12
19
  resources?: Resources;
13
20
  };
14
- /** `manifest.toa.yaml` */
15
- export type Declaration = false | {
16
- samples?: boolean;
17
- };
21
+ /** What a halt of this deployment may ask for, seconds. */
22
+ export interface Halt {
23
+ /** how long it may stay down */
24
+ duration?: Bounds;
25
+ /** how long it may be given to go quiet before the map is read */
26
+ quiescence?: Bounds;
27
+ }
28
+ /** `manifest.toa.yaml`: a component is on the map, or it declares itself off it. */
29
+ export type Declaration = false | Record<string, never>;
18
30
  /** What `deployment()` encodes into the environment. */
19
31
  export interface Options {
20
- samples: boolean;
21
32
  interval: number;
22
33
  threshold: number;
23
34
  ui: boolean;
35
+ halt: boolean;
36
+ /** what a halt may ask to stay down for */
37
+ duration: Bounds;
38
+ /** what it may ask to go quiet for */
39
+ quiescence: Bounds;
24
40
  }
25
- /** The effective per-component decision. */
26
- export interface Settings {
27
- enabled: boolean;
28
- samples: boolean;
29
- }
30
- export declare const DISABLED: Settings;
31
41
  export declare function options(annotation?: Annotation): Options;
32
42
  /** Reads what `deployment()` has put into the environment. */
33
43
  export declare function environment(): Options | null;
34
- export declare function component(declaration: Declaration | null | undefined): Declaration;
35
- /**
36
- * Both levels must agree, and either can veto: the context is the environment
37
- * ceiling, the manifest is the component's own call. A component handling
38
- * personal data opts out for good, and no context flag overrides that.
39
- */
40
- export declare function settings(namespace: string, declaration: Declaration, opts: Options | null): Settings;
@@ -1,15 +1,31 @@
1
- import { DEFAULT_INTERVAL, DEFAULT_THRESHOLD, DENIED, ENV } from './const.js';
1
+ import { DEFAULT_INTERVAL, DEFAULT_THRESHOLD, DURATION, ENV, QUIESCENCE } from './const.js';
2
2
  import { environment as variables } from '@toa.io/generic';
3
- export const DISABLED = { enabled: false, samples: false };
4
3
  export function options(annotation) {
5
4
  const declaration = annotation === undefined || annotation === false ? {} : annotation;
5
+ const halt = declaration.halt === undefined || declaration.halt === false ? {} : declaration.halt;
6
6
  return {
7
- samples: declaration.samples === true,
8
7
  interval: declaration.interval ?? DEFAULT_INTERVAL,
9
8
  threshold: declaration.threshold ?? DEFAULT_THRESHOLD,
10
- ui: declaration.ui !== false
9
+ ui: declaration.ui !== false,
10
+ halt: declaration.halt !== undefined && declaration.halt !== false,
11
+ duration: bounds(halt === true ? undefined : halt.duration, DURATION, 'duration'),
12
+ quiescence: bounds(halt === true ? undefined : halt.quiescence, QUIESCENCE, 'quiescence')
11
13
  };
12
14
  }
15
+ /**
16
+ * What the deployment says a halt may ask for, or what the runtime holds one to. Checked here
17
+ * rather than in the schema, which can say that a pair is two non-negative integers and cannot
18
+ * say that the first is the smaller.
19
+ */
20
+ function bounds(declared, fallback, name) {
21
+ if (declared === undefined)
22
+ return fallback;
23
+ const [min, max] = declared;
24
+ if (min >= max)
25
+ throw new Error(`Invalid introspection annotation: 'halt.${name}' is [${min}, ${max}], ` +
26
+ 'and the first of a pair is the smaller');
27
+ return [min, max];
28
+ }
13
29
  /** Reads what `deployment()` has put into the environment. */
14
30
  export function environment() {
15
31
  const value = variables.get(ENV);
@@ -17,23 +33,4 @@ export function environment() {
17
33
  return null;
18
34
  return JSON.parse(value);
19
35
  }
20
- export function component(declaration) {
21
- if (declaration === false)
22
- return false;
23
- // predefined extensions arrive as null for components that say nothing
24
- if (declaration === null || declaration === undefined)
25
- return {};
26
- return declaration.samples === undefined ? {} : { samples: declaration.samples };
27
- }
28
- /**
29
- * Both levels must agree, and either can veto: the context is the environment
30
- * ceiling, the manifest is the component's own call. A component handling
31
- * personal data opts out for good, and no context flag overrides that.
32
- */
33
- export function settings(namespace, declaration, opts) {
34
- if (opts === null || declaration === false)
35
- return DISABLED;
36
- const samples = opts.samples && declaration.samples !== false && !DENIED.has(namespace);
37
- return { enabled: true, samples };
38
- }
39
36
  //# sourceMappingURL=annotation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"annotation.js","sourceRoot":"","sources":["../../source/extensions.introspection/annotation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAuC1D,MAAM,CAAC,MAAM,QAAQ,GAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAEpE,MAAM,UAAU,OAAO,CAAC,UAAuB;IAC7C,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAA;IAEtF,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO,KAAK,IAAI;QACrC,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,gBAAgB;QAClD,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,iBAAiB;QACrD,EAAE,EAAE,WAAW,CAAC,EAAE,KAAK,KAAK;KAC7B,CAAA;AACH,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEhC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAEpC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,WAA2C;IACnE,IAAI,WAAW,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAEvC,uEAAuE;IACvE,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,EAAE,CAAA;IAEhE,OAAO,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAA;AAClF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CACtB,SAAiB,EACjB,WAAwB,EACxB,IAAoB;IAEpB,IAAI,IAAI,KAAK,IAAI,IAAI,WAAW,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAA;IAE3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAEvF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"annotation.js","sourceRoot":"","sources":["../../source/extensions.introspection/annotation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,QAAQ,EACR,GAAG,EACH,UAAU,EACX,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,WAAW,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAgD1D,MAAM,UAAU,OAAO,CAAC,UAAuB;IAC7C,MAAM,WAAW,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAA;IACtF,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAA;IAEjG,OAAO;QACL,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,gBAAgB;QAClD,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,iBAAiB;QACrD,EAAE,EAAE,WAAW,CAAC,EAAE,KAAK,KAAK;QAC5B,IAAI,EAAE,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,KAAK;QAClE,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;QACjF,UAAU,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,CAAC;KAC1F,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,MAAM,CAAC,QAA4B,EAAE,QAAgB,EAAE,IAAY;IAC1E,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IAE3C,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAA;IAE3B,IAAI,GAAG,IAAI,GAAG;QACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,SAAS,GAAG,KAAK,GAAG,KAAK;YACtF,wCAAwC,CAAC,CAAA;IAE7C,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACnB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,WAAW;IACzB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAEhC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAA;IAEpC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAY,CAAA;AACrC,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { components as digest } from '../digest/read.js';
2
+ import { NAMESPACE, SIGNALS } from './const.js';
3
+ const SIGNALS_LABEL = `${NAMESPACE}-${SIGNALS}`;
2
4
  /**
3
5
  * The extension is predefined, so an application that turns introspection off
4
6
  * must not end up with the explorer components — nor with the exposition
@@ -7,6 +9,20 @@ import { components as digest } from '../digest/read.js';
7
9
  export function components(annotation) {
8
10
  if (annotation === false)
9
11
  return { labels: [], manifests: [] };
10
- return digest('extensions.introspection');
12
+ const components = digest('extensions.introspection');
13
+ if (annotation !== undefined && annotation.halt === true)
14
+ return components;
15
+ /*
16
+ * A deployment that has not asked for halts has nothing to post one to. What the component
17
+ * is reachable over is HTTP, and what it does is stop the whole deployment, so it is not a
18
+ * thing to deploy and leave unlistened to.
19
+ */
20
+ const index = components.labels.indexOf(SIGNALS_LABEL);
21
+ if (index === -1)
22
+ return components;
23
+ return {
24
+ labels: components.labels.filter((_, n) => n !== index),
25
+ manifests: components.manifests.filter((_, n) => n !== index)
26
+ };
11
27
  }
12
28
  //# sourceMappingURL=components.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sourceRoot":"","sources":["../../source/extensions.introspection/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,MAAM,EAAmB,MAAM,mBAAmB,CAAA;AAGzE;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,UAAuB;IAChD,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;IAE9D,OAAO,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"components.js","sourceRoot":"","sources":["../../source/extensions.introspection/components.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,MAAM,EAAmB,MAAM,mBAAmB,CAAA;AAEzE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,aAAa,GAAG,GAAG,SAAS,IAAI,OAAO,EAAE,CAAA;AAE/C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,UAAuB;IAChD,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAA;IAE9D,MAAM,UAAU,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;IAErD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,UAAU,CAAA;IAE3E;;;;OAIG;IACH,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;IAEtD,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,UAAU,CAAA;IAEnC,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;QACvD,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC;KAC9D,CAAA;AACH,CAAC"}
@@ -22,9 +22,45 @@ export declare const ANNOUNCE_INTERVAL = 1800000;
22
22
  * can hold must be bounded regardless of what peers send.
23
23
  */
24
24
  export declare const MAX_EDGES = 4096;
25
- /** Never capture samples for these namespaces, whatever the annotation says. */
26
- export declare const DENIED: Set<string>;
27
- /** Keys never stored in a sample, even when sampling is on. */
28
- export declare const REDACTED: RegExp;
29
- /** Serialized size cap of a single sample. */
30
- export declare const SAMPLE_LIMIT = 4096;
25
+ /** The signals component, and the event a process halts on. */
26
+ export declare const SIGNALS = "signals";
27
+ export declare const SIGNAL = "introspection.signals.created";
28
+ /**
29
+ * How long a halt may be asked to stay down for, seconds, where the deployment says nothing.
30
+ *
31
+ * The floor is what a teardown costs — a gateway drains for ten seconds and the broker shuts
32
+ * down over about five — so below it a halt is mostly the halting. The ceiling is because a
33
+ * halted deployment looks well to everything watching it, so one that overran would be an
34
+ * outage with nothing reporting one. A deployment that knows better says so in its annotation.
35
+ */
36
+ export declare const DURATION: Bounds;
37
+ /**
38
+ * How long the deployment may be given to go quiet before the map is read, seconds, where the
39
+ * deployment says nothing.
40
+ *
41
+ * It is what a drain costs and nothing else: nothing is being added to the queues, so what is
42
+ * in them is the backlog of the moment the signal landed. A deployment given less than it
43
+ * needs is not stopped — it is found busy and the halt is called off.
44
+ */
45
+ export declare const QUIESCENCE: Bounds;
46
+ /** What a halt may ask for: `[min, max]`, seconds. */
47
+ export type Bounds = [number, number];
48
+ /**
49
+ * How long a process that has found the deployment busy waits before it leaves the halt.
50
+ *
51
+ * Someone is always last to catch on. A process about to give up may be a beat behind one that
52
+ * has just seen stillness and called the stop, and if it left on its own timing the deployment
53
+ * would end half down. So it waits this out first, listening, and leaves only if no stop
54
+ * arrived.
55
+ */
56
+ export declare const GRACE: Bounds;
57
+ export declare const DEFAULT_GRACE = 10;
58
+ /**
59
+ * What a call observed just before the quiesce costs to become a row anyone can read: the
60
+ * flush that carries it, the queue it is published to, and the merge that writes it.
61
+ */
62
+ export declare const HALT_GAP = 3;
63
+ /** How often a quiesced process flushes what it observed. See `Reporter`. */
64
+ export declare const QUIESCE_INTERVAL = 1;
65
+ /** What a check of the map may take before the process treats it as unanswered. */
66
+ export declare const CHECK_TIMEOUT = 5000;
@@ -26,10 +26,44 @@ export const ANNOUNCE_INTERVAL = 1_800_000;
26
26
  * can hold must be bounded regardless of what peers send.
27
27
  */
28
28
  export const MAX_EDGES = 4096;
29
- /** Never capture samples for these namespaces, whatever the annotation says. */
30
- export const DENIED = new Set(['identity', 'introspection']);
31
- /** Keys never stored in a sample, even when sampling is on. */
32
- export const REDACTED = /^(password|secret|token|credentials?|key|authorization|cookie)$/i;
33
- /** Serialized size cap of a single sample. */
34
- export const SAMPLE_LIMIT = 4096;
29
+ /** The signals component, and the event a process halts on. */
30
+ export const SIGNALS = 'signals';
31
+ export const SIGNAL = `${NAMESPACE}.${SIGNALS}.created`;
32
+ /**
33
+ * How long a halt may be asked to stay down for, seconds, where the deployment says nothing.
34
+ *
35
+ * The floor is what a teardown costs — a gateway drains for ten seconds and the broker shuts
36
+ * down over about five — so below it a halt is mostly the halting. The ceiling is because a
37
+ * halted deployment looks well to everything watching it, so one that overran would be an
38
+ * outage with nothing reporting one. A deployment that knows better says so in its annotation.
39
+ */
40
+ export const DURATION = [30, 3600];
41
+ /**
42
+ * How long the deployment may be given to go quiet before the map is read, seconds, where the
43
+ * deployment says nothing.
44
+ *
45
+ * It is what a drain costs and nothing else: nothing is being added to the queues, so what is
46
+ * in them is the backlog of the moment the signal landed. A deployment given less than it
47
+ * needs is not stopped — it is found busy and the halt is called off.
48
+ */
49
+ export const QUIESCENCE = [30, 1800];
50
+ /**
51
+ * How long a process that has found the deployment busy waits before it leaves the halt.
52
+ *
53
+ * Someone is always last to catch on. A process about to give up may be a beat behind one that
54
+ * has just seen stillness and called the stop, and if it left on its own timing the deployment
55
+ * would end half down. So it waits this out first, listening, and leaves only if no stop
56
+ * arrived.
57
+ */
58
+ export const GRACE = [2, 120];
59
+ export const DEFAULT_GRACE = 10;
60
+ /**
61
+ * What a call observed just before the quiesce costs to become a row anyone can read: the
62
+ * flush that carries it, the queue it is published to, and the merge that writes it.
63
+ */
64
+ export const HALT_GAP = 3;
65
+ /** How often a quiesced process flushes what it observed. See `Reporter`. */
66
+ export const QUIESCE_INTERVAL = 1;
67
+ /** What a check of the map may take before the process treats it as unanswered. */
68
+ export const CHECK_TIMEOUT = 5000;
35
69
  //# sourceMappingURL=const.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"const.js","sourceRoot":"","sources":["../../source/extensions.introspection/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,CAAC,MAAM,EAAE,GAAG,eAAe,CAAA;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAA;AAExC,MAAM,CAAC,MAAM,GAAG,GAAG,mBAAmB,CAAA;AAEtC,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAE5B,sFAAsF;AACtF,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAA;AACxC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,2BAA2B,CAAA;AACtD,MAAM,UAAU,MAAM;IACpB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAE1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAErC,+FAA+F;AAC/F,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA;AAE7B,gFAAgF;AAChF,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAA;AAE5D,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,kEAAkE,CAAA;AAE1F,8CAA8C;AAC9C,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA"}
1
+ {"version":3,"file":"const.js","sourceRoot":"","sources":["../../source/extensions.introspection/const.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE7C,MAAM,CAAC,MAAM,EAAE,GAAG,eAAe,CAAA;AACjC,MAAM,CAAC,MAAM,SAAS,GAAG,eAAe,CAAA;AAExC,MAAM,CAAC,MAAM,GAAG,GAAG,mBAAmB,CAAA;AAEtC,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAC5B,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAA;AAE5B,sFAAsF;AACtF,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAA;AACxC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAA;AAE3B;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,2BAA2B,CAAA;AACtD,MAAM,UAAU,MAAM;IACpB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAE1C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAA;AACnC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAA;AAErC,+FAA+F;AAC/F,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAE1C;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAA;AAE7B,+DAA+D;AAC/D,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAA;AAChC,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,OAAO,UAAU,CAAA;AAEvD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AAE1C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;AAK5C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAW,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAA;AAE/B;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAA;AAEzB,6EAA6E;AAC7E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAA;AAEjC,mFAAmF;AACnF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAA"}
@@ -1,4 +1,4 @@
1
- import type { Annotation } from './annotation.ts';
1
+ import type { Annotation, Declaration } from './annotation.ts';
2
2
  import type { Dependency, Instances } from '@toa.io/operations';
3
3
  /** Where Toa's release publishes this service's image. An application takes it
4
4
  * instead of building one when its context says `registry.services: published`. */
@@ -11,4 +11,4 @@ export declare const standalone = true;
11
11
  * with the service — never on its own, or tasks would pile up in a queue
12
12
  * nothing consumes.
13
13
  */
14
- export declare function deployment(_: Instances<unknown>, annotation?: Annotation): Dependency;
14
+ export declare function deployment(instances: Instances<Declaration>, annotation?: Annotation): Dependency;
@@ -1,7 +1,7 @@
1
1
  import { options } from './annotation.js';
2
2
  import { components } from './components.js';
3
3
  import { version } from '../version.js';
4
- import { ENV, UI_PATH, UI_PORT } from './const.js';
4
+ import { ENV, NAMESPACE, UI_PATH, UI_PORT } from './const.js';
5
5
  import * as schemas from './schemas.js';
6
6
  /** Where Toa's release publishes this service's image. An application takes it
7
7
  * instead of building one when its context says `registry.services: published`. */
@@ -14,12 +14,14 @@ export const standalone = true;
14
14
  * with the service — never on its own, or tasks would pile up in a queue
15
15
  * nothing consumes.
16
16
  */
17
- export function deployment(_, annotation) {
17
+ export function deployment(instances, annotation) {
18
18
  if (annotation === false)
19
19
  return {};
20
20
  if (annotation !== undefined)
21
21
  schemas.annotation.validate(annotation);
22
22
  const opts = options(annotation);
23
+ if (opts.halt)
24
+ described(instances);
23
25
  const service = {
24
26
  group: 'introspection',
25
27
  name: 'explorer',
@@ -38,4 +40,19 @@ export function deployment(_, annotation) {
38
40
  variables: { global: [{ name: ENV, value: JSON.stringify(opts) }] }
39
41
  };
40
42
  }
43
+ /**
44
+ * A halt is decided by reading the map, so a component the map does not describe could be
45
+ * called while the deployment is being declared still. With halts on, a component may be in
46
+ * the map or opted out of it, and not both — it is told to choose rather than left with a
47
+ * guarantee that quietly does not hold.
48
+ */
49
+ function described(instances) {
50
+ const opted = instances
51
+ .filter(({ locator, manifest }) => manifest === false && locator.namespace !== NAMESPACE)
52
+ .map(({ locator }) => locator.id);
53
+ if (opted.length === 0)
54
+ return;
55
+ throw new Error(`Components declaring 'introspection: false' cannot be deployed with ` +
56
+ `'introspection.halt': ${opted.join(', ')}`);
57
+ }
41
58
  //# sourceMappingURL=deployment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../source/extensions.introspection/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAClD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAIvC;oFACoF;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,iDAAiD,CAAA;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA;AAE9B;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,CAAqB,EAAE,UAAuB;IACvE,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,EAAE,CAAA;IAEnC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAErE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAEhC,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,UAAU;QAChB,KAAK;QACL,OAAO;QACP,UAAU,EAAE,UAAU,EAAE,CAAC,MAAM;QAC/B,SAAS,EAAE,UAAU,EAAE,SAAS;QAChC,SAAS,EAAE,EAAE;KACd,CAAA;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;QACtB,OAAO,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACrC,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;KACpE,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../source/extensions.introspection/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAIvC;oFACoF;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,iDAAiD,CAAA;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAA;AAE9B;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CACxB,SAAiC,EACjC,UAAuB;IAEvB,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,EAAE,CAAA;IAEnC,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAErE,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IAEhC,IAAI,IAAI,CAAC,IAAI;QAAE,SAAS,CAAC,SAAS,CAAC,CAAA;IAEnC,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,UAAU;QAChB,KAAK;QACL,OAAO;QACP,UAAU,EAAE,UAAU,EAAE,CAAC,MAAM;QAC/B,SAAS,EAAE,UAAU,EAAE,SAAS;QAChC,SAAS,EAAE,EAAE;KACd,CAAA;IAED,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,GAAG,OAAO,CAAA;QACtB,OAAO,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IACrC,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,CAAC,OAAO,CAAC;QACnB,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;KACpE,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,SAAS,CAAC,SAAiC;IAClD,MAAM,KAAK,GAAG,SAAS;SACpB,MAAM,CACL,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,KAAK,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CACjF;SACA,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAEnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAM;IAE9B,MAAM,IAAI,KAAK,CACb,sEAAsE;QACpE,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC9C,CAAA;AACH,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { Declaration } from './annotation.ts';
2
2
  /**
3
- * The component level of the annotation.
3
+ * The component level of the annotation. A component is on the map, or it says
4
+ * `introspection: false`, and there is nothing else for it to declare.
4
5
  *
5
6
  * The extension is predefined, so most components say nothing and the
6
7
  * declaration arrives as `null` — which still has to produce a value,
@@ -1,16 +1,12 @@
1
- import { component } from './annotation.js';
2
- import * as schemas from './schemas.js';
3
1
  /**
4
- * The component level of the annotation.
2
+ * The component level of the annotation. A component is on the map, or it says
3
+ * `introspection: false`, and there is nothing else for it to declare.
5
4
  *
6
5
  * The extension is predefined, so most components say nothing and the
7
6
  * declaration arrives as `null` — which still has to produce a value,
8
7
  * or norm rejects the extension.
9
8
  */
10
9
  export function manifest(declaration) {
11
- const normalized = component(declaration);
12
- if (normalized !== false)
13
- schemas.declaration.validate(normalized);
14
- return normalized;
10
+ return declaration === false ? false : {};
15
11
  }
16
12
  //# sourceMappingURL=manifest.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../source/extensions.introspection/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAGvC;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,WAA2C;IAClE,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;IAEzC,IAAI,UAAU,KAAK,KAAK;QAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAElE,OAAO,UAAU,CAAA;AACnB,CAAC"}
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../source/extensions.introspection/manifest.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,WAA2C;IAClE,OAAO,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;AAC3C,CAAC"}
@@ -1,4 +1,3 @@
1
1
  import type { Schema } from '@toa.io/schemas';
2
- import type { Annotation, Declaration } from './annotation.ts';
2
+ import type { Annotation } from './annotation.ts';
3
3
  export declare const annotation: Schema<Exclude<Annotation, false>>;
4
- export declare const declaration: Schema<Exclude<Declaration, false>>;
@@ -3,5 +3,4 @@ import * as schemas from '@toa.io/schemas';
3
3
  const path = resolve(import.meta.dirname, '../../schemas/extensions.introspection');
4
4
  const namespace = schemas.namespace(path);
5
5
  export const annotation = namespace.schema('annotation');
6
- export const declaration = namespace.schema('declaration');
7
6
  //# sourceMappingURL=schemas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../source/extensions.introspection/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAI1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAA;AACnF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GACrB,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;AAChC,MAAM,CAAC,MAAM,WAAW,GACtB,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA"}
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../source/extensions.introspection/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAI1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,wCAAwC,CAAC,CAAA;AACnF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,UAAU,GACrB,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA"}
@@ -1,3 +1,4 @@
1
1
  export { version } from './version.ts';
2
+ export { MAP, MAP_DIRECTORY, MAP_FILE } from './map.ts';
2
3
  export { PREDEFINED } from './predefined.ts';
3
4
  export { definition, DEFINED } from './definition.ts';
@@ -1,4 +1,5 @@
1
1
  export { version } from './version.js';
2
+ export { MAP, MAP_DIRECTORY, MAP_FILE } from './map.js';
2
3
  export { PREDEFINED } from './predefined.js';
3
4
  export { definition, DEFINED } from './definition.js';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../source/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Where a deployed process reads the component map from: the directory a chart mounts it in, and
3
+ * the file a command is given. The image names the file, because a mounted ConfigMap is a
4
+ * directory and a file placed into an existing one with `subPath` is the one kind of mount
5
+ * Kubernetes does not update.
6
+ */
7
+ export declare const MAP_DIRECTORY = "/etc/toa";
8
+ export declare const MAP_FILE = "components.json";
9
+ export declare const MAP: string;