@openstatus/health-stripe 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,75 @@
1
+ # @openstatus/health-stripe
2
+
3
+ [Stripe](https://stripe.com/) probe for
4
+ [`@openstatus/health`](https://jsr.io/@openstatus/health). Sends
5
+ `GET {baseUrl}/v1/balance` with your secret key as a bearer header, so it
6
+ proves both that the Stripe 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-stripe
11
+ npm install @openstatus/health @openstatus/health-stripe
12
+ ```
13
+
14
+ ```ts
15
+ import { createHealthHandler, readEnv } from "@openstatus/health";
16
+ import { stripeProbe } from "@openstatus/health-stripe";
17
+
18
+ const secretKey = readEnv("STRIPE_SECRET_KEY");
19
+
20
+ Deno.serve(
21
+ createHealthHandler({
22
+ probes: [
23
+ // the factory validates `secretKey` at construction, so pass a
24
+ // placeholder and let `skip` keep the unconfigured check from running.
25
+ stripeProbe({
26
+ secretKey: secretKey || "unconfigured",
27
+ skip: () => !secretKey,
28
+ }),
29
+ ],
30
+ }),
31
+ );
32
+ ```
33
+
34
+ `secretKey` is the `sk_live_…` / `sk_test_…` key, or a restricted key (`rk_…`)
35
+ granted read access to **Balance** — the least privilege that still
36
+ authenticates. Retrieving the balance is a read with no side effects and no
37
+ list to page, so the probe can run on every health request. `baseUrl` defaults
38
+ to `https://api.stripe.com` and takes the URL of a mock server such as
39
+ `stripe-mock`. Like every probe here, this one never reads the environment
40
+ itself — pass the values in, and use `skip` for environments where Stripe is
41
+ not configured.
42
+
43
+ ```ts
44
+ stripeProbe({
45
+ secretKey,
46
+ // optional overrides from the Probe contract
47
+ name: "billing",
48
+ critical: true,
49
+ timeoutMs: 2000,
50
+ skip: () => !secretKey,
51
+ });
52
+ ```
53
+
54
+ Non-critical by default: most requests do not touch Stripe, so an outage
55
+ degrades the report instead of taking the service out of rotation. Set
56
+ `critical: true` for a checkout or billing service that cannot serve without
57
+ it.
58
+
59
+ ## About openstatus
60
+
61
+ [openstatus](https://www.openstatus.dev/) is the open-source uptime monitoring
62
+ and status page platform. This package is part of
63
+ [`@openstatus/health`](https://github.com/openstatusHQ/health), the `/health`
64
+ endpoints behind openstatus's own services, extracted so any JavaScript server
65
+ can expose one. Point an
66
+ [openstatus monitor](https://www.openstatus.dev/docs/reference/http-monitor)
67
+ at the endpoint and assert on `status` in the body to be alerted on
68
+ `degraded` before it becomes `unhealthy`.
69
+
70
+ Source: [github.com/openstatusHQ/health](https://github.com/openstatusHQ/health).
71
+ Issues and PRs welcome.
72
+
73
+ ## License
74
+
75
+ [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 stripeDefaultBaseUrl = "https://api.stripe.com";
7
+ /** Probe name when `name` is unset. */
8
+ const stripeDefaultName = "stripe";
9
+ /** A probe that expects 2xx from `GET {baseUrl}/v1/balance` with `secretKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `secretKey` or an invalid `baseUrl`. */
10
+ function stripeProbe(options) {
11
+ const doFetch = options.fetch ?? globalThis.fetch;
12
+ const url = (0, __openstatus_health.probeUrl)({
13
+ probe: "stripeProbe",
14
+ field: "baseUrl",
15
+ value: options.baseUrl ?? stripeDefaultBaseUrl,
16
+ path: "/v1/balance"
17
+ });
18
+ if (typeof options.secretKey !== "string" || options.secretKey.length === 0) throw new __openstatus_health.ProbeConfigError("stripeProbe", "secretKey", typeof options.secretKey !== "string" ? `must be a string, got ${String(options.secretKey)}` : "must not be empty");
19
+ const headers = { authorization: `Bearer ${options.secretKey}` };
20
+ return {
21
+ name: options.name ?? stripeDefaultName,
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.stripeDefaultBaseUrl = stripeDefaultBaseUrl;
35
+ exports.stripeDefaultName = stripeDefaultName;
36
+ exports.stripeProbe = stripeProbe;
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 stripeDefaultBaseUrl = "https://api.stripe.com";
7
+ /** Probe name when `name` is unset. */
8
+ declare const stripeDefaultName = "stripe";
9
+ /** Options for `stripeProbe()`. */
10
+ interface StripeProbeOptions extends ProbeOverrides {
11
+ /** A secret or restricted API key with `balance` read access. */
12
+ readonly secretKey: string;
13
+ /** API host. Default `stripeDefaultBaseUrl`. */
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/balance` with `secretKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `secretKey` or an invalid `baseUrl`. */
19
+ declare function stripeProbe(options: StripeProbeOptions): Probe;
20
+ //# sourceMappingURL=mod.d.ts.map
21
+ //#endregion
22
+ export { StripeProbeOptions, stripeDefaultBaseUrl, stripeDefaultName, stripeProbe };
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 stripeDefaultBaseUrl = "https://api.stripe.com";
7
+ /** Probe name when `name` is unset. */
8
+ declare const stripeDefaultName = "stripe";
9
+ /** Options for `stripeProbe()`. */
10
+ interface StripeProbeOptions extends ProbeOverrides {
11
+ /** A secret or restricted API key with `balance` read access. */
12
+ readonly secretKey: string;
13
+ /** API host. Default `stripeDefaultBaseUrl`. */
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/balance` with `secretKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `secretKey` or an invalid `baseUrl`. */
19
+ declare function stripeProbe(options: StripeProbeOptions): Probe;
20
+ //# sourceMappingURL=mod.d.ts.map
21
+ //#endregion
22
+ export { StripeProbeOptions, stripeDefaultBaseUrl, stripeDefaultName, stripeProbe };
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 stripeDefaultBaseUrl = "https://api.stripe.com";
6
+ /** Probe name when `name` is unset. */
7
+ const stripeDefaultName = "stripe";
8
+ /** A probe that expects 2xx from `GET {baseUrl}/v1/balance` with `secretKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `secretKey` or an invalid `baseUrl`. */
9
+ function stripeProbe(options) {
10
+ const doFetch = options.fetch ?? globalThis.fetch;
11
+ const url = probeUrl({
12
+ probe: "stripeProbe",
13
+ field: "baseUrl",
14
+ value: options.baseUrl ?? stripeDefaultBaseUrl,
15
+ path: "/v1/balance"
16
+ });
17
+ if (typeof options.secretKey !== "string" || options.secretKey.length === 0) throw new ProbeConfigError("stripeProbe", "secretKey", typeof options.secretKey !== "string" ? `must be a string, got ${String(options.secretKey)}` : "must not be empty");
18
+ const headers = { authorization: `Bearer ${options.secretKey}` };
19
+ return {
20
+ name: options.name ?? stripeDefaultName,
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 { stripeDefaultBaseUrl, stripeDefaultName, stripeProbe };
34
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","names":["options: StripeProbeOptions"],"sources":["../src/mod.ts"],"sourcesContent":["/**\n * Stripe reachability probe for `@openstatus/health`, against `/v1/balance`.\n *\n * ```ts\n * import { stripeProbe } from \"@openstatus/health-stripe\";\n *\n * const probe = stripeProbe({ secretKey: env.STRIPE_SECRET_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 stripeDefaultBaseUrl = \"https://api.stripe.com\";\n/** Probe name when `name` is unset. */\nexport const stripeDefaultName = \"stripe\";\n\n/** Options for `stripeProbe()`. */\nexport interface StripeProbeOptions extends ProbeOverrides {\n /** A secret or restricted API key with `balance` read access. */\n readonly secretKey: string;\n /** API host. Default `stripeDefaultBaseUrl`. */\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/balance` with `secretKey` as a bearer token; non-critical by default. Throws `ProbeConfigError` for an empty `secretKey` or an invalid `baseUrl`. */\nexport function stripeProbe(options: StripeProbeOptions): Probe {\n const doFetch = options.fetch ?? globalThis.fetch;\n const url = probeUrl({\n probe: \"stripeProbe\",\n field: \"baseUrl\",\n value: options.baseUrl ?? stripeDefaultBaseUrl,\n path: \"/v1/balance\",\n });\n if (typeof options.secretKey !== \"string\" || options.secretKey.length === 0) {\n throw new ProbeConfigError(\n \"stripeProbe\",\n \"secretKey\",\n typeof options.secretKey !== \"string\"\n ? `must be a string, got ${String(options.secretKey)}`\n : \"must not be empty\",\n );\n }\n const headers = { authorization: `Bearer ${options.secretKey}` };\n return {\n name: options.name ?? stripeDefaultName,\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,cAAc,YAAY,QAAQ,UAAU,WAAW,EACxE,OAAM,IAAI,iBACR,eACA,oBACO,QAAQ,cAAc,YACxB,wBAAwB,OAAO,QAAQ,UAAU,CAAC,IACnD;CAGR,MAAM,UAAU,EAAE,gBAAgB,SAAS,QAAQ,UAAU,EAAG;AAChE,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,61 @@
1
+ {
2
+ "name": "@openstatus/health-stripe",
3
+ "version": "0.1.4-dev.0",
4
+ "description": "Stripe API probe for @openstatus/health",
5
+ "keywords": [
6
+ "openstatus",
7
+ "health",
8
+ "healthcheck",
9
+ "stripe",
10
+ "payments",
11
+ "billing"
12
+ ],
13
+ "license": "MIT",
14
+ "author": {
15
+ "name": "openstatus",
16
+ "url": "https://www.openstatus.dev/"
17
+ },
18
+ "homepage": "https://github.com/openstatusHQ/health",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/openstatusHQ/health.git",
22
+ "directory": "packages/stripe/"
23
+ },
24
+ "bugs": {
25
+ "url": "https://github.com/openstatusHQ/health/issues"
26
+ },
27
+ "type": "module",
28
+ "module": "./dist/mod.js",
29
+ "main": "./dist/mod.cjs",
30
+ "types": "./dist/mod.d.ts",
31
+ "exports": {
32
+ ".": {
33
+ "types": {
34
+ "import": "./dist/mod.d.ts",
35
+ "require": "./dist/mod.d.cts"
36
+ },
37
+ "import": "./dist/mod.js",
38
+ "require": "./dist/mod.cjs"
39
+ },
40
+ "./package.json": "./package.json"
41
+ },
42
+ "sideEffects": false,
43
+ "files": [
44
+ "dist/"
45
+ ],
46
+ "engines": {
47
+ "node": ">=22"
48
+ },
49
+ "peerDependencies": {
50
+ "@openstatus/health": "^0.1.4-dev.0"
51
+ },
52
+ "devDependencies": {
53
+ "tsdown": "^0.12.7",
54
+ "typescript": "^5.8.3"
55
+ },
56
+ "scripts": {
57
+ "build": "tsdown",
58
+ "prepack": "tsdown",
59
+ "test": "node --experimental-transform-types --test"
60
+ }
61
+ }