@aeolus-fleet/core 0.27.0 → 0.27.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 (180) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/prisma/generated/browser.d.ts +6 -0
  3. package/dist/adapters/prisma/generated/client.d.ts +6 -0
  4. package/dist/adapters/prisma/generated/commonInputTypes.d.ts +30 -0
  5. package/dist/adapters/prisma/generated/enums.d.ts +8 -0
  6. package/dist/adapters/prisma/generated/enums.js +7 -0
  7. package/dist/adapters/prisma/generated/enums.js.map +1 -1
  8. package/dist/adapters/prisma/generated/internal/class.d.ts +11 -0
  9. package/dist/adapters/prisma/generated/internal/class.js +4 -4
  10. package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
  11. package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +93 -1
  12. package/dist/adapters/prisma/generated/internal/prismaNamespace.js +9 -1
  13. package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
  14. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +9 -0
  15. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +9 -1
  16. package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
  17. package/dist/adapters/prisma/generated/models/Fleet.d.ts +283 -0
  18. package/dist/adapters/prisma/generated/models/Lease.d.ts +60 -1
  19. package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +35 -3
  20. package/dist/adapters/prisma/generated/models/PluginConnection.d.ts +1180 -0
  21. package/dist/adapters/prisma/generated/models/PluginConnection.js +2 -0
  22. package/dist/adapters/prisma/generated/models/PluginConnection.js.map +1 -0
  23. package/dist/adapters/prisma/generated/models/Ship.d.ts +290 -0
  24. package/dist/adapters/prisma/generated/models.d.ts +1 -0
  25. package/dist/adapters/prisma/history.js +4 -2
  26. package/dist/adapters/prisma/history.js.map +1 -1
  27. package/dist/adapters/prisma/messaging.js +5 -2
  28. package/dist/adapters/prisma/messaging.js.map +1 -1
  29. package/dist/adapters/prisma/network.js +7 -4
  30. package/dist/adapters/prisma/network.js.map +1 -1
  31. package/dist/adapters/prisma/overdue.js +4 -3
  32. package/dist/adapters/prisma/overdue.js.map +1 -1
  33. package/dist/adapters/prisma/plugin-connections.d.ts +4 -0
  34. package/dist/adapters/prisma/plugin-connections.js +20 -0
  35. package/dist/adapters/prisma/plugin-connections.js.map +1 -0
  36. package/dist/adapters/prisma/registry.js +3 -2
  37. package/dist/adapters/prisma/registry.js.map +1 -1
  38. package/dist/adapters/prisma/rows.js +2 -0
  39. package/dist/adapters/prisma/rows.js.map +1 -1
  40. package/dist/adapters/prisma/unit-of-work.d.ts +2 -1
  41. package/dist/adapters/prisma/unit-of-work.js +2 -0
  42. package/dist/adapters/prisma/unit-of-work.js.map +1 -1
  43. package/dist/adapters/trpc/context.d.ts +8 -0
  44. package/dist/adapters/trpc/fleet.d.ts +72 -16
  45. package/dist/adapters/trpc/fleet.js +31 -6
  46. package/dist/adapters/trpc/fleet.js.map +1 -1
  47. package/dist/adapters/trpc/router.d.ts +143 -14
  48. package/dist/adapters/trpc/ship-contract.js +1 -0
  49. package/dist/adapters/trpc/ship-contract.js.map +1 -1
  50. package/dist/adapters/trpc/ship-protocol.js +1 -1
  51. package/dist/adapters/trpc/ship-protocol.js.map +1 -1
  52. package/dist/adapters/trpc/ship.d.ts +85 -0
  53. package/dist/adapters/trpc/ship.js +48 -4
  54. package/dist/adapters/trpc/ship.js.map +1 -1
  55. package/dist/adapters/trpc/trpc.d.ts +7 -4
  56. package/dist/adapters/trpc/trpc.js +14 -5
  57. package/dist/adapters/trpc/trpc.js.map +1 -1
  58. package/dist/domain/messaging/delivery.d.ts +8 -2
  59. package/dist/domain/messaging/delivery.js +14 -9
  60. package/dist/domain/messaging/delivery.js.map +1 -1
  61. package/dist/domain/messaging/hand-over-delivery.d.ts +1 -0
  62. package/dist/domain/messaging/hand-over-delivery.js +1 -0
  63. package/dist/domain/messaging/hand-over-delivery.js.map +1 -1
  64. package/dist/domain/messaging/overdue.d.ts +2 -0
  65. package/dist/domain/messaging/overdue.js +3 -0
  66. package/dist/domain/messaging/overdue.js.map +1 -1
  67. package/dist/domain/messaging/ports.d.ts +2 -0
  68. package/dist/domain/messaging/push-receive-deliveries.d.ts +4 -1
  69. package/dist/domain/messaging/push-receive-deliveries.js +5 -3
  70. package/dist/domain/messaging/push-receive-deliveries.js.map +1 -1
  71. package/dist/domain/messaging/receive-deliveries.d.ts +21 -0
  72. package/dist/domain/messaging/receive-deliveries.js +5 -3
  73. package/dist/domain/messaging/receive-deliveries.js.map +1 -1
  74. package/dist/domain/messaging/receive-reply.d.ts +32 -0
  75. package/dist/domain/messaging/receive-reply.js +25 -0
  76. package/dist/domain/messaging/receive-reply.js.map +1 -0
  77. package/dist/domain/registry/check-reach.d.ts +6 -2
  78. package/dist/domain/registry/check-reach.js +4 -3
  79. package/dist/domain/registry/check-reach.js.map +1 -1
  80. package/dist/domain/registry/commission-ship.d.ts +6 -2
  81. package/dist/domain/registry/commission-ship.js +37 -6
  82. package/dist/domain/registry/commission-ship.js.map +1 -1
  83. package/dist/domain/registry/connect-plugin.d.ts +30 -0
  84. package/dist/domain/registry/connect-plugin.js +35 -0
  85. package/dist/domain/registry/connect-plugin.js.map +1 -0
  86. package/dist/domain/registry/discover.d.ts +1 -0
  87. package/dist/domain/registry/discover.js.map +1 -1
  88. package/dist/domain/registry/explain-reach.d.ts +1 -0
  89. package/dist/domain/registry/explain-reach.js.map +1 -1
  90. package/dist/domain/registry/leases.d.ts +6 -3
  91. package/dist/domain/registry/leases.js +7 -5
  92. package/dist/domain/registry/leases.js.map +1 -1
  93. package/dist/domain/registry/network-settings.d.ts +17 -6
  94. package/dist/domain/registry/network-settings.js +21 -10
  95. package/dist/domain/registry/network-settings.js.map +1 -1
  96. package/dist/domain/registry/plugin-connection.d.ts +48 -0
  97. package/dist/domain/registry/plugin-connection.js +35 -0
  98. package/dist/domain/registry/plugin-connection.js.map +1 -0
  99. package/dist/domain/registry/ports.d.ts +13 -1
  100. package/dist/domain/registry/read-built-in-rules.d.ts +2 -2
  101. package/dist/domain/registry/read-built-in-rules.js +3 -2
  102. package/dist/domain/registry/read-built-in-rules.js.map +1 -1
  103. package/dist/domain/registry/read-network-plugin.d.ts +23 -0
  104. package/dist/domain/registry/read-network-plugin.js +15 -0
  105. package/dist/domain/registry/read-network-plugin.js.map +1 -0
  106. package/dist/domain/registry/read-reach.d.ts +4 -2
  107. package/dist/domain/registry/read-reach.js +7 -2
  108. package/dist/domain/registry/read-reach.js.map +1 -1
  109. package/dist/domain/registry/recrew-ship.js +2 -0
  110. package/dist/domain/registry/recrew-ship.js.map +1 -1
  111. package/dist/domain/registry/release-ship.d.ts +4 -2
  112. package/dist/domain/registry/release-ship.js +4 -1
  113. package/dist/domain/registry/release-ship.js.map +1 -1
  114. package/dist/domain/registry/retire-ship.d.ts +2 -1
  115. package/dist/domain/registry/retire-ship.js +2 -0
  116. package/dist/domain/registry/retire-ship.js.map +1 -1
  117. package/dist/domain/registry/ship.d.ts +9 -5
  118. package/dist/domain/registry/ship.js +37 -4
  119. package/dist/domain/registry/ship.js.map +1 -1
  120. package/dist/domain/shared/delivery-way.d.ts +9 -5
  121. package/dist/domain/shared/delivery-way.js +17 -5
  122. package/dist/domain/shared/delivery-way.js.map +1 -1
  123. package/dist/domain/shared/errors.d.ts +1 -1
  124. package/dist/domain/shared/errors.js.map +1 -1
  125. package/dist/domain/shared/health.d.ts +3 -1
  126. package/dist/domain/shared/health.js +5 -3
  127. package/dist/domain/shared/health.js.map +1 -1
  128. package/dist/domain/shared/history.d.ts +2 -0
  129. package/dist/domain/shared/history.js.map +1 -1
  130. package/dist/domain/shared/read-health.d.ts +2 -1
  131. package/dist/domain/shared/read-health.js +9 -3
  132. package/dist/domain/shared/read-health.js.map +1 -1
  133. package/dist/domain/shared/read-sent-message.d.ts +31 -0
  134. package/dist/domain/shared/read-sent-message.js +28 -0
  135. package/dist/domain/shared/read-sent-message.js.map +1 -0
  136. package/dist/domain/shared/stuck.js +4 -2
  137. package/dist/domain/shared/stuck.js.map +1 -1
  138. package/dist/testing/container-images.d.ts +14 -0
  139. package/dist/testing/container-images.js +18 -0
  140. package/dist/testing/container-images.js.map +1 -0
  141. package/dist/testing/database.d.ts +14 -0
  142. package/dist/testing/database.js +48 -0
  143. package/dist/testing/database.js.map +1 -0
  144. package/dist/testing/fleet.d.ts +13 -0
  145. package/dist/testing/fleet.js +17 -0
  146. package/dist/testing/fleet.js.map +1 -0
  147. package/dist/testing/index.d.ts +12 -0
  148. package/dist/testing/index.js +12 -0
  149. package/dist/testing/index.js.map +1 -0
  150. package/dist/testing/keys.d.ts +1 -0
  151. package/dist/testing/keys.js +7 -0
  152. package/dist/testing/keys.js.map +1 -0
  153. package/dist/testing/migrate-lock.d.ts +12 -0
  154. package/dist/testing/migrate-lock.js +51 -0
  155. package/dist/testing/migrate-lock.js.map +1 -0
  156. package/dist/testing/migrated-template.d.ts +12 -0
  157. package/dist/testing/migrated-template.js +29 -0
  158. package/dist/testing/migrated-template.js.map +1 -0
  159. package/dist/testing/postgres-container.d.ts +16 -0
  160. package/dist/testing/postgres-container.js +30 -0
  161. package/dist/testing/postgres-container.js.map +1 -0
  162. package/dist/testing/postgres-global-setup.d.ts +15 -0
  163. package/dist/testing/postgres-global-setup.js +20 -0
  164. package/dist/testing/postgres-global-setup.js.map +1 -0
  165. package/dist/testing/prisma-cli.d.ts +5 -0
  166. package/dist/testing/prisma-cli.js +15 -0
  167. package/dist/testing/prisma-cli.js.map +1 -0
  168. package/dist/testing/result.d.ts +5 -0
  169. package/dist/testing/result.js +15 -0
  170. package/dist/testing/result.js.map +1 -0
  171. package/dist/wiring.d.ts +8 -0
  172. package/dist/wiring.js +14 -0
  173. package/dist/wiring.js.map +1 -1
  174. package/package.json +28 -2
  175. package/src/adapters/prisma/migrations/20261018250000_scope_catalogue/migration.sql +8 -7
  176. package/src/adapters/prisma/migrations/20261019100000_on_behalf_scope/migration.sql +3 -1
  177. package/src/adapters/prisma/migrations/20261019130000_plugin_connections/migration.sql +54 -0
  178. package/src/adapters/prisma/migrations/20261019150000_network_plugin_registered_at/migration.sql +23 -0
  179. package/src/adapters/prisma/migrations/20261019160000_lease_waker/migration.sql +4 -0
  180. package/src/adapters/prisma/schema.prisma +34 -5
@@ -123,13 +123,15 @@ class FleetAt {
123
123
  if (crewed.length === 0) {
124
124
  return takers.some((ship) => ship.isPerson) ? undefined : { cause: 'waitingForCrew', place: placeOf(delivery.recipient) };
125
125
  }
126
- const leases = crewed.flatMap((ship) => this.leaseOf(ship.shipId) ?? []);
126
+ // A person away is not stuck (interop 5.1): only the clocks of other crewed ships speak for it.
127
+ const leases = crewed.filter((ship) => !ship.isPerson).flatMap((ship) => this.leaseOf(ship.shipId) ?? []);
127
128
  const overdue = this.overdueOn({ state: 'pending', since }, leases);
128
129
  return overdue === undefined ? undefined : { cause: 'stalledInFlight', place: { kind: 'ship', shipId: overdue.shipId } };
129
130
  }
130
131
  whyInFlightStuck(delivery) {
131
132
  const lease = this.records.leases.find((held) => held.leaseId === delivery.leaseId);
132
- if (lease === undefined) {
133
+ if (lease === undefined || this.records.ships.some((ship) => ship.shipId === lease.shipId && ship.isPerson)) {
134
+ // A person away is not stuck (interop 5.1): handed and not opened is a fact with its age, not trouble.
133
135
  return undefined;
134
136
  }
135
137
  const isStalled = isPushedAt(lease, this.at) ? this.overdueOn(delivery, [lease]) !== undefined : isQuietSinceHandOver(lease, { delivery, at: this.at });
@@ -1 +1 @@
1
- {"version":3,"file":"stuck.js","sourceRoot":"","sources":["../../../src/domain/shared/stuck.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stuck.js","sourceRoot":"","sources":["../../../src/domain/shared/stuck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * The images Testcontainers pulls for the tests, from mirrors outside Docker
3
+ * Hub: CI runners share IPs, so anonymous Docker Hub pulls hit its rate limit
4
+ * at random (#437). Both mirrors serve the same image as Docker Hub and need
5
+ * no sign-in. ECR Public throttles anonymous pulls per IP too (#464), so CI
6
+ * keeps the images in the Actions cache; it lists them by running this file
7
+ * (see .github/actions/test-images).
8
+ */
9
+ /** Postgres 16, the oldest version the architecture supports, from Docker's official images on Amazon ECR Public. */
10
+ export declare const POSTGRES_IMAGE = "public.ecr.aws/docker/library/postgres:16-alpine";
11
+ /** Ryuk, the reaper Testcontainers starts to remove containers a run leaves behind, from Testcontainers' own GitHub registry. */
12
+ export declare const REAPER_IMAGE = "ghcr.io/testcontainers/ryuk:0.14.0";
13
+ /** Every image the tests start, one per line when this file runs, for CI to cache. */
14
+ export declare const TEST_IMAGES: readonly string[];
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The images Testcontainers pulls for the tests, from mirrors outside Docker
3
+ * Hub: CI runners share IPs, so anonymous Docker Hub pulls hit its rate limit
4
+ * at random (#437). Both mirrors serve the same image as Docker Hub and need
5
+ * no sign-in. ECR Public throttles anonymous pulls per IP too (#464), so CI
6
+ * keeps the images in the Actions cache; it lists them by running this file
7
+ * (see .github/actions/test-images).
8
+ */
9
+ /** Postgres 16, the oldest version the architecture supports, from Docker's official images on Amazon ECR Public. */
10
+ export const POSTGRES_IMAGE = 'public.ecr.aws/docker/library/postgres:16-alpine';
11
+ /** Ryuk, the reaper Testcontainers starts to remove containers a run leaves behind, from Testcontainers' own GitHub registry. */
12
+ export const REAPER_IMAGE = 'ghcr.io/testcontainers/ryuk:0.14.0';
13
+ /** Every image the tests start, one per line when this file runs, for CI to cache. */
14
+ export const TEST_IMAGES = [POSTGRES_IMAGE, REAPER_IMAGE];
15
+ if (import.meta.main) {
16
+ console.log(TEST_IMAGES.join('\n'));
17
+ }
18
+ //# sourceMappingURL=container-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"container-images.js","sourceRoot":"","sources":["../../src/testing/container-images.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,qHAAqH;AACrH,MAAM,CAAC,MAAM,cAAc,GAAG,kDAAkD,CAAC;AAEjF,iIAAiI;AACjI,MAAM,CAAC,MAAM,YAAY,GAAG,oCAAoC,CAAC;AAEjE,sFAAsF;AACtF,MAAM,CAAC,MAAM,WAAW,GAAsB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAE7E,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Creates an empty database in the shared Postgres container and returns its URL. */
2
+ export declare function createEmptyDatabase(): Promise<string>;
3
+ /**
4
+ * Creates a database with the committed migrations applied, as `prisma
5
+ * migrate deploy` leaves it: a copy of the template the global setup migrated.
6
+ */
7
+ export declare function createMigratedDatabase(): Promise<string>;
8
+ /** Creates a copy of the named template database in the shared Postgres container and returns its URL. */
9
+ export declare function createCopyOf(template: string): Promise<string>;
10
+ /**
11
+ * Runs a SQL file against the given database in one round trip, as
12
+ * `prisma db execute --file` does, without starting a Prisma CLI per file.
13
+ */
14
+ export declare function executeSqlFile(databaseUrl: string, file: string): Promise<void>;
@@ -0,0 +1,48 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { inject } from 'vitest';
4
+ import { createPrismaClient } from '../adapters/prisma/client.js';
5
+ import { databaseUrlOf, MIGRATED_TEMPLATE } from './migrated-template.js';
6
+ /** Creates an empty database in the shared Postgres container and returns its URL. */
7
+ export function createEmptyDatabase() {
8
+ return createDatabase('');
9
+ }
10
+ /**
11
+ * Creates a database with the committed migrations applied, as `prisma
12
+ * migrate deploy` leaves it: a copy of the template the global setup migrated.
13
+ */
14
+ export function createMigratedDatabase() {
15
+ return createCopyOf(MIGRATED_TEMPLATE);
16
+ }
17
+ /** Creates a copy of the named template database in the shared Postgres container and returns its URL. */
18
+ export function createCopyOf(template) {
19
+ return createDatabase(` TEMPLATE ${template}`);
20
+ }
21
+ /**
22
+ * Runs a SQL file against the given database in one round trip, as
23
+ * `prisma db execute --file` does, without starting a Prisma CLI per file.
24
+ */
25
+ export async function executeSqlFile(databaseUrl, file) {
26
+ const client = createPrismaClient(databaseUrl);
27
+ try {
28
+ // The file is a committed migration, never outside input.
29
+ await client.$executeRawUnsafe(await readFile(file, 'utf8'));
30
+ }
31
+ finally {
32
+ await client.$disconnect();
33
+ }
34
+ }
35
+ async function createDatabase(template) {
36
+ const adminUrl = inject('postgresUrl');
37
+ const name = `aeolus_test_${randomBytes(6).toString('hex')}`;
38
+ const admin = createPrismaClient(adminUrl);
39
+ try {
40
+ // The name is generated above and the template is a constant, never outside input.
41
+ await admin.$executeRawUnsafe(`CREATE DATABASE ${name}${template}`);
42
+ }
43
+ finally {
44
+ await admin.$disconnect();
45
+ }
46
+ return databaseUrlOf(adminUrl, name);
47
+ }
48
+ //# sourceMappingURL=database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/testing/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE1E,sFAAsF;AACtF,MAAM,UAAU,mBAAmB;IACjC,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,YAAY,CAAC,iBAAiB,CAAC,CAAC;AACzC,CAAC;AAED,0GAA0G;AAC1G,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,OAAO,cAAc,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,IAAY;IACpE,MAAM,MAAM,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,0DAA0D;QAC1D,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAAgB;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,eAAe,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7D,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,mFAAmF;QACnF,MAAM,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { FleetInitialised } from '../domain/registry/initialise-fleet.js';
2
+ import type { Caller } from '../domain/shared/caller.js';
3
+ /** The fleet's public URL in tests: where ships reach it. */
4
+ export declare const FLEET_URL = "https://fleet.example.com";
5
+ /** The operator's login in tests: what fleet init asks for, and sign-in takes. */
6
+ export declare const OPERATOR: {
7
+ email: string;
8
+ password: string;
9
+ };
10
+ /** argo as the caller, holding every scope, as its secret or console session makes it. */
11
+ export declare function operatorCaller(fleet: FleetInitialised): Caller;
12
+ /** The ship secret a use case issued; a commission that comes again issues none. */
13
+ export declare function secretOf(secret: string | null): string;
@@ -0,0 +1,17 @@
1
+ import { SCOPES } from '@aeolus-fleet/common';
2
+ /** The fleet's public URL in tests: where ships reach it. */
3
+ export const FLEET_URL = 'https://fleet.example.com';
4
+ /** The operator's login in tests: what fleet init asks for, and sign-in takes. */
5
+ export const OPERATOR = { email: 'operator@example.com', password: 'correct horse battery staple' };
6
+ /** argo as the caller, holding every scope, as its secret or console session makes it. */
7
+ export function operatorCaller(fleet) {
8
+ return { shipId: fleet.operatorShipId, fleetId: fleet.fleetId, kind: 'operator', scopes: [...SCOPES] };
9
+ }
10
+ /** The ship secret a use case issued; a commission that comes again issues none. */
11
+ export function secretOf(secret) {
12
+ if (secret === null) {
13
+ throw new Error('No ship secret was issued');
14
+ }
15
+ return secret;
16
+ }
17
+ //# sourceMappingURL=fleet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/testing/fleet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,6DAA6D;AAC7D,MAAM,CAAC,MAAM,SAAS,GAAG,2BAA2B,CAAC;AAErD,kFAAkF;AAClF,MAAM,CAAC,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAE,8BAA8B,EAAE,CAAC;AAEpG,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,KAAuB;IACpD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,QAAQ,CAAC,MAAqB;IAC5C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { argon2idPasswordHasher } from '../adapters/crypto/passwords.js';
2
+ export { createPrismaClient, type PrismaClient } from '../adapters/prisma/client.js';
3
+ export { SHIP_PROTOCOL } from '../adapters/trpc/ship-protocol.js';
4
+ export { createApp } from '../app.js';
5
+ export type { Caller } from '../domain/shared/caller.js';
6
+ export { createUseCases, type UseCases } from '../wiring.js';
7
+ export { createCopyOf, createEmptyDatabase, createMigratedDatabase, executeSqlFile } from './database.js';
8
+ export { FLEET_URL, OPERATOR, operatorCaller, secretOf } from './fleet.js';
9
+ export { newKey } from './keys.js';
10
+ export { migrateWhileAnotherHoldsTheLock } from './migrate-lock.js';
11
+ export { databaseUrlOf } from './migrated-template.js';
12
+ export { refusalOf, unwrap } from './result.js';
@@ -0,0 +1,12 @@
1
+ export { argon2idPasswordHasher } from '../adapters/crypto/passwords.js';
2
+ export { createPrismaClient } from '../adapters/prisma/client.js';
3
+ export { SHIP_PROTOCOL } from '../adapters/trpc/ship-protocol.js';
4
+ export { createApp } from '../app.js';
5
+ export { createUseCases } from '../wiring.js';
6
+ export { createCopyOf, createEmptyDatabase, createMigratedDatabase, executeSqlFile } from './database.js';
7
+ export { FLEET_URL, OPERATOR, operatorCaller, secretOf } from './fleet.js';
8
+ export { newKey } from './keys.js';
9
+ export { migrateWhileAnotherHoldsTheLock } from './migrate-lock.js';
10
+ export { databaseUrlOf } from './migrated-template.js';
11
+ export { refusalOf, unwrap } from './result.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAqB,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,+BAA+B,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function newKey(): string;
@@ -0,0 +1,7 @@
1
+ /** A new idempotency key on every call, for tests whose requests must never repeat one by chance. */
2
+ let next = 0;
3
+ export function newKey() {
4
+ next += 1;
5
+ return `key-${String(next)}`;
6
+ }
7
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/testing/keys.ts"],"names":[],"mappings":"AAAA,qGAAqG;AACrG,IAAI,IAAI,GAAG,CAAC,CAAC;AAEb,MAAM,UAAU,MAAM;IACpB,IAAI,IAAI,CAAC,CAAC;IACV,OAAO,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface WaitedMigrate<T> {
2
+ outcome: T;
3
+ releasedAt: number;
4
+ finishedAt: number;
5
+ }
6
+ /**
7
+ * Holds Prisma Migrate's lock on the database as a long migrate in progress
8
+ * does: starts `migrate`, holds the lock until it has waited for it longer
9
+ * than Prisma's own wait, then lets go. Says when it let go and when the
10
+ * migrate finished.
11
+ */
12
+ export declare function migrateWhileAnotherHoldsTheLock<T>(databaseUrl: string, migrate: () => Promise<T>): Promise<WaitedMigrate<T>>;
@@ -0,0 +1,51 @@
1
+ import { createPrismaClient } from '../adapters/prisma/client.js';
2
+ /** The advisory lock Prisma Migrate holds on a database while it migrates. */
3
+ const PRISMA_MIGRATE_LOCK = 72_707_369;
4
+ /** Longer than Prisma Migrate itself waits for its lock (10 seconds). */
5
+ const LONG_MIGRATION_MS = 12_000;
6
+ /** How often to look whether the migrate waits for the lock. */
7
+ const POLL_MS = 100;
8
+ /**
9
+ * Holds Prisma Migrate's lock on the database as a long migrate in progress
10
+ * does: starts `migrate`, holds the lock until it has waited for it longer
11
+ * than Prisma's own wait, then lets go. Says when it let go and when the
12
+ * migrate finished.
13
+ */
14
+ export async function migrateWhileAnotherHoldsTheLock(databaseUrl, migrate) {
15
+ const database = createPrismaClient(databaseUrl);
16
+ let migrating;
17
+ try {
18
+ await database.$transaction(async (inProgress) => {
19
+ await inProgress.$executeRaw `SELECT pg_advisory_xact_lock(${PRISMA_MIGRATE_LOCK})`;
20
+ migrating = migrate().then((outcome) => ({ outcome, finishedAt: Date.now() }));
21
+ // Awaited below, once the lock is let go; a failure surfaces there.
22
+ migrating.catch(() => undefined);
23
+ await waitForLockWaiter(inProgress);
24
+ await new Promise((resolve) => setTimeout(resolve, LONG_MIGRATION_MS));
25
+ }, { timeout: 60_000 });
26
+ }
27
+ finally {
28
+ await database.$disconnect();
29
+ }
30
+ const releasedAt = Date.now();
31
+ if (migrating === undefined) {
32
+ throw new Error('the migrate never started');
33
+ }
34
+ return { ...(await migrating), releasedAt };
35
+ }
36
+ /** Resolves once another session waits for Prisma Migrate's lock, which this one holds. */
37
+ async function waitForLockWaiter(holder) {
38
+ for (;;) {
39
+ const [row] = await holder.$queryRaw `
40
+ SELECT EXISTS (
41
+ SELECT 1 FROM pg_locks
42
+ WHERE locktype = 'advisory' AND objid = ${PRISMA_MIGRATE_LOCK} AND NOT granted
43
+ AND database = (SELECT oid FROM pg_database WHERE datname = current_database())
44
+ ) AS "isWaiting"`;
45
+ if (row?.isWaiting === true) {
46
+ return;
47
+ }
48
+ await new Promise((resolve) => setTimeout(resolve, POLL_MS));
49
+ }
50
+ }
51
+ //# sourceMappingURL=migrate-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-lock.js","sourceRoot":"","sources":["../../src/testing/migrate-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAW,MAAM,8BAA8B,CAAC;AAE3E,8EAA8E;AAC9E,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAEvC,yEAAyE;AACzE,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,gEAAgE;AAChE,MAAM,OAAO,GAAG,GAAG,CAAC;AAQpB;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAI,WAAmB,EAAE,OAAyB;IACrG,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,SAAkE,CAAC;IACvE,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,YAAY,CACzB,KAAK,EAAE,UAAU,EAAE,EAAE;YACnB,MAAM,UAAU,CAAC,WAAW,CAAA,gCAAgC,mBAAmB,GAAG,CAAC;YACnF,SAAS,GAAG,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/E,oEAAoE;YACpE,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;YACpC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;QACzE,CAAC,EACD,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC9B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,GAAG,CAAC,MAAM,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;AAC9C,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,iBAAiB,CAAC,MAAU;IACzC,SAAS,CAAC;QACR,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,SAAS,CAA0B;;;kDAGhB,mBAAmB;;uBAE9C,CAAC;QACpB,IAAI,GAAG,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * The database the global setup migrates once per Postgres container; every
3
+ * migrated database a test asks for is a copy of it. Migrating each test
4
+ * file's database itself started a Prisma CLI over every migration in every
5
+ * worker at once, and under a full run that load took the tests' own time
6
+ * (#499).
7
+ */
8
+ export declare const MIGRATED_TEMPLATE = "aeolus_test_migrated_template";
9
+ /** The URL of the named database on the server the admin URL points at. */
10
+ export declare function databaseUrlOf(adminUrl: string, name: string): string;
11
+ /** Creates the template with `prisma migrate deploy`, as an installation migrates. */
12
+ export declare function createMigratedTemplate(adminUrl: string): Promise<void>;
@@ -0,0 +1,29 @@
1
+ import { createPrismaClient } from '../adapters/prisma/client.js';
2
+ import { prisma } from './prisma-cli.js';
3
+ /**
4
+ * The database the global setup migrates once per Postgres container; every
5
+ * migrated database a test asks for is a copy of it. Migrating each test
6
+ * file's database itself started a Prisma CLI over every migration in every
7
+ * worker at once, and under a full run that load took the tests' own time
8
+ * (#499).
9
+ */
10
+ export const MIGRATED_TEMPLATE = 'aeolus_test_migrated_template';
11
+ /** The URL of the named database on the server the admin URL points at. */
12
+ export function databaseUrlOf(adminUrl, name) {
13
+ const url = new URL(adminUrl);
14
+ url.pathname = `/${name}`;
15
+ return url.toString();
16
+ }
17
+ /** Creates the template with `prisma migrate deploy`, as an installation migrates. */
18
+ export async function createMigratedTemplate(adminUrl) {
19
+ const admin = createPrismaClient(adminUrl);
20
+ try {
21
+ // The name is a constant of this file, never outside input.
22
+ await admin.$executeRawUnsafe(`CREATE DATABASE ${MIGRATED_TEMPLATE}`);
23
+ }
24
+ finally {
25
+ await admin.$disconnect();
26
+ }
27
+ await prisma(databaseUrlOf(adminUrl, MIGRATED_TEMPLATE), 'migrate', 'deploy');
28
+ }
29
+ //# sourceMappingURL=migrated-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrated-template.js","sourceRoot":"","sources":["../../src/testing/migrated-template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AAEjE,2EAA2E;AAC3E,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,IAAY;IAC1D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC9B,GAAG,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAAgB;IAC3D,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,KAAK,CAAC,iBAAiB,CAAC,mBAAmB,iBAAiB,EAAE,CAAC,CAAC;IACxE,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { PostgreSqlContainer } from '@testcontainers/postgresql';
2
+ /**
3
+ * Postgres for the tests, waited for by its log and its port instead of a
4
+ * health check. The module's own check runs every 250 ms, and on rootless
5
+ * Podman each run is a systemd unit of its own: a full run floods the user
6
+ * manager and leaves units behind (#554). It flushes nothing to disk: a commit
7
+ * that waits for the disk waits behind every other test's writes, and under a
8
+ * loaded full run Prisma Migrate's commits alone outlasted a test's time
9
+ * (#499). Only a crash of the host loses a commit then, and no test survives
10
+ * that anyway.
11
+ */
12
+ export declare class TestPostgres extends PostgreSqlContainer {
13
+ constructor(image: string);
14
+ /** Drops the check the module sets on start; the image defines none of its own. */
15
+ protected beforeContainerCreated(): Promise<void>;
16
+ }
@@ -0,0 +1,30 @@
1
+ import { PostgreSqlContainer } from '@testcontainers/postgresql';
2
+ import { Wait } from 'testcontainers';
3
+ /**
4
+ * Postgres says it is ready twice: once for the server the image's entrypoint
5
+ * starts to initialise the database, once for the server that stays.
6
+ */
7
+ const READY_LOG = /database system is ready to accept connections/;
8
+ /**
9
+ * Postgres for the tests, waited for by its log and its port instead of a
10
+ * health check. The module's own check runs every 250 ms, and on rootless
11
+ * Podman each run is a systemd unit of its own: a full run floods the user
12
+ * manager and leaves units behind (#554). It flushes nothing to disk: a commit
13
+ * that waits for the disk waits behind every other test's writes, and under a
14
+ * loaded full run Prisma Migrate's commits alone outlasted a test's time
15
+ * (#499). Only a crash of the host loses a commit then, and no test survives
16
+ * that anyway.
17
+ */
18
+ export class TestPostgres extends PostgreSqlContainer {
19
+ constructor(image) {
20
+ super(image);
21
+ this.withCommand(['postgres', '-c', 'fsync=off']);
22
+ this.withWaitStrategy(Wait.forAll([Wait.forLogMessage(READY_LOG, 2), Wait.forListeningPorts()]));
23
+ }
24
+ /** Drops the check the module sets on start; the image defines none of its own. */
25
+ async beforeContainerCreated() {
26
+ delete this.createOpts.Healthcheck;
27
+ await super.beforeContainerCreated?.();
28
+ }
29
+ }
30
+ //# sourceMappingURL=postgres-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-container.js","sourceRoot":"","sources":["../../src/testing/postgres-container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC;;;GAGG;AACH,MAAM,SAAS,GAAG,gDAAgD,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,OAAO,YAAa,SAAQ,mBAAmB;IACnD,YAAY,KAAa;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,WAAW,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;IAED,mFAAmF;IAChE,KAAK,CAAC,sBAAsB;QAC7C,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QACnC,MAAM,KAAK,CAAC,sBAAsB,EAAE,EAAE,CAAC;IACzC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { TestProject } from 'vitest/node';
2
+ declare module 'vitest' {
3
+ interface ProvidedContext {
4
+ /** Admin URL of the Postgres container shared by the integration tests. */
5
+ postgresUrl: string;
6
+ }
7
+ }
8
+ /**
9
+ * Starts one Postgres for the integration project. Each test file creates its
10
+ * own database in it (see database.ts), so files stay isolated; a
11
+ * migrated one is a copy of the template migrated here, before any test runs.
12
+ * Testcontainers reads the reaper image from the environment when it starts
13
+ * the first container; a reaper image set from outside wins.
14
+ */
15
+ export declare function setup(project: TestProject): Promise<() => Promise<void>>;
@@ -0,0 +1,20 @@
1
+ import { POSTGRES_IMAGE, REAPER_IMAGE } from './container-images.js';
2
+ import { TestPostgres } from './postgres-container.js';
3
+ import { createMigratedTemplate } from './migrated-template.js';
4
+ /**
5
+ * Starts one Postgres for the integration project. Each test file creates its
6
+ * own database in it (see database.ts), so files stay isolated; a
7
+ * migrated one is a copy of the template migrated here, before any test runs.
8
+ * Testcontainers reads the reaper image from the environment when it starts
9
+ * the first container; a reaper image set from outside wins.
10
+ */
11
+ export async function setup(project) {
12
+ process.env.RYUK_CONTAINER_IMAGE ??= REAPER_IMAGE;
13
+ const container = await new TestPostgres(POSTGRES_IMAGE).start();
14
+ await createMigratedTemplate(container.getConnectionUri());
15
+ project.provide('postgresUrl', container.getConnectionUri());
16
+ return async () => {
17
+ await container.stop();
18
+ };
19
+ }
20
+ //# sourceMappingURL=postgres-global-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-global-setup.js","sourceRoot":"","sources":["../../src/testing/postgres-global-setup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAShE;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAoB;IAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,YAAY,CAAC;IAClD,MAAM,SAAS,GAAG,MAAM,IAAI,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;IACjE,MAAM,sBAAsB,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC3D,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAE7D,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Runs the Prisma CLI from the server package against the given database. */
2
+ export declare function prisma(databaseUrl: string, ...args: string[]): Promise<{
3
+ stdout: string;
4
+ stderr: string;
5
+ }>;
@@ -0,0 +1,15 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { createRequire } from 'node:module';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { promisify } from 'node:util';
5
+ const run = promisify(execFile);
6
+ const serverRoot = fileURLToPath(new URL('../..', import.meta.url));
7
+ const prismaCli = createRequire(import.meta.url).resolve('prisma/build/index.js');
8
+ /** Runs the Prisma CLI from the server package against the given database. */
9
+ export function prisma(databaseUrl, ...args) {
10
+ return run(process.execPath, [prismaCli, ...args], {
11
+ cwd: serverRoot,
12
+ env: { ...process.env, DATABASE_URL: databaseUrl },
13
+ });
14
+ }
15
+ //# sourceMappingURL=prisma-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prisma-cli.js","sourceRoot":"","sources":["../../src/testing/prisma-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAChC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAElF,8EAA8E;AAC9E,MAAM,UAAU,MAAM,CAAC,WAAmB,EAAE,GAAG,IAAc;IAC3D,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;QACjD,GAAG,EAAE,UAAU;QACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE;KACnD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Result } from '../domain/shared/result.js';
2
+ /** The value of an ok result. Fails the test with the domain's refusal otherwise. */
3
+ export declare function unwrap<T, E>(result: Result<T, E>): T;
4
+ /** The refusal of an error result. Fails the test with the value otherwise. */
5
+ export declare function refusalOf<T, E>(result: Result<T, E>): E;
@@ -0,0 +1,15 @@
1
+ /** The value of an ok result. Fails the test with the domain's refusal otherwise. */
2
+ export function unwrap(result) {
3
+ if (!result.isOk) {
4
+ throw new Error(`Expected an ok result, but the domain refused: ${JSON.stringify(result.error)}`);
5
+ }
6
+ return result.value;
7
+ }
8
+ /** The refusal of an error result. Fails the test with the value otherwise. */
9
+ export function refusalOf(result) {
10
+ if (result.isOk) {
11
+ throw new Error(`Expected a refusal, but the domain answered: ${JSON.stringify(result.value)}`);
12
+ }
13
+ return result.error;
14
+ }
15
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/testing/result.ts"],"names":[],"mappings":"AAEA,qFAAqF;AACrF,MAAM,UAAU,MAAM,CAAO,MAAoB;IAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,kDAAkD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,SAAS,CAAO,MAAoB;IAClD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC"}
package/dist/wiring.d.ts CHANGED
@@ -29,6 +29,7 @@ import { type MarkRead } from './domain/messaging/mark-read.js';
29
29
  import type { ReceiverWakeups } from './domain/messaging/ports.js';
30
30
  import { type PushReceiveDeliveries } from './domain/messaging/push-receive-deliveries.js';
31
31
  import { type ReceiveDeliveries } from './domain/messaging/receive-deliveries.js';
32
+ import { type ReceiveReply } from './domain/messaging/receive-reply.js';
32
33
  import { type ReplyToMessage } from './domain/messaging/reply-to-message.js';
33
34
  import { type ResendDelivery } from './domain/messaging/resend-delivery.js';
34
35
  import { type PingShip } from './domain/messaging/ping-ship.js';
@@ -46,6 +47,7 @@ import { type RecrewShip } from './domain/registry/recrew-ship.js';
46
47
  import { type ReleaseShip } from './domain/registry/release-ship.js';
47
48
  import { type RenameShip } from './domain/registry/rename-ship.js';
48
49
  import { type SetOwner } from './domain/registry/set-owner.js';
50
+ import { type ConnectPlugin } from './domain/registry/connect-plugin.js';
49
51
  import { type RetireShip } from './domain/registry/retire-ship.js';
50
52
  import { type Report } from './domain/registry/report.js';
51
53
  import { type SetStatement } from './domain/registry/set-statement.js';
@@ -72,6 +74,7 @@ import { type ReadDeclaredNetworkRules } from './domain/registry/read-declared-n
72
74
  import { type RegisterNetworkPlugin } from './domain/registry/register-network-plugin.js';
73
75
  import { type SetNetworkRules } from './domain/registry/set-network-rules.js';
74
76
  import { type ReadBuiltInRules } from './domain/registry/read-built-in-rules.js';
77
+ import { type ReadNetworkPlugin } from './domain/registry/read-network-plugin.js';
75
78
  import { type SetBuiltInRule } from './domain/registry/set-built-in-rule.js';
76
79
  import { type UnregisterNetworkPlugin } from './domain/registry/unregister-network-plugin.js';
77
80
  import { type ChangeLabelValues } from './domain/registry/change-label-values.js';
@@ -99,6 +102,7 @@ import { type GetInstallationFleet } from './domain/registry/get-installation-fl
99
102
  import { type ListInstallationFleets } from './domain/registry/list-installation-fleets.js';
100
103
  import { type ReadInbox } from './domain/shared/read-inbox.js';
101
104
  import { type ReadMessage } from './domain/shared/read-message.js';
105
+ import { type ReadSentMessage } from './domain/shared/read-sent-message.js';
102
106
  import { type ReadShipWay } from './domain/shared/read-ship-way.js';
103
107
  import { type ReadNeedsAttention } from './domain/shared/read-needs-attention.js';
104
108
  import { type ReadHealth } from './domain/shared/read-health.js';
@@ -114,6 +118,7 @@ export interface UseCases {
114
118
  retireShip: RetireShip;
115
119
  renameShip: RenameShip;
116
120
  setOwner: SetOwner;
121
+ connectPlugin: ConnectPlugin;
117
122
  recrewShip: RecrewShip;
118
123
  listFleet: ListFleet;
119
124
  getShip: GetShip;
@@ -144,6 +149,7 @@ export interface UseCases {
144
149
  unregisterNetworkPlugin: UnregisterNetworkPlugin;
145
150
  setBuiltInRule: SetBuiltInRule;
146
151
  readBuiltInRules: ReadBuiltInRules;
152
+ readNetworkPlugin: ReadNetworkPlugin;
147
153
  readReachRefusals: ReadReachRefusals;
148
154
  declareNetworkRules: DeclareNetworkRules;
149
155
  readDeclaredNetworkRules: ReadDeclaredNetworkRules;
@@ -158,6 +164,7 @@ export interface UseCases {
158
164
  deregister: Deregister;
159
165
  sendMessage: SendMessage;
160
166
  receiveDeliveries: ReceiveDeliveries;
167
+ receiveReply: ReceiveReply;
161
168
  pushReceiveDeliveries: PushReceiveDeliveries;
162
169
  handOverDelivery: HandOverDelivery;
163
170
  reportHandled: ReportHandled;
@@ -178,6 +185,7 @@ export interface UseCases {
178
185
  readShipTimeline: ReadShipTimeline;
179
186
  readShipMessages: ReadShipMessages;
180
187
  readMessage: ReadMessage;
188
+ sentMessage: ReadSentMessage;
181
189
  readShipWay: ReadShipWay;
182
190
  readNeedsAttention: ReadNeedsAttention;
183
191
  readHealth: ReadHealth;