@package-broker/runtime-node 0.0.0-stage → 2.0.0-rc.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/LICENSE +661 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/assets.d.ts +4 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +68 -0
- package/dist/assets.js.map +1 -0
- package/dist/blob/archive-staging.d.ts +15 -0
- package/dist/blob/archive-staging.d.ts.map +1 -0
- package/dist/blob/archive-staging.js +154 -0
- package/dist/blob/archive-staging.js.map +1 -0
- package/dist/blob/filesystem.d.ts +18 -0
- package/dist/blob/filesystem.d.ts.map +1 -0
- package/dist/blob/filesystem.js +631 -0
- package/dist/blob/filesystem.js.map +1 -0
- package/dist/blob/hasher.d.ts +3 -0
- package/dist/blob/hasher.d.ts.map +1 -0
- package/dist/blob/hasher.js +26 -0
- package/dist/blob/hasher.js.map +1 -0
- package/dist/blob/s3.d.ts +40 -0
- package/dist/blob/s3.d.ts.map +1 -0
- package/dist/blob/s3.js +494 -0
- package/dist/blob/s3.js.map +1 -0
- package/dist/cache/lru.d.ts +8 -0
- package/dist/cache/lru.d.ts.map +1 -0
- package/dist/cache/lru.js +103 -0
- package/dist/cache/lru.js.map +1 -0
- package/dist/client-ip.d.ts +22 -0
- package/dist/client-ip.d.ts.map +1 -0
- package/dist/client-ip.js +104 -0
- package/dist/client-ip.js.map +1 -0
- package/dist/codec/node-codec.d.ts +3 -0
- package/dist/codec/node-codec.d.ts.map +1 -0
- package/dist/codec/node-codec.js +163 -0
- package/dist/codec/node-codec.js.map +1 -0
- package/dist/db/better-sqlite3-executor.d.ts +10 -0
- package/dist/db/better-sqlite3-executor.d.ts.map +1 -0
- package/dist/db/better-sqlite3-executor.js +129 -0
- package/dist/db/better-sqlite3-executor.js.map +1 -0
- package/dist/entry.d.ts +32 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +158 -0
- package/dist/entry.js.map +1 -0
- package/dist/import-jobs.d.ts +18 -0
- package/dist/import-jobs.d.ts.map +1 -0
- package/dist/import-jobs.js +56 -0
- package/dist/import-jobs.js.map +1 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +981 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/seams-key.d.ts +2 -0
- package/dist/internal/seams-key.d.ts.map +1 -0
- package/dist/internal/seams-key.js +2 -0
- package/dist/internal/seams-key.js.map +1 -0
- package/dist/jobs/loop.d.ts +38 -0
- package/dist/jobs/loop.d.ts.map +1 -0
- package/dist/jobs/loop.js +318 -0
- package/dist/jobs/loop.js.map +1 -0
- package/dist/observability/stdio.d.ts +11 -0
- package/dist/observability/stdio.d.ts.map +1 -0
- package/dist/observability/stdio.js +47 -0
- package/dist/observability/stdio.js.map +1 -0
- package/dist/organization-administration.d.ts +5 -0
- package/dist/organization-administration.d.ts.map +1 -0
- package/dist/organization-administration.js +16 -0
- package/dist/organization-administration.js.map +1 -0
- package/dist/sources/dns-guard.d.ts +33 -0
- package/dist/sources/dns-guard.d.ts.map +1 -0
- package/dist/sources/dns-guard.js +202 -0
- package/dist/sources/dns-guard.js.map +1 -0
- package/dist/sources/git-provider.d.ts +30 -0
- package/dist/sources/git-provider.d.ts.map +1 -0
- package/dist/sources/git-provider.js +213 -0
- package/dist/sources/git-provider.js.map +1 -0
- package/dist/sources/guarded-fetch.d.ts +15 -0
- package/dist/sources/guarded-fetch.d.ts.map +1 -0
- package/dist/sources/guarded-fetch.js +217 -0
- package/dist/sources/guarded-fetch.js.map +1 -0
- package/dist/sources/ssh-archive-store.d.ts +19 -0
- package/dist/sources/ssh-archive-store.d.ts.map +1 -0
- package/dist/sources/ssh-archive-store.js +284 -0
- package/dist/sources/ssh-archive-store.js.map +1 -0
- package/dist/sources/ssh-git.d.ts +46 -0
- package/dist/sources/ssh-git.d.ts.map +1 -0
- package/dist/sources/ssh-git.js +430 -0
- package/dist/sources/ssh-git.js.map +1 -0
- package/dist/sources/ssh-provider.d.ts +55 -0
- package/dist/sources/ssh-provider.d.ts.map +1 -0
- package/dist/sources/ssh-provider.js +369 -0
- package/dist/sources/ssh-provider.js.map +1 -0
- package/dist/startup.d.ts +49 -0
- package/dist/startup.d.ts.map +1 -0
- package/dist/startup.js +688 -0
- package/dist/startup.js.map +1 -0
- package/dist/token-jobs.d.ts +18 -0
- package/dist/token-jobs.d.ts.map +1 -0
- package/dist/token-jobs.js +45 -0
- package/dist/token-jobs.js.map +1 -0
- package/package.json +45 -3
- package/README.md +0 -3
package/dist/entry.js
ADDED
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { looksLikeCredential } from '@package-broker/core/platform/credential';
|
|
4
|
+
import { safeErrorName, safeRecord } from '@package-broker/core/platform/observability';
|
|
5
|
+
import { SecretsConfigError } from '@package-broker/core/secrets/master-key';
|
|
6
|
+
import { startNode, StartupConfigError } from './startup.js';
|
|
7
|
+
const DEFAULT_PORT = 8787;
|
|
8
|
+
const DEFAULT_SHUTDOWN_TIMEOUT_MS = 8000;
|
|
9
|
+
export function describeError(error) {
|
|
10
|
+
return error instanceof Error ? `${error.name}: ${error.message}` : String(error);
|
|
11
|
+
}
|
|
12
|
+
export function parsePort(raw) {
|
|
13
|
+
if (raw === undefined)
|
|
14
|
+
return DEFAULT_PORT;
|
|
15
|
+
if (/^\d+$/.test(raw)) {
|
|
16
|
+
const port = Number(raw);
|
|
17
|
+
if (port >= 1 && port <= 65535)
|
|
18
|
+
return port;
|
|
19
|
+
}
|
|
20
|
+
throw new Error('PORT must be an integer between 1 and 65535');
|
|
21
|
+
}
|
|
22
|
+
function parseShutdownTimeout(raw) {
|
|
23
|
+
if (raw === undefined)
|
|
24
|
+
return DEFAULT_SHUTDOWN_TIMEOUT_MS;
|
|
25
|
+
if (/^\d+$/.test(raw)) {
|
|
26
|
+
const timeout = Number(raw);
|
|
27
|
+
if (timeout >= 1000 && timeout <= 120000)
|
|
28
|
+
return timeout;
|
|
29
|
+
}
|
|
30
|
+
throw new Error('PB_SHUTDOWN_TIMEOUT_MS must be an integer between 1000 and 120000');
|
|
31
|
+
}
|
|
32
|
+
export function createShutdown(close, exit, code = 0, options = {}) {
|
|
33
|
+
let closing = false;
|
|
34
|
+
return () => {
|
|
35
|
+
if (closing)
|
|
36
|
+
return;
|
|
37
|
+
closing = true;
|
|
38
|
+
let finished = false;
|
|
39
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_SHUTDOWN_TIMEOUT_MS;
|
|
40
|
+
const timer = setTimeout(() => {
|
|
41
|
+
if (finished)
|
|
42
|
+
return;
|
|
43
|
+
finished = true;
|
|
44
|
+
(options.error ?? console.error)(JSON.stringify({ level: 'error', event: 'shutdown.forced', timeout_ms: timeoutMs }));
|
|
45
|
+
exit(1);
|
|
46
|
+
}, timeoutMs);
|
|
47
|
+
const finish = (exitCode) => {
|
|
48
|
+
if (finished)
|
|
49
|
+
return;
|
|
50
|
+
finished = true;
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
exit(exitCode);
|
|
53
|
+
};
|
|
54
|
+
try {
|
|
55
|
+
close().then(() => finish(code), () => finish(1));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
finish(1);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export async function runEntry(manifest, env, runtime) {
|
|
63
|
+
let broker;
|
|
64
|
+
let port;
|
|
65
|
+
let timeoutMs;
|
|
66
|
+
try {
|
|
67
|
+
const { plugins, migrations, platformPorts, observability, registry, tokens, vulnerability, mcp, } = await manifest;
|
|
68
|
+
try {
|
|
69
|
+
port = parsePort(env['PORT']);
|
|
70
|
+
timeoutMs = parseShutdownTimeout(env['PB_SHUTDOWN_TIMEOUT_MS']);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
runtime.error(describeError(error));
|
|
74
|
+
runtime.exit(1);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
broker = await runtime.start({
|
|
78
|
+
plugins,
|
|
79
|
+
migrations,
|
|
80
|
+
env,
|
|
81
|
+
log: (entry) => console.log(JSON.stringify(entry)),
|
|
82
|
+
...(platformPorts == null ? {} : { platformPorts }),
|
|
83
|
+
...(observability === undefined ? {} : { observability }),
|
|
84
|
+
...(registry === undefined ? {} : { registry }),
|
|
85
|
+
...(tokens === undefined ? {} : { tokens }),
|
|
86
|
+
...(vulnerability === undefined ? {} : { vulnerability }),
|
|
87
|
+
...(mcp === undefined ? {} : { mcp }),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
runtime.error(failureRecord('startup.failed', error));
|
|
92
|
+
runtime.exit(1);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
broker.server.listen(port);
|
|
96
|
+
let processFailed = false;
|
|
97
|
+
const stop = createShutdown(() => broker.close(), (code) => runtime.exit(processFailed ? 1 : code), 0, { timeoutMs, error: runtime.error });
|
|
98
|
+
runtime.onSignal('SIGTERM', stop);
|
|
99
|
+
runtime.onSignal('SIGINT', stop);
|
|
100
|
+
for (const [event, recordEvent] of [
|
|
101
|
+
['uncaughtException', 'process.uncaught_exception'],
|
|
102
|
+
['unhandledRejection', 'process.unhandled_rejection'],
|
|
103
|
+
]) {
|
|
104
|
+
runtime.onProcessError?.(event, (error) => {
|
|
105
|
+
runtime.error(failureRecord(recordEvent, error));
|
|
106
|
+
processFailed = true;
|
|
107
|
+
stop();
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
function failureRecord(event, error) {
|
|
112
|
+
const variable = event === 'startup.failed' &&
|
|
113
|
+
(error instanceof StartupConfigError || error instanceof SecretsConfigError)
|
|
114
|
+
? error.variable
|
|
115
|
+
: undefined;
|
|
116
|
+
const configKey = variable !== undefined &&
|
|
117
|
+
variable.length <= 64 &&
|
|
118
|
+
/^[A-Za-z_][A-Za-z0-9_.]*$/.test(variable) &&
|
|
119
|
+
!looksLikeCredential(variable)
|
|
120
|
+
? variable
|
|
121
|
+
: undefined;
|
|
122
|
+
return JSON.stringify({
|
|
123
|
+
...safeRecord({
|
|
124
|
+
level: 'error',
|
|
125
|
+
event,
|
|
126
|
+
service: 'package-broker',
|
|
127
|
+
runtime: 'node',
|
|
128
|
+
error_name: safeErrorName(error),
|
|
129
|
+
}),
|
|
130
|
+
...(configKey === undefined ? {} : { config_key: configKey }),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
export function isMainEntry(argv1, moduleUrl) {
|
|
134
|
+
if (argv1 === undefined)
|
|
135
|
+
return false;
|
|
136
|
+
try {
|
|
137
|
+
return realpathSync(argv1) === realpathSync(fileURLToPath(moduleUrl));
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function isMainModule() {
|
|
144
|
+
return isMainEntry(process.argv[1], import.meta.url);
|
|
145
|
+
}
|
|
146
|
+
if (isMainModule()) {
|
|
147
|
+
void runEntry(import(/* @vite-ignore */ '#pb-manifest'), process.env, {
|
|
148
|
+
start: startNode,
|
|
149
|
+
exit: (code) => process.exit(code),
|
|
150
|
+
error: (message) => console.error(message),
|
|
151
|
+
onSignal: (signal, listener) => process.on(signal, listener),
|
|
152
|
+
onProcessError: (event, listener) => process.on(event, listener),
|
|
153
|
+
}).catch((error) => {
|
|
154
|
+
console.error(failureRecord('startup.failed', error));
|
|
155
|
+
process.exit(1);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entry.js","sourceRoot":"","sources":["../src/entry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ImportApplyStore } from '@package-broker/core/import/apply';
|
|
2
|
+
import type { ImportRollbackStore } from '@package-broker/core/import/rollback';
|
|
3
|
+
import type { ImportVerificationStore } from '@package-broker/core/import/verification';
|
|
4
|
+
import type { RegisteredCoreJob } from '@package-broker/core/kernel/registry';
|
|
5
|
+
import type { BlobStore } from '@package-broker/core/platform/blob';
|
|
6
|
+
export interface ImportJobStores {
|
|
7
|
+
readonly verificationStore: ImportVerificationStore;
|
|
8
|
+
readonly applyStore: ImportApplyStore;
|
|
9
|
+
readonly rollbackStore: ImportRollbackStore;
|
|
10
|
+
readonly blobs: Pick<BlobStore, 'get'>;
|
|
11
|
+
}
|
|
12
|
+
export interface ImportJobHolder {
|
|
13
|
+
set(stores: ImportJobStores): void;
|
|
14
|
+
get(): ImportJobStores;
|
|
15
|
+
}
|
|
16
|
+
export declare function createImportJobHolder(): ImportJobHolder;
|
|
17
|
+
export declare function importJobRegistrations(holder: ImportJobHolder): readonly RegisteredCoreJob[];
|
|
18
|
+
//# sourceMappingURL=import-jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-jobs.d.ts","sourceRoot":"","sources":["../src/import-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAM1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAChF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAExF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAIpE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB,CAAC;IACpD,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,GAAG,IAAI,eAAe,CAAC;CACxB;AAED,wBAAgB,qBAAqB,IAAI,eAAe,CAYvD;AASD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,iBAAiB,EAAE,CAyC5F"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { importApplyJob, importRollbackJob, importVerificationJob, } from '@package-broker/core/import/jobs';
|
|
2
|
+
import { systemClock, ulid } from '@package-broker/core/ids';
|
|
3
|
+
import { JobError } from '@package-broker/core/platform/jobs';
|
|
4
|
+
import { registerCoreJob } from '@package-broker/core/runtime/core-jobs';
|
|
5
|
+
export function createImportJobHolder() {
|
|
6
|
+
let current;
|
|
7
|
+
return {
|
|
8
|
+
set(stores) {
|
|
9
|
+
if (current !== undefined)
|
|
10
|
+
throw new Error('import job stores are already set');
|
|
11
|
+
current = stores;
|
|
12
|
+
},
|
|
13
|
+
get() {
|
|
14
|
+
if (current === undefined)
|
|
15
|
+
throw new JobError('handler_error');
|
|
16
|
+
return current;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function erased(definition) {
|
|
21
|
+
return {
|
|
22
|
+
...definition,
|
|
23
|
+
handler: (payload, context) => definition.handler(definition.validate(payload), context),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function importJobRegistrations(holder) {
|
|
27
|
+
return [
|
|
28
|
+
registerCoreJob(erased(importVerificationJob({
|
|
29
|
+
get store() {
|
|
30
|
+
return holder.get().verificationStore;
|
|
31
|
+
},
|
|
32
|
+
get blobs() {
|
|
33
|
+
return holder.get().blobs;
|
|
34
|
+
},
|
|
35
|
+
clock: systemClock,
|
|
36
|
+
}))),
|
|
37
|
+
registerCoreJob(erased(importApplyJob({
|
|
38
|
+
get store() {
|
|
39
|
+
return holder.get().applyStore;
|
|
40
|
+
},
|
|
41
|
+
get blobs() {
|
|
42
|
+
return holder.get().blobs;
|
|
43
|
+
},
|
|
44
|
+
clock: systemClock,
|
|
45
|
+
ids: { ulid },
|
|
46
|
+
}))),
|
|
47
|
+
registerCoreJob(erased(importRollbackJob({
|
|
48
|
+
get store() {
|
|
49
|
+
return holder.get().rollbackStore;
|
|
50
|
+
},
|
|
51
|
+
clock: systemClock,
|
|
52
|
+
ids: { ulid },
|
|
53
|
+
}))),
|
|
54
|
+
];
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=import-jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-jobs.js","sourceRoot":"","sources":["../src/import-jobs.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAsB,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAczE,MAAM,UAAU,qBAAqB;IACnC,IAAI,OAAoC,CAAC;IACzC,OAAO;QACL,GAAG,CAAC,MAAM;YACR,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAChF,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;QACD,GAAG;YACD,IAAI,OAAO,KAAK,SAAS;gBAAE,MAAM,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC;YAC/D,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAI,UAA4B;IAC7C,OAAO;QACL,GAAG,UAAU;QACb,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAuB;IAC5D,OAAO;QACL,eAAe,CACb,MAAM,CACJ,qBAAqB,CAAC;YACpB,IAAI,KAAK;gBACP,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC;YACxC,CAAC;YACD,IAAI,KAAK;gBACP,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,WAAW;SACnB,CAAC,CACH,CACF;QACD,eAAe,CACb,MAAM,CACJ,cAAc,CAAC;YACb,IAAI,KAAK;gBACP,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;YACjC,CAAC;YACD,IAAI,KAAK;gBACP,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;YAC5B,CAAC;YACD,KAAK,EAAE,WAAW;YAClB,GAAG,EAAE,EAAE,IAAI,EAAE;SACd,CAAC,CACH,CACF;QACD,eAAe,CACb,MAAM,CACJ,iBAAiB,CAAC;YAChB,IAAI,KAAK;gBACP,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;YACpC,CAAC;YACD,KAAK,EAAE,WAAW;YAClB,GAAG,EAAE,EAAE,IAAI,EAAE;SACd,CAAC,CACH,CACF;KACF,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { MigrationSource } from '@package-broker/db-sqlite/migrations/source';
|
|
2
|
+
import { parseSourceConfig } from '@package-broker/core/sources/config';
|
|
3
|
+
import { type Server } from 'node:http';
|
|
4
|
+
import type { SessionService } from '@package-broker/core/auth/session';
|
|
5
|
+
import type { PersonalTokenService } from '@package-broker/core/authz/pat-service';
|
|
6
|
+
import type { ProjectAdministration } from '@package-broker/core/authz/project-administration';
|
|
7
|
+
import type { ProjectLister } from '@package-broker/core/authz/project-list';
|
|
8
|
+
import type { ProjectService } from '@package-broker/core/authz/project-service';
|
|
9
|
+
import type { ServicePrincipalService } from '@package-broker/core/authz/service-principal-service';
|
|
10
|
+
import type { ServiceTokenService } from '@package-broker/core/authz/service-token-service';
|
|
11
|
+
import type { TokenReader } from '@package-broker/core/authz/token-read';
|
|
12
|
+
import type { TokenRevokeService } from '@package-broker/core/authz/token-revoke';
|
|
13
|
+
import type { CatalogueReader, CatalogueWriter } from '@package-broker/core/db/catalogue';
|
|
14
|
+
import { type PackageAccess } from '@package-broker/core/catalogue/package-access';
|
|
15
|
+
import { type VisibilityService } from '@package-broker/core/catalogue/visibility-service';
|
|
16
|
+
import { type DependencyClosureReport } from '@package-broker/core/catalogue/closure-report';
|
|
17
|
+
import type { NameEcosystem } from '@package-broker/core/catalogue/names';
|
|
18
|
+
import { type ActorContext, type Administration } from '@package-broker/core/authz/administration';
|
|
19
|
+
import type { ProjectActor } from '@package-broker/core/authz/project-actor';
|
|
20
|
+
import type { RegistryConfig } from '@package-broker/core/registry/registry-config';
|
|
21
|
+
import { type TokenLifetimePolicy } from '@package-broker/core/authz/token-lifetime';
|
|
22
|
+
import type { FetchLike } from '@package-broker/core/platform/tracing';
|
|
23
|
+
import type { SourceRecord } from '@package-broker/core/db/source';
|
|
24
|
+
import type { SqlExecutor } from '@package-broker/core/db/port';
|
|
25
|
+
import type { ProviderAnchorReader } from '@package-broker/core/identity/provider-anchors';
|
|
26
|
+
import type { AuthorizationEngine } from '@package-broker/core/kernel/authorize';
|
|
27
|
+
import type { KernelLog } from '@package-broker/core/kernel/errors';
|
|
28
|
+
import { type TrustedProxy } from './client-ip.js';
|
|
29
|
+
import type { Kernel, KernelObservability } from '@package-broker/core/kernel/kernel';
|
|
30
|
+
import type { PlatformServices } from '@package-broker/core/kernel/plugin-ports';
|
|
31
|
+
import { type BrokerConfig } from '@package-broker/core/config';
|
|
32
|
+
import type { PluginDefinition } from '@package-broker/core/plugin';
|
|
33
|
+
import type { Keyring } from '@package-broker/core/secrets/keyring';
|
|
34
|
+
export interface NodeAuthOptions {
|
|
35
|
+
readonly keyring: Keyring;
|
|
36
|
+
readonly publicOrigin: string;
|
|
37
|
+
readonly env: Readonly<Record<string, string | undefined>>;
|
|
38
|
+
}
|
|
39
|
+
export interface NodeServerOptions {
|
|
40
|
+
readonly migrations?: readonly Pick<MigrationSource, 'id' | 'checksum'>[];
|
|
41
|
+
/** Proxy header that carries the client address. `true` is the deprecated `PB_TRUSTED_PROXY=1`. */
|
|
42
|
+
readonly trustedProxy?: TrustedProxy | boolean;
|
|
43
|
+
readonly executor?: SqlExecutor;
|
|
44
|
+
readonly auth?: NodeAuthOptions;
|
|
45
|
+
readonly closeDatabase?: () => Promise<void>;
|
|
46
|
+
readonly log?: KernelLog;
|
|
47
|
+
readonly observability?: KernelObservability;
|
|
48
|
+
readonly platformServices?: PlatformServices;
|
|
49
|
+
readonly authorization?: AuthorizationEngine;
|
|
50
|
+
/** Token lifetime maxima; an invalid value fails server creation. */
|
|
51
|
+
readonly tokens?: BrokerConfig['tokens'];
|
|
52
|
+
readonly vulnerability?: BrokerConfig['vulnerability'];
|
|
53
|
+
readonly mcp?: BrokerConfig['mcp'];
|
|
54
|
+
/** Resolves true once the broker may serve; a falsy answer refuses everything except liveness. */
|
|
55
|
+
readonly servingGate?: () => Promise<boolean>;
|
|
56
|
+
/** Registry routes need the database, auth, platform services and this input together. */
|
|
57
|
+
readonly registry?: NodeRegistryOptions;
|
|
58
|
+
}
|
|
59
|
+
export interface NodeRegistryOptions {
|
|
60
|
+
readonly config: RegistryConfig;
|
|
61
|
+
/** Registers the SSH git provider with archives kept under this directory. */
|
|
62
|
+
readonly sshArchiveRoot?: string;
|
|
63
|
+
/** Registers the generic Git provider with archives staged under this directory. */
|
|
64
|
+
readonly gitArchiveRoot?: string;
|
|
65
|
+
}
|
|
66
|
+
export interface NodeRegistryServices {
|
|
67
|
+
/** The transport every registry request leaves through. */
|
|
68
|
+
readonly outboundFetch: FetchLike;
|
|
69
|
+
}
|
|
70
|
+
/** The step 5 domain services; PB-32 resolves each one from here. */
|
|
71
|
+
export interface NodeAccessServices {
|
|
72
|
+
readonly engine: AuthorizationEngine;
|
|
73
|
+
readonly sessions: SessionService;
|
|
74
|
+
readonly projects: ProjectService;
|
|
75
|
+
readonly administration: Administration;
|
|
76
|
+
readonly lifetime: TokenLifetimePolicy;
|
|
77
|
+
readonly projectGrants: ProjectAdministration;
|
|
78
|
+
readonly projectList: ProjectLister;
|
|
79
|
+
readonly personalTokens: PersonalTokenService;
|
|
80
|
+
readonly servicePrincipals: ServicePrincipalService;
|
|
81
|
+
readonly serviceTokens: ServiceTokenService;
|
|
82
|
+
readonly tokenRevoke: TokenRevokeService;
|
|
83
|
+
readonly tokenList: TokenReader;
|
|
84
|
+
}
|
|
85
|
+
export interface NodeCatalogueServices {
|
|
86
|
+
readonly reader: CatalogueReader;
|
|
87
|
+
readonly writer: CatalogueWriter;
|
|
88
|
+
readonly packageAccess: PackageAccess;
|
|
89
|
+
readonly visibility: VisibilityService;
|
|
90
|
+
readonly closureReport: (actor: ProjectActor, organizationPermissions: ActorContext['permissions'], ecosystem: NameEcosystem) => Promise<DependencyClosureReport>;
|
|
91
|
+
}
|
|
92
|
+
export interface NodeServices {
|
|
93
|
+
readonly providerAnchors: ProviderAnchorReader;
|
|
94
|
+
readonly dispatch: (run: () => Promise<void>) => void;
|
|
95
|
+
readonly catalogue: Pick<CatalogueReader, 'resolveVersions'>;
|
|
96
|
+
/** Null when the runtime has no auth options. */
|
|
97
|
+
readonly access: NodeAccessServices | null;
|
|
98
|
+
/** Null without a database or auth options. */
|
|
99
|
+
readonly packages: NodeCatalogueServices | null;
|
|
100
|
+
/** Present when the registry is wired. */
|
|
101
|
+
readonly registry?: NodeRegistryServices;
|
|
102
|
+
}
|
|
103
|
+
export interface NodeBroker {
|
|
104
|
+
readonly plugins: readonly PluginDefinition[];
|
|
105
|
+
readonly server: Server;
|
|
106
|
+
ready(): Promise<Kernel>;
|
|
107
|
+
/** The services of the application the server was built with. */
|
|
108
|
+
services(): Promise<NodeServices>;
|
|
109
|
+
close(): Promise<void>;
|
|
110
|
+
}
|
|
111
|
+
export declare function credentialOrigins(record: SourceRecord, policy: Parameters<typeof parseSourceConfig>[4]['policy']): readonly string[] | null;
|
|
112
|
+
export declare function createNodeServer(plugins: readonly PluginDefinition[], options?: NodeServerOptions): NodeBroker;
|
|
113
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|