@aeolus-fleet/gateway 0.0.0 → 0.28.1

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 (179) hide show
  1. package/README.md +11 -10
  2. package/dist/adapters/crypto/page-sessions.d.ts +15 -0
  3. package/dist/adapters/crypto/page-sessions.js +40 -0
  4. package/dist/adapters/crypto/page-sessions.js.map +1 -0
  5. package/dist/adapters/crypto/request-ids.d.ts +1 -1
  6. package/dist/adapters/crypto/request-ids.js +2 -9
  7. package/dist/adapters/crypto/request-ids.js.map +1 -1
  8. package/dist/adapters/crypto/sign-in-seals.d.ts +1 -1
  9. package/dist/adapters/crypto/sign-in-seals.js +7 -9
  10. package/dist/adapters/crypto/sign-in-seals.js.map +1 -1
  11. package/dist/adapters/fleet/actor-door.d.ts +20 -0
  12. package/dist/adapters/fleet/actor-door.js +75 -0
  13. package/dist/adapters/fleet/actor-door.js.map +1 -0
  14. package/dist/adapters/fleet/core-version.d.ts +8 -8
  15. package/dist/adapters/fleet/core-version.js +6 -47
  16. package/dist/adapters/fleet/core-version.js.map +1 -1
  17. package/dist/adapters/fleet/fleet-network.js +7 -17
  18. package/dist/adapters/fleet/fleet-network.js.map +1 -1
  19. package/dist/adapters/fleet/logged-verified-facts.d.ts +13 -0
  20. package/dist/adapters/fleet/logged-verified-facts.js +18 -0
  21. package/dist/adapters/fleet/logged-verified-facts.js.map +1 -0
  22. package/dist/adapters/fleet/proxy-ship-reads.d.ts +7 -0
  23. package/dist/adapters/fleet/proxy-ship-reads.js +24 -0
  24. package/dist/adapters/fleet/proxy-ship-reads.js.map +1 -0
  25. package/dist/adapters/fleet/proxy-ships-as-actor.d.ts +3 -0
  26. package/dist/adapters/fleet/proxy-ships-as-actor.js +25 -0
  27. package/dist/adapters/fleet/proxy-ships-as-actor.js.map +1 -0
  28. package/dist/adapters/fleet/rest-fleet-door.d.ts +2 -2
  29. package/dist/adapters/fleet/rest-fleet-door.js +23 -7
  30. package/dist/adapters/fleet/rest-fleet-door.js.map +1 -1
  31. package/dist/adapters/http/add-server-page.d.ts +7 -0
  32. package/dist/adapters/http/add-server-page.js +175 -0
  33. package/dist/adapters/http/add-server-page.js.map +1 -0
  34. package/dist/adapters/http/delivery-page.d.ts +24 -0
  35. package/dist/adapters/http/delivery-page.js +115 -0
  36. package/dist/adapters/http/delivery-page.js.map +1 -0
  37. package/dist/adapters/http/front-door.d.ts +8 -0
  38. package/dist/adapters/http/front-door.js +19 -0
  39. package/dist/adapters/http/front-door.js.map +1 -0
  40. package/dist/adapters/http/oauth-routes.d.ts +15 -3
  41. package/dist/adapters/http/oauth-routes.js +33 -1
  42. package/dist/adapters/http/oauth-routes.js.map +1 -1
  43. package/dist/adapters/http/outside-parties-page.d.ts +29 -2
  44. package/dist/adapters/http/outside-parties-page.js +15 -11
  45. package/dist/adapters/http/outside-parties-page.js.map +1 -1
  46. package/dist/adapters/http/outside-party-page.d.ts +7 -0
  47. package/dist/adapters/http/outside-party-page.js +212 -0
  48. package/dist/adapters/http/outside-party-page.js.map +1 -0
  49. package/dist/adapters/http/overview-page.d.ts +2 -1
  50. package/dist/adapters/http/overview-page.js +79 -36
  51. package/dist/adapters/http/overview-page.js.map +1 -1
  52. package/dist/adapters/http/parties-page.d.ts +2 -1
  53. package/dist/adapters/http/parties-page.js +8 -10
  54. package/dist/adapters/http/parties-page.js.map +1 -1
  55. package/dist/adapters/http/scope-rows.d.ts +10 -0
  56. package/dist/adapters/http/scope-rows.js +30 -0
  57. package/dist/adapters/http/scope-rows.js.map +1 -0
  58. package/dist/adapters/http/signal.d.ts +10 -1
  59. package/dist/adapters/http/signal.js +50 -7
  60. package/dist/adapters/http/signal.js.map +1 -1
  61. package/dist/adapters/pagasae/pagasae-client.js +7 -9
  62. package/dist/adapters/pagasae/pagasae-client.js.map +1 -1
  63. package/dist/adapters/prisma/account-grants.js +2 -2
  64. package/dist/adapters/prisma/account-grants.js.map +1 -1
  65. package/dist/adapters/prisma/client-calls.js +9 -0
  66. package/dist/adapters/prisma/client-calls.js.map +1 -1
  67. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  68. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  69. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +1 -1
  70. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +1 -1
  71. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  72. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +1 -1
  73. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +1 -1
  74. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  75. package/dist/adapters/prisma/generated/models/AccountGrant.d.ts +33 -1
  76. package/dist/adapters/prisma/generated/models/ClientCall.d.ts +14 -14
  77. package/dist/adapters/prisma/generated/models/Party.d.ts +1 -29
  78. package/dist/adapters/prisma/oauth-stores.js +3 -0
  79. package/dist/adapters/prisma/oauth-stores.js.map +1 -1
  80. package/dist/adapters/prisma/party-store.js +0 -2
  81. package/dist/adapters/prisma/party-store.js.map +1 -1
  82. package/dist/adapters/prisma/pending-requests.js +7 -1
  83. package/dist/adapters/prisma/pending-requests.js.map +1 -1
  84. package/dist/adapters/trpc/router.d.ts +210 -12
  85. package/dist/adapters/trpc/router.js +159 -7
  86. package/dist/adapters/trpc/router.js.map +1 -1
  87. package/dist/app.js +67 -19
  88. package/dist/app.js.map +1 -1
  89. package/dist/core/actors/authenticate-actor.d.ts +21 -5
  90. package/dist/core/actors/authenticate-actor.js +14 -2
  91. package/dist/core/actors/authenticate-actor.js.map +1 -1
  92. package/dist/core/actors/credential-of.d.ts +27 -0
  93. package/dist/core/actors/credential-of.js +25 -0
  94. package/dist/core/actors/credential-of.js.map +1 -0
  95. package/dist/core/connection/connect.js +5 -4
  96. package/dist/core/connection/connect.js.map +1 -1
  97. package/dist/core/connection/ports.d.ts +6 -1
  98. package/dist/core/mcp-in/call-tool.d.ts +6 -6
  99. package/dist/core/mcp-in/call-tool.js +3 -3
  100. package/dist/core/mcp-in/call-tool.js.map +1 -1
  101. package/dist/core/mcp-in/client-call.d.ts +2 -2
  102. package/dist/core/mcp-in/client-call.js +2 -2
  103. package/dist/core/mcp-in/client-call.js.map +1 -1
  104. package/dist/core/mcp-in/collect-replies.d.ts +4 -11
  105. package/dist/core/mcp-in/collect-replies.js +52 -30
  106. package/dist/core/mcp-in/collect-replies.js.map +1 -1
  107. package/dist/core/mcp-in/list-tools.d.ts +4 -0
  108. package/dist/core/mcp-in/list-tools.js +1 -1
  109. package/dist/core/mcp-in/list-tools.js.map +1 -1
  110. package/dist/core/mcp-in/ports.d.ts +24 -1
  111. package/dist/core/mcp-out/hand-call.d.ts +2 -0
  112. package/dist/core/mcp-out/hand-call.js +4 -2
  113. package/dist/core/mcp-out/hand-call.js.map +1 -1
  114. package/dist/core/mcp-out/state-party.d.ts +2 -1
  115. package/dist/core/mcp-out/state-party.js +1 -1
  116. package/dist/core/mcp-out/state-party.js.map +1 -1
  117. package/dist/core/mcp-out/statement.d.ts +10 -0
  118. package/dist/core/mcp-out/statement.js +7 -5
  119. package/dist/core/mcp-out/statement.js.map +1 -1
  120. package/dist/core/oauth/ports.d.ts +2 -0
  121. package/dist/core/oauth/read-authorization.js +2 -2
  122. package/dist/core/oauth/read-authorization.js.map +1 -1
  123. package/dist/core/oauth/redirect-uri.d.ts +7 -0
  124. package/dist/core/oauth/redirect-uri.js +23 -0
  125. package/dist/core/oauth/redirect-uri.js.map +1 -1
  126. package/dist/core/outside-parties/ports.d.ts +1 -5
  127. package/dist/core/outside-parties/set-outside-parties.d.ts +5 -3
  128. package/dist/core/outside-parties/set-outside-parties.js +6 -2
  129. package/dist/core/outside-parties/set-outside-parties.js.map +1 -1
  130. package/dist/core/parties/approve-party.js +24 -8
  131. package/dist/core/parties/approve-party.js.map +1 -1
  132. package/dist/core/parties/change-party.d.ts +42 -0
  133. package/dist/core/parties/change-party.js +49 -0
  134. package/dist/core/parties/change-party.js.map +1 -0
  135. package/dist/core/parties/check-server.d.ts +24 -0
  136. package/dist/core/parties/check-server.js +21 -0
  137. package/dist/core/parties/check-server.js.map +1 -0
  138. package/dist/core/parties/list-parties.d.ts +28 -7
  139. package/dist/core/parties/list-parties.js +35 -4
  140. package/dist/core/parties/list-parties.js.map +1 -1
  141. package/dist/core/parties/party.d.ts +12 -6
  142. package/dist/core/parties/party.js +23 -1
  143. package/dist/core/parties/party.js.map +1 -1
  144. package/dist/core/parties/ports.d.ts +36 -1
  145. package/dist/core/parties/read-party-tools.d.ts +22 -0
  146. package/dist/core/parties/read-party-tools.js +22 -0
  147. package/dist/core/parties/read-party-tools.js.map +1 -0
  148. package/dist/core/parties/retire-party.d.ts +29 -0
  149. package/dist/core/parties/retire-party.js +43 -0
  150. package/dist/core/parties/retire-party.js.map +1 -0
  151. package/dist/core/parties/shown-party.d.ts +8 -2
  152. package/dist/core/parties/shown-party.js +3 -3
  153. package/dist/core/parties/shown-party.js.map +1 -1
  154. package/dist/core/requests/decide-request.js +9 -1
  155. package/dist/core/requests/decide-request.js.map +1 -1
  156. package/dist/core/requests/list-mine.d.ts +16 -0
  157. package/dist/core/requests/list-mine.js +20 -0
  158. package/dist/core/requests/list-mine.js.map +1 -0
  159. package/dist/core/requests/ports.d.ts +5 -0
  160. package/dist/core/shared/errors.d.ts +1 -1
  161. package/dist/core/shared/errors.js.map +1 -1
  162. package/dist/core/sign-in/account-token.d.ts +8 -4
  163. package/dist/core/sign-in/account-token.js +4 -4
  164. package/dist/core/sign-in/account-token.js.map +1 -1
  165. package/dist/core/sign-in/complete-sign-in.d.ts +15 -4
  166. package/dist/core/sign-in/complete-sign-in.js +27 -4
  167. package/dist/core/sign-in/complete-sign-in.js.map +1 -1
  168. package/dist/core/sign-in/ports.d.ts +37 -7
  169. package/dist/core/sign-in/sign-out.d.ts +10 -0
  170. package/dist/core/sign-in/sign-out.js +9 -0
  171. package/dist/core/sign-in/sign-out.js.map +1 -0
  172. package/dist/core/sign-in/start-page-sign-in.d.ts +25 -0
  173. package/dist/core/sign-in/start-page-sign-in.js +30 -0
  174. package/dist/core/sign-in/start-page-sign-in.js.map +1 -0
  175. package/package.json +3 -3
  176. package/src/adapters/prisma/migrations/20261020200000_account_grant_scopes/migration.sql +2 -0
  177. package/src/adapters/prisma/migrations/20261020210000_party_owner_from_fleet/migration.sql +2 -0
  178. package/src/adapters/prisma/migrations/20261020220000_client_call_deadline_optional/migration.sql +2 -0
  179. package/src/adapters/prisma/schema.prisma +3 -2
@@ -0,0 +1,25 @@
1
+ import { grantScopesOutputSchema } from '@aeolus-fleet/common';
2
+ import { err, ok } from '../../core/shared/result.js';
3
+ import { mutateAs } from './actor-door.js';
4
+ /** A party's proxy ship, as the actor calls the fleet on it (decision 0057). */
5
+ export function createProxyShipsAsActor(fleetUrl) {
6
+ return {
7
+ retire: async (as, { shipId }) => {
8
+ const retired = await mutateAs(fleetUrl, { as, procedure: 'retire', input: { shipId } });
9
+ return retired.isOk ? ok(undefined) : err(retired.error);
10
+ },
11
+ setOwner: async (as, { shipId, ownerShipId }) => {
12
+ const set = await mutateAs(fleetUrl, { as, procedure: 'setOwner', input: { shipId, ownerShipId }, isTrpcOnly: true });
13
+ return set.isOk ? ok(undefined) : err(set.error);
14
+ },
15
+ grantScopes: async (as, { shipId, grant, revoke }) => {
16
+ const changed = await mutateAs(fleetUrl, { as, procedure: 'grantScopes', input: { shipId, grant, revoke } });
17
+ if (!changed.isOk) {
18
+ return changed;
19
+ }
20
+ const held = grantScopesOutputSchema.safeParse(changed.value);
21
+ return held.success ? ok({ scopes: [...held.data.scopes] }) : err({ code: 'UNAVAILABLE', message: 'The fleet answered no scopes' });
22
+ },
23
+ };
24
+ }
25
+ //# sourceMappingURL=proxy-ships-as-actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-ships-as-actor.js","sourceRoot":"","sources":["../../../src/adapters/fleet/proxy-ships-as-actor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG/D,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,gFAAgF;AAChF,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;YAC/B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACzF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;QACD,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE;YAC9C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACtH,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;QACD,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;YACnD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7G,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO,OAAO,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,GAAG,uBAAuB,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;QACtI,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { FleetDoor } from '../../core/connection/ports.js';
2
- import type { CallSender, Discovery } from '../../core/mcp-in/ports.js';
2
+ import type { CallSender, Discovery, ReplyReceiver } from '../../core/mcp-in/ports.js';
3
3
  import type { ProxyShipCrew } from '../../core/mcp-out/hand-call.js';
4
4
  import type { StatementDoor } from '../../core/mcp-out/state-party.js';
5
5
  import type { ProxyShipDoor } from '../../core/parties/ports.js';
@@ -9,6 +9,6 @@ export declare function createRestFleetDoor(fleetUrl: string, options?: {
9
9
  busyWaitsMs?: readonly number[];
10
10
  random?: () => number;
11
11
  wait?: (waitMs: number) => Promise<void>;
12
- }): FleetDoor & ProxyShipDoor & StatementDoor & ProxyShipCrew & Discovery & CallSender & AccountDoor & Owners & {
12
+ }): FleetDoor & ProxyShipDoor & StatementDoor & ProxyShipCrew & Discovery & CallSender & ReplyReceiver & AccountDoor & Owners & {
13
13
  person: PersonShipDoor;
14
14
  };
@@ -6,7 +6,7 @@
6
6
  * same body, after each of the busy waits (each drawn by `busyWaitMs`).
7
7
  */
8
8
  import { setTimeout as wait } from 'node:timers/promises';
9
- import { busyWaitMs, commissionShipOutputSchema, discoverOutputSchema, FLEET_BUSY_WAITS_MS, handedOutputSchema, idSchema, inboxOutputSchema, pushReceiveOutputSchema, QUESTION_CONTENT_TYPE, questionSchema, sendOutputSchema, shipDetailOutputSchema, startingPromptOutputSchema, } from '@aeolus-fleet/common';
9
+ import { ACCOUNT_TOKEN_HEADER, ON_BEHALF_OF_HEADER, shipOutputSchema, setVerifiedFactsOutputSchema, busyWaitMs, commissionShipOutputSchema, discoverOutputSchema, FLEET_BUSY_WAITS_MS, handedOutputSchema, idSchema, inboxOutputSchema, pushReceiveOutputSchema, receiveOutputSchema, QUESTION_CONTENT_TYPE, questionSchema, sendOutputSchema, shipDetailOutputSchema, startingPromptOutputSchema, } from '@aeolus-fleet/common';
10
10
  import { z } from 'zod';
11
11
  import { err, ok } from '../../core/shared/result.js';
12
12
  const refusalSchema = z.object({ code: z.string(), message: z.string() });
@@ -16,8 +16,6 @@ const FLEET_BUSY = 'SERVICE_UNAVAILABLE';
16
16
  const LOCATION = { kind: 'SERVER' };
17
17
  /** The harness the gateway states when it registers a ship: it is software, not a model. */
18
18
  const HARNESS = 'aeolus-gateway';
19
- /** The header an account's token travels in; common's ACCOUNT_TOKEN_HEADER replaces it once published (aeolus-fleet#991). */
20
- const ACCOUNT_TOKEN_HEADER = 'aeolus-account-token';
21
19
  async function callFleet({ fleetUrl, busyWaitsMs, random, wait: waitBusy }, request) {
22
20
  for (const waitMs of busyWaitsMs) {
23
21
  const answered = await callOnce(fleetUrl, request);
@@ -36,6 +34,9 @@ async function callOnce(fleetUrl, request) {
36
34
  if (request.accountToken !== undefined) {
37
35
  headers[ACCOUNT_TOKEN_HEADER] = request.accountToken;
38
36
  }
37
+ if (request.onBehalfOf !== undefined) {
38
+ headers[ON_BEHALF_OF_HEADER] = request.onBehalfOf;
39
+ }
39
40
  if (request.body !== undefined) {
40
41
  headers['content-type'] = 'application/json';
41
42
  }
@@ -91,15 +92,18 @@ export function createRestFleetDoor(fleetUrl, options = {}) {
91
92
  const read = await call({ path: '/fleet/ship', method: 'POST', crewToken, body: { shipId }, answers: shipDetailOutputSchema });
92
93
  return read.isOk ? ok(read.value.owner?.id ?? null) : read;
93
94
  },
94
- getShip: async (crewToken, ship) => {
95
- const read = await call({ path: '/fleet/ship', method: 'POST', crewToken, body: ship, answers: shipDetailOutputSchema });
95
+ getShip: async (crewToken, { shipId, onBehalfOf }) => {
96
+ const read = await call({ path: '/fleet/ship', method: 'POST', crewToken, onBehalfOf, body: { shipId }, answers: shipOutputSchema });
96
97
  if (!read.isOk) {
97
98
  return read;
98
99
  }
100
+ if ('isInReadReach' in read.value) {
101
+ return err({ code: 'FORBIDDEN', message: `${read.value.name} is outside the read reach` });
102
+ }
99
103
  const { status, scopes } = read.value;
100
104
  return ok({ status, scopes });
101
105
  },
102
- // An app ship owned by the owner argo picked: core 0.28's commission (aeolus-fleet#959).
106
+ // An app ship owned by the owner argo picked (decision 0045).
103
107
  commissionAppShip: async (crewToken, { name, type, owner, idempotencyKey, scopes }) => {
104
108
  const commissioned = await call({
105
109
  path: '/fleet/commission',
@@ -110,16 +114,28 @@ export function createRestFleetDoor(fleetUrl, options = {}) {
110
114
  });
111
115
  return commissioned.isOk ? ok({ shipId: commissioned.value.shipId, secret: commissioned.value.secret }) : commissioned;
112
116
  },
117
+ setVerifiedFacts: async (crewToken, written) => {
118
+ const set = await call({ path: '/fleet/setVerifiedFacts', method: 'POST', crewToken, body: written, answers: setVerifiedFactsOutputSchema });
119
+ return set.isOk ? ok(undefined) : set;
120
+ },
113
121
  deregister: async (crewToken) => {
114
122
  const ended = await call({ path: '/ship/deregister', method: 'POST', crewToken, body: {}, answers: z.unknown() });
115
123
  return ended.isOk ? ok(undefined) : ended;
116
124
  },
117
- // The whole statement, as the proxy ship's crew; core 0.27 refuses the fields it does not know yet (aeolus-fleet#956).
125
+ // The whole statement, as the proxy ship's crew.
118
126
  setStatement: async (crewToken, statement) => {
119
127
  const stated = await call({ path: '/ship/setStatement', method: 'POST', crewToken, body: statement, answers: z.object({ version: z.int() }) });
120
128
  return stated.isOk ? ok(undefined) : stated;
121
129
  },
122
130
  // A proxy ship's crew calls (decision 0040), as the gateway's computer side makes them.
131
+ receiveReply: async (crewToken, { messageId, signal }) => {
132
+ const taken = await call({ path: '/ship/receiveReply', method: 'POST', crewToken, body: { messageId }, answers: receiveOutputSchema, signal });
133
+ if (!taken.isOk) {
134
+ return taken;
135
+ }
136
+ const [reply] = taken.value.deliveries;
137
+ return ok(reply === undefined ? undefined : { deliveryId: reply.deliveryId, messageId: reply.messageId, contentType: reply.contentType, payload: reply.payload });
138
+ },
123
139
  pushReceive: async (crewToken, { max, signal }) => {
124
140
  const taken = await call({ path: '/ship/pushReceive', method: 'POST', crewToken, body: { max }, answers: pushReceiveOutputSchema, signal });
125
141
  return taken.isOk
@@ -1 +1 @@
1
- {"version":3,"file":"rest-fleet-door.js","sourceRoot":"","sources":["../../../src/adapters/fleet/rest-fleet-door.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest-fleet-door.js","sourceRoot":"","sources":["../../../src/adapters/fleet/rest-fleet-door.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import { type Context } from '../trpc/router.js';
3
+ import { type SignInWay } from './signal.js';
4
+ export declare function registerAddServerPage(server: FastifyInstance, deps: {
5
+ contextFor: (cookie: string | undefined) => Context;
6
+ signIn: SignInWay;
7
+ }): void;
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Adding an outside MCP server (design B, Signal, screen 7; flow F10), for
3
+ * an actor holding fleet:manage, in three steps: its address and
4
+ * credential, the gateway's check of the tools it answers with, then its
5
+ * owner, when it is approved. The check keeps nothing, so the owner step
6
+ * carries the address and credential on in its form, on a page no cache
7
+ * keeps. Each step calls the gateway's own API as the caller, so the pages
8
+ * check nothing the API does not; they refuse a form sent from another
9
+ * origin.
10
+ */
11
+ import { randomUUID } from 'node:crypto';
12
+ import { idSchema } from '@aeolus-fleet/common';
13
+ import { TRPCError } from '@trpc/server';
14
+ import { getHTTPStatusCodeFromError } from '@trpc/server/http';
15
+ import { z } from 'zod';
16
+ import { gatewayRouter } from '../trpc/router.js';
17
+ import { acceptForms, escaped, isSameOrigin } from './html.js';
18
+ import { icon, ring, signalPage, signInPrompt, statusBadge } from './signal.js';
19
+ const HTTP_FORBIDDEN = 403;
20
+ const HTTP_SEE_OTHER = 303;
21
+ const HTTP_INTERNAL_ERROR = 500;
22
+ const LIST = '/outside-parties';
23
+ const PAGE = `${LIST}/add`;
24
+ const TITLE = 'Add MCP server';
25
+ const CONCURRENCY_LIMIT_DEFAULT = 4;
26
+ const formSchema = z.record(z.string(), z.string());
27
+ /** The credential fields a form sends, in the order the address step asks for them. */
28
+ const CREDENTIAL_FIELDS = ['credentialKind', 'token', 'clientId', 'clientSecret', 'issuer', 'scope'];
29
+ /** The steps of adding a server, as the design numbers them. */
30
+ const STEPS = ['Address', 'Check', 'Owner'];
31
+ function field(form, name) {
32
+ return form[name] ?? '';
33
+ }
34
+ function steps(current) {
35
+ const at = STEPS.indexOf(current);
36
+ const items = STEPS.map((step, index) => `<li class="${index <= at ? 'done' : ''}"${index === at ? ' aria-current="step"' : ''}>${String(index + 1)} ${step}</li>`).join('');
37
+ return `<ol class="steps">${items}</ol>`;
38
+ }
39
+ function head(current) {
40
+ return `<a class="back" href="${LIST}">${icon('arrowLeft', 14)}Outside parties</a><div class="lead"><h1>${TITLE}</h1></div>${steps(current)}`;
41
+ }
42
+ function alert(message) {
43
+ return message === undefined ? '' : `<section class="card alert tone-attention" role="alert"><p>${escaped(message)}</p></section>`;
44
+ }
45
+ function credentialOf(form) {
46
+ if (field(form, 'credentialKind') === 'clientCredentials') {
47
+ const scope = field(form, 'scope');
48
+ return { kind: 'clientCredentials', clientId: field(form, 'clientId'), clientSecret: field(form, 'clientSecret'), issuer: field(form, 'issuer'), ...(scope === '' ? {} : { scope }) };
49
+ }
50
+ return { kind: 'bearer', token: field(form, 'token') };
51
+ }
52
+ function addressBody(form, refusal) {
53
+ const isClient = field(form, 'credentialKind') === 'clientCredentials';
54
+ return `${head('Address')}${alert(refusal)}<section class="card"><form method="post" action="${PAGE}/check" style="display:grid;gap:12px">
55
+ <label class="field"><span>Streamable HTTP address</span><input type="url" name="url" value="${escaped(field(form, 'url'))}" placeholder="https://mcp.example.com/mcp" required></label>
56
+ <fieldset><legend>The server's credential</legend>
57
+ <label class="field"><span>Credential</span><select name="credentialKind"><option value="bearer">Bearer token</option><option value="clientCredentials"${isClient ? ' selected' : ''}>OAuth client credentials</option></select></label>
58
+ <label class="field"><span>Bearer token</span><input type="password" name="token"></label>
59
+ <label class="field"><span>Client id</span><input type="text" name="clientId" value="${escaped(field(form, 'clientId'))}"></label>
60
+ <label class="field"><span>Client secret</span><input type="password" name="clientSecret"></label>
61
+ <label class="field"><span>Issuer</span><input type="url" name="issuer" value="${escaped(field(form, 'issuer'))}"></label>
62
+ <label class="field"><span>Scope</span><input type="text" name="scope" value="${escaped(field(form, 'scope'))}"></label>
63
+ </fieldset>
64
+ <div class="actions"><button class="primary">${icon('check', 14)}Check the server</button></div></form></section>`;
65
+ }
66
+ /** A proxy ship's name offered from the server's address: its host's first name that says whose it is. */
67
+ function suggestedName(url) {
68
+ try {
69
+ const labels = new URL(url).hostname.split('.').filter((label) => label !== 'mcp' && label !== 'www');
70
+ return (labels[0] ?? '').toLowerCase().replaceAll(/[^a-z0-9]+/g, '-').replaceAll(/^-+|-+$/g, '');
71
+ }
72
+ catch {
73
+ return '';
74
+ }
75
+ }
76
+ /** The address and credential, carried on in the owner step's form. */
77
+ function carried(form) {
78
+ return ['url', ...CREDENTIAL_FIELDS].map((name) => `<input type="hidden" name="${name}" value="${escaped(field(form, name))}">`).join('');
79
+ }
80
+ function toolsCard(tools) {
81
+ const count = tools.length;
82
+ const rows = tools.map((tool) => `<li><span class="mono">${escaped(tool.name)}</span>${tool.description === undefined ? '' : `<span class="muted">${escaped(tool.description)}</span>`}</li>`).join('');
83
+ return `<section class="card" style="justify-items:center;text-align:center">${ring({ tone: 'ok', center: { count }, label: `${String(count)} ${count === 1 ? 'tool' : 'tools'}` })}${statusBadge({ tone: 'ok', icon: 'check', label: 'Server answers' })}<ul class="tool-rows">${rows}</ul></section>`;
84
+ }
85
+ function ownerBody(form, shown) {
86
+ const requestId = field(form, 'requestId') === '' ? randomUUID() : field(form, 'requestId');
87
+ const name = field(form, 'name') === '' ? suggestedName(field(form, 'url')) : field(form, 'name');
88
+ const limit = field(form, 'concurrencyLimit') === '' ? String(CONCURRENCY_LIMIT_DEFAULT) : field(form, 'concurrencyLimit');
89
+ return `${head(shown.tools === undefined ? 'Owner' : 'Check')}${alert(shown.refusal)}${shown.tools === undefined ? '' : toolsCard(shown.tools)}<section class="card"><h2>Its owner</h2>
90
+ <form method="post" action="${PAGE}" style="display:grid;gap:12px"><input type="hidden" name="requestId" value="${escaped(requestId)}">${carried(form)}
91
+ <p class="muted mono">${escaped(field(form, 'url'))}</p>
92
+ <label class="field"><span>Proxy ship's name</span><input type="text" name="name" value="${escaped(name)}" required></label>
93
+ <label class="field"><span>Owner</span><input type="text" name="ownerShipId" value="${escaped(field(form, 'ownerShipId'))}" placeholder="shp_..." required><span class="muted">A person ship. It answers for this server.</span></label>
94
+ <label class="field"><span>Calls at once</span><input type="number" name="concurrencyLimit" min="1" max="10" value="${escaped(limit)}"></label>
95
+ <div class="actions"><button class="primary">${icon('check', 14)}Add ${escaped(name === '' ? 'server' : name)}</button><a class="button" href="${PAGE}">Back to the address</a></div></form></section>`;
96
+ }
97
+ function html(reply, page) {
98
+ return reply
99
+ .code(page.status)
100
+ .type('text/html; charset=utf-8')
101
+ .header('cache-control', 'no-store')
102
+ .send(signalPage({ title: TITLE, tab: 'outsideParties', body: page.body, isSignedIn: page.isSignedIn }));
103
+ }
104
+ export function registerAddServerPage(server, deps) {
105
+ acceptForms(server);
106
+ /** Renders a step as the caller; a refusal shows the step it came from again, with why, or asks to sign in. */
107
+ const answer = async (exchange, step) => {
108
+ const { request, reply } = exchange;
109
+ const context = deps.contextFor(request.headers.cookie);
110
+ const actor = await context.authenticateActor({ cookie: context.cookie, crewToken: context.crewToken });
111
+ const isSignedIn = actor.isOk && actor.value.kind === 'account';
112
+ try {
113
+ if (!actor.isOk) {
114
+ throw new TRPCError({ code: 'UNAUTHORIZED', message: actor.error.message });
115
+ }
116
+ return await step.render(gatewayRouter.createCaller(context));
117
+ }
118
+ catch (error) {
119
+ if (!(error instanceof TRPCError)) {
120
+ throw error;
121
+ }
122
+ if (error.code === 'UNAUTHORIZED') {
123
+ return reply.code(getHTTPStatusCodeFromError(error)).type('text/html; charset=utf-8').send(signalPage({ title: TITLE, body: signInPrompt({ message: error.message, way: deps.signIn, returnTo: PAGE }) }));
124
+ }
125
+ const isInternal = error.code === 'INTERNAL_SERVER_ERROR';
126
+ return html(reply, { status: isInternal ? HTTP_INTERNAL_ERROR : getHTTPStatusCodeFromError(error), body: step.refused(isInternal ? 'Internal error' : error.message), isSignedIn });
127
+ }
128
+ };
129
+ const formOf = (request) => {
130
+ const form = formSchema.safeParse(request.body);
131
+ return form.success ? form.data : {};
132
+ };
133
+ server.get(PAGE, (request, reply) => answer({ request, reply }, {
134
+ render: () => html(reply, { status: 200, body: addressBody({}), isSignedIn: true }),
135
+ refused: (message) => addressBody({}, message),
136
+ }));
137
+ server.post(`${PAGE}/check`, (request, reply) => {
138
+ if (!isSameOrigin(request)) {
139
+ return reply.code(HTTP_FORBIDDEN).type('text/plain; charset=utf-8').send('A form for this page is sent only from this page.');
140
+ }
141
+ const form = formOf(request);
142
+ return answer({ request, reply }, {
143
+ render: async (caller) => {
144
+ const { tools } = await caller.parties.check({ url: field(form, 'url'), credential: credentialOf(form) });
145
+ return html(reply, { status: 200, body: ownerBody(form, { tools }), isSignedIn: true });
146
+ },
147
+ refused: (message) => addressBody(form, message),
148
+ });
149
+ });
150
+ server.post(PAGE, (request, reply) => {
151
+ if (!isSameOrigin(request)) {
152
+ return reply.code(HTTP_FORBIDDEN).type('text/plain; charset=utf-8').send('A form for this page is sent only from this page.');
153
+ }
154
+ const form = formOf(request);
155
+ return answer({ request, reply }, {
156
+ render: async (caller) => {
157
+ const ownerShipId = idSchema('ship').safeParse(field(form, 'ownerShipId').trim());
158
+ if (!ownerShipId.success) {
159
+ throw new TRPCError({ code: 'BAD_REQUEST', message: "The owner's ship id is not a ship id (shp_...)" });
160
+ }
161
+ const approved = await caller.parties.approve({
162
+ requestId: field(form, 'requestId'),
163
+ name: field(form, 'name'),
164
+ url: field(form, 'url'),
165
+ credential: credentialOf(form),
166
+ ownerShipId: ownerShipId.data,
167
+ concurrencyLimit: Number(field(form, 'concurrencyLimit')),
168
+ });
169
+ return reply.code(HTTP_SEE_OTHER).header('location', `${LIST}/${encodeURIComponent(approved.name)}`).send();
170
+ },
171
+ refused: (message) => ownerBody(form, { refusal: message }),
172
+ });
173
+ });
174
+ }
175
+ //# sourceMappingURL=add-server-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-server-page.js","sourceRoot":"","sources":["../../../src/adapters/http/add-server-page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { FastifyInstance, FastifyReply, FastifyRequest } from 'fastify';
2
+ import { type Context } from '../trpc/router.js';
3
+ /** Where the person goes once a delivery is dealt with, or when it no longer waits. */
4
+ export declare const OVERVIEW = "/overview";
5
+ /** A delivery the inbox lists, as the Overview shows it: opening it is a form, as it acknowledges the delivery. */
6
+ export declare function waitingItem(entry: {
7
+ deliveryId: string;
8
+ from: string;
9
+ title: string;
10
+ }): string;
11
+ /** How the Overview answers a page of its own: it renders as the caller, and says why the API refused, or asks to sign in. */
12
+ export type PageAnswer = (exchange: {
13
+ request: FastifyRequest;
14
+ reply: FastifyReply;
15
+ render: (context: Context) => Promise<FastifyReply>;
16
+ onRefused?: (context: Context, refused: {
17
+ status: number;
18
+ message: string;
19
+ }) => FastifyReply | Promise<FastifyReply>;
20
+ }) => Promise<FastifyReply>;
21
+ /** The delivery forms, posted from the Overview, answered as the Overview answers its own pages. */
22
+ export declare function registerDeliveryPages(server: FastifyInstance, deps: {
23
+ answer: PageAnswer;
24
+ }): void;
@@ -0,0 +1,115 @@
1
+ /**
2
+ * A delivery that waits on a person, opened from the Overview (design B,
3
+ * Signal): one item in focus. Opening is the person's own act, so it is a
4
+ * form, never a link: the gateway acknowledges the delivery for them, and
5
+ * the page shows it whole once. A question is answered with one tap on a
6
+ * button that names the option it sends, the asker's pick on a dashed edge;
7
+ * any delivery may get a note as its answer, or be done with. Each form
8
+ * calls the gateway's own API as the person.
9
+ */
10
+ import { ANSWER_CONTENT_TYPE, answerSchema, isQuestionContentType, questionSchema } from '@aeolus-fleet/common';
11
+ import { TRPCError } from '@trpc/server';
12
+ import { z } from 'zod';
13
+ import { gatewayRouter } from '../trpc/router.js';
14
+ import { escaped, isSameOrigin } from './html.js';
15
+ import { icon, signalPage } from './signal.js';
16
+ /** Where the person goes once a delivery is dealt with, or when it no longer waits. */
17
+ export const OVERVIEW = '/overview';
18
+ const HTTP_FORBIDDEN = 403;
19
+ const HTTP_SEE_OTHER = 303;
20
+ const TITLE = 'Overview';
21
+ const formSchema = z.record(z.string(), z.string());
22
+ function deliveryPath(deliveryId, action) {
23
+ return `${OVERVIEW}/deliveries/${encodeURIComponent(deliveryId)}/${action}`;
24
+ }
25
+ /** A delivery the inbox lists, as the Overview shows it: opening it is a form, as it acknowledges the delivery. */
26
+ export function waitingItem(entry) {
27
+ return `<form method="post" action="${deliveryPath(entry.deliveryId, 'open')}"><button class="item"><span class="text"><span>${escaped(entry.title)}</span><span class="tag">${icon('users', 12)}${escaped(entry.from)}</span></span></button></form>`;
28
+ }
29
+ function parsedQuestion(opened) {
30
+ if (!isQuestionContentType(opened.contentType)) {
31
+ return undefined;
32
+ }
33
+ try {
34
+ const question = questionSchema.safeParse(JSON.parse(opened.payload));
35
+ return question.success ? question.data : undefined;
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ const NOTE_FIELD = '<label class="field"><span>Note</span><textarea name="note" rows="2" placeholder="Optional, sent with your answer"></textarea></label>';
42
+ function questionCard(opened, question) {
43
+ const picked = question.options.find((option) => option.key === question.pick.option);
44
+ const buttons = question.options
45
+ .map((option) => {
46
+ const isPick = option.key === question.pick.option;
47
+ return `<button class="${isPick ? 'primary pick' : ''}" name="option" value="${String(option.key)}" title="${escaped(option.detail)}">${icon(isPick ? 'check' : 'x', 14)}${escaped(option.label)}</button>`;
48
+ })
49
+ .join('');
50
+ const pickLine = picked === undefined ? '' : `<p class="muted">${escaped(picked.label)} is the pick of ${escaped(opened.from)}: ${escaped(question.pick.why)}</p>`;
51
+ return `<form method="post" action="${deliveryPath(opened.deliveryId, 'answer')}" style="display:grid;gap:12px"><input type="hidden" name="questionId" value="${escaped(question.id)}">
52
+ <p class="payload">${escaped(question.context)}</p>
53
+ <div class="answers">${buttons}</div>${pickLine}${NOTE_FIELD}<div class="actions"><button name="option" value="">Send the note alone</button></div></form>`;
54
+ }
55
+ function messageCard(opened) {
56
+ return `<pre class="payload">${escaped(opened.payload)}</pre>
57
+ <form method="post" action="${deliveryPath(opened.deliveryId, 'answer')}" style="display:grid;gap:12px">${NOTE_FIELD.replace('Optional, sent with your answer', 'Your answer')}<div class="actions"><button class="primary">Answer</button></div></form>
58
+ <form method="post" action="${deliveryPath(opened.deliveryId, 'done')}"><div class="actions"><button>${icon('check', 14)}Done</button></div></form>`;
59
+ }
60
+ function deliveryBody(opened) {
61
+ const question = parsedQuestion(opened);
62
+ const card = question === undefined ? messageCard(opened) : questionCard(opened, question);
63
+ return `<section class="card"><span class="tag">${icon('users', 12)}${escaped(opened.from)} · ${escaped(new Date(opened.sentAt).toUTCString())}</span><h2>${escaped(question?.title ?? opened.title)}</h2>${card}</section>`;
64
+ }
65
+ /** The answer a form sends: an option and a note, or a note alone, for a question; a note as plain text otherwise. */
66
+ function answerOf(form) {
67
+ const note = (form.note ?? '').trim();
68
+ const questionId = form.questionId;
69
+ if (questionId === undefined) {
70
+ if (note === '') {
71
+ throw new TRPCError({ code: 'BAD_REQUEST', message: 'Write your answer first' });
72
+ }
73
+ return { contentType: 'text/plain', payload: note };
74
+ }
75
+ const option = form.option ?? '';
76
+ const answer = answerSchema.safeParse({ questionId, ...(option === '' ? {} : { option: Number(option) }), ...(note === '' ? {} : { note }) });
77
+ if (!answer.success) {
78
+ throw new TRPCError({ code: 'BAD_REQUEST', message: 'Tap an option, or write a note' });
79
+ }
80
+ return { contentType: ANSWER_CONTENT_TYPE, payload: JSON.stringify(answer.data) };
81
+ }
82
+ function html(reply, page) {
83
+ return reply.code(page.status).type('text/html; charset=utf-8').header('cache-control', 'no-store').send(signalPage({ title: TITLE, tab: 'overview', body: page.body, isSignedIn: true }));
84
+ }
85
+ const HTTP_NOT_FOUND = 404;
86
+ function noLongerWaits(refused) {
87
+ return `<section class="card"><h2>This no longer waits for you</h2><p class="muted">${escaped(refused.message)}</p><div class="actions"><a class="button" href="${OVERVIEW}">Back to the overview</a></div></section>`;
88
+ }
89
+ /** The delivery forms, posted from the Overview, answered as the Overview answers its own pages. */
90
+ export function registerDeliveryPages(server, deps) {
91
+ const act = (action, run) => {
92
+ server.post(`${OVERVIEW}/deliveries/:deliveryId/${action}`, (request, reply) => {
93
+ if (!isSameOrigin(request)) {
94
+ return reply.code(HTTP_FORBIDDEN).type('text/plain; charset=utf-8').send('A form for this page is sent only from this page.');
95
+ }
96
+ const form = formSchema.safeParse(request.body);
97
+ return deps.answer({
98
+ request,
99
+ reply,
100
+ render: (context) => run({ caller: gatewayRouter.createCaller(context), deliveryId: request.params.deliveryId, form: form.success ? form.data : {}, reply }),
101
+ onRefused: (_context, refused) => html(reply, refused.status === HTTP_NOT_FOUND ? { status: refused.status, body: noLongerWaits(refused) } : { status: refused.status, body: `<section class="card alert tone-attention" role="alert"><p>${escaped(refused.message)}</p></section>` }),
102
+ });
103
+ });
104
+ };
105
+ act('open', async ({ caller, deliveryId, reply }) => html(reply, { status: 200, body: deliveryBody(await caller.people.open({ deliveryId })) }));
106
+ act('answer', async ({ caller, deliveryId, form, reply }) => {
107
+ await caller.people.answer({ deliveryId, ...answerOf(form) });
108
+ return reply.code(HTTP_SEE_OTHER).header('location', OVERVIEW).send();
109
+ });
110
+ act('done', async ({ caller, deliveryId, reply }) => {
111
+ await caller.people.done({ deliveryId });
112
+ return reply.code(HTTP_SEE_OTHER).header('location', OVERVIEW).send();
113
+ });
114
+ }
115
+ //# sourceMappingURL=delivery-page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-page.js","sourceRoot":"","sources":["../../../src/adapters/http/delivery-page.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The gateway's address as a person opens it: the address itself sends them
3
+ * to the Overview, and an address with no page answers a page in the
4
+ * gateway's look. A client that calls an unknown address (no page asked
5
+ * for: not a GET that accepts HTML) gets Fastify's JSON answer as before.
6
+ */
7
+ import type { FastifyInstance } from 'fastify';
8
+ export declare function registerFrontDoor(server: FastifyInstance): void;
@@ -0,0 +1,19 @@
1
+ import { signalPage } from './signal.js';
2
+ const HTTP_SEE_OTHER = 303;
3
+ const HTTP_NOT_FOUND = 404;
4
+ const OVERVIEW = '/overview';
5
+ /** Whether a browser asks for a page: a GET (or HEAD) that accepts HTML. */
6
+ function isPageAsked(request) {
7
+ return (request.method === 'GET' || request.method === 'HEAD') && (request.headers.accept ?? '').includes('text/html');
8
+ }
9
+ export function registerFrontDoor(server) {
10
+ server.get('/', (_request, reply) => reply.code(HTTP_SEE_OTHER).header('location', OVERVIEW).send());
11
+ server.setNotFoundHandler((request, reply) => {
12
+ if (!isPageAsked(request)) {
13
+ return reply.code(HTTP_NOT_FOUND).send({ message: `Route ${request.method}:${request.url} not found`, error: 'Not Found', statusCode: HTTP_NOT_FOUND });
14
+ }
15
+ const body = `<section class="card"><h2>This page does not exist</h2><div class="actions"><a class="button" href="${OVERVIEW}">Go to the Overview</a></div></section>`;
16
+ return reply.code(HTTP_NOT_FOUND).type('text/html; charset=utf-8').send(signalPage({ title: 'Not found', body }));
17
+ });
18
+ }
19
+ //# sourceMappingURL=front-door.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"front-door.js","sourceRoot":"","sources":["../../../src/adapters/http/front-door.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,4EAA4E;AAC5E,SAAS,WAAW,CAAC,OAAuB;IAC1C,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAErG,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC3C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC,CAAC;QAC1J,CAAC;QACD,MAAM,IAAI,GAAG,uGAAuG,QAAQ,0CAA0C,CAAC;QACvK,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,CAAC,CAAC,CAAC;AACL,CAAC"}