@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.
- package/README.md +1 -1
- package/dist/adapters/prisma/generated/browser.d.ts +6 -0
- package/dist/adapters/prisma/generated/client.d.ts +6 -0
- package/dist/adapters/prisma/generated/commonInputTypes.d.ts +30 -0
- package/dist/adapters/prisma/generated/enums.d.ts +8 -0
- package/dist/adapters/prisma/generated/enums.js +7 -0
- package/dist/adapters/prisma/generated/enums.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/class.d.ts +11 -0
- package/dist/adapters/prisma/generated/internal/class.js +4 -4
- package/dist/adapters/prisma/generated/internal/class.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.d.ts +93 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js +9 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespace.js.map +1 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.d.ts +9 -0
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js +9 -1
- package/dist/adapters/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -1
- package/dist/adapters/prisma/generated/models/Fleet.d.ts +283 -0
- package/dist/adapters/prisma/generated/models/Lease.d.ts +60 -1
- package/dist/adapters/prisma/generated/models/NetworkSettings.d.ts +35 -3
- package/dist/adapters/prisma/generated/models/PluginConnection.d.ts +1180 -0
- package/dist/adapters/prisma/generated/models/PluginConnection.js +2 -0
- package/dist/adapters/prisma/generated/models/PluginConnection.js.map +1 -0
- package/dist/adapters/prisma/generated/models/Ship.d.ts +290 -0
- package/dist/adapters/prisma/generated/models.d.ts +1 -0
- package/dist/adapters/prisma/history.js +4 -2
- package/dist/adapters/prisma/history.js.map +1 -1
- package/dist/adapters/prisma/messaging.js +5 -2
- package/dist/adapters/prisma/messaging.js.map +1 -1
- package/dist/adapters/prisma/network.js +7 -4
- package/dist/adapters/prisma/network.js.map +1 -1
- package/dist/adapters/prisma/overdue.js +4 -3
- package/dist/adapters/prisma/overdue.js.map +1 -1
- package/dist/adapters/prisma/plugin-connections.d.ts +4 -0
- package/dist/adapters/prisma/plugin-connections.js +20 -0
- package/dist/adapters/prisma/plugin-connections.js.map +1 -0
- package/dist/adapters/prisma/registry.js +3 -2
- package/dist/adapters/prisma/registry.js.map +1 -1
- package/dist/adapters/prisma/rows.js +2 -0
- package/dist/adapters/prisma/rows.js.map +1 -1
- package/dist/adapters/prisma/unit-of-work.d.ts +2 -1
- package/dist/adapters/prisma/unit-of-work.js +2 -0
- package/dist/adapters/prisma/unit-of-work.js.map +1 -1
- package/dist/adapters/trpc/context.d.ts +8 -0
- package/dist/adapters/trpc/fleet.d.ts +72 -16
- package/dist/adapters/trpc/fleet.js +31 -6
- package/dist/adapters/trpc/fleet.js.map +1 -1
- package/dist/adapters/trpc/router.d.ts +143 -14
- package/dist/adapters/trpc/ship-contract.js +1 -0
- package/dist/adapters/trpc/ship-contract.js.map +1 -1
- package/dist/adapters/trpc/ship-protocol.js +1 -1
- package/dist/adapters/trpc/ship-protocol.js.map +1 -1
- package/dist/adapters/trpc/ship.d.ts +85 -0
- package/dist/adapters/trpc/ship.js +48 -4
- package/dist/adapters/trpc/ship.js.map +1 -1
- package/dist/adapters/trpc/trpc.d.ts +7 -4
- package/dist/adapters/trpc/trpc.js +14 -5
- package/dist/adapters/trpc/trpc.js.map +1 -1
- package/dist/domain/messaging/delivery.d.ts +8 -2
- package/dist/domain/messaging/delivery.js +14 -9
- package/dist/domain/messaging/delivery.js.map +1 -1
- package/dist/domain/messaging/hand-over-delivery.d.ts +1 -0
- package/dist/domain/messaging/hand-over-delivery.js +1 -0
- package/dist/domain/messaging/hand-over-delivery.js.map +1 -1
- package/dist/domain/messaging/overdue.d.ts +2 -0
- package/dist/domain/messaging/overdue.js +3 -0
- package/dist/domain/messaging/overdue.js.map +1 -1
- package/dist/domain/messaging/ports.d.ts +2 -0
- package/dist/domain/messaging/push-receive-deliveries.d.ts +4 -1
- package/dist/domain/messaging/push-receive-deliveries.js +5 -3
- package/dist/domain/messaging/push-receive-deliveries.js.map +1 -1
- package/dist/domain/messaging/receive-deliveries.d.ts +21 -0
- package/dist/domain/messaging/receive-deliveries.js +5 -3
- package/dist/domain/messaging/receive-deliveries.js.map +1 -1
- package/dist/domain/messaging/receive-reply.d.ts +32 -0
- package/dist/domain/messaging/receive-reply.js +25 -0
- package/dist/domain/messaging/receive-reply.js.map +1 -0
- package/dist/domain/registry/check-reach.d.ts +6 -2
- package/dist/domain/registry/check-reach.js +4 -3
- package/dist/domain/registry/check-reach.js.map +1 -1
- package/dist/domain/registry/commission-ship.d.ts +6 -2
- package/dist/domain/registry/commission-ship.js +37 -6
- package/dist/domain/registry/commission-ship.js.map +1 -1
- package/dist/domain/registry/connect-plugin.d.ts +30 -0
- package/dist/domain/registry/connect-plugin.js +35 -0
- package/dist/domain/registry/connect-plugin.js.map +1 -0
- package/dist/domain/registry/discover.d.ts +1 -0
- package/dist/domain/registry/discover.js.map +1 -1
- package/dist/domain/registry/explain-reach.d.ts +1 -0
- package/dist/domain/registry/explain-reach.js.map +1 -1
- package/dist/domain/registry/leases.d.ts +6 -3
- package/dist/domain/registry/leases.js +7 -5
- package/dist/domain/registry/leases.js.map +1 -1
- package/dist/domain/registry/network-settings.d.ts +17 -6
- package/dist/domain/registry/network-settings.js +21 -10
- package/dist/domain/registry/network-settings.js.map +1 -1
- package/dist/domain/registry/plugin-connection.d.ts +48 -0
- package/dist/domain/registry/plugin-connection.js +35 -0
- package/dist/domain/registry/plugin-connection.js.map +1 -0
- package/dist/domain/registry/ports.d.ts +13 -1
- package/dist/domain/registry/read-built-in-rules.d.ts +2 -2
- package/dist/domain/registry/read-built-in-rules.js +3 -2
- package/dist/domain/registry/read-built-in-rules.js.map +1 -1
- package/dist/domain/registry/read-network-plugin.d.ts +23 -0
- package/dist/domain/registry/read-network-plugin.js +15 -0
- package/dist/domain/registry/read-network-plugin.js.map +1 -0
- package/dist/domain/registry/read-reach.d.ts +4 -2
- package/dist/domain/registry/read-reach.js +7 -2
- package/dist/domain/registry/read-reach.js.map +1 -1
- package/dist/domain/registry/recrew-ship.js +2 -0
- package/dist/domain/registry/recrew-ship.js.map +1 -1
- package/dist/domain/registry/release-ship.d.ts +4 -2
- package/dist/domain/registry/release-ship.js +4 -1
- package/dist/domain/registry/release-ship.js.map +1 -1
- package/dist/domain/registry/retire-ship.d.ts +2 -1
- package/dist/domain/registry/retire-ship.js +2 -0
- package/dist/domain/registry/retire-ship.js.map +1 -1
- package/dist/domain/registry/ship.d.ts +9 -5
- package/dist/domain/registry/ship.js +37 -4
- package/dist/domain/registry/ship.js.map +1 -1
- package/dist/domain/shared/delivery-way.d.ts +9 -5
- package/dist/domain/shared/delivery-way.js +17 -5
- package/dist/domain/shared/delivery-way.js.map +1 -1
- package/dist/domain/shared/errors.d.ts +1 -1
- package/dist/domain/shared/errors.js.map +1 -1
- package/dist/domain/shared/health.d.ts +3 -1
- package/dist/domain/shared/health.js +5 -3
- package/dist/domain/shared/health.js.map +1 -1
- package/dist/domain/shared/history.d.ts +2 -0
- package/dist/domain/shared/history.js.map +1 -1
- package/dist/domain/shared/read-health.d.ts +2 -1
- package/dist/domain/shared/read-health.js +9 -3
- package/dist/domain/shared/read-health.js.map +1 -1
- package/dist/domain/shared/read-sent-message.d.ts +31 -0
- package/dist/domain/shared/read-sent-message.js +28 -0
- package/dist/domain/shared/read-sent-message.js.map +1 -0
- package/dist/domain/shared/stuck.js +4 -2
- package/dist/domain/shared/stuck.js.map +1 -1
- package/dist/testing/container-images.d.ts +14 -0
- package/dist/testing/container-images.js +18 -0
- package/dist/testing/container-images.js.map +1 -0
- package/dist/testing/database.d.ts +14 -0
- package/dist/testing/database.js +48 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/fleet.d.ts +13 -0
- package/dist/testing/fleet.js +17 -0
- package/dist/testing/fleet.js.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/keys.d.ts +1 -0
- package/dist/testing/keys.js +7 -0
- package/dist/testing/keys.js.map +1 -0
- package/dist/testing/migrate-lock.d.ts +12 -0
- package/dist/testing/migrate-lock.js +51 -0
- package/dist/testing/migrate-lock.js.map +1 -0
- package/dist/testing/migrated-template.d.ts +12 -0
- package/dist/testing/migrated-template.js +29 -0
- package/dist/testing/migrated-template.js.map +1 -0
- package/dist/testing/postgres-container.d.ts +16 -0
- package/dist/testing/postgres-container.js +30 -0
- package/dist/testing/postgres-container.js.map +1 -0
- package/dist/testing/postgres-global-setup.d.ts +15 -0
- package/dist/testing/postgres-global-setup.js +20 -0
- package/dist/testing/postgres-global-setup.js.map +1 -0
- package/dist/testing/prisma-cli.d.ts +5 -0
- package/dist/testing/prisma-cli.js +15 -0
- package/dist/testing/prisma-cli.js.map +1 -0
- package/dist/testing/result.d.ts +5 -0
- package/dist/testing/result.js +15 -0
- package/dist/testing/result.js.map +1 -0
- package/dist/wiring.d.ts +8 -0
- package/dist/wiring.js +14 -0
- package/dist/wiring.js.map +1 -1
- package/package.json +28 -2
- package/src/adapters/prisma/migrations/20261018250000_scope_catalogue/migration.sql +8 -7
- package/src/adapters/prisma/migrations/20261019100000_on_behalf_scope/migration.sql +3 -1
- package/src/adapters/prisma/migrations/20261019130000_plugin_connections/migration.sql +54 -0
- package/src/adapters/prisma/migrations/20261019150000_network_plugin_registered_at/migration.sql +23 -0
- package/src/adapters/prisma/migrations/20261019160000_lease_waker/migration.sql +4 -0
- 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
|
-
|
|
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 @@
|
|
|
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,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;
|