@riddance/host 0.0.11 → 0.0.13
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 +1 -1
- package/context.d.ts +86 -86
- package/context.js +52 -52
- package/host/context.d.ts +51 -50
- package/host/context.js +90 -90
- package/host/emitter.d.ts +13 -13
- package/host/emitter.js +68 -68
- package/host/http.d.ts +30 -30
- package/host/http.js +212 -211
- package/host/logging.d.ts +4 -4
- package/host/logging.js +191 -191
- package/host/reflect.d.ts +24 -24
- package/host/reflect.js +58 -58
- package/host/registry.d.ts +27 -26
- package/host/registry.js +73 -61
- package/http.d.ts +39 -39
- package/http.js +18 -18
- package/package.json +10 -7
package/host/context.js
CHANGED
|
@@ -1,90 +1,90 @@
|
|
|
1
|
-
import { EventEmitter } from './emitter.js';
|
|
2
|
-
import { makeLogger } from './logging.js';
|
|
3
|
-
class LogMulticaster {
|
|
4
|
-
#transports;
|
|
5
|
-
publishRate;
|
|
6
|
-
constructor(transports) {
|
|
7
|
-
this.#transports = transports;
|
|
8
|
-
this.publishRate = transports.map(t => t.publishRate).sort()[0] ?? Number.MAX_SAFE_INTEGER;
|
|
9
|
-
}
|
|
10
|
-
sendEntries(entries, signal) {
|
|
11
|
-
const promises = this.#transports.map(t => t.sendEntries(entries, signal)).filter(p => !!p);
|
|
12
|
-
if (promises.length === 0) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
return Promise.all(promises);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export function createContext(clientInfo, loggers, eventTransport, timeouts, outerController, meta, environment, now) {
|
|
19
|
-
const timeout = (timeouts.cap
|
|
20
|
-
? Math.min(
|
|
21
|
-
:
|
|
22
|
-
const innerController = new AbortController();
|
|
23
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
24
|
-
const logTransport = loggers.length === 1 ? loggers[0] : new LogMulticaster(loggers);
|
|
25
|
-
const logger = makeLogger(logTransport,
|
|
26
|
-
operationId: clientInfo.operationId,
|
|
27
|
-
client: {
|
|
28
|
-
id: clientInfo.clientId,
|
|
29
|
-
ip: clientInfo.clientIp,
|
|
30
|
-
port: clientInfo.clientPort,
|
|
31
|
-
userAgent: clientInfo.userAgent,
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
globalLogger = logger;
|
|
35
|
-
const emitter = new EventEmitter(eventTransport, logger, clientInfo, timeout, outerController.signal);
|
|
36
|
-
const successHandlers = [];
|
|
37
|
-
const ctx = {
|
|
38
|
-
env: environment ?? process.env,
|
|
39
|
-
signal: innerController.signal,
|
|
40
|
-
now: now ?? (() => new Date()),
|
|
41
|
-
operationId: clientInfo.operationId,
|
|
42
|
-
client: {
|
|
43
|
-
id: clientInfo.clientId,
|
|
44
|
-
ip: clientInfo.clientIp,
|
|
45
|
-
port: clientInfo.clientPort,
|
|
46
|
-
userAgent: clientInfo.userAgent,
|
|
47
|
-
},
|
|
48
|
-
meta: meta
|
|
49
|
-
? {
|
|
50
|
-
packageName: meta.packageName,
|
|
51
|
-
fileName: meta.fileName,
|
|
52
|
-
revision: meta.revision,
|
|
53
|
-
}
|
|
54
|
-
: undefined,
|
|
55
|
-
emit: (topic, type, subject, data, messageId) => emitter.emit({ topic, type, subject, id: messageId }, data),
|
|
56
|
-
eventBarrier: () => emitter.flush(),
|
|
57
|
-
onSuccess: (fn) => successHandlers.push(fn),
|
|
58
|
-
};
|
|
59
|
-
const timeoutHandle = setTimeout(() => {
|
|
60
|
-
logger.error('Timeout.', undefined, undefined);
|
|
61
|
-
innerController.abort();
|
|
62
|
-
// eslint-disable-next-line no-void
|
|
63
|
-
void logger.flush();
|
|
64
|
-
// eslint-disable-next-line no-void
|
|
65
|
-
void emitter.flush();
|
|
66
|
-
}, timeout);
|
|
67
|
-
const flushHandle = setTimeout(() => {
|
|
68
|
-
logger.error('Aborting flush.', undefined, undefined);
|
|
69
|
-
outerController.abort();
|
|
70
|
-
}, timeout + 15000);
|
|
71
|
-
return {
|
|
72
|
-
log: logger,
|
|
73
|
-
context: ctx,
|
|
74
|
-
success: () => Promise.all(successHandlers.map(fn => fn())),
|
|
75
|
-
flush: async () => {
|
|
76
|
-
clearTimeout(timeoutHandle);
|
|
77
|
-
await emitter.flush();
|
|
78
|
-
await logger.flush();
|
|
79
|
-
clearTimeout(flushHandle);
|
|
80
|
-
},
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
let globalLogger;
|
|
84
|
-
process.on('uncaughtException', err => {
|
|
85
|
-
globalLogger?.fatal('Uncaught exception.', err, undefined);
|
|
86
|
-
});
|
|
87
|
-
process.on('unhandledRejection', reason => {
|
|
88
|
-
globalLogger?.fatal('Unhandled rejection.', reason, undefined);
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBNkN6QyxNQUFNLGNBQWM7SUFDaEIsV0FBVyxDQUFnQjtJQUNsQixXQUFXLENBQVE7SUFFNUIsWUFBWSxVQUEwQjtRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQTtRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFBO0lBQzlGLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBbUIsRUFBRSxNQUFtQjtRQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTTtTQUNUO1FBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBNkIsQ0FBQTtJQUM1RCxDQUFDO0NBQ0o7QUFPRCxNQUFNLFVBQVUsYUFBYSxDQUN6QixVQUFzQixFQUN0QixPQUF1QixFQUN2QixjQUE4QixFQUM5QixRQUEyQyxFQUMzQyxlQUFnQyxFQUNoQyxJQUFlLEVBQ2YsV0FBcUMsRUFDckMsR0FBOEI7SUFPOUIsTUFBTSxPQUFPLEdBQ1QsQ0FB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LENBQUE7QUFDbEUsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYm9ydFNpZ25hbCwgQ29udGV4dCwgRW52aXJvbm1lbnQsIEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICcuL2VtaXR0ZXIuanMnXG5pbXBvcnQgeyBtYWtlTG9nZ2VyIH0gZnJvbSAnLi9sb2dnaW5nLmpzJ1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tICcuL3JlZ2lzdHJ5LmpzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudEluZm8ge1xuICAgIHJlYWRvbmx5IG9wZXJhdGlvbklkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgY2xpZW50SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBjbGllbnRJcD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNsaWVudFBvcnQ/OiBudW1iZXJcbiAgICByZWFkb25seSB1c2VyQWdlbnQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmVudE1ldGFkYXRhIHtcbiAgICB0b3BpYzogc3RyaW5nXG4gICAgdHlwZTogc3RyaW5nXG4gICAgc3ViamVjdDogc3RyaW5nXG4gICAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWZmZXJlZEV2ZW50IHtcbiAgICBldmVudFRpbWU6IERhdGVcbiAgICBtZXRhOiBPbWl0PEV2ZW50TWV0YWRhdGEsICd0b3BpYyc+XG4gICAgaWRzOiBDbGllbnRJbmZvXG4gICAganNvbj86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50VHJhbnNwb3J0IHtcbiAgICByZWFkb25seSBwdWJsaXNoUmF0ZTogbnVtYmVyXG4gICAgc2VuZEV2ZW50cyh0b3BpYzogc3RyaW5nLCBldmVudHM6IEJ1ZmZlcmVkRXZlbnRbXSwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD5cbn1cblxuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAndHJhY2UnIHwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnZmF0YWwnXG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9nRW50cnkge1xuICAgIHJlYWRvbmx5IGxldmVsOiBMb2dMZXZlbFxuICAgIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyXG4gICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nXG4gICAgcmVhZG9ubHkgZXJyb3I6IHVua25vd25cbiAgICByZWFkb25seSBqc29uOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2dUcmFuc3BvcnQge1xuICAgIHJlYWRvbmx5IHB1Ymxpc2hSYXRlPzogbnVtYmVyXG4gICAgc2VuZEVudHJpZXMoZW50cmllczogTG9nRW50cnlbXSwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcbn1cblxuY2xhc3MgTG9nTXVsdGljYXN0ZXIgaW1wbGVtZW50cyBMb2dUcmFuc3BvcnQge1xuICAgICN0cmFuc3BvcnRzOiBMb2dUcmFuc3BvcnRbXVxuICAgIHJlYWRvbmx5IHB1Ymxpc2hSYXRlOiBudW1iZXJcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zcG9ydHM6IExvZ1RyYW5zcG9ydFtdKSB7XG4gICAgICAgIHRoaXMuI3RyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXG4gICAgICAgIHRoaXMucHVibGlzaFJhdGUgPSB0cmFuc3BvcnRzLm1hcCh0ID0+IHQucHVibGlzaFJhdGUpLnNvcnQoKVswXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgIH1cblxuICAgIHNlbmRFbnRyaWVzKGVudHJpZXM6IExvZ0VudHJ5W10sIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLiN0cmFuc3BvcnRzLm1hcCh0ID0+IHQuc2VuZEVudHJpZXMoZW50cmllcywgc2lnbmFsKSkuZmlsdGVyKHAgPT4gISFwKVxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpIGFzIHVua25vd24gYXMgUHJvbWlzZTx2b2lkPlxuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb290TG9nZ2VyIGV4dGVuZHMgTG9nZ2VyIHtcbiAgICBlbnJpY2hSZXNlcnZlZChmaWVsZHM6IG9iamVjdCk6IFJvb3RMb2dnZXJcbiAgICBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KFxuICAgIGNsaWVudEluZm86IENsaWVudEluZm8sXG4gICAgbG9nZ2VyczogTG9nVHJhbnNwb3J0W10sXG4gICAgZXZlbnRUcmFuc3BvcnQ6IEV2ZW50VHJhbnNwb3J0LFxuICAgIHRpbWVvdXRzOiB7IGRlZmF1bHQ6IG51bWJlcjsgY2FwPzogbnVtYmVyIH0sXG4gICAgb3V0ZXJDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gICAgbWV0YT86IE1ldGFkYXRhLFxuICAgIGVudmlyb25tZW50PzogRW52aXJvbm1lbnQgfCB1bmRlZmluZWQsXG4gICAgbm93PzogKCgpID0+IERhdGUpIHwgdW5kZWZpbmVkLFxuKToge1xuICAgIGxvZzogUm9vdExvZ2dlclxuICAgIGNvbnRleHQ6IE9taXQ8Q29udGV4dCwgJ2xvZyc+XG4gICAgc3VjY2VzczogKCkgPT4gUHJvbWlzZTx1bmtub3duPlxuICAgIGZsdXNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG59IHtcbiAgICBjb25zdCB0aW1lb3V0ID1cbiAgICAgICAgKHRpbWVvdXRzLmNhcFxuICAgICAgICAgICAgPyBNYXRoLm1pbihtZXRhPy5jb25maWc/LnRpbWVvdXQgPz8gdGltZW91dHMuZGVmYXVsdCwgdGltZW91dHMuY2FwKVxuICAgICAgICAgICAgOiBtZXRhPy5jb25maWc/LnRpbWVvdXQgPz8gdGltZW91dHMuZGVmYXVsdCkgKiAxMDAwXG4gICAgY29uc3QgaW5uZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBjb25zdCBsb2dUcmFuc3BvcnQgPSBsb2dnZXJzLmxlbmd0aCA9PT0gMSA/IGxvZ2dlcnNbMF0hIDogbmV3IExvZ011bHRpY2FzdGVyKGxvZ2dlcnMpXG4gICAgY29uc3QgbG9nZ2VyID0gbWFrZUxvZ2dlcihcbiAgICAgICAgbG9nVHJhbnNwb3J0LFxuICAgICAgICBtZXRhPy5jb25maWc/Lm1pbmltdW1Mb2dMZXZlbCxcbiAgICAgICAgb3V0ZXJDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbCxcbiAgICApLmVucmljaFJlc2VydmVkKHtcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGNsaWVudEluZm8ub3BlcmF0aW9uSWQsXG4gICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgaWQ6IGNsaWVudEluZm8uY2xpZW50SWQsXG4gICAgICAgICAgICBpcDogY2xpZW50SW5mby5jbGllbnRJcCxcbiAgICAgICAgICAgIHBvcnQ6IGNsaWVudEluZm8uY2xpZW50UG9ydCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogY2xpZW50SW5mby51c2VyQWdlbnQsXG4gICAgICAgIH0sXG4gICAgfSlcbiAgICBnbG9iYWxMb2dnZXIgPSBsb2dnZXJcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICAgICAgZXZlbnRUcmFuc3BvcnQsXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgY2xpZW50SW5mbyxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgb3V0ZXJDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbCxcbiAgICApXG4gICAgY29uc3Qgc3VjY2Vzc0hhbmRsZXJzOiAoKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQpW10gPSBbXVxuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgZW52OiBlbnZpcm9ubWVudCA/PyAocHJvY2Vzcy5lbnYgYXMgRW52aXJvbm1lbnQpLFxuICAgICAgICBzaWduYWw6IGlubmVyQ29udHJvbGxlci5zaWduYWwgYXMgQWJvcnRTaWduYWwsXG4gICAgICAgIG5vdzogbm93ID8/ICgoKSA9PiBuZXcgRGF0ZSgpKSxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGNsaWVudEluZm8ub3BlcmF0aW9uSWQsXG4gICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgaWQ6IGNsaWVudEluZm8uY2xpZW50SWQsXG4gICAgICAgICAgICBpcDogY2xpZW50SW5mby5jbGllbnRJcCxcbiAgICAgICAgICAgIHBvcnQ6IGNsaWVudEluZm8uY2xpZW50UG9ydCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogY2xpZW50SW5mby51c2VyQWdlbnQsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGE6IG1ldGFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IG1ldGEucGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWV0YS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiBtZXRhLnJldmlzaW9uLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW1pdDogKHRvcGljOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgc3ViamVjdDogc3RyaW5nLCBkYXRhPzogSnNvbiwgbWVzc2FnZUlkPzogc3RyaW5nKSA9PlxuICAgICAgICAgICAgZW1pdHRlci5lbWl0KHsgdG9waWMsIHR5cGUsIHN1YmplY3QsIGlkOiBtZXNzYWdlSWQgfSwgZGF0YSksXG4gICAgICAgIGV2ZW50QmFycmllcjogKCkgPT4gZW1pdHRlci5mbHVzaCgpLFxuICAgICAgICBvblN1Y2Nlc3M6IChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQpID0+IHN1Y2Nlc3NIYW5kbGVycy5wdXNoKGZuKSxcbiAgICB9XG4gICAgY29uc3QgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1RpbWVvdXQuJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAgIGlubmVyQ29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgIHZvaWQgbG9nZ2VyLmZsdXNoKClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgICAgdm9pZCBlbWl0dGVyLmZsdXNoKClcbiAgICB9LCB0aW1lb3V0KVxuICAgIGNvbnN0IGZsdXNoSGFuZGxlID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignQWJvcnRpbmcgZmx1c2guJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAgIG91dGVyQ29udHJvbGxlci5hYm9ydCgpXG4gICAgfSwgdGltZW91dCArIDE1MDAwKVxuICAgIHJldHVybiB7XG4gICAgICAgIGxvZzogbG9nZ2VyLFxuICAgICAgICBjb250ZXh0OiBjdHgsXG4gICAgICAgIHN1Y2Nlc3M6ICgpID0+IFByb21pc2UuYWxsKHN1Y2Nlc3NIYW5kbGVycy5tYXAoZm4gPT4gZm4oKSkpLFxuICAgICAgICBmbHVzaDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpXG4gICAgICAgICAgICBhd2FpdCBlbWl0dGVyLmZsdXNoKClcbiAgICAgICAgICAgIGF3YWl0IGxvZ2dlci5mbHVzaCgpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmx1c2hIYW5kbGUpXG4gICAgICAgIH0sXG4gICAgfVxufVxuXG5sZXQgZ2xvYmFsTG9nZ2VyOiBMb2dnZXIgfCB1bmRlZmluZWRcblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnIgPT4ge1xuICAgIGdsb2JhbExvZ2dlcj8uZmF0YWwoJ1VuY2F1Z2h0IGV4Y2VwdGlvbi4nLCBlcnIsIHVuZGVmaW5lZClcbn0pXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCByZWFzb24gPT4ge1xuICAgIGdsb2JhbExvZ2dlcj8uZmF0YWwoJ1VuaGFuZGxlZCByZWplY3Rpb24uJywgcmVhc29uLCB1bmRlZmluZWQpXG59KVxuIl19
|
|
1
|
+
import { EventEmitter } from './emitter.js';
|
|
2
|
+
import { makeLogger } from './logging.js';
|
|
3
|
+
class LogMulticaster {
|
|
4
|
+
#transports;
|
|
5
|
+
publishRate;
|
|
6
|
+
constructor(transports) {
|
|
7
|
+
this.#transports = transports;
|
|
8
|
+
this.publishRate = transports.map(t => t.publishRate).sort()[0] ?? Number.MAX_SAFE_INTEGER;
|
|
9
|
+
}
|
|
10
|
+
sendEntries(entries, signal) {
|
|
11
|
+
const promises = this.#transports.map(t => t.sendEntries(entries, signal)).filter(p => !!p);
|
|
12
|
+
if (promises.length === 0) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
return Promise.all(promises);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function createContext(clientInfo, loggers, eventTransport, timeouts, outerController, config, meta, environment, now) {
|
|
19
|
+
const timeout = (timeouts.cap
|
|
20
|
+
? Math.min(config?.timeout ?? timeouts.default, timeouts.cap)
|
|
21
|
+
: config?.timeout ?? timeouts.default) * 1000;
|
|
22
|
+
const innerController = new AbortController();
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
24
|
+
const logTransport = loggers.length === 1 ? loggers[0] : new LogMulticaster(loggers);
|
|
25
|
+
const logger = makeLogger(logTransport, config?.minimumLogLevel, outerController.signal).enrichReserved({
|
|
26
|
+
operationId: clientInfo.operationId,
|
|
27
|
+
client: {
|
|
28
|
+
id: clientInfo.clientId,
|
|
29
|
+
ip: clientInfo.clientIp,
|
|
30
|
+
port: clientInfo.clientPort,
|
|
31
|
+
userAgent: clientInfo.userAgent,
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
globalLogger = logger;
|
|
35
|
+
const emitter = new EventEmitter(eventTransport, logger, clientInfo, timeout, outerController.signal);
|
|
36
|
+
const successHandlers = [];
|
|
37
|
+
const ctx = {
|
|
38
|
+
env: environment ?? process.env,
|
|
39
|
+
signal: innerController.signal,
|
|
40
|
+
now: now ?? (() => new Date()),
|
|
41
|
+
operationId: clientInfo.operationId,
|
|
42
|
+
client: {
|
|
43
|
+
id: clientInfo.clientId,
|
|
44
|
+
ip: clientInfo.clientIp,
|
|
45
|
+
port: clientInfo.clientPort,
|
|
46
|
+
userAgent: clientInfo.userAgent,
|
|
47
|
+
},
|
|
48
|
+
meta: meta
|
|
49
|
+
? {
|
|
50
|
+
packageName: meta.packageName,
|
|
51
|
+
fileName: meta.fileName,
|
|
52
|
+
revision: meta.revision,
|
|
53
|
+
}
|
|
54
|
+
: undefined,
|
|
55
|
+
emit: (topic, type, subject, data, messageId) => emitter.emit({ topic, type, subject, id: messageId }, data),
|
|
56
|
+
eventBarrier: () => emitter.flush(),
|
|
57
|
+
onSuccess: (fn) => successHandlers.push(fn),
|
|
58
|
+
};
|
|
59
|
+
const timeoutHandle = setTimeout(() => {
|
|
60
|
+
logger.error('Timeout.', undefined, undefined);
|
|
61
|
+
innerController.abort();
|
|
62
|
+
// eslint-disable-next-line no-void
|
|
63
|
+
void logger.flush();
|
|
64
|
+
// eslint-disable-next-line no-void
|
|
65
|
+
void emitter.flush();
|
|
66
|
+
}, timeout);
|
|
67
|
+
const flushHandle = setTimeout(() => {
|
|
68
|
+
logger.error('Aborting flush.', undefined, undefined);
|
|
69
|
+
outerController.abort();
|
|
70
|
+
}, timeout + 15000);
|
|
71
|
+
return {
|
|
72
|
+
log: logger,
|
|
73
|
+
context: ctx,
|
|
74
|
+
success: () => Promise.all(successHandlers.map(fn => fn())),
|
|
75
|
+
flush: async () => {
|
|
76
|
+
clearTimeout(timeoutHandle);
|
|
77
|
+
await emitter.flush();
|
|
78
|
+
await logger.flush();
|
|
79
|
+
clearTimeout(flushHandle);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
let globalLogger;
|
|
84
|
+
process.on('uncaughtException', err => {
|
|
85
|
+
globalLogger?.fatal('Uncaught exception.', err, undefined);
|
|
86
|
+
});
|
|
87
|
+
process.on('unhandledRejection', reason => {
|
|
88
|
+
globalLogger?.fatal('Unhandled rejection.', reason, undefined);
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBNkN6QyxNQUFNLGNBQWM7SUFDUCxXQUFXLENBQWdCO0lBQzNCLFdBQVcsQ0FBUTtJQUU1QixZQUFZLFVBQTBCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFBO1FBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLENBQUE7SUFDOUYsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFtQixFQUFFLE1BQW1CO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0YsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2QixPQUFNO1NBQ1Q7UUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUE2QixDQUFBO0lBQzVELENBQUM7Q0FDSjtBQU9ELE1BQU0sVUFBVSxhQUFhLENBQ3pCLFVBQXNCLEVBQ3RCLE9BQXVCLEVBQ3ZCLGNBQThCLEVBQzlCLFFBQTJDLEVBQzNDLGVBQWdDLEVBQ2hDLE1BQTBCLEVBQzFCLElBQWUsRUFDZixXQUFxQyxFQUNyQyxHQUE4QjtJQU85QixNQUFNLE9B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QUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFib3J0U2lnbmFsLCBDb250ZXh0LCBFbnZpcm9ubWVudCwgSnNvbiwgTG9nZ2VyIH0gZnJvbSAnLi4vY29udGV4dC5qcydcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJy4vZW1pdHRlci5qcydcbmltcG9ydCB7IG1ha2VMb2dnZXIgfSBmcm9tICcuL2xvZ2dpbmcuanMnXG5pbXBvcnQgeyBGdWxsQ29uZmlndXJhdGlvbiwgTWV0YWRhdGEgfSBmcm9tICcuL3JlZ2lzdHJ5LmpzJ1xuXG5leHBvcnQgdHlwZSBDbGllbnRJbmZvID0ge1xuICAgIHJlYWRvbmx5IG9wZXJhdGlvbklkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgY2xpZW50SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBjbGllbnRJcD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGNsaWVudFBvcnQ/OiBudW1iZXJcbiAgICByZWFkb25seSB1c2VyQWdlbnQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgRXZlbnRNZXRhZGF0YSA9IHtcbiAgICB0b3BpYzogc3RyaW5nXG4gICAgdHlwZTogc3RyaW5nXG4gICAgc3ViamVjdDogc3RyaW5nXG4gICAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQnVmZmVyZWRFdmVudCA9IHtcbiAgICBldmVudFRpbWU6IERhdGVcbiAgICBtZXRhOiBPbWl0PEV2ZW50TWV0YWRhdGEsICd0b3BpYyc+XG4gICAgaWRzOiBDbGllbnRJbmZvXG4gICAganNvbj86IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBFdmVudFRyYW5zcG9ydCA9IHtcbiAgICByZWFkb25seSBwdWJsaXNoUmF0ZTogbnVtYmVyXG4gICAgc2VuZEV2ZW50cyh0b3BpYzogc3RyaW5nLCBldmVudHM6IEJ1ZmZlcmVkRXZlbnRbXSwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD5cbn1cblxuZXhwb3J0IHR5cGUgTG9nTGV2ZWwgPSAndHJhY2UnIHwgJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnZmF0YWwnXG5cbmV4cG9ydCB0eXBlIExvZ0VudHJ5ID0ge1xuICAgIHJlYWRvbmx5IGxldmVsOiBMb2dMZXZlbFxuICAgIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyXG4gICAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nXG4gICAgcmVhZG9ubHkgZXJyb3I6IHVua25vd25cbiAgICByZWFkb25seSBqc29uOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgTG9nVHJhbnNwb3J0ID0ge1xuICAgIHJlYWRvbmx5IHB1Ymxpc2hSYXRlPzogbnVtYmVyXG4gICAgc2VuZEVudHJpZXMoZW50cmllczogTG9nRW50cnlbXSwgc2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4gfCB1bmRlZmluZWRcbn1cblxuY2xhc3MgTG9nTXVsdGljYXN0ZXIgaW1wbGVtZW50cyBMb2dUcmFuc3BvcnQge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnRzOiBMb2dUcmFuc3BvcnRbXVxuICAgIHJlYWRvbmx5IHB1Ymxpc2hSYXRlOiBudW1iZXJcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zcG9ydHM6IExvZ1RyYW5zcG9ydFtdKSB7XG4gICAgICAgIHRoaXMuI3RyYW5zcG9ydHMgPSB0cmFuc3BvcnRzXG4gICAgICAgIHRoaXMucHVibGlzaFJhdGUgPSB0cmFuc3BvcnRzLm1hcCh0ID0+IHQucHVibGlzaFJhdGUpLnNvcnQoKVswXSA/PyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxuICAgIH1cblxuICAgIHNlbmRFbnRyaWVzKGVudHJpZXM6IExvZ0VudHJ5W10sIHNpZ25hbDogQWJvcnRTaWduYWwpIHtcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSB0aGlzLiN0cmFuc3BvcnRzLm1hcCh0ID0+IHQuc2VuZEVudHJpZXMoZW50cmllcywgc2lnbmFsKSkuZmlsdGVyKHAgPT4gISFwKVxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpIGFzIHVua25vd24gYXMgUHJvbWlzZTx2b2lkPlxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgUm9vdExvZ2dlciA9IHtcbiAgICBlbnJpY2hSZXNlcnZlZChmaWVsZHM6IG9iamVjdCk6IFJvb3RMb2dnZXJcbiAgICBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+XG59ICYgTG9nZ2VyXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb250ZXh0KFxuICAgIGNsaWVudEluZm86IENsaWVudEluZm8sXG4gICAgbG9nZ2VyczogTG9nVHJhbnNwb3J0W10sXG4gICAgZXZlbnRUcmFuc3BvcnQ6IEV2ZW50VHJhbnNwb3J0LFxuICAgIHRpbWVvdXRzOiB7IGRlZmF1bHQ6IG51bWJlcjsgY2FwPzogbnVtYmVyIH0sXG4gICAgb3V0ZXJDb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gICAgY29uZmlnPzogRnVsbENvbmZpZ3VyYXRpb24sXG4gICAgbWV0YT86IE1ldGFkYXRhLFxuICAgIGVudmlyb25tZW50PzogRW52aXJvbm1lbnQgfCB1bmRlZmluZWQsXG4gICAgbm93PzogKCgpID0+IERhdGUpIHwgdW5kZWZpbmVkLFxuKToge1xuICAgIGxvZzogUm9vdExvZ2dlclxuICAgIGNvbnRleHQ6IE9taXQ8Q29udGV4dCwgJ2xvZyc+XG4gICAgc3VjY2VzczogKCkgPT4gUHJvbWlzZTx1bmtub3duPlxuICAgIGZsdXNoOiAoKSA9PiBQcm9taXNlPHZvaWQ+XG59IHtcbiAgICBjb25zdCB0aW1lb3V0ID1cbiAgICAgICAgKHRpbWVvdXRzLmNhcFxuICAgICAgICAgICAgPyBNYXRoLm1pbihjb25maWc/LnRpbWVvdXQgPz8gdGltZW91dHMuZGVmYXVsdCwgdGltZW91dHMuY2FwKVxuICAgICAgICAgICAgOiBjb25maWc/LnRpbWVvdXQgPz8gdGltZW91dHMuZGVmYXVsdCkgKiAxMDAwXG4gICAgY29uc3QgaW5uZXJDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICBjb25zdCBsb2dUcmFuc3BvcnQgPSBsb2dnZXJzLmxlbmd0aCA9PT0gMSA/IGxvZ2dlcnNbMF0hIDogbmV3IExvZ011bHRpY2FzdGVyKGxvZ2dlcnMpXG4gICAgY29uc3QgbG9nZ2VyID0gbWFrZUxvZ2dlcihcbiAgICAgICAgbG9nVHJhbnNwb3J0LFxuICAgICAgICBjb25maWc/Lm1pbmltdW1Mb2dMZXZlbCxcbiAgICAgICAgb3V0ZXJDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbCxcbiAgICApLmVucmljaFJlc2VydmVkKHtcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGNsaWVudEluZm8ub3BlcmF0aW9uSWQsXG4gICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgaWQ6IGNsaWVudEluZm8uY2xpZW50SWQsXG4gICAgICAgICAgICBpcDogY2xpZW50SW5mby5jbGllbnRJcCxcbiAgICAgICAgICAgIHBvcnQ6IGNsaWVudEluZm8uY2xpZW50UG9ydCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogY2xpZW50SW5mby51c2VyQWdlbnQsXG4gICAgICAgIH0sXG4gICAgfSlcbiAgICBnbG9iYWxMb2dnZXIgPSBsb2dnZXJcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcihcbiAgICAgICAgZXZlbnRUcmFuc3BvcnQsXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgY2xpZW50SW5mbyxcbiAgICAgICAgdGltZW91dCxcbiAgICAgICAgb3V0ZXJDb250cm9sbGVyLnNpZ25hbCBhcyBBYm9ydFNpZ25hbCxcbiAgICApXG4gICAgY29uc3Qgc3VjY2Vzc0hhbmRsZXJzOiAoKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQpW10gPSBbXVxuICAgIGNvbnN0IGN0eCA9IHtcbiAgICAgICAgZW52OiBlbnZpcm9ubWVudCA/PyAocHJvY2Vzcy5lbnYgYXMgRW52aXJvbm1lbnQpLFxuICAgICAgICBzaWduYWw6IGlubmVyQ29udHJvbGxlci5zaWduYWwgYXMgQWJvcnRTaWduYWwsXG4gICAgICAgIG5vdzogbm93ID8/ICgoKSA9PiBuZXcgRGF0ZSgpKSxcbiAgICAgICAgb3BlcmF0aW9uSWQ6IGNsaWVudEluZm8ub3BlcmF0aW9uSWQsXG4gICAgICAgIGNsaWVudDoge1xuICAgICAgICAgICAgaWQ6IGNsaWVudEluZm8uY2xpZW50SWQsXG4gICAgICAgICAgICBpcDogY2xpZW50SW5mby5jbGllbnRJcCxcbiAgICAgICAgICAgIHBvcnQ6IGNsaWVudEluZm8uY2xpZW50UG9ydCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogY2xpZW50SW5mby51c2VyQWdlbnQsXG4gICAgICAgIH0sXG4gICAgICAgIG1ldGE6IG1ldGFcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWU6IG1ldGEucGFja2FnZU5hbWUsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWV0YS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgIHJldmlzaW9uOiBtZXRhLnJldmlzaW9uLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZW1pdDogKHRvcGljOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgc3ViamVjdDogc3RyaW5nLCBkYXRhPzogSnNvbiwgbWVzc2FnZUlkPzogc3RyaW5nKSA9PlxuICAgICAgICAgICAgZW1pdHRlci5lbWl0KHsgdG9waWMsIHR5cGUsIHN1YmplY3QsIGlkOiBtZXNzYWdlSWQgfSwgZGF0YSksXG4gICAgICAgIGV2ZW50QmFycmllcjogKCkgPT4gZW1pdHRlci5mbHVzaCgpLFxuICAgICAgICBvblN1Y2Nlc3M6IChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQpID0+IHN1Y2Nlc3NIYW5kbGVycy5wdXNoKGZuKSxcbiAgICB9XG4gICAgY29uc3QgdGltZW91dEhhbmRsZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ1RpbWVvdXQuJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAgIGlubmVyQ29udHJvbGxlci5hYm9ydCgpXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12b2lkXG4gICAgICAgIHZvaWQgbG9nZ2VyLmZsdXNoKClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgICAgdm9pZCBlbWl0dGVyLmZsdXNoKClcbiAgICB9LCB0aW1lb3V0KVxuICAgIGNvbnN0IGZsdXNoSGFuZGxlID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignQWJvcnRpbmcgZmx1c2guJywgdW5kZWZpbmVkLCB1bmRlZmluZWQpXG4gICAgICAgIG91dGVyQ29udHJvbGxlci5hYm9ydCgpXG4gICAgfSwgdGltZW91dCArIDE1MDAwKVxuICAgIHJldHVybiB7XG4gICAgICAgIGxvZzogbG9nZ2VyLFxuICAgICAgICBjb250ZXh0OiBjdHgsXG4gICAgICAgIHN1Y2Nlc3M6ICgpID0+IFByb21pc2UuYWxsKHN1Y2Nlc3NIYW5kbGVycy5tYXAoZm4gPT4gZm4oKSkpLFxuICAgICAgICBmbHVzaDogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRIYW5kbGUpXG4gICAgICAgICAgICBhd2FpdCBlbWl0dGVyLmZsdXNoKClcbiAgICAgICAgICAgIGF3YWl0IGxvZ2dlci5mbHVzaCgpXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZmx1c2hIYW5kbGUpXG4gICAgICAgIH0sXG4gICAgfVxufVxuXG5sZXQgZ2xvYmFsTG9nZ2VyOiBMb2dnZXIgfCB1bmRlZmluZWRcblxucHJvY2Vzcy5vbigndW5jYXVnaHRFeGNlcHRpb24nLCBlcnIgPT4ge1xuICAgIGdsb2JhbExvZ2dlcj8uZmF0YWwoJ1VuY2F1Z2h0IGV4Y2VwdGlvbi4nLCBlcnIsIHVuZGVmaW5lZClcbn0pXG5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCByZWFzb24gPT4ge1xuICAgIGdsb2JhbExvZ2dlcj8uZmF0YWwoJ1VuaGFuZGxlZCByZWplY3Rpb24uJywgcmVhc29uLCB1bmRlZmluZWQpXG59KVxuIl19
|
package/host/emitter.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { AbortSignal, Json, Logger } from '../context.js';
|
|
2
|
-
import { EventMetadata, EventTransport } from './context.js';
|
|
3
|
-
export declare class EventEmitter {
|
|
4
|
-
#private;
|
|
5
|
-
constructor(transport: EventTransport, logger: Logger, ids: {
|
|
6
|
-
operationId?: string;
|
|
7
|
-
clientId?: string;
|
|
8
|
-
clientIp?: string;
|
|
9
|
-
userAgent?: string;
|
|
10
|
-
}, timeout: number, signal: AbortSignal);
|
|
11
|
-
emit(meta: EventMetadata, data?: Json): void;
|
|
12
|
-
flush(): Promise<void>;
|
|
13
|
-
}
|
|
1
|
+
import { AbortSignal, Json, Logger } from '../context.js';
|
|
2
|
+
import { EventMetadata, EventTransport } from './context.js';
|
|
3
|
+
export declare class EventEmitter {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(transport: EventTransport, logger: Logger, ids: {
|
|
6
|
+
operationId?: string;
|
|
7
|
+
clientId?: string;
|
|
8
|
+
clientIp?: string;
|
|
9
|
+
userAgent?: string;
|
|
10
|
+
}, timeout: number, signal: AbortSignal);
|
|
11
|
+
emit(meta: EventMetadata, data?: Json): void;
|
|
12
|
+
flush(): Promise<void>;
|
|
13
|
+
}
|
package/host/emitter.js
CHANGED
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
export class EventEmitter {
|
|
2
|
-
#transport;
|
|
3
|
-
#logger;
|
|
4
|
-
#ids;
|
|
5
|
-
#emitted = {};
|
|
6
|
-
#size = 0;
|
|
7
|
-
#flusher;
|
|
8
|
-
#deadline;
|
|
9
|
-
#buffered;
|
|
10
|
-
#signal;
|
|
11
|
-
constructor(transport, logger, ids, timeout, signal) {
|
|
12
|
-
this.#transport = transport;
|
|
13
|
-
this.#logger = logger;
|
|
14
|
-
this.#ids = ids;
|
|
15
|
-
this.#deadline = new Date().getTime() + timeout;
|
|
16
|
-
this.#buffered = 0;
|
|
17
|
-
this.#signal = signal;
|
|
18
|
-
}
|
|
19
|
-
emit(meta, data) {
|
|
20
|
-
const eventTime = new Date();
|
|
21
|
-
const timeLeft = this.#deadline - new Date().getTime();
|
|
22
|
-
if (this.#buffered / this.#transport.publishRate > timeLeft) {
|
|
23
|
-
throw new Error('Event overflow.');
|
|
24
|
-
}
|
|
25
|
-
const event = data === undefined
|
|
26
|
-
? { meta, ids: this.#ids, eventTime }
|
|
27
|
-
: { meta, ids: this.#ids, eventTime, json: JSON.stringify(data) };
|
|
28
|
-
const events = this.#emitted[meta.topic];
|
|
29
|
-
if (!events) {
|
|
30
|
-
this.#emitted[meta.topic] = [event];
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
events.push(event);
|
|
34
|
-
if (events.length > 64 || this.#size > 64000) {
|
|
35
|
-
// eslint-disable-next-line no-void
|
|
36
|
-
void this.flush();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
++this.#buffered;
|
|
40
|
-
this.#size += event.json?.length ?? 0;
|
|
41
|
-
}
|
|
42
|
-
async flush() {
|
|
43
|
-
this.#startFlush(this.#emitted);
|
|
44
|
-
this.#emitted = {};
|
|
45
|
-
this.#size = 0;
|
|
46
|
-
return await this.#flusher;
|
|
47
|
-
}
|
|
48
|
-
#startFlush(emitted) {
|
|
49
|
-
if (this.#flusher) {
|
|
50
|
-
this.#flusher = this.#flusher.then(() => this.#flushEvents(emitted));
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
this.#flusher = this.#flushEvents(emitted);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
async #flushEvents(emitted) {
|
|
57
|
-
await Promise.all(Object.entries(emitted).map(async ([topic, events]) => {
|
|
58
|
-
try {
|
|
59
|
-
await this.#transport.sendEvents(topic, events, this.#signal);
|
|
60
|
-
}
|
|
61
|
-
catch (e) {
|
|
62
|
-
this.#logger.fatal('Error sending events.', e, { events });
|
|
63
|
-
}
|
|
64
|
-
this.#buffered -= events.length;
|
|
65
|
-
}));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
1
|
+
export class EventEmitter {
|
|
2
|
+
#transport;
|
|
3
|
+
#logger;
|
|
4
|
+
#ids;
|
|
5
|
+
#emitted = {};
|
|
6
|
+
#size = 0;
|
|
7
|
+
#flusher;
|
|
8
|
+
#deadline;
|
|
9
|
+
#buffered;
|
|
10
|
+
#signal;
|
|
11
|
+
constructor(transport, logger, ids, timeout, signal) {
|
|
12
|
+
this.#transport = transport;
|
|
13
|
+
this.#logger = logger;
|
|
14
|
+
this.#ids = ids;
|
|
15
|
+
this.#deadline = new Date().getTime() + timeout;
|
|
16
|
+
this.#buffered = 0;
|
|
17
|
+
this.#signal = signal;
|
|
18
|
+
}
|
|
19
|
+
emit(meta, data) {
|
|
20
|
+
const eventTime = new Date();
|
|
21
|
+
const timeLeft = this.#deadline - new Date().getTime();
|
|
22
|
+
if (this.#buffered / this.#transport.publishRate > timeLeft) {
|
|
23
|
+
throw new Error('Event overflow.');
|
|
24
|
+
}
|
|
25
|
+
const event = data === undefined
|
|
26
|
+
? { meta, ids: this.#ids, eventTime }
|
|
27
|
+
: { meta, ids: this.#ids, eventTime, json: JSON.stringify(data) };
|
|
28
|
+
const events = this.#emitted[meta.topic];
|
|
29
|
+
if (!events) {
|
|
30
|
+
this.#emitted[meta.topic] = [event];
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
events.push(event);
|
|
34
|
+
if (events.length > 64 || this.#size > 64000) {
|
|
35
|
+
// eslint-disable-next-line no-void
|
|
36
|
+
void this.flush();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
++this.#buffered;
|
|
40
|
+
this.#size += event.json?.length ?? 0;
|
|
41
|
+
}
|
|
42
|
+
async flush() {
|
|
43
|
+
this.#startFlush(this.#emitted);
|
|
44
|
+
this.#emitted = {};
|
|
45
|
+
this.#size = 0;
|
|
46
|
+
return await this.#flusher;
|
|
47
|
+
}
|
|
48
|
+
#startFlush(emitted) {
|
|
49
|
+
if (this.#flusher) {
|
|
50
|
+
this.#flusher = this.#flusher.then(() => this.#flushEvents(emitted));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.#flusher = this.#flushEvents(emitted);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async #flushEvents(emitted) {
|
|
57
|
+
await Promise.all(Object.entries(emitted).map(async ([topic, events]) => {
|
|
58
|
+
try {
|
|
59
|
+
await this.#transport.sendEvents(topic, events, this.#signal);
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
this.#logger.fatal('Error sending events.', e, { events });
|
|
63
|
+
}
|
|
64
|
+
this.#buffered -= events.length;
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxPQUFPLFlBQVk7SUFDWixVQUFVLENBQWdCO0lBQzFCLE9BQU8sQ0FBUTtJQUNmLElBQUksQ0FBWTtJQUN6QixRQUFRLEdBQWUsRUFBRSxDQUFBO0lBQ3pCLEtBQUssR0FBRyxDQUFDLENBQUE7SUFDVCxRQUFRLENBQWdCO0lBQ2YsU0FBUyxDQUFRO0lBQzFCLFNBQVMsQ0FBUTtJQUNSLE9BQU8sQ0FBYTtJQUU3QixZQUNJLFNBQXlCLEVBQ3pCLE1BQWMsRUFDZCxHQUF1RixFQUN2RixPQUFlLEVBQ2YsTUFBbUI7UUFFbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUE7UUFDckIsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUE7UUFDZixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBbUIsRUFBRSxJQUFXO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsR0FBRyxRQUFRLEVBQUU7WUFDekQsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1NBQ3JDO1FBQ0QsTUFBTSxLQUFLLEdBQ1AsSUFBSSxLQUFLLFNBQVM7WUFDZCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3JDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQTtRQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUN4QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUN0QzthQUFNO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNsQixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFO2dCQUMxQyxtQ0FBbUM7Z0JBQ25DLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ3BCO1NBQ0o7UUFDRCxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUE7UUFDaEIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLO1FBQ1AsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUE7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDZCxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQTtJQUM5QixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQW1CO1FBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1NBQ3ZFO2FBQU07WUFDSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUE7U0FDN0M7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFtQjtRQUNsQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDbEQsSUFBSTtnQkFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2FBQ2hFO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQTthQUM3RDtZQUNELElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FDTCxDQUFBO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJvcnRTaWduYWwsIEpzb24sIExvZ2dlciB9IGZyb20gJy4uL2NvbnRleHQuanMnXG5pbXBvcnQgeyBCdWZmZXJlZEV2ZW50LCBDbGllbnRJbmZvLCBFdmVudE1ldGFkYXRhLCBFdmVudFRyYW5zcG9ydCB9IGZyb20gJy4vY29udGV4dC5qcydcblxudHlwZSBFbWl0QnVmZmVyID0ge1xuICAgIFt0b3BpYzogc3RyaW5nXTogQnVmZmVyZWRFdmVudFtdXG59XG5cbmV4cG9ydCBjbGFzcyBFdmVudEVtaXR0ZXIge1xuICAgIHJlYWRvbmx5ICN0cmFuc3BvcnQ6IEV2ZW50VHJhbnNwb3J0XG4gICAgcmVhZG9ubHkgI2xvZ2dlcjogTG9nZ2VyXG4gICAgcmVhZG9ubHkgI2lkczogQ2xpZW50SW5mb1xuICAgICNlbWl0dGVkOiBFbWl0QnVmZmVyID0ge31cbiAgICAjc2l6ZSA9IDBcbiAgICAjZmx1c2hlcj86IFByb21pc2U8dm9pZD5cbiAgICByZWFkb25seSAjZGVhZGxpbmU6IG51bWJlclxuICAgICNidWZmZXJlZDogbnVtYmVyXG4gICAgcmVhZG9ubHkgI3NpZ25hbDogQWJvcnRTaWduYWxcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICB0cmFuc3BvcnQ6IEV2ZW50VHJhbnNwb3J0LFxuICAgICAgICBsb2dnZXI6IExvZ2dlcixcbiAgICAgICAgaWRzOiB7IG9wZXJhdGlvbklkPzogc3RyaW5nOyBjbGllbnRJZD86IHN0cmluZzsgY2xpZW50SXA/OiBzdHJpbmc7IHVzZXJBZ2VudD86IHN0cmluZyB9LFxuICAgICAgICB0aW1lb3V0OiBudW1iZXIsXG4gICAgICAgIHNpZ25hbDogQWJvcnRTaWduYWwsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuI3RyYW5zcG9ydCA9IHRyYW5zcG9ydFxuICAgICAgICB0aGlzLiNsb2dnZXIgPSBsb2dnZXJcbiAgICAgICAgdGhpcy4jaWRzID0gaWRzXG4gICAgICAgIHRoaXMuI2RlYWRsaW5lID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyB0aW1lb3V0XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkID0gMFxuICAgICAgICB0aGlzLiNzaWduYWwgPSBzaWduYWxcbiAgICB9XG5cbiAgICBlbWl0KG1ldGE6IEV2ZW50TWV0YWRhdGEsIGRhdGE/OiBKc29uKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50VGltZSA9IG5ldyBEYXRlKClcbiAgICAgICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLiNkZWFkbGluZSAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgIGlmICh0aGlzLiNidWZmZXJlZCAvIHRoaXMuI3RyYW5zcG9ydC5wdWJsaXNoUmF0ZSA+IHRpbWVMZWZ0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IG92ZXJmbG93LicpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPVxuICAgICAgICAgICAgZGF0YSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7IG1ldGEsIGlkczogdGhpcy4jaWRzLCBldmVudFRpbWUgfVxuICAgICAgICAgICAgICAgIDogeyBtZXRhLCBpZHM6IHRoaXMuI2lkcywgZXZlbnRUaW1lLCBqc29uOiBKU09OLnN0cmluZ2lmeShkYXRhKSB9XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuI2VtaXR0ZWRbbWV0YS50b3BpY11cbiAgICAgICAgaWYgKCFldmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuI2VtaXR0ZWRbbWV0YS50b3BpY10gPSBbZXZlbnRdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBldmVudHMucHVzaChldmVudClcbiAgICAgICAgICAgIGlmIChldmVudHMubGVuZ3RoID4gNjQgfHwgdGhpcy4jc2l6ZSA+IDY0MDAwKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZvaWRcbiAgICAgICAgICAgICAgICB2b2lkIHRoaXMuZmx1c2goKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICsrdGhpcy4jYnVmZmVyZWRcbiAgICAgICAgdGhpcy4jc2l6ZSArPSBldmVudC5qc29uPy5sZW5ndGggPz8gMFxuICAgIH1cblxuICAgIGFzeW5jIGZsdXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLiNzdGFydEZsdXNoKHRoaXMuI2VtaXR0ZWQpXG4gICAgICAgIHRoaXMuI2VtaXR0ZWQgPSB7fVxuICAgICAgICB0aGlzLiNzaXplID0gMFxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jZmx1c2hlclxuICAgIH1cblxuICAgICNzdGFydEZsdXNoKGVtaXR0ZWQ6IEVtaXRCdWZmZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuI2ZsdXNoZXIpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZsdXNoZXIgPSB0aGlzLiNmbHVzaGVyLnRoZW4oKCkgPT4gdGhpcy4jZmx1c2hFdmVudHMoZW1pdHRlZCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLiNmbHVzaGVyID0gdGhpcy4jZmx1c2hFdmVudHMoZW1pdHRlZClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jICNmbHVzaEV2ZW50cyhlbWl0dGVkOiBFbWl0QnVmZmVyKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoZW1pdHRlZCkubWFwKGFzeW5jIChbdG9waWMsIGV2ZW50c10pID0+IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLiN0cmFuc3BvcnQuc2VuZEV2ZW50cyh0b3BpYywgZXZlbnRzLCB0aGlzLiNzaWduYWwpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNsb2dnZXIuZmF0YWwoJ0Vycm9yIHNlbmRpbmcgZXZlbnRzLicsIGUsIHsgZXZlbnRzIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkIC09IGV2ZW50cy5sZW5ndGhcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgfVxufVxuIl19
|
package/host/http.d.ts
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import { Context } from '../context.js';
|
|
3
|
-
import type { Json } from '../http.js';
|
|
4
|
-
import { ClientInfo, RootLogger } from './context.js';
|
|
5
|
-
import type { HttpHandler } from './registry.js';
|
|
6
|
-
export
|
|
7
|
-
headers: {
|
|
8
|
-
readonly [key: string]: string;
|
|
9
|
-
};
|
|
10
|
-
status: number;
|
|
11
|
-
body?: string | Buffer;
|
|
12
|
-
}
|
|
13
|
-
type RequestOptions = BodylessRequestOptions | StringRequestOptions | JsonRequestOptions;
|
|
14
|
-
|
|
15
|
-
uri: string;
|
|
16
|
-
headers?: {
|
|
17
|
-
readonly [key: string]: string;
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
body: string;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
json: Json;
|
|
25
|
-
}
|
|
26
|
-
export declare function executeRequest(log: RootLogger, context: Omit<Context, 'log'>, handler: HttpHandler, options: RequestOptions, success: () => Promise<unknown>): Promise<Response>;
|
|
27
|
-
export declare function clientFromHeaders(headers: {
|
|
28
|
-
readonly [key: string]: string;
|
|
29
|
-
} | undefined): ClientInfo;
|
|
30
|
-
export {};
|
|
1
|
+
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
+
import { Context } from '../context.js';
|
|
3
|
+
import type { Json } from '../http.js';
|
|
4
|
+
import { ClientInfo, RootLogger } from './context.js';
|
|
5
|
+
import type { HttpHandler } from './registry.js';
|
|
6
|
+
export type Response = {
|
|
7
|
+
headers: {
|
|
8
|
+
readonly [key: string]: string;
|
|
9
|
+
};
|
|
10
|
+
status: number;
|
|
11
|
+
body?: string | Buffer;
|
|
12
|
+
};
|
|
13
|
+
type RequestOptions = BodylessRequestOptions | StringRequestOptions | JsonRequestOptions;
|
|
14
|
+
type BodylessRequestOptions = {
|
|
15
|
+
uri: string;
|
|
16
|
+
headers?: {
|
|
17
|
+
readonly [key: string]: string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
type StringRequestOptions = BodylessRequestOptions & {
|
|
21
|
+
body: string;
|
|
22
|
+
};
|
|
23
|
+
type JsonRequestOptions = BodylessRequestOptions & {
|
|
24
|
+
json: Json;
|
|
25
|
+
};
|
|
26
|
+
export declare function executeRequest(log: RootLogger, context: Omit<Context, 'log'>, handler: HttpHandler, options: RequestOptions, success: () => Promise<unknown>): Promise<Response>;
|
|
27
|
+
export declare function clientFromHeaders(headers: {
|
|
28
|
+
readonly [key: string]: string;
|
|
29
|
+
} | undefined): ClientInfo;
|
|
30
|
+
export {};
|