@openstatus/health-inngest 0.1.4-dev.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/README.md +76 -0
- package/dist/_virtual/rolldown_runtime.cjs +30 -0
- package/dist/mod.cjs +36 -0
- package/dist/mod.d.cts +23 -0
- package/dist/mod.d.cts.map +1 -0
- package/dist/mod.d.ts +23 -0
- package/dist/mod.d.ts.map +1 -0
- package/dist/mod.js +34 -0
- package/dist/mod.js.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# @openstatus/health-inngest
|
|
2
|
+
|
|
3
|
+
[Inngest](https://www.inngest.com/) probe for
|
|
4
|
+
[`@openstatus/health`](https://jsr.io/@openstatus/health). Sends
|
|
5
|
+
`GET {baseUrl}/v1/events?limit=1` to the Inngest REST API with your signing
|
|
6
|
+
key as a bearer header, so it proves both that Inngest answers and that the
|
|
7
|
+
key is valid — with `fetch` alone, on every runtime.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
deno add jsr:@openstatus/health jsr:@openstatus/health-inngest
|
|
11
|
+
npm install @openstatus/health @openstatus/health-inngest
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { createHealthHandler, readEnv } from "@openstatus/health";
|
|
16
|
+
import { inngestProbe } from "@openstatus/health-inngest";
|
|
17
|
+
|
|
18
|
+
const signingKey = readEnv("INNGEST_SIGNING_KEY");
|
|
19
|
+
|
|
20
|
+
Deno.serve(
|
|
21
|
+
createHealthHandler({
|
|
22
|
+
probes: [
|
|
23
|
+
// the factory validates `signingKey` at construction, so pass a
|
|
24
|
+
// placeholder and let `skip` keep the unconfigured check from running.
|
|
25
|
+
inngestProbe({
|
|
26
|
+
signingKey: signingKey || "unconfigured",
|
|
27
|
+
skip: () => !signingKey,
|
|
28
|
+
}),
|
|
29
|
+
],
|
|
30
|
+
}),
|
|
31
|
+
);
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`signingKey` is the `INNGEST_SIGNING_KEY` of the environment you deploy to;
|
|
35
|
+
the REST API accepts it as a bearer token. `baseUrl` defaults to
|
|
36
|
+
`https://api.inngest.com` and takes the URL of a self-hosted Inngest server.
|
|
37
|
+
Like every probe here, this one never reads the environment itself — pass
|
|
38
|
+
the values in, and use `skip` for environments where Inngest is not
|
|
39
|
+
configured.
|
|
40
|
+
|
|
41
|
+
Listing one event is a cheap read that sends nothing, so the probe can run
|
|
42
|
+
on every health request without side effects. It checks the API your
|
|
43
|
+
functions are served from, not that a specific function is registered.
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
inngestProbe({
|
|
47
|
+
signingKey,
|
|
48
|
+
// optional overrides from the Probe contract
|
|
49
|
+
name: "jobs",
|
|
50
|
+
critical: true,
|
|
51
|
+
timeoutMs: 2000,
|
|
52
|
+
skip: () => !signingKey,
|
|
53
|
+
});
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Non-critical by default: Inngest usually carries background work, so an
|
|
57
|
+
outage degrades the report instead of taking the service out of rotation.
|
|
58
|
+
Set `critical: true` when requests cannot complete without sending an event.
|
|
59
|
+
|
|
60
|
+
## About openstatus
|
|
61
|
+
|
|
62
|
+
[openstatus](https://www.openstatus.dev/) is the open-source uptime monitoring
|
|
63
|
+
and status page platform. This package is part of
|
|
64
|
+
[`@openstatus/health`](https://github.com/openstatusHQ/health), the `/health`
|
|
65
|
+
endpoints behind openstatus's own services, extracted so any JavaScript server
|
|
66
|
+
can expose one. Point an
|
|
67
|
+
[openstatus monitor](https://www.openstatus.dev/docs/reference/http-monitor)
|
|
68
|
+
at the endpoint and assert on `status` in the body to be alerted on
|
|
69
|
+
`degraded` before it becomes `unhealthy`.
|
|
70
|
+
|
|
71
|
+
Source: [github.com/openstatusHQ/health](https://github.com/openstatusHQ/health).
|
|
72
|
+
Issues and PRs welcome.
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
[MIT](https://github.com/openstatusHQ/health/blob/main/LICENSE)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
//#region rolldown:runtime
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
|
|
23
|
+
//#endregion
|
|
24
|
+
|
|
25
|
+
Object.defineProperty(exports, '__toESM', {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
get: function () {
|
|
28
|
+
return __toESM;
|
|
29
|
+
}
|
|
30
|
+
});
|
package/dist/mod.cjs
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const require_rolldown_runtime = require('./_virtual/rolldown_runtime.cjs');
|
|
2
|
+
const __openstatus_health = require_rolldown_runtime.__toESM(require("@openstatus/health"));
|
|
3
|
+
|
|
4
|
+
//#region src/mod.ts
|
|
5
|
+
/** API base URL when `baseUrl` is unset. */
|
|
6
|
+
const inngestDefaultBaseUrl = "https://api.inngest.com";
|
|
7
|
+
/** Probe name when `name` is unset. */
|
|
8
|
+
const inngestDefaultName = "inngest";
|
|
9
|
+
/** A probe that expects 2xx from `GET {baseUrl}/v1/events?limit=1` with `signingKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `signingKey` or an invalid `baseUrl`. */
|
|
10
|
+
function inngestProbe(options) {
|
|
11
|
+
const doFetch = options.fetch ?? globalThis.fetch;
|
|
12
|
+
const url = (0, __openstatus_health.probeUrl)({
|
|
13
|
+
probe: "inngestProbe",
|
|
14
|
+
field: "baseUrl",
|
|
15
|
+
value: options.baseUrl ?? inngestDefaultBaseUrl,
|
|
16
|
+
path: "/v1/events?limit=1"
|
|
17
|
+
});
|
|
18
|
+
if (typeof options.signingKey !== "string" || options.signingKey.length === 0) throw new __openstatus_health.ProbeConfigError("inngestProbe", "signingKey", typeof options.signingKey !== "string" ? `must be a string, got ${String(options.signingKey)}` : "must not be empty");
|
|
19
|
+
const headers = { authorization: `Bearer ${options.signingKey}` };
|
|
20
|
+
return {
|
|
21
|
+
name: options.name ?? inngestDefaultName,
|
|
22
|
+
critical: options.critical ?? false,
|
|
23
|
+
timeoutMs: options.timeoutMs,
|
|
24
|
+
skip: options.skip,
|
|
25
|
+
run: (signal) => (0, __openstatus_health.expectOk)(doFetch(url, {
|
|
26
|
+
method: "GET",
|
|
27
|
+
headers,
|
|
28
|
+
signal
|
|
29
|
+
}))
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
exports.inngestDefaultBaseUrl = inngestDefaultBaseUrl;
|
|
35
|
+
exports.inngestDefaultName = inngestDefaultName;
|
|
36
|
+
exports.inngestProbe = inngestProbe;
|
package/dist/mod.d.cts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Probe, ProbeOverrides } from "@openstatus/health";
|
|
2
|
+
|
|
3
|
+
//#region src/mod.d.ts
|
|
4
|
+
|
|
5
|
+
/** API base URL when `baseUrl` is unset. */
|
|
6
|
+
declare const inngestDefaultBaseUrl = "https://api.inngest.com";
|
|
7
|
+
/** Probe name when `name` is unset. */
|
|
8
|
+
declare const inngestDefaultName = "inngest";
|
|
9
|
+
/** Options for `inngestProbe()`. */
|
|
10
|
+
interface InngestProbeOptions extends ProbeOverrides {
|
|
11
|
+
/** The `INNGEST_SIGNING_KEY` of the environment; the REST API authenticates with it. */
|
|
12
|
+
readonly signingKey: string;
|
|
13
|
+
/** API host. Default `inngestDefaultBaseUrl`. */
|
|
14
|
+
readonly baseUrl?: string | URL;
|
|
15
|
+
/** Replacement `fetch`, for tests. */
|
|
16
|
+
readonly fetch?: typeof fetch;
|
|
17
|
+
}
|
|
18
|
+
/** A probe that expects 2xx from `GET {baseUrl}/v1/events?limit=1` with `signingKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `signingKey` or an invalid `baseUrl`. */
|
|
19
|
+
declare function inngestProbe(options: InngestProbeOptions): Probe;
|
|
20
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
21
|
+
//#endregion
|
|
22
|
+
export { InngestProbeOptions, inngestDefaultBaseUrl, inngestDefaultName, inngestProbe };
|
|
23
|
+
//# sourceMappingURL=mod.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.cts","names":[],"sources":["../src/mod.ts"],"sourcesContent":[],"mappings":";;;;;AAoCsC,cAfzB,qBAAA,GAeyB,yBAAA;;AAA2B,cAbpD,kBAAA,GAaoD,SAAA;;UAVhD,mBAAA,SAA4B;;;;8BAIf;;0BAEJ;;;iBAIV,YAAA,UAAsB,sBAAsB"}
|
package/dist/mod.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Probe, ProbeOverrides } from "@openstatus/health";
|
|
2
|
+
|
|
3
|
+
//#region src/mod.d.ts
|
|
4
|
+
|
|
5
|
+
/** API base URL when `baseUrl` is unset. */
|
|
6
|
+
declare const inngestDefaultBaseUrl = "https://api.inngest.com";
|
|
7
|
+
/** Probe name when `name` is unset. */
|
|
8
|
+
declare const inngestDefaultName = "inngest";
|
|
9
|
+
/** Options for `inngestProbe()`. */
|
|
10
|
+
interface InngestProbeOptions extends ProbeOverrides {
|
|
11
|
+
/** The `INNGEST_SIGNING_KEY` of the environment; the REST API authenticates with it. */
|
|
12
|
+
readonly signingKey: string;
|
|
13
|
+
/** API host. Default `inngestDefaultBaseUrl`. */
|
|
14
|
+
readonly baseUrl?: string | URL;
|
|
15
|
+
/** Replacement `fetch`, for tests. */
|
|
16
|
+
readonly fetch?: typeof fetch;
|
|
17
|
+
}
|
|
18
|
+
/** A probe that expects 2xx from `GET {baseUrl}/v1/events?limit=1` with `signingKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `signingKey` or an invalid `baseUrl`. */
|
|
19
|
+
declare function inngestProbe(options: InngestProbeOptions): Probe;
|
|
20
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
21
|
+
//#endregion
|
|
22
|
+
export { InngestProbeOptions, inngestDefaultBaseUrl, inngestDefaultName, inngestProbe };
|
|
23
|
+
//# sourceMappingURL=mod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.d.ts","names":[],"sources":["../src/mod.ts"],"sourcesContent":[],"mappings":";;;;;AAoCsC,cAfzB,qBAAA,GAeyB,yBAAA;;AAA2B,cAbpD,kBAAA,GAaoD,SAAA;;UAVhD,mBAAA,SAA4B;;;;8BAIf;;0BAEJ;;;iBAIV,YAAA,UAAsB,sBAAsB"}
|
package/dist/mod.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ProbeConfigError, expectOk, probeUrl } from "@openstatus/health";
|
|
2
|
+
|
|
3
|
+
//#region src/mod.ts
|
|
4
|
+
/** API base URL when `baseUrl` is unset. */
|
|
5
|
+
const inngestDefaultBaseUrl = "https://api.inngest.com";
|
|
6
|
+
/** Probe name when `name` is unset. */
|
|
7
|
+
const inngestDefaultName = "inngest";
|
|
8
|
+
/** A probe that expects 2xx from `GET {baseUrl}/v1/events?limit=1` with `signingKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `signingKey` or an invalid `baseUrl`. */
|
|
9
|
+
function inngestProbe(options) {
|
|
10
|
+
const doFetch = options.fetch ?? globalThis.fetch;
|
|
11
|
+
const url = probeUrl({
|
|
12
|
+
probe: "inngestProbe",
|
|
13
|
+
field: "baseUrl",
|
|
14
|
+
value: options.baseUrl ?? inngestDefaultBaseUrl,
|
|
15
|
+
path: "/v1/events?limit=1"
|
|
16
|
+
});
|
|
17
|
+
if (typeof options.signingKey !== "string" || options.signingKey.length === 0) throw new ProbeConfigError("inngestProbe", "signingKey", typeof options.signingKey !== "string" ? `must be a string, got ${String(options.signingKey)}` : "must not be empty");
|
|
18
|
+
const headers = { authorization: `Bearer ${options.signingKey}` };
|
|
19
|
+
return {
|
|
20
|
+
name: options.name ?? inngestDefaultName,
|
|
21
|
+
critical: options.critical ?? false,
|
|
22
|
+
timeoutMs: options.timeoutMs,
|
|
23
|
+
skip: options.skip,
|
|
24
|
+
run: (signal) => expectOk(doFetch(url, {
|
|
25
|
+
method: "GET",
|
|
26
|
+
headers,
|
|
27
|
+
signal
|
|
28
|
+
}))
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
//#endregion
|
|
33
|
+
export { inngestDefaultBaseUrl, inngestDefaultName, inngestProbe };
|
|
34
|
+
//# sourceMappingURL=mod.js.map
|
package/dist/mod.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mod.js","names":["options: InngestProbeOptions"],"sources":["../src/mod.ts"],"sourcesContent":["/**\n * Inngest reachability probe for `@openstatus/health`, against `/v1/events?limit=1`.\n *\n * ```ts\n * import { inngestProbe } from \"@openstatus/health-inngest\";\n *\n * const probe = inngestProbe({ signingKey: env.INNGEST_SIGNING_KEY });\n * ```\n *\n * @module\n */\n\nimport {\n expectOk,\n type Probe,\n ProbeConfigError,\n type ProbeOverrides,\n probeUrl,\n} from \"@openstatus/health\";\n\n/** API base URL when `baseUrl` is unset. */\nexport const inngestDefaultBaseUrl = \"https://api.inngest.com\";\n/** Probe name when `name` is unset. */\nexport const inngestDefaultName = \"inngest\";\n\n/** Options for `inngestProbe()`. */\nexport interface InngestProbeOptions extends ProbeOverrides {\n /** The `INNGEST_SIGNING_KEY` of the environment; the REST API authenticates with it. */\n readonly signingKey: string;\n /** API host. Default `inngestDefaultBaseUrl`. */\n readonly baseUrl?: string | URL;\n /** Replacement `fetch`, for tests. */\n readonly fetch?: typeof fetch;\n}\n\n/** A probe that expects 2xx from `GET {baseUrl}/v1/events?limit=1` with `signingKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `signingKey` or an invalid `baseUrl`. */\nexport function inngestProbe(options: InngestProbeOptions): Probe {\n const doFetch = options.fetch ?? globalThis.fetch;\n const url = probeUrl({\n probe: \"inngestProbe\",\n field: \"baseUrl\",\n value: options.baseUrl ?? inngestDefaultBaseUrl,\n path: \"/v1/events?limit=1\",\n });\n if (\n typeof options.signingKey !== \"string\" || options.signingKey.length === 0\n ) {\n throw new ProbeConfigError(\n \"inngestProbe\",\n \"signingKey\",\n typeof options.signingKey !== \"string\"\n ? `must be a string, got ${String(options.signingKey)}`\n : \"must not be empty\",\n );\n }\n const headers = { authorization: `Bearer ${options.signingKey}` };\n return {\n name: options.name ?? inngestDefaultName,\n critical: options.critical ?? false,\n timeoutMs: options.timeoutMs,\n skip: options.skip,\n run: (signal) => expectOk(doFetch(url, { method: \"GET\", headers, signal })),\n };\n}\n"],"mappings":";;;;AAqBA,MAAa,wBAAwB;;AAErC,MAAa,qBAAqB;;AAalC,SAAgB,aAAaA,SAAqC;CAChE,MAAM,UAAU,QAAQ,SAAS,WAAW;CAC5C,MAAM,MAAM,SAAS;EACnB,OAAO;EACP,OAAO;EACP,OAAO,QAAQ,WAAW;EAC1B,MAAM;CACP,EAAC;AACF,YACS,QAAQ,eAAe,YAAY,QAAQ,WAAW,WAAW,EAExE,OAAM,IAAI,iBACR,gBACA,qBACO,QAAQ,eAAe,YACzB,wBAAwB,OAAO,QAAQ,WAAW,CAAC,IACpD;CAGR,MAAM,UAAU,EAAE,gBAAgB,SAAS,QAAQ,WAAW,EAAG;AACjE,QAAO;EACL,MAAM,QAAQ,QAAQ;EACtB,UAAU,QAAQ,YAAY;EAC9B,WAAW,QAAQ;EACnB,MAAM,QAAQ;EACd,KAAK,CAAC,WAAW,SAAS,QAAQ,KAAK;GAAE,QAAQ;GAAO;GAAS;EAAQ,EAAC,CAAC;CAC5E;AACF"}
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@openstatus/health-inngest",
|
|
3
|
+
"version": "0.1.4-dev.0",
|
|
4
|
+
"description": "Inngest probe for @openstatus/health",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"openstatus",
|
|
7
|
+
"health",
|
|
8
|
+
"healthcheck",
|
|
9
|
+
"inngest",
|
|
10
|
+
"queue",
|
|
11
|
+
"workflow",
|
|
12
|
+
"background-jobs"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"author": {
|
|
16
|
+
"name": "openstatus",
|
|
17
|
+
"url": "https://www.openstatus.dev/"
|
|
18
|
+
},
|
|
19
|
+
"homepage": "https://github.com/openstatusHQ/health",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/openstatusHQ/health.git",
|
|
23
|
+
"directory": "packages/inngest/"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/openstatusHQ/health/issues"
|
|
27
|
+
},
|
|
28
|
+
"type": "module",
|
|
29
|
+
"module": "./dist/mod.js",
|
|
30
|
+
"main": "./dist/mod.cjs",
|
|
31
|
+
"types": "./dist/mod.d.ts",
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": {
|
|
35
|
+
"import": "./dist/mod.d.ts",
|
|
36
|
+
"require": "./dist/mod.d.cts"
|
|
37
|
+
},
|
|
38
|
+
"import": "./dist/mod.js",
|
|
39
|
+
"require": "./dist/mod.cjs"
|
|
40
|
+
},
|
|
41
|
+
"./package.json": "./package.json"
|
|
42
|
+
},
|
|
43
|
+
"sideEffects": false,
|
|
44
|
+
"files": [
|
|
45
|
+
"dist/"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22"
|
|
49
|
+
},
|
|
50
|
+
"peerDependencies": {
|
|
51
|
+
"@openstatus/health": "^0.1.4-dev.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"tsdown": "^0.12.7",
|
|
55
|
+
"typescript": "^5.8.3"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"build": "tsdown",
|
|
59
|
+
"prepack": "tsdown",
|
|
60
|
+
"test": "node --experimental-transform-types --test"
|
|
61
|
+
}
|
|
62
|
+
}
|