@toa.io/extensions.exposition 1.0.0-alpha.313 → 1.0.0-alpha.315

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 (86) hide show
  1. package/components/exposition.octets/package.json +2 -2
  2. package/components/exposition.octets/types/toa.d.ts +5 -5
  3. package/components/identity.bans/types/toa.d.ts +8 -8
  4. package/components/identity.basic/types/toa.d.ts +15 -15
  5. package/components/identity.clients/types/toa.d.ts +10 -10
  6. package/components/identity.credentials/types/toa.d.ts +1 -2
  7. package/components/identity.federation/types/toa.d.ts +14 -14
  8. package/components/identity.grants/types/toa.d.ts +12 -12
  9. package/components/identity.keys/types/toa.d.ts +10 -10
  10. package/components/identity.otp/types/toa.d.ts +9 -9
  11. package/components/identity.passkeys/types/toa.d.ts +13 -13
  12. package/components/identity.roles/types/toa.d.ts +10 -10
  13. package/components/identity.tokens/types/toa.d.ts +12 -12
  14. package/package.json +7 -5
  15. package/readme.md +2 -1
  16. package/transpiled/Branch.d.ts +2 -1
  17. package/transpiled/Branch.js +11 -2
  18. package/transpiled/Branch.js.map +1 -1
  19. package/transpiled/Discovery/Site.d.ts +4 -1
  20. package/transpiled/Discovery/Site.js +7 -1
  21. package/transpiled/Discovery/Site.js.map +1 -1
  22. package/transpiled/Factory.d.ts +5 -0
  23. package/transpiled/Factory.js +3 -0
  24. package/transpiled/Factory.js.map +1 -1
  25. package/transpiled/Gateway.js +6 -0
  26. package/transpiled/Gateway.js.map +1 -1
  27. package/transpiled/HTTP/Server.d.ts +1 -1
  28. package/transpiled/HTTP/Server.js +13 -1
  29. package/transpiled/HTTP/Server.js.map +1 -1
  30. package/transpiled/MCP/Server.d.ts +4 -0
  31. package/transpiled/MCP/Server.js +7 -0
  32. package/transpiled/MCP/Server.js.map +1 -1
  33. package/transpiled/directives/index.js +2 -0
  34. package/transpiled/directives/index.js.map +1 -1
  35. package/transpiled/directives/oauth/Discovery.d.ts +2 -0
  36. package/transpiled/directives/oauth/Discovery.js +19 -5
  37. package/transpiled/directives/oauth/Discovery.js.map +1 -1
  38. package/transpiled/directives/oauth/documents.d.ts +7 -0
  39. package/transpiled/directives/oauth/documents.js +24 -5
  40. package/transpiled/directives/oauth/documents.js.map +1 -1
  41. package/transpiled/directives/realtime/Hub.d.ts +45 -0
  42. package/transpiled/directives/realtime/Hub.js +221 -0
  43. package/transpiled/directives/realtime/Hub.js.map +1 -0
  44. package/transpiled/directives/realtime/Realtime.d.ts +18 -0
  45. package/transpiled/directives/realtime/Realtime.js +37 -0
  46. package/transpiled/directives/realtime/Realtime.js.map +1 -0
  47. package/transpiled/directives/realtime/Stream.d.ts +38 -0
  48. package/transpiled/directives/realtime/Stream.js +89 -0
  49. package/transpiled/directives/realtime/Stream.js.map +1 -0
  50. package/transpiled/directives/realtime/index.d.ts +2 -0
  51. package/transpiled/directives/realtime/index.js +3 -0
  52. package/transpiled/directives/realtime/index.js.map +1 -0
  53. package/transpiled/directives/realtime/measurements.d.ts +1 -0
  54. package/transpiled/directives/realtime/measurements.js +11 -0
  55. package/transpiled/directives/realtime/measurements.js.map +1 -0
  56. package/transpiled/realtime/Destination.d.ts +24 -0
  57. package/transpiled/realtime/Destination.js +83 -0
  58. package/transpiled/realtime/Destination.js.map +1 -0
  59. package/transpiled/realtime/Factory.d.ts +11 -0
  60. package/transpiled/realtime/Factory.js +15 -0
  61. package/transpiled/realtime/Factory.js.map +1 -0
  62. package/transpiled/realtime/measurements.d.ts +1 -0
  63. package/transpiled/realtime/measurements.js +11 -0
  64. package/transpiled/realtime/measurements.js.map +1 -0
  65. package/transpiled/realtime/redis.d.ts +36 -0
  66. package/transpiled/realtime/redis.js +83 -0
  67. package/transpiled/realtime/redis.js.map +1 -0
  68. package/transpiled/root.js +15 -0
  69. package/transpiled/root.js.map +1 -1
  70. package/ui/dist/_app/immutable/chunks/CrrzcO_n.js +6 -0
  71. package/ui/dist/_app/immutable/chunks/{CKEZ5KRV.js → Dn8TFlEA.js} +1 -1
  72. package/ui/dist/_app/immutable/chunks/{s9vNFPIB.js → DsJRRk2v.js} +4 -2
  73. package/ui/dist/_app/immutable/chunks/{C0GgtrvX.js → QdCaNCs3.js} +1 -1
  74. package/ui/dist/_app/immutable/entry/{app.BItHi3t7.js → app.Bbk6xMXP.js} +2 -2
  75. package/ui/dist/_app/immutable/entry/start.CqOWE7rl.js +1 -0
  76. package/ui/dist/_app/immutable/nodes/{0.DZjK4ZnB.js → 0.B7HjOukA.js} +1 -1
  77. package/ui/dist/_app/immutable/nodes/{1.VSVDanEF.js → 1.Cn1-wv-1.js} +1 -1
  78. package/ui/dist/_app/immutable/nodes/{2.DjphjWoH.js → 2.BLFOkU7I.js} +1 -1
  79. package/ui/dist/_app/immutable/nodes/{3.BQwfZxZn.js → 3.RZt-1voh.js} +1 -1
  80. package/ui/dist/_app/immutable/nodes/{4.B85Y-SnH.js → 4.CTut5zBR.js} +1 -1
  81. package/ui/dist/_app/immutable/nodes/{5.BlZ8Xi2u.js → 5.CF4unczk.js} +1 -1
  82. package/ui/dist/_app/immutable/nodes/{6.C7PmgKSw.js → 6.D7SlcY9P.js} +1 -1
  83. package/ui/dist/_app/version.json +1 -1
  84. package/ui/dist/index.html +10 -10
  85. package/ui/dist/_app/immutable/chunks/5vFkvWBI.js +0 -6
  86. package/ui/dist/_app/immutable/entry/start.BuSLHyNk.js +0 -1
@@ -3,8 +3,8 @@
3
3
  "private": true,
4
4
  "type": "module",
5
5
  "dependencies": {
6
- "@aws-sdk/client-s3": "3.1131.0",
7
- "@aws-sdk/lib-storage": "3.1131.0",
6
+ "@aws-sdk/client-s3": "3.1135.0",
7
+ "@aws-sdk/lib-storage": "3.1135.0",
8
8
  "cloudinary": "2.11.0"
9
9
  }
10
10
  }
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, RemoteError } from '@toa.io/core/types'
4
+ import type { RemoteError } from '@toa.io/core/types'
5
5
 
6
6
  export type PutInput = {
7
7
  location?: string
@@ -34,8 +34,8 @@ export type DeleteInput = {
34
34
  }
35
35
 
36
36
  export interface Component {
37
- put: (request: { input: PutInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"LOCATION_UNTRUSTED" | "LOCATION_LENGTH" | "LOCATION_UNAVAILABLE" | "INVALID_ID" | "NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
38
- get: (request: { input: GetInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
39
- head: (request: { input: HeadInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
40
- delete: (request: { input: DeleteInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
37
+ put: (request: { input: PutInput, task?: boolean }) => Promise<unknown | RemoteError<"LOCATION_UNTRUSTED" | "LOCATION_LENGTH" | "LOCATION_UNAVAILABLE" | "INVALID_ID" | "NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
38
+ get: (request: { input: GetInput, task?: boolean }) => Promise<unknown | RemoteError<"NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
39
+ head: (request: { input: HeadInput, task?: boolean }) => Promise<unknown | RemoteError<"NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
40
+ delete: (request: { input: DeleteInput, task?: boolean }) => Promise<unknown | RemoteError<"NOT_FOUND" | "LIMIT_EXCEEDED" | "NOT_ACCEPTABLE" | "TYPE_MISMATCH">>
41
41
  }
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query } from '@toa.io/core/types'
4
+ import type { Query } from '@toa.io/core/types'
5
5
  import type { Readable } from 'node:stream'
6
6
 
7
7
  export interface Entity {
@@ -25,11 +25,11 @@ export type TransitInput = {
25
25
  }
26
26
 
27
27
  export interface Component {
28
- transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
29
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
30
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
31
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
32
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
33
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
34
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
28
+ transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
29
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
30
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
31
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
32
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
33
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
34
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
35
35
  }
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { Secret } from '@toa.io/extensions.configuration'
6
6
  import type { FetchInit } from '@toa.io/extensions.fetch'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -92,20 +92,20 @@ export type DeleteInput = {
92
92
  }
93
93
 
94
94
  export interface Component {
95
- transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<TransitOutput | RemoteError<"PRINCIPAL_LOCKED" | "INVALID_USERNAME" | "INVALID_PASSWORD" | "EXISTS">>
96
- create: (request: { input: CreateInput, task?: boolean }, options?: Options) => Promise<CreateOutput | RemoteError<"PRINCIPAL_LOCKED" | "INVALID_USERNAME" | "INVALID_PASSWORD" | "EXISTS">>
97
- add: (request: { input: AddInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"PRINCIPAL_LOCKED" | "INVALID_USERNAME" | "INVALID_PASSWORD" | "EXISTS">>
98
- incept: (request: { input: InceptInput, task?: boolean }, options?: Options) => Promise<InceptOutput | RemoteError<"INVALID_CREDENTIALS">>
99
- authenticate: (request: { input: AuthenticateInput, task?: boolean }, options?: Options) => Promise<AuthenticateOutput | RemoteError<"NOT_FOUND" | "PASSWORD_MISMATCH">>
100
- check: (request: { input: CheckInput, task?: boolean }, options?: Options) => Promise<CheckOutput>
101
- info: (request: { input: InfoInput, task?: boolean }, options?: Options) => Promise<InfoOutput>
102
- delete: (request: { input: DeleteInput, task?: boolean }, options?: Options) => Promise<unknown>
103
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
104
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
105
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
106
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
107
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
108
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
95
+ transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }) => Promise<TransitOutput | RemoteError<"PRINCIPAL_LOCKED" | "INVALID_USERNAME" | "INVALID_PASSWORD" | "EXISTS">>
96
+ create: (request: { input: CreateInput, task?: boolean }) => Promise<CreateOutput | RemoteError<"PRINCIPAL_LOCKED" | "INVALID_USERNAME" | "INVALID_PASSWORD" | "EXISTS">>
97
+ add: (request: { input: AddInput, task?: boolean }) => Promise<unknown | RemoteError<"PRINCIPAL_LOCKED" | "INVALID_USERNAME" | "INVALID_PASSWORD" | "EXISTS">>
98
+ incept: (request: { input: InceptInput, task?: boolean }) => Promise<InceptOutput | RemoteError<"INVALID_CREDENTIALS">>
99
+ authenticate: (request: { input: AuthenticateInput, task?: boolean }) => Promise<AuthenticateOutput | RemoteError<"NOT_FOUND" | "PASSWORD_MISMATCH">>
100
+ check: (request: { input: CheckInput, task?: boolean }) => Promise<CheckOutput>
101
+ info: (request: { input: InfoInput, task?: boolean }) => Promise<InfoOutput>
102
+ delete: (request: { input: DeleteInput, task?: boolean }) => Promise<unknown>
103
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
104
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
105
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
106
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
107
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
108
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
109
109
  }
110
110
 
111
111
  export interface Configuration {
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { FetchInit } from '@toa.io/extensions.fetch'
6
6
  import type { Stash } from '@toa.io/extensions.stash'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -85,15 +85,15 @@ export type DescribeOutput = {
85
85
  }
86
86
 
87
87
  export interface Component {
88
- transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
89
- register: (request: { input: RegisterInput, task?: boolean }, options?: Options) => Promise<RegisterOutput>
90
- describe: (request: { input: DescribeInput, task?: boolean }, options?: Options) => Promise<DescribeOutput | RemoteError<"UNKNOWN_CLIENT">>
91
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
92
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
93
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
94
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
95
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
96
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
88
+ transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
89
+ register: (request: { input: RegisterInput, task?: boolean }) => Promise<RegisterOutput>
90
+ describe: (request: { input: DescribeInput, task?: boolean }) => Promise<DescribeOutput | RemoteError<"UNKNOWN_CLIENT">>
91
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
92
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
93
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
94
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
95
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
96
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
97
97
  }
98
98
 
99
99
  export interface Configuration {
@@ -1,7 +1,6 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options } from '@toa.io/core/types'
5
4
 
6
5
  export type ListInput = {
7
6
  authority: string
@@ -27,5 +26,5 @@ export type ListOutput = {
27
26
  }
28
27
 
29
28
  export interface Component {
30
- list: (request: { input: ListInput, task?: boolean }, options?: Options) => Promise<ListOutput>
29
+ list: (request: { input: ListInput, task?: boolean }) => Promise<ListOutput>
31
30
  }
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { Secret } from '@toa.io/extensions.configuration'
6
6
  import type { FetchInit } from '@toa.io/extensions.fetch'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -88,19 +88,19 @@ export type DeleteInput = {
88
88
  }
89
89
 
90
90
  export interface Component {
91
- transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
92
- create: (request: { input: CreateInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"EXISTS" | "TOKEN" | "TRUST" | "RESPONSE" | "CONFIG" | "NO_TOKEN" | "ISS" | "SUB" | "EXP" | "REPLAY" | "CODE_NOT_ENABLED" | "CODE_SCHEMA">>
93
- incept: (request: { input: InceptInput, task?: boolean }, options?: Options) => Promise<InceptOutput | RemoteError<"EXISTS" | "TOKEN" | "TRUST" | "RESPONSE" | "CONFIG" | "NO_TOKEN" | "ISS" | "SUB" | "EXP" | "REPLAY" | "CODE_NOT_ENABLED" | "CODE_SCHEMA">>
94
- authenticate: (request: { input: AuthenticateInput, task?: boolean }, options?: Options) => Promise<AuthenticateOutput | RemoteError<"NOT_FOUND" | "TOKEN" | "TRUST" | "RESPONSE" | "CONFIG" | "NO_TOKEN" | "ISS" | "SUB" | "EXP" | "REPLAY" | "CODE_NOT_ENABLED" | "CODE_SCHEMA">>
95
- decode: (request: { input: DecodeInput, task?: boolean }, options?: Options) => Promise<DecodeOutput>
96
- list: (request: { input: ListInput, task?: boolean }, options?: Options) => Promise<unknown>
97
- delete: (request: { input: DeleteInput, task?: boolean }, options?: Options) => Promise<unknown>
98
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
99
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
100
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
101
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
102
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
103
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
91
+ transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
92
+ create: (request: { input: CreateInput, task?: boolean }) => Promise<unknown | RemoteError<"EXISTS" | "TOKEN" | "TRUST" | "RESPONSE" | "CONFIG" | "NO_TOKEN" | "ISS" | "SUB" | "EXP" | "REPLAY" | "CODE_NOT_ENABLED" | "CODE_SCHEMA">>
93
+ incept: (request: { input: InceptInput, task?: boolean }) => Promise<InceptOutput | RemoteError<"EXISTS" | "TOKEN" | "TRUST" | "RESPONSE" | "CONFIG" | "NO_TOKEN" | "ISS" | "SUB" | "EXP" | "REPLAY" | "CODE_NOT_ENABLED" | "CODE_SCHEMA">>
94
+ authenticate: (request: { input: AuthenticateInput, task?: boolean }) => Promise<AuthenticateOutput | RemoteError<"NOT_FOUND" | "TOKEN" | "TRUST" | "RESPONSE" | "CONFIG" | "NO_TOKEN" | "ISS" | "SUB" | "EXP" | "REPLAY" | "CODE_NOT_ENABLED" | "CODE_SCHEMA">>
95
+ decode: (request: { input: DecodeInput, task?: boolean }) => Promise<DecodeOutput>
96
+ list: (request: { input: ListInput, task?: boolean }) => Promise<unknown>
97
+ delete: (request: { input: DeleteInput, task?: boolean }) => Promise<unknown>
98
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
99
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
100
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
101
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
102
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
103
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
104
104
  }
105
105
 
106
106
  export interface Configuration {
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { FetchInit } from '@toa.io/extensions.fetch'
6
6
  import type { Stash } from '@toa.io/extensions.stash'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -88,17 +88,17 @@ export type RevokeInput = {
88
88
  export type RevokeOutput = null
89
89
 
90
90
  export interface Component {
91
- transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
92
- authorize: (request: { input: AuthorizeInput, task?: boolean }, options?: Options) => Promise<AuthorizeOutput>
93
- exchange: (request: { input: ExchangeInput, task?: boolean }, options?: Options) => Promise<ExchangeOutput>
94
- list: (request: { input: ListInput, task?: boolean }, options?: Options) => Promise<unknown>
95
- revoke: (request: { input: RevokeInput, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<RevokeOutput | RemoteError<"NOT_FOUND">>
96
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
97
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
98
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
99
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
100
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
101
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
91
+ transit: (request: { input: TransitInput, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
92
+ authorize: (request: { input: AuthorizeInput, task?: boolean }) => Promise<AuthorizeOutput>
93
+ exchange: (request: { input: ExchangeInput, task?: boolean }) => Promise<ExchangeOutput>
94
+ list: (request: { input: ListInput, task?: boolean }) => Promise<unknown>
95
+ revoke: (request: { input: RevokeInput, query?: Query<Entity>, task?: boolean }) => Promise<RevokeOutput | RemoteError<"NOT_FOUND">>
96
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
97
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
98
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
99
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
100
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
101
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
102
102
  }
103
103
 
104
104
  export interface Configuration {
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query } from '@toa.io/core/types'
4
+ import type { Query } from '@toa.io/core/types'
5
5
  import type { Readable } from 'node:stream'
6
6
 
7
7
  export interface Entity {
@@ -36,13 +36,13 @@ export type RevokeInput = {
36
36
  export type RevokeOutput = null
37
37
 
38
38
  export interface Component {
39
- create: (request: { input: CreateInput, task?: boolean }, options?: Options) => Promise<CreateOutput>
40
- revoke: (request: { input: RevokeInput, task?: boolean }, options?: Options) => Promise<RevokeOutput>
41
- disable: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<unknown>
42
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
43
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
44
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
45
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
46
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
47
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
39
+ create: (request: { input: CreateInput, task?: boolean }) => Promise<CreateOutput>
40
+ revoke: (request: { input: RevokeInput, task?: boolean }) => Promise<RevokeOutput>
41
+ disable: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<unknown>
42
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
43
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
44
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
45
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
46
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
47
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
48
48
  }
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { FetchInit } from '@toa.io/extensions.fetch'
6
6
  import type { Stash } from '@toa.io/extensions.stash'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -39,14 +39,14 @@ export type AuthenticateOutput = {
39
39
  }
40
40
 
41
41
  export interface Component {
42
- issue: (request: { input: IssueInput, task?: boolean }, options?: Options) => Promise<unknown>
43
- authenticate: (request: { input: AuthenticateInput, task?: boolean }, options?: Options) => Promise<AuthenticateOutput | RemoteError<"INVALID_CREDENTIALS" | "EXPIRED" | "TOO_MANY_ATTEMPTS" | "NOT_FOUND">>
44
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
45
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
46
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
47
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
48
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
49
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
42
+ issue: (request: { input: IssueInput, task?: boolean }) => Promise<unknown>
43
+ authenticate: (request: { input: AuthenticateInput, task?: boolean }) => Promise<AuthenticateOutput | RemoteError<"INVALID_CREDENTIALS" | "EXPIRED" | "TOO_MANY_ATTEMPTS" | "NOT_FOUND">>
44
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
45
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
46
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
47
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
48
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
49
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
50
50
  }
51
51
 
52
52
  export interface Configuration {
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { FetchInit } from '@toa.io/extensions.fetch'
6
6
  import type { Stash } from '@toa.io/extensions.stash'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -97,18 +97,18 @@ export type DeleteInput = {
97
97
  }
98
98
 
99
99
  export interface Component {
100
- challenge: (request: { input: ChallengeInput, task?: boolean }, options?: Options) => Promise<unknown>
101
- create: (request: { input: CreateInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"FAILED" | "INVALID">>
102
- use: (request: { input: UseInput, query: Query<Entity>, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"FAILED" | "INVALID">>
103
- authenticate: (request: { input: AuthenticateInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"MISS" | "FAILED" | "INVALID">>
104
- list: (request: { input: ListInput, task?: boolean }, options?: Options) => Promise<unknown>
105
- delete: (request: { input: DeleteInput, task?: boolean }, options?: Options) => Promise<unknown>
106
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
107
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
108
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
109
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
110
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
111
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
100
+ challenge: (request: { input: ChallengeInput, task?: boolean }) => Promise<unknown>
101
+ create: (request: { input: CreateInput, task?: boolean }) => Promise<unknown | RemoteError<"FAILED" | "INVALID">>
102
+ use: (request: { input: UseInput, query: Query<Entity>, task?: boolean }) => Promise<unknown | RemoteError<"FAILED" | "INVALID">>
103
+ authenticate: (request: { input: AuthenticateInput, task?: boolean }) => Promise<unknown | RemoteError<"MISS" | "FAILED" | "INVALID">>
104
+ list: (request: { input: ListInput, task?: boolean }) => Promise<unknown>
105
+ delete: (request: { input: DeleteInput, task?: boolean }) => Promise<unknown>
106
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
107
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
108
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
109
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
110
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
111
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
112
112
  }
113
113
 
114
114
  export interface Configuration {
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { Readable } from 'node:stream'
6
6
 
7
7
  export interface Entity {
@@ -32,13 +32,13 @@ export type PrincipalInput = {
32
32
  }
33
33
 
34
34
  export interface Component {
35
- grant: (request: { input: GrantInput, task?: boolean }, options?: Options) => Promise<unknown | RemoteError<"INACCESSIBLE_SCOPE">>
36
- list: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<ListOutput>
37
- principal: (request: { input: PrincipalInput, task?: boolean }, options?: Options) => Promise<unknown>
38
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
39
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
40
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
41
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
42
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
43
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
35
+ grant: (request: { input: GrantInput, task?: boolean }) => Promise<unknown | RemoteError<"INACCESSIBLE_SCOPE">>
36
+ list: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<ListOutput>
37
+ principal: (request: { input: PrincipalInput, task?: boolean }) => Promise<unknown>
38
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
39
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
40
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
41
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
42
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
43
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
44
44
  }
@@ -1,7 +1,7 @@
1
1
  // Written by `toa types`. Every run rewrites it.
2
2
  // What a manifest does not state belongs in a file of your own.
3
3
 
4
- import type { Options, Query, RemoteError } from '@toa.io/core/types'
4
+ import type { Query, RemoteError } from '@toa.io/core/types'
5
5
  import type { Secret } from '@toa.io/extensions.configuration'
6
6
  import type { FetchInit } from '@toa.io/extensions.fetch'
7
7
  import type { Logs, Metrics, Span } from '@toa.io/extensions.telemetry'
@@ -89,17 +89,17 @@ export type IssueOutput = {
89
89
  export type RevokeOutput = null
90
90
 
91
91
  export interface Component {
92
- encrypt: (request: { input: EncryptInput, task?: boolean }, options?: Options) => Promise<EncryptOutput | RemoteError<"INACCESSIBLE_SCOPE">>
93
- decrypt: (request: { input: DecryptInput, task?: boolean }, options?: Options) => Promise<DecryptOutput | RemoteError<"INVALID_TOKEN" | "INVALID_KEY" | "FORGED_KEY" | "REVOKED_KEY">>
94
- authenticate: (request: { input: AuthenticateInput, task?: boolean }, options?: Options) => Promise<AuthenticateOutput | RemoteError<"UNRECOGNIZED" | "AUTHORITY_MISMATCH" | "TOKEN_REVOKED" | "INVALID_TOKEN" | "INVALID_KEY" | "FORGED_KEY" | "REVOKED_KEY">>
95
- issue: (request: { input: IssueInput, task?: boolean }, options?: Options) => Promise<IssueOutput | RemoteError<"INACCESSIBLE_SCOPE">>
96
- revoke: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<RevokeOutput>
97
- assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
98
- ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
99
- enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity[]>
100
- observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity | null>
101
- stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Readable>
102
- terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }, options?: Options) => Promise<Entity>
92
+ encrypt: (request: { input: EncryptInput, task?: boolean }) => Promise<EncryptOutput | RemoteError<"INACCESSIBLE_SCOPE">>
93
+ decrypt: (request: { input: DecryptInput, task?: boolean }) => Promise<DecryptOutput | RemoteError<"INVALID_TOKEN" | "INVALID_KEY" | "FORGED_KEY" | "REVOKED_KEY">>
94
+ authenticate: (request: { input: AuthenticateInput, task?: boolean }) => Promise<AuthenticateOutput | RemoteError<"UNRECOGNIZED" | "AUTHORITY_MISMATCH" | "TOKEN_REVOKED" | "INVALID_TOKEN" | "INVALID_KEY" | "FORGED_KEY" | "REVOKED_KEY">>
95
+ issue: (request: { input: IssueInput, task?: boolean }) => Promise<IssueOutput | RemoteError<"INACCESSIBLE_SCOPE">>
96
+ revoke: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<RevokeOutput>
97
+ assign: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
98
+ ensure: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
99
+ enumerate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity[]>
100
+ observe: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity | null>
101
+ stream: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Readable>
102
+ terminate: (request: { input?: null, query?: Query<Entity>, task?: boolean }) => Promise<Entity>
103
103
  }
104
104
 
105
105
  export interface Configuration {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toa.io/extensions.exposition",
3
- "version": "1.0.0-alpha.313",
3
+ "version": "1.0.0-alpha.315",
4
4
  "type": "module",
5
5
  "description": "Toa Exposition",
6
6
  "author": "temich <tema.gurtovoy@gmail.com>",
@@ -28,11 +28,13 @@
28
28
  "!**/.env*"
29
29
  ],
30
30
  "dependencies": {
31
- "@toa.io/core": "1.0.0-alpha.312",
32
- "@toa.io/definitions": "1.0.0-alpha.313",
31
+ "@toa.io/core": "1.0.0-alpha.315",
32
+ "@toa.io/definitions": "1.0.0-alpha.315",
33
33
  "@toa.io/generic": "1.0.0-alpha.311",
34
+ "@toa.io/pointer": "1.0.0-alpha.311",
34
35
  "@toa.io/schemas": "1.0.0-alpha.311",
35
- "content-type": "3.1.0",
36
+ "content-type": "3.1.1",
37
+ "ioredis": "6.0.0",
36
38
  "matchacho": "0.6.1",
37
39
  "minimatch": "10.2.6",
38
40
  "msgpackr": "2.1.0",
@@ -72,5 +74,5 @@
72
74
  "lru-cache": "11.5.2",
73
75
  "paseto": "4.0.1"
74
76
  },
75
- "gitHead": "7da3b2627ceeefd1fa19d5c8851be88d928523b6"
77
+ "gitHead": "d88ed286bf44bf95b5f3d9db6e7d4621261dbb99"
76
78
  }
package/readme.md CHANGED
@@ -142,7 +142,7 @@ exposition:
142
142
  | `oauth` | Authorization server exposed to OAuth clients. See [OAuth](documentation/oauth.md). |
143
143
  | `protocol` | `h1` or `h2c`. See [Protocol](documentation/protocol.md). |
144
144
  | `rpc` | JSON-RPC at `/.rpc`; none is served without it. See [JSON-RPC](documentation/rpc.md). |
145
- | `mcp` | MCP at `/.mcp`; none is served without it. See [MCP](documentation/mcp.md). |
145
+ | `mcp` | MCP at `/.mcp`, and on a host of its own where one is named; none is served without it. See [MCP](documentation/mcp.md). |
146
146
 
147
147
  ### Observability
148
148
 
@@ -219,6 +219,7 @@ See also [telemetry ready probe](../telemetry/readme.md#ready-probe) and
219
219
  - [OAuth authorization server](documentation/oauth.md)
220
220
  - [Consent](documentation/consent.md)
221
221
  - [BLOBs](documentation/octets.md)
222
+ - [Realtime streams](documentation/realtime.md)
222
223
  - [Components and resources](documentation/components.md)
223
224
  - [Caching](documentation/cache.md)
224
225
  - [Features](features)
@@ -41,7 +41,8 @@ export interface Exposed {
41
41
  *
42
42
  * - `refresh`: the same component and the same routes, so its expiration is extended and its
43
43
  * endpoints left alone
44
- * - `superseded`: it came from a tenant that started before the one exposed now
44
+ * - `superseded`: it came from a tenant that started before the one exposed now, while the
45
+ * exposed branch is still served
45
46
  * - `merge`: everything else
46
47
  */
47
48
  export declare function decide(exposed: Exposed, branch: Branch): Decision;
@@ -3,14 +3,23 @@
3
3
  *
4
4
  * - `refresh`: the same component and the same routes, so its expiration is extended and its
5
5
  * endpoints left alone
6
- * - `superseded`: it came from a tenant that started before the one exposed now
6
+ * - `superseded`: it came from a tenant that started before the one exposed now, while the
7
+ * exposed branch is still served
7
8
  * - `merge`: everything else
8
9
  */
9
10
  export function decide(exposed, branch) {
10
11
  if (exposed.version === branch.version && exposed.routes === branch.routes)
11
12
  return 'refresh';
12
- if (branch.timestamp < exposed.timestamp)
13
+ if (branch.timestamp < exposed.timestamp && !expired(exposed))
13
14
  return 'superseded';
14
15
  return 'merge';
15
16
  }
17
+ /**
18
+ * A tenant that has gone without saying so stops refreshing its branch, and once the branch
19
+ * expires, nothing it held off is served. What started before it is all there is left to expose.
20
+ */
21
+ function expired(exposed) {
22
+ const now = Date.now();
23
+ return exposed.nodes.length > 0 && exposed.nodes.every((node) => now >= node.expiration);
24
+ }
16
25
  //# sourceMappingURL=Branch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Branch.js","sourceRoot":"","sources":["../source/Branch.ts"],"names":[],"mappings":"AAgDA;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,OAAgB,EAAE,MAAc;IACrD,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAE5F,IAAI,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;QAAE,OAAO,YAAY,CAAA;IAE7D,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"Branch.js","sourceRoot":"","sources":["../source/Branch.ts"],"names":[],"mappings":"AAgDA;;;;;;;;GAQG;AACH,MAAM,UAAU,MAAM,CAAC,OAAgB,EAAE,MAAc;IACrD,IAAI,OAAO,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAE5F,IAAI,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,YAAY,CAAA;IAElF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,OAAgB;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEtB,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAA;AAC1F,CAAC"}
@@ -1,3 +1,4 @@
1
+ import * as http from '../HTTP/index.ts';
1
2
  import type { Input, Output } from '../io.ts';
2
3
  import type { Interceptor } from '../Interception.ts';
3
4
  /**
@@ -21,13 +22,15 @@ export declare class Site implements Interceptor {
21
22
  /** What a test points at a fixture; the build otherwise. */
22
23
  private readonly override;
23
24
  private root;
25
+ /** Hosts MCP is served at the root of, where this page is not served. */
26
+ private roots;
24
27
  constructor(root?: string);
25
28
  /**
26
29
  * Resolved here rather than at construction because this is a module singleton, built
27
30
  * when the module loads and before anything has said where the page is. Said once, too,
28
31
  * because a page that is not built is otherwise a `503` per request and nothing else.
29
32
  */
30
- mount(): void;
33
+ mount(options: http.Options): void;
31
34
  intercept(input: Input): Output;
32
35
  /**
33
36
  * The file a request lands on, or `null` when nothing does. A path that exists is served
@@ -25,6 +25,8 @@ export class Site {
25
25
  /** What a test points at a fixture; the build otherwise. */
26
26
  override;
27
27
  root;
28
+ /** Hosts MCP is served at the root of, where this page is not served. */
29
+ roots = new Set();
28
30
  constructor(root) {
29
31
  this.override = root;
30
32
  this.root = root ?? site();
@@ -34,8 +36,9 @@ export class Site {
34
36
  * when the module loads and before anything has said where the page is. Said once, too,
35
37
  * because a page that is not built is otherwise a `503` per request and nothing else.
36
38
  */
37
- mount() {
39
+ mount(options) {
38
40
  this.root = this.override ?? site();
41
+ this.roots = new Set(Object.values(options.mcp?.hosts ?? {}).map((host) => host.toLowerCase()));
39
42
  if (!isFile(path.join(this.root, 'index.html')))
40
43
  console.warn('Discovery UI is not built', { root: this.root });
41
44
  }
@@ -43,6 +46,9 @@ export class Site {
43
46
  const { pathname } = input.url;
44
47
  if (pathname !== DISCOVERY && !pathname.startsWith(DISCOVERY + '/'))
45
48
  return null;
49
+ // the gateway answers for such a host, and what it answers there is `404`
50
+ if (this.roots.has(input.url.host))
51
+ return null;
46
52
  // the prefix itself, as opposed to something under it
47
53
  const bare = pathname === DISCOVERY || pathname === DISCOVERY + '/';
48
54
  const method = input.request.method;
@@ -1 +1 @@
1
- {"version":3,"file":"Site.js","sourceRoot":"","sources":["../../source/Discovery/Site.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Site.js","sourceRoot":"","sources":["../../source/Discovery/Site.ts"],"names":[],"mappings":"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"}