@shipfox/api-runners 6.0.0 → 7.0.2
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/.turbo/turbo-build.log +4 -4
- package/CHANGELOG.md +26 -0
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/entities/runner-instance.d.ts +1 -0
- package/dist/core/entities/runner-instance.d.ts.map +1 -1
- package/dist/core/entities/runner-instance.js.map +1 -1
- package/dist/core/errors.d.ts +6 -6
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +8 -8
- package/dist/core/errors.js.map +1 -1
- package/dist/core/index.d.ts +2 -4
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/runner-assignments.d.ts +6 -0
- package/dist/core/runner-assignments.d.ts.map +1 -0
- package/dist/core/runner-assignments.js +6 -0
- package/dist/core/runner-assignments.js.map +1 -0
- package/dist/core/runner-instances.d.ts +2 -9
- package/dist/core/runner-instances.d.ts.map +1 -1
- package/dist/core/runner-instances.js +3 -6
- package/dist/core/runner-instances.js.map +1 -1
- package/dist/db/db.d.ts +34 -218
- package/dist/db/db.d.ts.map +1 -1
- package/dist/db/db.js +0 -2
- package/dist/db/db.js.map +1 -1
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -2
- package/dist/db/index.js.map +1 -1
- package/dist/db/runner-assignments.d.ts +7 -0
- package/dist/db/runner-assignments.d.ts.map +1 -0
- package/dist/db/runner-assignments.js +55 -0
- package/dist/db/runner-assignments.js.map +1 -0
- package/dist/db/runner-instances.d.ts +2 -9
- package/dist/db/runner-instances.d.ts.map +1 -1
- package/dist/db/runner-instances.js +2 -16
- package/dist/db/runner-instances.js.map +1 -1
- package/dist/db/schema/runner-instances.d.ts +17 -0
- package/dist/db/schema/runner-instances.d.ts.map +1 -1
- package/dist/db/schema/runner-instances.js +5 -1
- package/dist/db/schema/runner-instances.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/presentation/dto/index.d.ts +0 -1
- package/dist/presentation/dto/index.d.ts.map +1 -1
- package/dist/presentation/dto/index.js +0 -1
- package/dist/presentation/dto/index.js.map +1 -1
- package/dist/presentation/routes/assign-runner-instances.d.ts +2 -0
- package/dist/presentation/routes/assign-runner-instances.d.ts.map +1 -0
- package/dist/presentation/routes/assign-runner-instances.js +40 -0
- package/dist/presentation/routes/assign-runner-instances.js.map +1 -0
- package/dist/presentation/routes/index.d.ts.map +1 -1
- package/dist/presentation/routes/index.js +4 -8
- package/dist/presentation/routes/index.js.map +1 -1
- package/dist/presentation/routes/runner-enrollment.d.ts +1 -0
- package/dist/presentation/routes/runner-enrollment.d.ts.map +1 -1
- package/dist/presentation/routes/runner-enrollment.js +27 -0
- package/dist/presentation/routes/runner-enrollment.js.map +1 -1
- package/dist/tsconfig.test.tsbuildinfo +1 -1
- package/drizzle/0000_initial.sql +1 -12
- package/drizzle/meta/0000_snapshot.json +6 -97
- package/package.json +8 -29
- package/src/config.ts +1 -1
- package/src/core/entities/runner-instance.ts +1 -0
- package/src/core/errors.ts +8 -8
- package/src/core/index.ts +2 -9
- package/src/core/runner-assignments.ts +9 -0
- package/src/core/runner-instances.ts +4 -13
- package/src/db/db.ts +0 -2
- package/src/db/index.ts +2 -3
- package/src/db/runner-assignments.test.ts +163 -0
- package/src/db/runner-assignments.ts +115 -0
- package/src/db/runner-instances.test.ts +36 -23
- package/src/db/runner-instances.ts +3 -23
- package/src/db/schema/runner-instances.ts +3 -1
- package/src/index.ts +0 -9
- package/src/presentation/dto/index.ts +0 -4
- package/src/presentation/routes/assign-runner-instances.ts +49 -0
- package/src/presentation/routes/index.ts +4 -7
- package/src/presentation/routes/runner-enrollment.test.ts +60 -0
- package/src/presentation/routes/runner-enrollment.ts +22 -0
- package/test/globalSetup.ts +0 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/dist/core/capacity-assignments.d.ts +0 -7
- package/dist/core/capacity-assignments.d.ts.map +0 -1
- package/dist/core/capacity-assignments.js +0 -6
- package/dist/core/capacity-assignments.js.map +0 -1
- package/dist/core/entities/capacity-assignment.d.ts +0 -9
- package/dist/core/entities/capacity-assignment.d.ts.map +0 -1
- package/dist/core/entities/capacity-assignment.js +0 -3
- package/dist/core/entities/capacity-assignment.js.map +0 -1
- package/dist/db/capacity-assignments.d.ts +0 -7
- package/dist/db/capacity-assignments.d.ts.map +0 -1
- package/dist/db/capacity-assignments.js +0 -72
- package/dist/db/capacity-assignments.js.map +0 -1
- package/dist/db/schema/capacity-assignments.d.ts +0 -113
- package/dist/db/schema/capacity-assignments.d.ts.map +0 -1
- package/dist/db/schema/capacity-assignments.js +0 -29
- package/dist/db/schema/capacity-assignments.js.map +0 -1
- package/dist/presentation/dto/mint-registration-tokens.d.ts +0 -7
- package/dist/presentation/dto/mint-registration-tokens.d.ts.map +0 -1
- package/dist/presentation/dto/mint-registration-tokens.js +0 -19
- package/dist/presentation/dto/mint-registration-tokens.js.map +0 -1
- package/dist/presentation/routes/assign-capacity.d.ts +0 -2
- package/dist/presentation/routes/assign-capacity.d.ts.map +0 -1
- package/dist/presentation/routes/assign-capacity.js +0 -44
- package/dist/presentation/routes/assign-capacity.js.map +0 -1
- package/dist/presentation/routes/mint-registration-tokens.d.ts +0 -2
- package/dist/presentation/routes/mint-registration-tokens.d.ts.map +0 -1
- package/dist/presentation/routes/mint-registration-tokens.js +0 -74
- package/dist/presentation/routes/mint-registration-tokens.js.map +0 -1
- package/dist/presentation/routes/planned-capacity.d.ts +0 -3
- package/dist/presentation/routes/planned-capacity.d.ts.map +0 -1
- package/dist/presentation/routes/planned-capacity.js +0 -54
- package/dist/presentation/routes/planned-capacity.js.map +0 -1
- package/src/core/capacity-assignments.ts +0 -10
- package/src/core/entities/capacity-assignment.ts +0 -8
- package/src/db/capacity-assignments.test.ts +0 -159
- package/src/db/capacity-assignments.ts +0 -116
- package/src/db/schema/capacity-assignments.ts +0 -34
- package/src/presentation/dto/mint-registration-tokens.ts +0 -28
- package/src/presentation/routes/assign-capacity.ts +0 -48
- package/src/presentation/routes/mint-registration-tokens.test.ts +0 -453
- package/src/presentation/routes/mint-registration-tokens.ts +0 -80
- package/src/presentation/routes/planned-capacity.ts +0 -49
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { CapacityAssignment } from './entities/capacity-assignment.js';
|
|
2
|
-
export declare function assignCapacityBatch(params: {
|
|
3
|
-
provisionerId: string;
|
|
4
|
-
reservationId: string;
|
|
5
|
-
capacityIds: string[];
|
|
6
|
-
}): Promise<CapacityAssignment[]>;
|
|
7
|
-
//# sourceMappingURL=capacity-assignments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capacity-assignments.d.ts","sourceRoot":"","sources":["../../src/core/capacity-assignments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,mCAAmC,CAAC;AAE1E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAEhC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/capacity-assignments.ts"],"sourcesContent":["import {assignCapacityBatch as assignCapacityBatchDb} from '#db/capacity-assignments.js';\nimport type {CapacityAssignment} from './entities/capacity-assignment.js';\n\nexport function assignCapacityBatch(params: {\n provisionerId: string;\n reservationId: string;\n capacityIds: string[];\n}): Promise<CapacityAssignment[]> {\n return assignCapacityBatchDb(params);\n}\n"],"names":["assignCapacityBatch","assignCapacityBatchDb","params"],"mappings":"AAAA,SAAQA,uBAAuBC,qBAAqB,QAAO,8BAA8B;AAGzF,OAAO,SAASD,oBAAoBE,MAInC;IACC,OAAOD,sBAAsBC;AAC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capacity-assignment.d.ts","sourceRoot":"","sources":["../../../src/core/entities/capacity-assignment.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/entities/capacity-assignment.ts"],"sourcesContent":["export interface CapacityAssignment {\n id: string;\n capacityId: string;\n reservationId: string;\n workspaceId: string;\n provisionerId: string;\n createdAt: Date;\n}\n"],"names":[],"mappings":"AAAA,WAOC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { CapacityAssignment } from '#core/entities/capacity-assignment.js';
|
|
2
|
-
export declare function assignCapacityBatch(params: {
|
|
3
|
-
provisionerId: string;
|
|
4
|
-
reservationId: string;
|
|
5
|
-
capacityIds: string[];
|
|
6
|
-
}): Promise<CapacityAssignment[]>;
|
|
7
|
-
//# sourceMappingURL=capacity-assignments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capacity-assignments.d.ts","sourceRoot":"","sources":["../../src/db/capacity-assignments.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAY9E,wBAAsB,mBAAmB,CAAC,MAAM,EAAE;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAkGhC"}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { and, eq, inArray, sql } from 'drizzle-orm';
|
|
2
|
-
import { CapacityAlreadyAssignedError, CapacityNotAssignableError, ReservationExpiredError, ReservationNotFoundError } from '#core/errors.js';
|
|
3
|
-
import { db } from './db.js';
|
|
4
|
-
import { capacityAssignments, toCapacityAssignment } from './schema/capacity-assignments.js';
|
|
5
|
-
import { reservations } from './schema/reservations.js';
|
|
6
|
-
import { providerRunners } from './schema/runner-instances.js';
|
|
7
|
-
export async function assignCapacityBatch(params) {
|
|
8
|
-
return await db().transaction(async (tx)=>{
|
|
9
|
-
const lockKey = [
|
|
10
|
-
'runners_capacity_assignments',
|
|
11
|
-
params.provisionerId,
|
|
12
|
-
params.reservationId
|
|
13
|
-
].join(':');
|
|
14
|
-
await tx.execute(sql`select pg_advisory_xact_lock(hashtext(${lockKey}))`);
|
|
15
|
-
for (const capacityId of [
|
|
16
|
-
...params.capacityIds
|
|
17
|
-
].sort()){
|
|
18
|
-
await tx.execute(sql`select pg_advisory_xact_lock(hashtext(${[
|
|
19
|
-
'runners_capacity_assignments',
|
|
20
|
-
capacityId
|
|
21
|
-
].join(':')}))`);
|
|
22
|
-
}
|
|
23
|
-
const [reservation] = await tx.select().from(reservations).where(and(eq(reservations.id, params.reservationId), eq(reservations.provisionerId, params.provisionerId))).limit(1);
|
|
24
|
-
if (!reservation) throw new ReservationNotFoundError(params.reservationId);
|
|
25
|
-
if (reservation.expiresAt <= new Date()) throw new ReservationExpiredError(params.reservationId);
|
|
26
|
-
const existing = await tx.select().from(capacityAssignments).where(eq(capacityAssignments.reservationId, reservation.id));
|
|
27
|
-
const existingByCapacityId = new Map(existing.map((assignment)=>[
|
|
28
|
-
assignment.capacityId,
|
|
29
|
-
assignment
|
|
30
|
-
]));
|
|
31
|
-
const newCapacityIds = params.capacityIds.filter((capacityId)=>!existingByCapacityId.has(capacityId));
|
|
32
|
-
if (existing.length + newCapacityIds.length > reservation.count) throw new CapacityNotAssignableError(params.capacityIds[0] ?? '');
|
|
33
|
-
if (newCapacityIds.length === 0) {
|
|
34
|
-
return params.capacityIds.flatMap((capacityId)=>{
|
|
35
|
-
const assignment = existingByCapacityId.get(capacityId);
|
|
36
|
-
return assignment ? [
|
|
37
|
-
toCapacityAssignment(assignment)
|
|
38
|
-
] : [];
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
const capacities = await tx.select().from(providerRunners).where(and(eq(providerRunners.provisionerId, params.provisionerId), inArray(providerRunners.id, newCapacityIds)));
|
|
42
|
-
if (capacities.length !== newCapacityIds.length) throw new CapacityNotAssignableError(params.capacityIds[0] ?? '');
|
|
43
|
-
for (const capacity of capacities){
|
|
44
|
-
if (capacity.state !== 'starting' && capacity.state !== 'running') throw new CapacityNotAssignableError(capacity.id);
|
|
45
|
-
if (!capacity.providerRunnerId || capacity.labels.length === 0 || !reservation.requiredLabels.every((label)=>capacity.labels.includes(label))) {
|
|
46
|
-
throw new CapacityNotAssignableError(capacity.id);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
const assignedCapacity = await tx.select({
|
|
50
|
-
capacityId: capacityAssignments.capacityId
|
|
51
|
-
}).from(capacityAssignments).where(inArray(capacityAssignments.capacityId, newCapacityIds));
|
|
52
|
-
if (assignedCapacity.length > 0) throw new CapacityAlreadyAssignedError(assignedCapacity[0]?.capacityId ?? '');
|
|
53
|
-
const inserted = await tx.insert(capacityAssignments).values(newCapacityIds.map((capacityId)=>({
|
|
54
|
-
capacityId,
|
|
55
|
-
reservationId: reservation.id,
|
|
56
|
-
workspaceId: reservation.workspaceId,
|
|
57
|
-
provisionerId: params.provisionerId
|
|
58
|
-
}))).returning();
|
|
59
|
-
const insertedByCapacityId = new Map(inserted.map((assignment)=>[
|
|
60
|
-
assignment.capacityId,
|
|
61
|
-
assignment
|
|
62
|
-
]));
|
|
63
|
-
return params.capacityIds.flatMap((capacityId)=>{
|
|
64
|
-
const assignment = existingByCapacityId.get(capacityId) ?? insertedByCapacityId.get(capacityId);
|
|
65
|
-
return assignment ? [
|
|
66
|
-
toCapacityAssignment(assignment)
|
|
67
|
-
] : [];
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
//# sourceMappingURL=capacity-assignments.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/db/capacity-assignments.ts"],"sourcesContent":["import {and, eq, inArray, sql} from 'drizzle-orm';\nimport type {CapacityAssignment} from '#core/entities/capacity-assignment.js';\nimport {\n CapacityAlreadyAssignedError,\n CapacityNotAssignableError,\n ReservationExpiredError,\n ReservationNotFoundError,\n} from '#core/errors.js';\nimport {db} from './db.js';\nimport {capacityAssignments, toCapacityAssignment} from './schema/capacity-assignments.js';\nimport {reservations} from './schema/reservations.js';\nimport {providerRunners} from './schema/runner-instances.js';\n\nexport async function assignCapacityBatch(params: {\n provisionerId: string;\n reservationId: string;\n capacityIds: string[];\n}): Promise<CapacityAssignment[]> {\n return await db().transaction(async (tx) => {\n const lockKey = [\n 'runners_capacity_assignments',\n params.provisionerId,\n params.reservationId,\n ].join(':');\n await tx.execute(sql`select pg_advisory_xact_lock(hashtext(${lockKey}))`);\n for (const capacityId of [...params.capacityIds].sort()) {\n await tx.execute(\n sql`select pg_advisory_xact_lock(hashtext(${['runners_capacity_assignments', capacityId].join(':')}))`,\n );\n }\n\n const [reservation] = await tx\n .select()\n .from(reservations)\n .where(\n and(\n eq(reservations.id, params.reservationId),\n eq(reservations.provisionerId, params.provisionerId),\n ),\n )\n .limit(1);\n if (!reservation) throw new ReservationNotFoundError(params.reservationId);\n if (reservation.expiresAt <= new Date())\n throw new ReservationExpiredError(params.reservationId);\n\n const existing = await tx\n .select()\n .from(capacityAssignments)\n .where(eq(capacityAssignments.reservationId, reservation.id));\n const existingByCapacityId = new Map(\n existing.map((assignment) => [assignment.capacityId, assignment]),\n );\n const newCapacityIds = params.capacityIds.filter(\n (capacityId) => !existingByCapacityId.has(capacityId),\n );\n if (existing.length + newCapacityIds.length > reservation.count)\n throw new CapacityNotAssignableError(params.capacityIds[0] ?? '');\n\n if (newCapacityIds.length === 0) {\n return params.capacityIds.flatMap((capacityId) => {\n const assignment = existingByCapacityId.get(capacityId);\n return assignment ? [toCapacityAssignment(assignment)] : [];\n });\n }\n\n const capacities = await tx\n .select()\n .from(providerRunners)\n .where(\n and(\n eq(providerRunners.provisionerId, params.provisionerId),\n inArray(providerRunners.id, newCapacityIds),\n ),\n );\n if (capacities.length !== newCapacityIds.length)\n throw new CapacityNotAssignableError(params.capacityIds[0] ?? '');\n for (const capacity of capacities) {\n if (capacity.state !== 'starting' && capacity.state !== 'running')\n throw new CapacityNotAssignableError(capacity.id);\n if (\n !capacity.providerRunnerId ||\n capacity.labels.length === 0 ||\n !reservation.requiredLabels.every((label) => capacity.labels.includes(label))\n ) {\n throw new CapacityNotAssignableError(capacity.id);\n }\n }\n\n const assignedCapacity = await tx\n .select({capacityId: capacityAssignments.capacityId})\n .from(capacityAssignments)\n .where(inArray(capacityAssignments.capacityId, newCapacityIds));\n if (assignedCapacity.length > 0)\n throw new CapacityAlreadyAssignedError(assignedCapacity[0]?.capacityId ?? '');\n\n const inserted = await tx\n .insert(capacityAssignments)\n .values(\n newCapacityIds.map((capacityId) => ({\n capacityId,\n reservationId: reservation.id,\n workspaceId: reservation.workspaceId,\n provisionerId: params.provisionerId,\n })),\n )\n .returning();\n const insertedByCapacityId = new Map(\n inserted.map((assignment) => [assignment.capacityId, assignment]),\n );\n return params.capacityIds.flatMap((capacityId) => {\n const assignment =\n existingByCapacityId.get(capacityId) ?? insertedByCapacityId.get(capacityId);\n return assignment ? [toCapacityAssignment(assignment)] : [];\n });\n });\n}\n"],"names":["and","eq","inArray","sql","CapacityAlreadyAssignedError","CapacityNotAssignableError","ReservationExpiredError","ReservationNotFoundError","db","capacityAssignments","toCapacityAssignment","reservations","providerRunners","assignCapacityBatch","params","transaction","tx","lockKey","provisionerId","reservationId","join","execute","capacityId","capacityIds","sort","reservation","select","from","where","id","limit","expiresAt","Date","existing","existingByCapacityId","Map","map","assignment","newCapacityIds","filter","has","length","count","flatMap","get","capacities","capacity","state","providerRunnerId","labels","requiredLabels","every","label","includes","assignedCapacity","inserted","insert","values","workspaceId","returning","insertedByCapacityId"],"mappings":"AAAA,SAAQA,GAAG,EAAEC,EAAE,EAAEC,OAAO,EAAEC,GAAG,QAAO,cAAc;AAElD,SACEC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,uBAAuB,EACvBC,wBAAwB,QACnB,kBAAkB;AACzB,SAAQC,EAAE,QAAO,UAAU;AAC3B,SAAQC,mBAAmB,EAAEC,oBAAoB,QAAO,mCAAmC;AAC3F,SAAQC,YAAY,QAAO,2BAA2B;AACtD,SAAQC,eAAe,QAAO,+BAA+B;AAE7D,OAAO,eAAeC,oBAAoBC,MAIzC;IACC,OAAO,MAAMN,KAAKO,WAAW,CAAC,OAAOC;QACnC,MAAMC,UAAU;YACd;YACAH,OAAOI,aAAa;YACpBJ,OAAOK,aAAa;SACrB,CAACC,IAAI,CAAC;QACP,MAAMJ,GAAGK,OAAO,CAAClB,GAAG,CAAC,sCAAsC,EAAEc,QAAQ,EAAE,CAAC;QACxE,KAAK,MAAMK,cAAc;eAAIR,OAAOS,WAAW;SAAC,CAACC,IAAI,GAAI;YACvD,MAAMR,GAAGK,OAAO,CACdlB,GAAG,CAAC,sCAAsC,EAAE;gBAAC;gBAAgCmB;aAAW,CAACF,IAAI,CAAC,KAAK,EAAE,CAAC;QAE1G;QAEA,MAAM,CAACK,YAAY,GAAG,MAAMT,GACzBU,MAAM,GACNC,IAAI,CAAChB,cACLiB,KAAK,CACJ5B,IACEC,GAAGU,aAAakB,EAAE,EAAEf,OAAOK,aAAa,GACxClB,GAAGU,aAAaO,aAAa,EAAEJ,OAAOI,aAAa,IAGtDY,KAAK,CAAC;QACT,IAAI,CAACL,aAAa,MAAM,IAAIlB,yBAAyBO,OAAOK,aAAa;QACzE,IAAIM,YAAYM,SAAS,IAAI,IAAIC,QAC/B,MAAM,IAAI1B,wBAAwBQ,OAAOK,aAAa;QAExD,MAAMc,WAAW,MAAMjB,GACpBU,MAAM,GACNC,IAAI,CAAClB,qBACLmB,KAAK,CAAC3B,GAAGQ,oBAAoBU,aAAa,EAAEM,YAAYI,EAAE;QAC7D,MAAMK,uBAAuB,IAAIC,IAC/BF,SAASG,GAAG,CAAC,CAACC,aAAe;gBAACA,WAAWf,UAAU;gBAAEe;aAAW;QAElE,MAAMC,iBAAiBxB,OAAOS,WAAW,CAACgB,MAAM,CAC9C,CAACjB,aAAe,CAACY,qBAAqBM,GAAG,CAAClB;QAE5C,IAAIW,SAASQ,MAAM,GAAGH,eAAeG,MAAM,GAAGhB,YAAYiB,KAAK,EAC7D,MAAM,IAAIrC,2BAA2BS,OAAOS,WAAW,CAAC,EAAE,IAAI;QAEhE,IAAIe,eAAeG,MAAM,KAAK,GAAG;YAC/B,OAAO3B,OAAOS,WAAW,CAACoB,OAAO,CAAC,CAACrB;gBACjC,MAAMe,aAAaH,qBAAqBU,GAAG,CAACtB;gBAC5C,OAAOe,aAAa;oBAAC3B,qBAAqB2B;iBAAY,GAAG,EAAE;YAC7D;QACF;QAEA,MAAMQ,aAAa,MAAM7B,GACtBU,MAAM,GACNC,IAAI,CAACf,iBACLgB,KAAK,CACJ5B,IACEC,GAAGW,gBAAgBM,aAAa,EAAEJ,OAAOI,aAAa,GACtDhB,QAAQU,gBAAgBiB,EAAE,EAAES;QAGlC,IAAIO,WAAWJ,MAAM,KAAKH,eAAeG,MAAM,EAC7C,MAAM,IAAIpC,2BAA2BS,OAAOS,WAAW,CAAC,EAAE,IAAI;QAChE,KAAK,MAAMuB,YAAYD,WAAY;YACjC,IAAIC,SAASC,KAAK,KAAK,cAAcD,SAASC,KAAK,KAAK,WACtD,MAAM,IAAI1C,2BAA2ByC,SAASjB,EAAE;YAClD,IACE,CAACiB,SAASE,gBAAgB,IAC1BF,SAASG,MAAM,CAACR,MAAM,KAAK,KAC3B,CAAChB,YAAYyB,cAAc,CAACC,KAAK,CAAC,CAACC,QAAUN,SAASG,MAAM,CAACI,QAAQ,CAACD,SACtE;gBACA,MAAM,IAAI/C,2BAA2ByC,SAASjB,EAAE;YAClD;QACF;QAEA,MAAMyB,mBAAmB,MAAMtC,GAC5BU,MAAM,CAAC;YAACJ,YAAYb,oBAAoBa,UAAU;QAAA,GAClDK,IAAI,CAAClB,qBACLmB,KAAK,CAAC1B,QAAQO,oBAAoBa,UAAU,EAAEgB;QACjD,IAAIgB,iBAAiBb,MAAM,GAAG,GAC5B,MAAM,IAAIrC,6BAA6BkD,gBAAgB,CAAC,EAAE,EAAEhC,cAAc;QAE5E,MAAMiC,WAAW,MAAMvC,GACpBwC,MAAM,CAAC/C,qBACPgD,MAAM,CACLnB,eAAeF,GAAG,CAAC,CAACd,aAAgB,CAAA;gBAClCA;gBACAH,eAAeM,YAAYI,EAAE;gBAC7B6B,aAAajC,YAAYiC,WAAW;gBACpCxC,eAAeJ,OAAOI,aAAa;YACrC,CAAA,IAEDyC,SAAS;QACZ,MAAMC,uBAAuB,IAAIzB,IAC/BoB,SAASnB,GAAG,CAAC,CAACC,aAAe;gBAACA,WAAWf,UAAU;gBAAEe;aAAW;QAElE,OAAOvB,OAAOS,WAAW,CAACoB,OAAO,CAAC,CAACrB;YACjC,MAAMe,aACJH,qBAAqBU,GAAG,CAACtB,eAAesC,qBAAqBhB,GAAG,CAACtB;YACnE,OAAOe,aAAa;gBAAC3B,qBAAqB2B;aAAY,GAAG,EAAE;QAC7D;IACF;AACF"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import type { CapacityAssignment } from '#core/entities/capacity-assignment.js';
|
|
2
|
-
export declare const capacityAssignments: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
3
|
-
name: "capacity_assignments";
|
|
4
|
-
schema: undefined;
|
|
5
|
-
columns: {
|
|
6
|
-
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
7
|
-
name: "id";
|
|
8
|
-
tableName: "capacity_assignments";
|
|
9
|
-
dataType: "string";
|
|
10
|
-
columnType: "PgUUID";
|
|
11
|
-
data: string;
|
|
12
|
-
driverParam: string;
|
|
13
|
-
notNull: true;
|
|
14
|
-
hasDefault: true;
|
|
15
|
-
isPrimaryKey: true;
|
|
16
|
-
isAutoincrement: false;
|
|
17
|
-
hasRuntimeDefault: false;
|
|
18
|
-
enumValues: undefined;
|
|
19
|
-
baseColumn: never;
|
|
20
|
-
identity: undefined;
|
|
21
|
-
generated: undefined;
|
|
22
|
-
}, {}, {}>;
|
|
23
|
-
capacityId: import("drizzle-orm/pg-core").PgColumn<{
|
|
24
|
-
name: "capacity_id";
|
|
25
|
-
tableName: "capacity_assignments";
|
|
26
|
-
dataType: "string";
|
|
27
|
-
columnType: "PgUUID";
|
|
28
|
-
data: string;
|
|
29
|
-
driverParam: string;
|
|
30
|
-
notNull: true;
|
|
31
|
-
hasDefault: false;
|
|
32
|
-
isPrimaryKey: false;
|
|
33
|
-
isAutoincrement: false;
|
|
34
|
-
hasRuntimeDefault: false;
|
|
35
|
-
enumValues: undefined;
|
|
36
|
-
baseColumn: never;
|
|
37
|
-
identity: undefined;
|
|
38
|
-
generated: undefined;
|
|
39
|
-
}, {}, {}>;
|
|
40
|
-
reservationId: import("drizzle-orm/pg-core").PgColumn<{
|
|
41
|
-
name: "reservation_id";
|
|
42
|
-
tableName: "capacity_assignments";
|
|
43
|
-
dataType: "string";
|
|
44
|
-
columnType: "PgUUID";
|
|
45
|
-
data: string;
|
|
46
|
-
driverParam: string;
|
|
47
|
-
notNull: true;
|
|
48
|
-
hasDefault: false;
|
|
49
|
-
isPrimaryKey: false;
|
|
50
|
-
isAutoincrement: false;
|
|
51
|
-
hasRuntimeDefault: false;
|
|
52
|
-
enumValues: undefined;
|
|
53
|
-
baseColumn: never;
|
|
54
|
-
identity: undefined;
|
|
55
|
-
generated: undefined;
|
|
56
|
-
}, {}, {}>;
|
|
57
|
-
workspaceId: import("drizzle-orm/pg-core").PgColumn<{
|
|
58
|
-
name: "workspace_id";
|
|
59
|
-
tableName: "capacity_assignments";
|
|
60
|
-
dataType: "string";
|
|
61
|
-
columnType: "PgUUID";
|
|
62
|
-
data: string;
|
|
63
|
-
driverParam: string;
|
|
64
|
-
notNull: true;
|
|
65
|
-
hasDefault: false;
|
|
66
|
-
isPrimaryKey: false;
|
|
67
|
-
isAutoincrement: false;
|
|
68
|
-
hasRuntimeDefault: false;
|
|
69
|
-
enumValues: undefined;
|
|
70
|
-
baseColumn: never;
|
|
71
|
-
identity: undefined;
|
|
72
|
-
generated: undefined;
|
|
73
|
-
}, {}, {}>;
|
|
74
|
-
provisionerId: import("drizzle-orm/pg-core").PgColumn<{
|
|
75
|
-
name: "provisioner_id";
|
|
76
|
-
tableName: "capacity_assignments";
|
|
77
|
-
dataType: "string";
|
|
78
|
-
columnType: "PgUUID";
|
|
79
|
-
data: string;
|
|
80
|
-
driverParam: string;
|
|
81
|
-
notNull: true;
|
|
82
|
-
hasDefault: false;
|
|
83
|
-
isPrimaryKey: false;
|
|
84
|
-
isAutoincrement: false;
|
|
85
|
-
hasRuntimeDefault: false;
|
|
86
|
-
enumValues: undefined;
|
|
87
|
-
baseColumn: never;
|
|
88
|
-
identity: undefined;
|
|
89
|
-
generated: undefined;
|
|
90
|
-
}, {}, {}>;
|
|
91
|
-
createdAt: import("drizzle-orm/pg-core").PgColumn<{
|
|
92
|
-
name: "created_at";
|
|
93
|
-
tableName: "capacity_assignments";
|
|
94
|
-
dataType: "date";
|
|
95
|
-
columnType: "PgTimestamp";
|
|
96
|
-
data: Date;
|
|
97
|
-
driverParam: string;
|
|
98
|
-
notNull: true;
|
|
99
|
-
hasDefault: true;
|
|
100
|
-
isPrimaryKey: false;
|
|
101
|
-
isAutoincrement: false;
|
|
102
|
-
hasRuntimeDefault: false;
|
|
103
|
-
enumValues: undefined;
|
|
104
|
-
baseColumn: never;
|
|
105
|
-
identity: undefined;
|
|
106
|
-
generated: undefined;
|
|
107
|
-
}, {}, {}>;
|
|
108
|
-
};
|
|
109
|
-
dialect: "pg";
|
|
110
|
-
}>;
|
|
111
|
-
export type CapacityAssignmentDb = typeof capacityAssignments.$inferSelect;
|
|
112
|
-
export declare function toCapacityAssignment(row: CapacityAssignmentDb): CapacityAssignment;
|
|
113
|
-
//# sourceMappingURL=capacity-assignments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"capacity-assignments.d.ts","sourceRoot":"","sources":["../../../src/db/schema/capacity-assignments.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAG9E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAe/B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,OAAO,mBAAmB,CAAC,YAAY,CAAC;AAE3E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,oBAAoB,GAAG,kBAAkB,CASlF"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { uuidv7PrimaryKey } from '@shipfox/node-drizzle';
|
|
2
|
-
import { index, timestamp, uniqueIndex, uuid } from 'drizzle-orm/pg-core';
|
|
3
|
-
import { pgTable } from './common.js';
|
|
4
|
-
export const capacityAssignments = pgTable('capacity_assignments', {
|
|
5
|
-
id: uuidv7PrimaryKey(),
|
|
6
|
-
capacityId: uuid('capacity_id').notNull(),
|
|
7
|
-
reservationId: uuid('reservation_id').notNull(),
|
|
8
|
-
workspaceId: uuid('workspace_id').notNull(),
|
|
9
|
-
provisionerId: uuid('provisioner_id').notNull(),
|
|
10
|
-
createdAt: timestamp('created_at', {
|
|
11
|
-
withTimezone: true
|
|
12
|
-
}).notNull().defaultNow()
|
|
13
|
-
}, (table)=>[
|
|
14
|
-
uniqueIndex('runners_capacity_assignments_capacity_unique').on(table.capacityId),
|
|
15
|
-
index('runners_capacity_assignments_reservation_idx').on(table.reservationId),
|
|
16
|
-
index('runners_capacity_assignments_workspace_idx').on(table.workspaceId)
|
|
17
|
-
]);
|
|
18
|
-
export function toCapacityAssignment(row) {
|
|
19
|
-
return {
|
|
20
|
-
id: row.id,
|
|
21
|
-
capacityId: row.capacityId,
|
|
22
|
-
reservationId: row.reservationId,
|
|
23
|
-
workspaceId: row.workspaceId,
|
|
24
|
-
provisionerId: row.provisionerId,
|
|
25
|
-
createdAt: row.createdAt
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
//# sourceMappingURL=capacity-assignments.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/db/schema/capacity-assignments.ts"],"sourcesContent":["import {uuidv7PrimaryKey} from '@shipfox/node-drizzle';\nimport {index, timestamp, uniqueIndex, uuid} from 'drizzle-orm/pg-core';\nimport type {CapacityAssignment} from '#core/entities/capacity-assignment.js';\nimport {pgTable} from './common.js';\n\nexport const capacityAssignments = pgTable(\n 'capacity_assignments',\n {\n id: uuidv7PrimaryKey(),\n capacityId: uuid('capacity_id').notNull(),\n reservationId: uuid('reservation_id').notNull(),\n workspaceId: uuid('workspace_id').notNull(),\n provisionerId: uuid('provisioner_id').notNull(),\n createdAt: timestamp('created_at', {withTimezone: true}).notNull().defaultNow(),\n },\n (table) => [\n uniqueIndex('runners_capacity_assignments_capacity_unique').on(table.capacityId),\n index('runners_capacity_assignments_reservation_idx').on(table.reservationId),\n index('runners_capacity_assignments_workspace_idx').on(table.workspaceId),\n ],\n);\n\nexport type CapacityAssignmentDb = typeof capacityAssignments.$inferSelect;\n\nexport function toCapacityAssignment(row: CapacityAssignmentDb): CapacityAssignment {\n return {\n id: row.id,\n capacityId: row.capacityId,\n reservationId: row.reservationId,\n workspaceId: row.workspaceId,\n provisionerId: row.provisionerId,\n createdAt: row.createdAt,\n };\n}\n"],"names":["uuidv7PrimaryKey","index","timestamp","uniqueIndex","uuid","pgTable","capacityAssignments","id","capacityId","notNull","reservationId","workspaceId","provisionerId","createdAt","withTimezone","defaultNow","table","on","toCapacityAssignment","row"],"mappings":"AAAA,SAAQA,gBAAgB,QAAO,wBAAwB;AACvD,SAAQC,KAAK,EAAEC,SAAS,EAAEC,WAAW,EAAEC,IAAI,QAAO,sBAAsB;AAExE,SAAQC,OAAO,QAAO,cAAc;AAEpC,OAAO,MAAMC,sBAAsBD,QACjC,wBACA;IACEE,IAAIP;IACJQ,YAAYJ,KAAK,eAAeK,OAAO;IACvCC,eAAeN,KAAK,kBAAkBK,OAAO;IAC7CE,aAAaP,KAAK,gBAAgBK,OAAO;IACzCG,eAAeR,KAAK,kBAAkBK,OAAO;IAC7CI,WAAWX,UAAU,cAAc;QAACY,cAAc;IAAI,GAAGL,OAAO,GAAGM,UAAU;AAC/E,GACA,CAACC,QAAU;QACTb,YAAY,gDAAgDc,EAAE,CAACD,MAAMR,UAAU;QAC/EP,MAAM,gDAAgDgB,EAAE,CAACD,MAAMN,aAAa;QAC5ET,MAAM,8CAA8CgB,EAAE,CAACD,MAAML,WAAW;KACzE,EACD;AAIF,OAAO,SAASO,qBAAqBC,GAAyB;IAC5D,OAAO;QACLZ,IAAIY,IAAIZ,EAAE;QACVC,YAAYW,IAAIX,UAAU;QAC1BE,eAAeS,IAAIT,aAAa;QAChCC,aAAaQ,IAAIR,WAAW;QAC5BC,eAAeO,IAAIP,aAAa;QAChCC,WAAWM,IAAIN,SAAS;IAC1B;AACF"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { MintRegistrationTokensBatchResponseDto, MintRegistrationTokensRunnerInstanceDto } from '@shipfox/api-runners-dto';
|
|
2
|
-
import type { MintEphemeralRegistrationTokensBatchResult } from '#core/ephemeral-registration-tokens.js';
|
|
3
|
-
export declare function toMintRegistrationTokensRunnerInstances(providerRunners: MintRegistrationTokensRunnerInstanceDto[]): {
|
|
4
|
-
providerRunnerId: string;
|
|
5
|
-
}[];
|
|
6
|
-
export declare function toMintRegistrationTokensResponseDto(result: MintEphemeralRegistrationTokensBatchResult[]): MintRegistrationTokensBatchResponseDto;
|
|
7
|
-
//# sourceMappingURL=mint-registration-tokens.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mint-registration-tokens.d.ts","sourceRoot":"","sources":["../../../src/presentation/dto/mint-registration-tokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sCAAsC,EACtC,uCAAuC,EACxC,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAC,0CAA0C,EAAC,MAAM,wCAAwC,CAAC;AAEvG,wBAAgB,uCAAuC,CACrD,eAAe,EAAE,uCAAuC,EAAE;;IAG3D;AAED,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,0CAA0C,EAAE,GACnD,sCAAsC,CAExC"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export function toMintRegistrationTokensRunnerInstances(providerRunners) {
|
|
2
|
-
return providerRunners.map((runner)=>({
|
|
3
|
-
providerRunnerId: runner.provider_runner_id
|
|
4
|
-
}));
|
|
5
|
-
}
|
|
6
|
-
export function toMintRegistrationTokensResponseDto(result) {
|
|
7
|
-
return {
|
|
8
|
-
tokens: result.map(toMintedRegistrationTokenDto)
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
function toMintedRegistrationTokenDto(result) {
|
|
12
|
-
return {
|
|
13
|
-
provider_runner_id: result.providerRunnerId,
|
|
14
|
-
registration_token: result.rawToken,
|
|
15
|
-
expires_at: result.token.expiresAt.toISOString()
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=mint-registration-tokens.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/dto/mint-registration-tokens.ts"],"sourcesContent":["import type {\n MintedRegistrationTokenDto,\n MintRegistrationTokensBatchResponseDto,\n MintRegistrationTokensRunnerInstanceDto,\n} from '@shipfox/api-runners-dto';\nimport type {MintEphemeralRegistrationTokensBatchResult} from '#core/ephemeral-registration-tokens.js';\n\nexport function toMintRegistrationTokensRunnerInstances(\n providerRunners: MintRegistrationTokensRunnerInstanceDto[],\n) {\n return providerRunners.map((runner) => ({providerRunnerId: runner.provider_runner_id}));\n}\n\nexport function toMintRegistrationTokensResponseDto(\n result: MintEphemeralRegistrationTokensBatchResult[],\n): MintRegistrationTokensBatchResponseDto {\n return {tokens: result.map(toMintedRegistrationTokenDto)};\n}\n\nfunction toMintedRegistrationTokenDto(\n result: MintEphemeralRegistrationTokensBatchResult,\n): MintedRegistrationTokenDto {\n return {\n provider_runner_id: result.providerRunnerId,\n registration_token: result.rawToken,\n expires_at: result.token.expiresAt.toISOString(),\n };\n}\n"],"names":["toMintRegistrationTokensRunnerInstances","providerRunners","map","runner","providerRunnerId","provider_runner_id","toMintRegistrationTokensResponseDto","result","tokens","toMintedRegistrationTokenDto","registration_token","rawToken","expires_at","token","expiresAt","toISOString"],"mappings":"AAOA,OAAO,SAASA,wCACdC,eAA0D;IAE1D,OAAOA,gBAAgBC,GAAG,CAAC,CAACC,SAAY,CAAA;YAACC,kBAAkBD,OAAOE,kBAAkB;QAAA,CAAA;AACtF;AAEA,OAAO,SAASC,oCACdC,MAAoD;IAEpD,OAAO;QAACC,QAAQD,OAAOL,GAAG,CAACO;IAA6B;AAC1D;AAEA,SAASA,6BACPF,MAAkD;IAElD,OAAO;QACLF,oBAAoBE,OAAOH,gBAAgB;QAC3CM,oBAAoBH,OAAOI,QAAQ;QACnCC,YAAYL,OAAOM,KAAK,CAACC,SAAS,CAACC,WAAW;IAChD;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assign-capacity.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/assign-capacity.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,mBAAmB,iDAiC9B,CAAC"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { requireProvisionerContext } from '@shipfox/api-auth-context';
|
|
2
|
-
import { assignCapacityBatchBodySchema, assignCapacityBatchResponseSchema } from '@shipfox/api-runners-dto';
|
|
3
|
-
import { ClientError, defineRoute } from '@shipfox/node-fastify';
|
|
4
|
-
import { assignCapacityBatch } from '#core/capacity-assignments.js';
|
|
5
|
-
import { CapacityAlreadyAssignedError, CapacityNotAssignableError, ReservationExpiredError, ReservationNotFoundError } from '#core/errors.js';
|
|
6
|
-
export const assignCapacityRoute = defineRoute({
|
|
7
|
-
method: 'POST',
|
|
8
|
-
path: '/capacity/assignments',
|
|
9
|
-
description: 'Atomically assign provisioner capacity to a live reservation',
|
|
10
|
-
schema: {
|
|
11
|
-
body: assignCapacityBatchBodySchema,
|
|
12
|
-
response: {
|
|
13
|
-
200: assignCapacityBatchResponseSchema
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
errorHandler: (error)=>{
|
|
17
|
-
if (error instanceof ReservationNotFoundError) throw new ClientError('Reservation not found', 'reservation-not-found', {
|
|
18
|
-
status: 404
|
|
19
|
-
});
|
|
20
|
-
if (error instanceof ReservationExpiredError) throw new ClientError('Reservation has expired', 'reservation-expired', {
|
|
21
|
-
status: 409
|
|
22
|
-
});
|
|
23
|
-
if (error instanceof CapacityAlreadyAssignedError || error instanceof CapacityNotAssignableError) throw new ClientError('Capacity cannot be assigned', 'capacity-not-assignable', {
|
|
24
|
-
status: 409
|
|
25
|
-
});
|
|
26
|
-
throw error;
|
|
27
|
-
},
|
|
28
|
-
handler: async (request)=>{
|
|
29
|
-
const { provisionerTokenId } = requireProvisionerContext(request);
|
|
30
|
-
const assignments = await assignCapacityBatch({
|
|
31
|
-
provisionerId: provisionerTokenId,
|
|
32
|
-
reservationId: request.body.reservation_id,
|
|
33
|
-
capacityIds: request.body.capacity_ids
|
|
34
|
-
});
|
|
35
|
-
return {
|
|
36
|
-
assignments: assignments.map((assignment)=>({
|
|
37
|
-
capacity_id: assignment.capacityId,
|
|
38
|
-
assignment_id: assignment.id
|
|
39
|
-
}))
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
//# sourceMappingURL=assign-capacity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/assign-capacity.ts"],"sourcesContent":["import {requireProvisionerContext} from '@shipfox/api-auth-context';\nimport {\n assignCapacityBatchBodySchema,\n assignCapacityBatchResponseSchema,\n} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {assignCapacityBatch} from '#core/capacity-assignments.js';\nimport {\n CapacityAlreadyAssignedError,\n CapacityNotAssignableError,\n ReservationExpiredError,\n ReservationNotFoundError,\n} from '#core/errors.js';\n\nexport const assignCapacityRoute = defineRoute({\n method: 'POST',\n path: '/capacity/assignments',\n description: 'Atomically assign provisioner capacity to a live reservation',\n schema: {body: assignCapacityBatchBodySchema, response: {200: assignCapacityBatchResponseSchema}},\n errorHandler: (error) => {\n if (error instanceof ReservationNotFoundError)\n throw new ClientError('Reservation not found', 'reservation-not-found', {status: 404});\n if (error instanceof ReservationExpiredError)\n throw new ClientError('Reservation has expired', 'reservation-expired', {status: 409});\n if (\n error instanceof CapacityAlreadyAssignedError ||\n error instanceof CapacityNotAssignableError\n )\n throw new ClientError('Capacity cannot be assigned', 'capacity-not-assignable', {\n status: 409,\n });\n throw error;\n },\n handler: async (request) => {\n const {provisionerTokenId} = requireProvisionerContext(request);\n const assignments = await assignCapacityBatch({\n provisionerId: provisionerTokenId,\n reservationId: request.body.reservation_id,\n capacityIds: request.body.capacity_ids,\n });\n return {\n assignments: assignments.map((assignment) => ({\n capacity_id: assignment.capacityId,\n assignment_id: assignment.id,\n })),\n };\n },\n});\n"],"names":["requireProvisionerContext","assignCapacityBatchBodySchema","assignCapacityBatchResponseSchema","ClientError","defineRoute","assignCapacityBatch","CapacityAlreadyAssignedError","CapacityNotAssignableError","ReservationExpiredError","ReservationNotFoundError","assignCapacityRoute","method","path","description","schema","body","response","errorHandler","error","status","handler","request","provisionerTokenId","assignments","provisionerId","reservationId","reservation_id","capacityIds","capacity_ids","map","assignment","capacity_id","capacityId","assignment_id","id"],"mappings":"AAAA,SAAQA,yBAAyB,QAAO,4BAA4B;AACpE,SACEC,6BAA6B,EAC7BC,iCAAiC,QAC5B,2BAA2B;AAClC,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,mBAAmB,QAAO,gCAAgC;AAClE,SACEC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,uBAAuB,EACvBC,wBAAwB,QACnB,kBAAkB;AAEzB,OAAO,MAAMC,sBAAsBN,YAAY;IAC7CO,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QAACC,MAAMd;QAA+Be,UAAU;YAAC,KAAKd;QAAiC;IAAC;IAChGe,cAAc,CAACC;QACb,IAAIA,iBAAiBT,0BACnB,MAAM,IAAIN,YAAY,yBAAyB,yBAAyB;YAACgB,QAAQ;QAAG;QACtF,IAAID,iBAAiBV,yBACnB,MAAM,IAAIL,YAAY,2BAA2B,uBAAuB;YAACgB,QAAQ;QAAG;QACtF,IACED,iBAAiBZ,gCACjBY,iBAAiBX,4BAEjB,MAAM,IAAIJ,YAAY,+BAA+B,2BAA2B;YAC9EgB,QAAQ;QACV;QACF,MAAMD;IACR;IACAE,SAAS,OAAOC;QACd,MAAM,EAACC,kBAAkB,EAAC,GAAGtB,0BAA0BqB;QACvD,MAAME,cAAc,MAAMlB,oBAAoB;YAC5CmB,eAAeF;YACfG,eAAeJ,QAAQN,IAAI,CAACW,cAAc;YAC1CC,aAAaN,QAAQN,IAAI,CAACa,YAAY;QACxC;QACA,OAAO;YACLL,aAAaA,YAAYM,GAAG,CAAC,CAACC,aAAgB,CAAA;oBAC5CC,aAAaD,WAAWE,UAAU;oBAClCC,eAAeH,WAAWI,EAAE;gBAC9B,CAAA;QACF;IACF;AACF,GAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mint-registration-tokens.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/mint-registration-tokens.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,2BAA2B,iDA0DtC,CAAC"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { requireWorkspaceProvisionerContext } from '@shipfox/api-auth-context';
|
|
2
|
-
import { mintRegistrationTokensBatchBodySchema, mintRegistrationTokensBatchResponseSchema } from '@shipfox/api-runners-dto';
|
|
3
|
-
import { ClientError, defineRoute } from '@shipfox/node-fastify';
|
|
4
|
-
import { config } from '#config.js';
|
|
5
|
-
import { mintEphemeralRegistrationTokensBatch } from '#core/ephemeral-registration-tokens.js';
|
|
6
|
-
import { ActiveEphemeralRegistrationTokensExistError, RegistrationTokenBatchExceedsReservationError, RegistrationTokenBatchTooLargeError, ReservationExpiredError, ReservationNotFoundError } from '#core/errors.js';
|
|
7
|
-
import { toMintRegistrationTokensResponseDto, toMintRegistrationTokensRunnerInstances } from '#presentation/dto/index.js';
|
|
8
|
-
import { createProvisionerMintRateLimitPreHandler } from './rate-limit.js';
|
|
9
|
-
export const mintRegistrationTokensRoute = defineRoute({
|
|
10
|
-
method: 'POST',
|
|
11
|
-
path: '/runner-registration-tokens/batch',
|
|
12
|
-
description: 'Mint ephemeral runner registration tokens for reserved provisioned runners',
|
|
13
|
-
schema: {
|
|
14
|
-
body: mintRegistrationTokensBatchBodySchema,
|
|
15
|
-
response: {
|
|
16
|
-
200: mintRegistrationTokensBatchResponseSchema
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
preHandler: createProvisionerMintRateLimitPreHandler(),
|
|
20
|
-
errorHandler: (error)=>{
|
|
21
|
-
if (error instanceof ReservationNotFoundError) {
|
|
22
|
-
throw new ClientError('Reservation not found', 'reservation-not-found', {
|
|
23
|
-
status: 404
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
if (error instanceof ReservationExpiredError) {
|
|
27
|
-
throw new ClientError('Reservation has expired', 'reservation-expired', {
|
|
28
|
-
status: 409
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
if (error instanceof RegistrationTokenBatchExceedsReservationError) {
|
|
32
|
-
throw new ClientError('Batch exceeds reservation count', 'batch-exceeds-reservation', {
|
|
33
|
-
status: 409,
|
|
34
|
-
details: {
|
|
35
|
-
requested: error.requested,
|
|
36
|
-
reservation_count: error.reservationCount,
|
|
37
|
-
already_minted: error.alreadyMinted
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
if (error instanceof ActiveEphemeralRegistrationTokensExistError) {
|
|
42
|
-
throw new ClientError('Registration token already active', 'registration-token-active', {
|
|
43
|
-
status: 409,
|
|
44
|
-
details: {
|
|
45
|
-
provider_runner_ids: error.providerRunnerIds
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
if (error instanceof RegistrationTokenBatchTooLargeError) {
|
|
50
|
-
throw new ClientError('Registration token batch is too large', 'batch-too-large', {
|
|
51
|
-
status: 400,
|
|
52
|
-
details: {
|
|
53
|
-
requested: error.requested,
|
|
54
|
-
max: error.max
|
|
55
|
-
}
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
throw error;
|
|
59
|
-
},
|
|
60
|
-
handler: async (request)=>{
|
|
61
|
-
const { provisionerTokenId, workspaceId } = requireWorkspaceProvisionerContext(request);
|
|
62
|
-
const result = await mintEphemeralRegistrationTokensBatch({
|
|
63
|
-
workspaceId,
|
|
64
|
-
provisionerId: provisionerTokenId,
|
|
65
|
-
reservationId: request.body.reservation_id,
|
|
66
|
-
providerRunners: toMintRegistrationTokensRunnerInstances(request.body.runner_instances),
|
|
67
|
-
ttlSeconds: config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS,
|
|
68
|
-
maxBatchSize: config.REGISTRATION_TOKEN_BATCH_MAX
|
|
69
|
-
});
|
|
70
|
-
return toMintRegistrationTokensResponseDto(result);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
//# sourceMappingURL=mint-registration-tokens.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/mint-registration-tokens.ts"],"sourcesContent":["import {requireWorkspaceProvisionerContext} from '@shipfox/api-auth-context';\nimport {\n mintRegistrationTokensBatchBodySchema,\n mintRegistrationTokensBatchResponseSchema,\n} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {config} from '#config.js';\nimport {mintEphemeralRegistrationTokensBatch} from '#core/ephemeral-registration-tokens.js';\nimport {\n ActiveEphemeralRegistrationTokensExistError,\n RegistrationTokenBatchExceedsReservationError,\n RegistrationTokenBatchTooLargeError,\n ReservationExpiredError,\n ReservationNotFoundError,\n} from '#core/errors.js';\nimport {\n toMintRegistrationTokensResponseDto,\n toMintRegistrationTokensRunnerInstances,\n} from '#presentation/dto/index.js';\nimport {createProvisionerMintRateLimitPreHandler} from './rate-limit.js';\n\nexport const mintRegistrationTokensRoute = defineRoute({\n method: 'POST',\n path: '/runner-registration-tokens/batch',\n description: 'Mint ephemeral runner registration tokens for reserved provisioned runners',\n schema: {\n body: mintRegistrationTokensBatchBodySchema,\n response: {\n 200: mintRegistrationTokensBatchResponseSchema,\n },\n },\n preHandler: createProvisionerMintRateLimitPreHandler(),\n errorHandler: (error) => {\n if (error instanceof ReservationNotFoundError) {\n throw new ClientError('Reservation not found', 'reservation-not-found', {status: 404});\n }\n if (error instanceof ReservationExpiredError) {\n throw new ClientError('Reservation has expired', 'reservation-expired', {status: 409});\n }\n if (error instanceof RegistrationTokenBatchExceedsReservationError) {\n throw new ClientError('Batch exceeds reservation count', 'batch-exceeds-reservation', {\n status: 409,\n details: {\n requested: error.requested,\n reservation_count: error.reservationCount,\n already_minted: error.alreadyMinted,\n },\n });\n }\n if (error instanceof ActiveEphemeralRegistrationTokensExistError) {\n throw new ClientError('Registration token already active', 'registration-token-active', {\n status: 409,\n details: {provider_runner_ids: error.providerRunnerIds},\n });\n }\n if (error instanceof RegistrationTokenBatchTooLargeError) {\n throw new ClientError('Registration token batch is too large', 'batch-too-large', {\n status: 400,\n details: {\n requested: error.requested,\n max: error.max,\n },\n });\n }\n throw error;\n },\n handler: async (request) => {\n const {provisionerTokenId, workspaceId} = requireWorkspaceProvisionerContext(request);\n const result = await mintEphemeralRegistrationTokensBatch({\n workspaceId,\n provisionerId: provisionerTokenId,\n reservationId: request.body.reservation_id,\n providerRunners: toMintRegistrationTokensRunnerInstances(request.body.runner_instances),\n ttlSeconds: config.EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS,\n maxBatchSize: config.REGISTRATION_TOKEN_BATCH_MAX,\n });\n\n return toMintRegistrationTokensResponseDto(result);\n },\n});\n"],"names":["requireWorkspaceProvisionerContext","mintRegistrationTokensBatchBodySchema","mintRegistrationTokensBatchResponseSchema","ClientError","defineRoute","config","mintEphemeralRegistrationTokensBatch","ActiveEphemeralRegistrationTokensExistError","RegistrationTokenBatchExceedsReservationError","RegistrationTokenBatchTooLargeError","ReservationExpiredError","ReservationNotFoundError","toMintRegistrationTokensResponseDto","toMintRegistrationTokensRunnerInstances","createProvisionerMintRateLimitPreHandler","mintRegistrationTokensRoute","method","path","description","schema","body","response","preHandler","errorHandler","error","status","details","requested","reservation_count","reservationCount","already_minted","alreadyMinted","provider_runner_ids","providerRunnerIds","max","handler","request","provisionerTokenId","workspaceId","result","provisionerId","reservationId","reservation_id","providerRunners","runner_instances","ttlSeconds","EPHEMERAL_REGISTRATION_TOKEN_TTL_SECONDS","maxBatchSize","REGISTRATION_TOKEN_BATCH_MAX"],"mappings":"AAAA,SAAQA,kCAAkC,QAAO,4BAA4B;AAC7E,SACEC,qCAAqC,EACrCC,yCAAyC,QACpC,2BAA2B;AAClC,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,MAAM,QAAO,aAAa;AAClC,SAAQC,oCAAoC,QAAO,yCAAyC;AAC5F,SACEC,2CAA2C,EAC3CC,6CAA6C,EAC7CC,mCAAmC,EACnCC,uBAAuB,EACvBC,wBAAwB,QACnB,kBAAkB;AACzB,SACEC,mCAAmC,EACnCC,uCAAuC,QAClC,6BAA6B;AACpC,SAAQC,wCAAwC,QAAO,kBAAkB;AAEzE,OAAO,MAAMC,8BAA8BX,YAAY;IACrDY,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,MAAMnB;QACNoB,UAAU;YACR,KAAKnB;QACP;IACF;IACAoB,YAAYR;IACZS,cAAc,CAACC;QACb,IAAIA,iBAAiBb,0BAA0B;YAC7C,MAAM,IAAIR,YAAY,yBAAyB,yBAAyB;gBAACsB,QAAQ;YAAG;QACtF;QACA,IAAID,iBAAiBd,yBAAyB;YAC5C,MAAM,IAAIP,YAAY,2BAA2B,uBAAuB;gBAACsB,QAAQ;YAAG;QACtF;QACA,IAAID,iBAAiBhB,+CAA+C;YAClE,MAAM,IAAIL,YAAY,mCAAmC,6BAA6B;gBACpFsB,QAAQ;gBACRC,SAAS;oBACPC,WAAWH,MAAMG,SAAS;oBAC1BC,mBAAmBJ,MAAMK,gBAAgB;oBACzCC,gBAAgBN,MAAMO,aAAa;gBACrC;YACF;QACF;QACA,IAAIP,iBAAiBjB,6CAA6C;YAChE,MAAM,IAAIJ,YAAY,qCAAqC,6BAA6B;gBACtFsB,QAAQ;gBACRC,SAAS;oBAACM,qBAAqBR,MAAMS,iBAAiB;gBAAA;YACxD;QACF;QACA,IAAIT,iBAAiBf,qCAAqC;YACxD,MAAM,IAAIN,YAAY,yCAAyC,mBAAmB;gBAChFsB,QAAQ;gBACRC,SAAS;oBACPC,WAAWH,MAAMG,SAAS;oBAC1BO,KAAKV,MAAMU,GAAG;gBAChB;YACF;QACF;QACA,MAAMV;IACR;IACAW,SAAS,OAAOC;QACd,MAAM,EAACC,kBAAkB,EAAEC,WAAW,EAAC,GAAGtC,mCAAmCoC;QAC7E,MAAMG,SAAS,MAAMjC,qCAAqC;YACxDgC;YACAE,eAAeH;YACfI,eAAeL,QAAQhB,IAAI,CAACsB,cAAc;YAC1CC,iBAAiB9B,wCAAwCuB,QAAQhB,IAAI,CAACwB,gBAAgB;YACtFC,YAAYxC,OAAOyC,wCAAwC;YAC3DC,cAAc1C,OAAO2C,4BAA4B;QACnD;QAEA,OAAOpC,oCAAoC2B;IAC7C;AACF,GAAG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"planned-capacity.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/planned-capacity.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,0BAA0B,iDAiBrC,CAAC;AAEH,eAAO,MAAM,yBAAyB,iDAkBpC,CAAC"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { requireProvisionerContext } from '@shipfox/api-auth-context';
|
|
2
|
-
import { attachProviderRunnerBodySchema, attachProviderRunnerResponseSchema, createPlannedCapacityBodySchema, createPlannedCapacityResponseSchema } from '@shipfox/api-runners-dto';
|
|
3
|
-
import { defineRoute } from '@shipfox/node-fastify';
|
|
4
|
-
import { z } from 'zod';
|
|
5
|
-
import { attachProviderRunnerId, createPlannedProvisionedCapacity } from '#core/index.js';
|
|
6
|
-
export const createPlannedCapacityRoute = defineRoute({
|
|
7
|
-
method: 'POST',
|
|
8
|
-
path: '/capacity',
|
|
9
|
-
description: 'Create provisioner-owned capacity before provider launch',
|
|
10
|
-
schema: {
|
|
11
|
-
body: createPlannedCapacityBodySchema,
|
|
12
|
-
response: {
|
|
13
|
-
200: createPlannedCapacityResponseSchema
|
|
14
|
-
}
|
|
15
|
-
},
|
|
16
|
-
handler: async (request)=>{
|
|
17
|
-
const { provisionerTokenId } = requireProvisionerContext(request);
|
|
18
|
-
const result = await createPlannedProvisionedCapacity({
|
|
19
|
-
provisionerId: provisionerTokenId,
|
|
20
|
-
providerKind: request.body.provider_kind ?? null,
|
|
21
|
-
templateKey: request.body.template_key ?? null
|
|
22
|
-
});
|
|
23
|
-
return {
|
|
24
|
-
capacity_id: result.capacityId
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
export const attachProviderRunnerRoute = defineRoute({
|
|
29
|
-
method: 'POST',
|
|
30
|
-
path: '/capacity/:capacityId/provider-runner',
|
|
31
|
-
description: 'Attach a provider runner identity to planned capacity once',
|
|
32
|
-
schema: {
|
|
33
|
-
params: z.object({
|
|
34
|
-
capacityId: z.string().uuid()
|
|
35
|
-
}),
|
|
36
|
-
body: attachProviderRunnerBodySchema,
|
|
37
|
-
response: {
|
|
38
|
-
200: attachProviderRunnerResponseSchema
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
handler: async (request)=>{
|
|
42
|
-
const { provisionerTokenId } = requireProvisionerContext(request);
|
|
43
|
-
const attached = await attachProviderRunnerId({
|
|
44
|
-
capacityId: request.params.capacityId,
|
|
45
|
-
provisionerId: provisionerTokenId,
|
|
46
|
-
providerRunnerId: request.body.provider_runner_id
|
|
47
|
-
});
|
|
48
|
-
return {
|
|
49
|
-
attached
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
//# sourceMappingURL=planned-capacity.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/presentation/routes/planned-capacity.ts"],"sourcesContent":["import {requireProvisionerContext} from '@shipfox/api-auth-context';\nimport {\n attachProviderRunnerBodySchema,\n attachProviderRunnerResponseSchema,\n createPlannedCapacityBodySchema,\n createPlannedCapacityResponseSchema,\n} from '@shipfox/api-runners-dto';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {attachProviderRunnerId, createPlannedProvisionedCapacity} from '#core/index.js';\n\nexport const createPlannedCapacityRoute = defineRoute({\n method: 'POST',\n path: '/capacity',\n description: 'Create provisioner-owned capacity before provider launch',\n schema: {\n body: createPlannedCapacityBodySchema,\n response: {200: createPlannedCapacityResponseSchema},\n },\n handler: async (request) => {\n const {provisionerTokenId} = requireProvisionerContext(request);\n const result = await createPlannedProvisionedCapacity({\n provisionerId: provisionerTokenId,\n providerKind: request.body.provider_kind ?? null,\n templateKey: request.body.template_key ?? null,\n });\n return {capacity_id: result.capacityId};\n },\n});\n\nexport const attachProviderRunnerRoute = defineRoute({\n method: 'POST',\n path: '/capacity/:capacityId/provider-runner',\n description: 'Attach a provider runner identity to planned capacity once',\n schema: {\n params: z.object({capacityId: z.string().uuid()}),\n body: attachProviderRunnerBodySchema,\n response: {200: attachProviderRunnerResponseSchema},\n },\n handler: async (request) => {\n const {provisionerTokenId} = requireProvisionerContext(request);\n const attached = await attachProviderRunnerId({\n capacityId: request.params.capacityId,\n provisionerId: provisionerTokenId,\n providerRunnerId: request.body.provider_runner_id,\n });\n return {attached};\n },\n});\n"],"names":["requireProvisionerContext","attachProviderRunnerBodySchema","attachProviderRunnerResponseSchema","createPlannedCapacityBodySchema","createPlannedCapacityResponseSchema","defineRoute","z","attachProviderRunnerId","createPlannedProvisionedCapacity","createPlannedCapacityRoute","method","path","description","schema","body","response","handler","request","provisionerTokenId","result","provisionerId","providerKind","provider_kind","templateKey","template_key","capacity_id","capacityId","attachProviderRunnerRoute","params","object","string","uuid","attached","providerRunnerId","provider_runner_id"],"mappings":"AAAA,SAAQA,yBAAyB,QAAO,4BAA4B;AACpE,SACEC,8BAA8B,EAC9BC,kCAAkC,EAClCC,+BAA+B,EAC/BC,mCAAmC,QAC9B,2BAA2B;AAClC,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,CAAC,QAAO,MAAM;AACtB,SAAQC,sBAAsB,EAAEC,gCAAgC,QAAO,iBAAiB;AAExF,OAAO,MAAMC,6BAA6BJ,YAAY;IACpDK,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,MAAMX;QACNY,UAAU;YAAC,KAAKX;QAAmC;IACrD;IACAY,SAAS,OAAOC;QACd,MAAM,EAACC,kBAAkB,EAAC,GAAGlB,0BAA0BiB;QACvD,MAAME,SAAS,MAAMX,iCAAiC;YACpDY,eAAeF;YACfG,cAAcJ,QAAQH,IAAI,CAACQ,aAAa,IAAI;YAC5CC,aAAaN,QAAQH,IAAI,CAACU,YAAY,IAAI;QAC5C;QACA,OAAO;YAACC,aAAaN,OAAOO,UAAU;QAAA;IACxC;AACF,GAAG;AAEH,OAAO,MAAMC,4BAA4BtB,YAAY;IACnDK,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNe,QAAQtB,EAAEuB,MAAM,CAAC;YAACH,YAAYpB,EAAEwB,MAAM,GAAGC,IAAI;QAAE;QAC/CjB,MAAMb;QACNc,UAAU;YAAC,KAAKb;QAAkC;IACpD;IACAc,SAAS,OAAOC;QACd,MAAM,EAACC,kBAAkB,EAAC,GAAGlB,0BAA0BiB;QACvD,MAAMe,WAAW,MAAMzB,uBAAuB;YAC5CmB,YAAYT,QAAQW,MAAM,CAACF,UAAU;YACrCN,eAAeF;YACfe,kBAAkBhB,QAAQH,IAAI,CAACoB,kBAAkB;QACnD;QACA,OAAO;YAACF;QAAQ;IAClB;AACF,GAAG"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import {assignCapacityBatch as assignCapacityBatchDb} from '#db/capacity-assignments.js';
|
|
2
|
-
import type {CapacityAssignment} from './entities/capacity-assignment.js';
|
|
3
|
-
|
|
4
|
-
export function assignCapacityBatch(params: {
|
|
5
|
-
provisionerId: string;
|
|
6
|
-
reservationId: string;
|
|
7
|
-
capacityIds: string[];
|
|
8
|
-
}): Promise<CapacityAssignment[]> {
|
|
9
|
-
return assignCapacityBatchDb(params);
|
|
10
|
-
}
|