@openstatus/health-workos 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 ADDED
@@ -0,0 +1,73 @@
1
+ # @openstatus/health-workos
2
+
3
+ [WorkOS](https://workos.com/) probe for
4
+ [`@openstatus/health`](https://jsr.io/@openstatus/health). Sends
5
+ `GET {baseUrl}/organizations?limit=1` with your API key as a bearer header, so
6
+ it proves both that the WorkOS API answers and that the key is valid — with
7
+ `fetch` alone, on every runtime.
8
+
9
+ ```sh
10
+ deno add jsr:@openstatus/health jsr:@openstatus/health-workos
11
+ npm install @openstatus/health @openstatus/health-workos
12
+ ```
13
+
14
+ ```ts
15
+ import { createHealthHandler, readEnv } from "@openstatus/health";
16
+ import { workosProbe } from "@openstatus/health-workos";
17
+
18
+ const apiKey = readEnv("WORKOS_API_KEY");
19
+
20
+ Deno.serve(
21
+ createHealthHandler({
22
+ probes: [
23
+ // the factory validates `apiKey` at construction, so pass a
24
+ // placeholder and let `skip` keep the unconfigured check from running.
25
+ workosProbe({
26
+ apiKey: apiKey || "unconfigured",
27
+ skip: () => !apiKey,
28
+ }),
29
+ ],
30
+ }),
31
+ );
32
+ ```
33
+
34
+ `apiKey` is the `WORKOS_API_KEY` of the environment (`sk_test_…` or
35
+ `sk_live_…`). Listing one organization is the cheapest authenticated read on
36
+ the API and has no side effects, so the probe can run on every health request.
37
+ `baseUrl` defaults to `https://api.workos.com`. Like every probe here, this
38
+ one never reads the environment itself — pass the values in, and use `skip`
39
+ for environments where WorkOS is not configured.
40
+
41
+ ```ts
42
+ workosProbe({
43
+ apiKey: apiKey || "unconfigured",
44
+ // optional overrides from the Probe contract
45
+ name: "auth",
46
+ critical: true,
47
+ timeoutMs: 2000,
48
+ skip: () => !apiKey,
49
+ });
50
+ ```
51
+
52
+ Non-critical by default, since AuthKit sessions are verified locally with the
53
+ environment's JWKS and most requests never call the API. Set `critical: true`
54
+ when requests cannot be served without it — SSO and Directory Sync lookups, or
55
+ a login flow that is the whole service.
56
+
57
+ ## About openstatus
58
+
59
+ [openstatus](https://www.openstatus.dev/) is the open-source uptime monitoring
60
+ and status page platform. This package is part of
61
+ [`@openstatus/health`](https://github.com/openstatusHQ/health), the `/health`
62
+ endpoints behind openstatus's own services, extracted so any JavaScript server
63
+ can expose one. Point an
64
+ [openstatus monitor](https://www.openstatus.dev/docs/reference/http-monitor)
65
+ at the endpoint and assert on `status` in the body to be alerted on
66
+ `degraded` before it becomes `unhealthy`.
67
+
68
+ Source: [github.com/openstatusHQ/health](https://github.com/openstatusHQ/health).
69
+ Issues and PRs welcome.
70
+
71
+ ## License
72
+
73
+ [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 workosDefaultBaseUrl = "https://api.workos.com";
7
+ /** Probe name when `name` is unset. */
8
+ const workosDefaultName = "workos";
9
+ /** A probe that expects 2xx from `GET {baseUrl}/organizations?limit=1` with `apiKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `apiKey` or an invalid `baseUrl`. */
10
+ function workosProbe(options) {
11
+ const doFetch = options.fetch ?? globalThis.fetch;
12
+ const url = (0, __openstatus_health.probeUrl)({
13
+ probe: "workosProbe",
14
+ field: "baseUrl",
15
+ value: options.baseUrl ?? workosDefaultBaseUrl,
16
+ path: "/organizations?limit=1"
17
+ });
18
+ if (typeof options.apiKey !== "string" || options.apiKey.length === 0) throw new __openstatus_health.ProbeConfigError("workosProbe", "apiKey", typeof options.apiKey !== "string" ? `must be a string, got ${String(options.apiKey)}` : "must not be empty");
19
+ const headers = { authorization: `Bearer ${options.apiKey}` };
20
+ return {
21
+ name: options.name ?? workosDefaultName,
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.workosDefaultBaseUrl = workosDefaultBaseUrl;
35
+ exports.workosDefaultName = workosDefaultName;
36
+ exports.workosProbe = workosProbe;
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 workosDefaultBaseUrl = "https://api.workos.com";
7
+ /** Probe name when `name` is unset. */
8
+ declare const workosDefaultName = "workos";
9
+ /** Options for `workosProbe()`. */
10
+ interface WorkosProbeOptions extends ProbeOverrides {
11
+ /** The `WORKOS_API_KEY` of the environment (`sk_…`). */
12
+ readonly apiKey: string;
13
+ /** API host. Default `workosDefaultBaseUrl`. */
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}/organizations?limit=1` with `apiKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `apiKey` or an invalid `baseUrl`. */
19
+ declare function workosProbe(options: WorkosProbeOptions): Probe;
20
+ //# sourceMappingURL=mod.d.ts.map
21
+ //#endregion
22
+ export { WorkosProbeOptions, workosDefaultBaseUrl, workosDefaultName, workosProbe };
23
+ //# sourceMappingURL=mod.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.cts","names":[],"sources":["../src/mod.ts"],"sourcesContent":[],"mappings":";;;;;AAoCqC,cAfxB,oBAAA,GAewB,wBAAA;;AAA0B,cAblD,iBAAA,GAakD,QAAA;;UAV9C,kBAAA,SAA2B;;;;8BAId;;0BAEJ;;;iBAIV,WAAA,UAAqB,qBAAqB"}
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 workosDefaultBaseUrl = "https://api.workos.com";
7
+ /** Probe name when `name` is unset. */
8
+ declare const workosDefaultName = "workos";
9
+ /** Options for `workosProbe()`. */
10
+ interface WorkosProbeOptions extends ProbeOverrides {
11
+ /** The `WORKOS_API_KEY` of the environment (`sk_…`). */
12
+ readonly apiKey: string;
13
+ /** API host. Default `workosDefaultBaseUrl`. */
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}/organizations?limit=1` with `apiKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `apiKey` or an invalid `baseUrl`. */
19
+ declare function workosProbe(options: WorkosProbeOptions): Probe;
20
+ //# sourceMappingURL=mod.d.ts.map
21
+ //#endregion
22
+ export { WorkosProbeOptions, workosDefaultBaseUrl, workosDefaultName, workosProbe };
23
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","names":[],"sources":["../src/mod.ts"],"sourcesContent":[],"mappings":";;;;;AAoCqC,cAfxB,oBAAA,GAewB,wBAAA;;AAA0B,cAblD,iBAAA,GAakD,QAAA;;UAV9C,kBAAA,SAA2B;;;;8BAId;;0BAEJ;;;iBAIV,WAAA,UAAqB,qBAAqB"}
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 workosDefaultBaseUrl = "https://api.workos.com";
6
+ /** Probe name when `name` is unset. */
7
+ const workosDefaultName = "workos";
8
+ /** A probe that expects 2xx from `GET {baseUrl}/organizations?limit=1` with `apiKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `apiKey` or an invalid `baseUrl`. */
9
+ function workosProbe(options) {
10
+ const doFetch = options.fetch ?? globalThis.fetch;
11
+ const url = probeUrl({
12
+ probe: "workosProbe",
13
+ field: "baseUrl",
14
+ value: options.baseUrl ?? workosDefaultBaseUrl,
15
+ path: "/organizations?limit=1"
16
+ });
17
+ if (typeof options.apiKey !== "string" || options.apiKey.length === 0) throw new ProbeConfigError("workosProbe", "apiKey", typeof options.apiKey !== "string" ? `must be a string, got ${String(options.apiKey)}` : "must not be empty");
18
+ const headers = { authorization: `Bearer ${options.apiKey}` };
19
+ return {
20
+ name: options.name ?? workosDefaultName,
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 { workosDefaultBaseUrl, workosDefaultName, workosProbe };
34
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":["options: WorkosProbeOptions"],"sources":["../src/mod.ts"],"sourcesContent":["/**\n * WorkOS reachability probe for `@openstatus/health`, against `/organizations?limit=1`.\n *\n * ```ts\n * import { workosProbe } from \"@openstatus/health-workos\";\n *\n * const probe = workosProbe({ apiKey: env.WORKOS_API_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 workosDefaultBaseUrl = \"https://api.workos.com\";\n/** Probe name when `name` is unset. */\nexport const workosDefaultName = \"workos\";\n\n/** Options for `workosProbe()`. */\nexport interface WorkosProbeOptions extends ProbeOverrides {\n /** The `WORKOS_API_KEY` of the environment (`sk_…`). */\n readonly apiKey: string;\n /** API host. Default `workosDefaultBaseUrl`. */\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}/organizations?limit=1` with `apiKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `apiKey` or an invalid `baseUrl`. */\nexport function workosProbe(options: WorkosProbeOptions): Probe {\n const doFetch = options.fetch ?? globalThis.fetch;\n const url = probeUrl({\n probe: \"workosProbe\",\n field: \"baseUrl\",\n value: options.baseUrl ?? workosDefaultBaseUrl,\n path: \"/organizations?limit=1\",\n });\n if (typeof options.apiKey !== \"string\" || options.apiKey.length === 0) {\n throw new ProbeConfigError(\n \"workosProbe\",\n \"apiKey\",\n typeof options.apiKey !== \"string\"\n ? `must be a string, got ${String(options.apiKey)}`\n : \"must not be empty\",\n );\n }\n const headers = { authorization: `Bearer ${options.apiKey}` };\n return {\n name: options.name ?? workosDefaultName,\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,uBAAuB;;AAEpC,MAAa,oBAAoB;;AAajC,SAAgB,YAAYA,SAAoC;CAC9D,MAAM,UAAU,QAAQ,SAAS,WAAW;CAC5C,MAAM,MAAM,SAAS;EACnB,OAAO;EACP,OAAO;EACP,OAAO,QAAQ,WAAW;EAC1B,MAAM;CACP,EAAC;AACF,YAAW,QAAQ,WAAW,YAAY,QAAQ,OAAO,WAAW,EAClE,OAAM,IAAI,iBACR,eACA,iBACO,QAAQ,WAAW,YACrB,wBAAwB,OAAO,QAAQ,OAAO,CAAC,IAChD;CAGR,MAAM,UAAU,EAAE,gBAAgB,SAAS,QAAQ,OAAO,EAAG;AAC7D,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-workos",
3
+ "version": "0.1.4-dev.0",
4
+ "description": "WorkOS API probe for @openstatus/health",
5
+ "keywords": [
6
+ "openstatus",
7
+ "health",
8
+ "healthcheck",
9
+ "workos",
10
+ "auth",
11
+ "sso",
12
+ "authkit"
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/workos/"
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
+ }