@knpkv/herdr-fleet 0.2.0
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/LICENSE +21 -0
- package/README.md +25 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +21 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +93 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +55 -0
- package/dist/errors.js.map +1 -0
- package/dist/hash.d.ts +21 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +28 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/limits.d.ts +3 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +3 -0
- package/dist/limits.js.map +1 -0
- package/dist/model.d.ts +372 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/model.js +240 -0
- package/dist/model.js.map +1 -0
- package/dist/response.d.ts +7 -0
- package/dist/response.d.ts.map +1 -0
- package/dist/response.js +39 -0
- package/dist/response.js.map +1 -0
- package/dist/service.d.ts +736 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +362 -0
- package/dist/service.js.map +1 -0
- package/dist/store.d.ts +575 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +209 -0
- package/dist/store.js.map +1 -0
- package/package.json +59 -0
package/dist/store.js
ADDED
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { Effect, FileSystem, Path, Schema } from "effect";
|
|
2
|
+
import { DatabaseSync } from "node:sqlite";
|
|
3
|
+
import { FleetJobConflictError, FleetStoreError, FleetTransitionConflictError } from "./errors.js";
|
|
4
|
+
import { JobRecord } from "./model.js";
|
|
5
|
+
const storeError = (operation) => (cause) => new FleetStoreError({ operation, detail: String(cause), cause });
|
|
6
|
+
const decodeRecord = (text) => Effect.try({
|
|
7
|
+
try: () => Schema.decodeUnknownSync(JobRecord)(JSON.parse(text)),
|
|
8
|
+
catch: storeError("decode")
|
|
9
|
+
});
|
|
10
|
+
const encodeRecord = (record) => JSON.stringify(Schema.encodeSync(JobRecord)(record));
|
|
11
|
+
const decodeRows = (operation, rows) => Effect.forEach(rows, (row) => Schema.decodeUnknownEffect(Schema.Struct({ record: Schema.String }))(row).pipe(Effect.mapError(storeError(operation)), Effect.flatMap(({ record }) => decodeRecord(record))));
|
|
12
|
+
export class JobStore {
|
|
13
|
+
#database;
|
|
14
|
+
#fileSystem;
|
|
15
|
+
path;
|
|
16
|
+
constructor(path, fileSystem) {
|
|
17
|
+
this.path = path;
|
|
18
|
+
this.#fileSystem = fileSystem;
|
|
19
|
+
this.#database = new DatabaseSync(path);
|
|
20
|
+
try {
|
|
21
|
+
this.#database.exec(`
|
|
22
|
+
PRAGMA journal_mode = WAL;
|
|
23
|
+
CREATE TABLE IF NOT EXISTS jobs (
|
|
24
|
+
id TEXT PRIMARY KEY,
|
|
25
|
+
created_at INTEGER NOT NULL,
|
|
26
|
+
record TEXT NOT NULL
|
|
27
|
+
);
|
|
28
|
+
CREATE INDEX IF NOT EXISTS jobs_record_status_idx ON jobs (
|
|
29
|
+
CASE
|
|
30
|
+
WHEN json_valid(record)
|
|
31
|
+
THEN json_extract(record, '$.status')
|
|
32
|
+
END
|
|
33
|
+
);
|
|
34
|
+
`);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
this.#database.close();
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
static open = Effect.fn("JobStore.open")(function* (path) {
|
|
42
|
+
const fileSystem = yield* FileSystem.FileSystem;
|
|
43
|
+
const paths = yield* Path.Path;
|
|
44
|
+
const directory = paths.dirname(path);
|
|
45
|
+
yield* fileSystem.makeDirectory(directory, { recursive: true, mode: 0o700 }).pipe(Effect.mapError(storeError("open.makeDirectory")));
|
|
46
|
+
yield* fileSystem.chmod(directory, 0o700).pipe(Effect.mapError(storeError("open.secureDirectory")));
|
|
47
|
+
const store = yield* Effect.try({
|
|
48
|
+
try: () => new JobStore(path, fileSystem),
|
|
49
|
+
catch: storeError("open.database")
|
|
50
|
+
});
|
|
51
|
+
yield* store.secureFiles();
|
|
52
|
+
return store;
|
|
53
|
+
});
|
|
54
|
+
put = Effect.fn("JobStore.put")(function* (record) {
|
|
55
|
+
const database = this.#database;
|
|
56
|
+
const inserted = yield* Effect.try({
|
|
57
|
+
try: () => database
|
|
58
|
+
.prepare("INSERT OR IGNORE INTO jobs (id, created_at, record) VALUES (?, ?, ?)")
|
|
59
|
+
.run(record.id, record.createdAt, encodeRecord(record)).changes,
|
|
60
|
+
catch: storeError("put")
|
|
61
|
+
});
|
|
62
|
+
if (inserted !== 1) {
|
|
63
|
+
return yield* new FleetJobConflictError({ jobId: record.id });
|
|
64
|
+
}
|
|
65
|
+
yield* this.secureFiles();
|
|
66
|
+
return record;
|
|
67
|
+
});
|
|
68
|
+
transition = Effect.fn("JobStore.transition")(function* (current, next) {
|
|
69
|
+
const database = this.#database;
|
|
70
|
+
const changed = yield* Effect.try({
|
|
71
|
+
try: () => database
|
|
72
|
+
.prepare(`
|
|
73
|
+
UPDATE jobs
|
|
74
|
+
SET record = ?
|
|
75
|
+
WHERE id = ?
|
|
76
|
+
AND record = ?
|
|
77
|
+
`)
|
|
78
|
+
.run(encodeRecord(next), current.id, encodeRecord(current)).changes,
|
|
79
|
+
catch: storeError("transition")
|
|
80
|
+
});
|
|
81
|
+
if (changed !== 1) {
|
|
82
|
+
return yield* new FleetTransitionConflictError({ jobId: current.id });
|
|
83
|
+
}
|
|
84
|
+
yield* this.secureFiles();
|
|
85
|
+
return next;
|
|
86
|
+
});
|
|
87
|
+
get = Effect.fn("JobStore.get")(function* (id) {
|
|
88
|
+
const database = this.#database;
|
|
89
|
+
const row = yield* Effect.try({
|
|
90
|
+
try: () => database.prepare("SELECT record FROM jobs WHERE id = ?").get(id),
|
|
91
|
+
catch: storeError("get")
|
|
92
|
+
});
|
|
93
|
+
if (row === undefined)
|
|
94
|
+
return undefined;
|
|
95
|
+
const stored = yield* Schema.decodeUnknownEffect(Schema.Struct({ record: Schema.String }))(row).pipe(Effect.mapError(storeError("get")));
|
|
96
|
+
return yield* decodeRecord(stored.record);
|
|
97
|
+
});
|
|
98
|
+
list = Effect.fn("JobStore.list")(function* (limit) {
|
|
99
|
+
const database = this.#database;
|
|
100
|
+
const rows = yield* Effect.try({
|
|
101
|
+
try: () => database
|
|
102
|
+
.prepare("SELECT record FROM jobs ORDER BY created_at DESC LIMIT ?")
|
|
103
|
+
.all(limit),
|
|
104
|
+
catch: storeError("list")
|
|
105
|
+
});
|
|
106
|
+
return yield* decodeRows("list", rows);
|
|
107
|
+
});
|
|
108
|
+
listPending = Effect.fn("JobStore.listPending")(function* (cursor, limit) {
|
|
109
|
+
const database = this.#database;
|
|
110
|
+
const rows = yield* Effect.try({
|
|
111
|
+
try: () => cursor === null
|
|
112
|
+
? database.prepare(`
|
|
113
|
+
SELECT record
|
|
114
|
+
FROM jobs
|
|
115
|
+
WHERE CASE
|
|
116
|
+
WHEN json_valid(record)
|
|
117
|
+
THEN json_extract(record, '$.status')
|
|
118
|
+
END = ?
|
|
119
|
+
ORDER BY created_at DESC, id DESC
|
|
120
|
+
LIMIT ?
|
|
121
|
+
`).all("pending_approval", limit)
|
|
122
|
+
: database.prepare(`
|
|
123
|
+
SELECT record
|
|
124
|
+
FROM jobs
|
|
125
|
+
WHERE CASE
|
|
126
|
+
WHEN json_valid(record)
|
|
127
|
+
THEN json_extract(record, '$.status')
|
|
128
|
+
END = ?
|
|
129
|
+
AND (created_at < ? OR (created_at = ? AND id < ?))
|
|
130
|
+
ORDER BY created_at DESC, id DESC
|
|
131
|
+
LIMIT ?
|
|
132
|
+
`).all("pending_approval", cursor.createdAt, cursor.createdAt, cursor.id, limit),
|
|
133
|
+
catch: storeError("listPending")
|
|
134
|
+
});
|
|
135
|
+
return yield* decodeRows("listPending", rows);
|
|
136
|
+
});
|
|
137
|
+
listHistory = Effect.fn("JobStore.listHistory")(function* (cursor, limit) {
|
|
138
|
+
const database = this.#database;
|
|
139
|
+
const rows = yield* Effect.try({
|
|
140
|
+
try: () => cursor === null
|
|
141
|
+
? database.prepare(`
|
|
142
|
+
SELECT record
|
|
143
|
+
FROM jobs
|
|
144
|
+
ORDER BY created_at DESC, id DESC
|
|
145
|
+
LIMIT ?
|
|
146
|
+
`).all(limit)
|
|
147
|
+
: database.prepare(`
|
|
148
|
+
SELECT record
|
|
149
|
+
FROM jobs
|
|
150
|
+
WHERE created_at < ? OR (created_at = ? AND id < ?)
|
|
151
|
+
ORDER BY created_at DESC, id DESC
|
|
152
|
+
LIMIT ?
|
|
153
|
+
`).all(cursor.createdAt, cursor.createdAt, cursor.id, limit),
|
|
154
|
+
catch: storeError("listHistory")
|
|
155
|
+
});
|
|
156
|
+
return yield* decodeRows("listHistory", rows);
|
|
157
|
+
});
|
|
158
|
+
listRecoverable = Effect.fn("JobStore.listRecoverable")(function* () {
|
|
159
|
+
const database = this.#database;
|
|
160
|
+
const rows = yield* Effect.try({
|
|
161
|
+
try: () => database
|
|
162
|
+
.prepare(`
|
|
163
|
+
SELECT record
|
|
164
|
+
FROM jobs
|
|
165
|
+
WHERE CASE
|
|
166
|
+
WHEN json_valid(record)
|
|
167
|
+
THEN json_extract(record, '$.status')
|
|
168
|
+
END IN (?, ?, ?)
|
|
169
|
+
ORDER BY created_at ASC
|
|
170
|
+
`)
|
|
171
|
+
.all("pending_approval", "queued", "running"),
|
|
172
|
+
catch: storeError("listRecoverable")
|
|
173
|
+
});
|
|
174
|
+
return yield* decodeRows("listRecoverable", rows);
|
|
175
|
+
});
|
|
176
|
+
listWorkers = Effect.fn("JobStore.listWorkers")(function* (limit) {
|
|
177
|
+
const database = this.#database;
|
|
178
|
+
const rows = yield* Effect.try({
|
|
179
|
+
try: () => database
|
|
180
|
+
.prepare(`
|
|
181
|
+
SELECT record FROM (
|
|
182
|
+
SELECT id, created_at, record
|
|
183
|
+
FROM jobs
|
|
184
|
+
WHERE CASE
|
|
185
|
+
WHEN json_valid(record)
|
|
186
|
+
THEN json_type(record, '$.worker')
|
|
187
|
+
END = 'object'
|
|
188
|
+
ORDER BY created_at DESC, id DESC
|
|
189
|
+
LIMIT ?
|
|
190
|
+
)
|
|
191
|
+
ORDER BY created_at ASC, id ASC
|
|
192
|
+
`)
|
|
193
|
+
.all(limit),
|
|
194
|
+
catch: storeError("listWorkers")
|
|
195
|
+
});
|
|
196
|
+
return yield* decodeRows("listWorkers", rows);
|
|
197
|
+
});
|
|
198
|
+
secureFiles() {
|
|
199
|
+
const fileSystem = this.#fileSystem;
|
|
200
|
+
const files = [this.path, `${this.path}-wal`, `${this.path}-shm`];
|
|
201
|
+
return Effect.forEach(files, (path) => fileSystem.exists(path).pipe(Effect.mapError(storeError("secure.exists")), Effect.flatMap((exists) => exists
|
|
202
|
+
? fileSystem.chmod(path, 0o600).pipe(Effect.mapError(storeError("secure.chmod")))
|
|
203
|
+
: Effect.void)), { discard: true });
|
|
204
|
+
}
|
|
205
|
+
close() {
|
|
206
|
+
this.#database.close();
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACzD,OAAO,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAClG,OAAO,EAAE,SAAS,EAA8B,MAAM,YAAY,CAAA;AAElE,MAAM,UAAU,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,CAAC,KAAc,EAAE,EAAE,CAC3D,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;AAElE,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CACpC,MAAM,CAAC,GAAG,CAAC;IACT,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChE,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;CAC5B,CAAC,CAAA;AAEJ,MAAM,YAAY,GAAG,CAAC,MAAiB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEhG,MAAM,UAAU,GAAG,CACjB,SAAqF,EACrF,IAAmD,EACnD,EAAE,CACF,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAC3B,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAC5E,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EACtC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CACrD,CAAC,CAAA;AAEN,MAAM,OAAO,QAAQ;IACV,SAAS,CAAc;IACvB,WAAW,CAAuB;IAClC,IAAI,CAAQ;IAErB,YAAoB,IAAY,EAAE,UAAiC;QACjE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;;;;;;;;;;;;OAanB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;YACtB,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAED,MAAM,CAAU,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAC,IAAY;QACtE,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAA;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAA;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACrC,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,CAC/E,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAClD,CAAA;QACD,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAC5C,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC,CACpD,CAAA;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC9B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;YACzC,KAAK,EAAE,UAAU,CAAC,eAAe,CAAC;SACnC,CAAC,CAAA;QACF,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC,CAAC,CAAA;IAEO,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAEhD,MAAiB;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACjC,GAAG,EAAE,GAAG,EAAE,CACR,QAAQ;iBACL,OAAO,CAAC,sEAAsE,CAAC;iBAC/E,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACnE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;SACzB,CAAC,CAAA;QACF,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,CAAC,IAAI,qBAAqB,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAA;QAC/D,CAAC;QACD,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QACzB,OAAO,MAAM,CAAA;IACf,CAAC,CAAC,CAAA;IAEO,UAAU,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAE9D,OAAkB,EAClB,IAAe;QAEf,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAChC,GAAG,EAAE,GAAG,EAAE,CACR,QAAQ;iBACL,OAAO,CACN;;;;;aAKC,CACF;iBACA,GAAG,CACF,YAAY,CAAC,IAAI,CAAC,EAClB,OAAO,CAAC,EAAE,EACV,YAAY,CAAC,OAAO,CAAC,CACtB,CAAC,OAAO;YACb,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC;SAChC,CAAC,CAAA;QACF,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,CAAC,IAAI,4BAA4B,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;QACvE,CAAC;QACD,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;IAEO,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAEhD,EAAU;QAEV,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5B,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3E,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;SACzB,CAAC,CAAA;QACF,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QACvC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAC9C,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CACzC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/C,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEO,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAElD,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B,GAAG,EAAE,GAAG,EAAE,CACR,QAAQ;iBACL,OAAO,CAAC,0DAA0D,CAAC;iBACnE,GAAG,CAAC,KAAK,CAAC;YACf,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;SAC1B,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEO,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAEhE,MAAoC,EACpC,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B,GAAG,EAAE,GAAG,EAAE,CACR,MAAM,KAAK,IAAI;gBACb,CAAC,CAAC,QAAQ,CAAC,OAAO,CAChB;;;;;;;;;aASC,CACF,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAChB;;;;;;;;;;aAUC,CACF,CAAC,GAAG,CACH,kBAAkB,EAClB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,EAAE,EACT,KAAK,CACN;YACL,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC;SACjC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEO,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAEhE,MAAoC,EACpC,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B,GAAG,EAAE,GAAG,EAAE,CACR,MAAM,KAAK,IAAI;gBACb,CAAC,CAAC,QAAQ,CAAC,OAAO,CAChB;;;;;aAKC,CACF,CAAC,GAAG,CAAC,KAAK,CAAC;gBACZ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAChB;;;;;;aAMC,CACF,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC;YAC/D,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC;SACjC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEO,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC;QAGxE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B,GAAG,EAAE,GAAG,EAAE,CACR,QAAQ;iBACL,OAAO,CACN;;;;;;;;aAQC,CACF;iBACA,GAAG,CAAC,kBAAkB,EAAE,QAAQ,EAAE,SAAS,CAAC;YACjD,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC;SACrC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEO,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,EAEhE,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7B,GAAG,EAAE,GAAG,EAAE,CACR,QAAQ;iBACL,OAAO,CACN;;;;;;;;;;;;aAYC,CACF;iBACA,GAAG,CAAC,KAAK,CAAC;YACf,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC;SACjC,CAAC,CAAA;QACF,OAAO,KAAK,CAAC,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEM,WAAW;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAA;QACnC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC,CAAA;QACjE,OAAO,MAAM,CAAC,OAAO,CACnB,KAAK,EACL,CAAC,IAAI,EAAE,EAAE,CACP,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAC1B,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,EAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxB,MAAM;YACJ,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAClC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAC5C;YACD,CAAC,CAAC,MAAM,CAAC,IAAI,CAChB,CACF,EACH,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAA;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@knpkv/herdr-fleet",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Typed job protocol and local authority runtime for Herdr fleets",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "knpkv",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/knpkv/npm.git",
|
|
10
|
+
"directory": "packages/herdr-fleet"
|
|
11
|
+
},
|
|
12
|
+
"type": "module",
|
|
13
|
+
"sideEffects": false,
|
|
14
|
+
"main": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./model": {
|
|
22
|
+
"types": "./dist/model.d.ts",
|
|
23
|
+
"import": "./dist/model.js"
|
|
24
|
+
},
|
|
25
|
+
"./response": {
|
|
26
|
+
"types": "./dist/response.d.ts",
|
|
27
|
+
"import": "./dist/response.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"README.md"
|
|
33
|
+
],
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=26"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"effect": "4.0.0-rc.109"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@effect/platform-node": "4.0.0-rc.109",
|
|
45
|
+
"@effect/vitest": "4.0.0-rc.109",
|
|
46
|
+
"@types/node": "^26.2.0",
|
|
47
|
+
"rimraf": "^6.1.3",
|
|
48
|
+
"typescript": "npm:@typescript/typescript6@^6.0.2",
|
|
49
|
+
"vitest": "^4.1.10"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build": "rimraf dist && tsc -b --force",
|
|
53
|
+
"check": "tsc -b tsconfig.json",
|
|
54
|
+
"clean": "rimraf dist *.tsbuildinfo",
|
|
55
|
+
"lint": "eslint \"{src,test}/**/*.ts\"",
|
|
56
|
+
"pack:deterministic": "pnpm build && node ../../scripts/pack-herdr.mjs .",
|
|
57
|
+
"test": "vitest run"
|
|
58
|
+
}
|
|
59
|
+
}
|