sermon-js 0.0.0-stage → 0.2.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.
Files changed (100) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +239 -2
  3. package/dist/api/index.cjs +174 -0
  4. package/dist/api/index.cjs.map +1 -0
  5. package/dist/api/index.d.cts +77 -0
  6. package/dist/api/index.d.ts +77 -0
  7. package/dist/api/index.js +171 -0
  8. package/dist/api/index.js.map +1 -0
  9. package/dist/chunk-2M4UBCDM.js +178 -0
  10. package/dist/chunk-2M4UBCDM.js.map +1 -0
  11. package/dist/chunk-AH372HLN.js +98 -0
  12. package/dist/chunk-AH372HLN.js.map +1 -0
  13. package/dist/chunk-APC2HVSI.js +154 -0
  14. package/dist/chunk-APC2HVSI.js.map +1 -0
  15. package/dist/chunk-D7BBJTYU.cjs +335 -0
  16. package/dist/chunk-D7BBJTYU.cjs.map +1 -0
  17. package/dist/chunk-ELV4ZU6G.cjs +51 -0
  18. package/dist/chunk-ELV4ZU6G.cjs.map +1 -0
  19. package/dist/chunk-EMP7XVKC.js +334 -0
  20. package/dist/chunk-EMP7XVKC.js.map +1 -0
  21. package/dist/chunk-I3346MUL.js +49 -0
  22. package/dist/chunk-I3346MUL.js.map +1 -0
  23. package/dist/chunk-NP3YYVRZ.cjs +163 -0
  24. package/dist/chunk-NP3YYVRZ.cjs.map +1 -0
  25. package/dist/chunk-PARE6EUZ.cjs +184 -0
  26. package/dist/chunk-PARE6EUZ.cjs.map +1 -0
  27. package/dist/chunk-XHXEKB3Q.cjs +241 -0
  28. package/dist/chunk-XHXEKB3Q.cjs.map +1 -0
  29. package/dist/chunk-XPXIDJUU.js +229 -0
  30. package/dist/chunk-XPXIDJUU.js.map +1 -0
  31. package/dist/chunk-ZI442ZA5.cjs +100 -0
  32. package/dist/chunk-ZI442ZA5.cjs.map +1 -0
  33. package/dist/config-BEbP-uLf.d.cts +125 -0
  34. package/dist/config-w1tm1bdu.d.ts +125 -0
  35. package/dist/generic-BJmlgtUM.d.ts +31 -0
  36. package/dist/generic-lmrGxMDC.d.cts +31 -0
  37. package/dist/index.cjs +407 -0
  38. package/dist/index.cjs.map +1 -0
  39. package/dist/index.d.cts +93 -0
  40. package/dist/index.d.ts +93 -0
  41. package/dist/index.js +330 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/presets/index.cjs +1012 -0
  44. package/dist/presets/index.cjs.map +1 -0
  45. package/dist/presets/index.d.cts +516 -0
  46. package/dist/presets/index.d.ts +516 -0
  47. package/dist/presets/index.js +971 -0
  48. package/dist/presets/index.js.map +1 -0
  49. package/dist/react/heroui/index.cjs +822 -0
  50. package/dist/react/heroui/index.cjs.map +1 -0
  51. package/dist/react/heroui/index.d.cts +122 -0
  52. package/dist/react/heroui/index.d.ts +122 -0
  53. package/dist/react/heroui/index.js +821 -0
  54. package/dist/react/heroui/index.js.map +1 -0
  55. package/dist/react/heroui/styles.css +11 -0
  56. package/dist/react/index.cjs +71 -0
  57. package/dist/react/index.cjs.map +1 -0
  58. package/dist/react/index.d.cts +53 -0
  59. package/dist/react/index.d.ts +53 -0
  60. package/dist/react/index.js +70 -0
  61. package/dist/react/index.js.map +1 -0
  62. package/dist/status-DsWzgb9Q.d.cts +146 -0
  63. package/dist/status-zd04ZQ98.d.ts +146 -0
  64. package/dist/store-DybhDphS.d.cts +77 -0
  65. package/dist/store-_GuzSP0z.d.ts +77 -0
  66. package/dist/stores/mongodb.cjs +99 -0
  67. package/dist/stores/mongodb.cjs.map +1 -0
  68. package/dist/stores/mongodb.d.cts +40 -0
  69. package/dist/stores/mongodb.d.ts +40 -0
  70. package/dist/stores/mongodb.js +97 -0
  71. package/dist/stores/mongodb.js.map +1 -0
  72. package/dist/stores/redis.cjs +23 -0
  73. package/dist/stores/redis.cjs.map +1 -0
  74. package/dist/stores/redis.d.cts +31 -0
  75. package/dist/stores/redis.d.ts +31 -0
  76. package/dist/stores/redis.js +21 -0
  77. package/dist/stores/redis.js.map +1 -0
  78. package/dist/stores/sql.cjs +164 -0
  79. package/dist/stores/sql.cjs.map +1 -0
  80. package/dist/stores/sql.d.cts +39 -0
  81. package/dist/stores/sql.d.ts +39 -0
  82. package/dist/stores/sql.js +162 -0
  83. package/dist/stores/sql.js.map +1 -0
  84. package/dist/stores/upstash.cjs +27 -0
  85. package/dist/stores/upstash.cjs.map +1 -0
  86. package/dist/stores/upstash.d.cts +19 -0
  87. package/dist/stores/upstash.d.ts +19 -0
  88. package/dist/stores/upstash.js +25 -0
  89. package/dist/stores/upstash.js.map +1 -0
  90. package/dist/testing/index.cjs +209 -0
  91. package/dist/testing/index.cjs.map +1 -0
  92. package/dist/testing/index.d.cts +66 -0
  93. package/dist/testing/index.d.ts +66 -0
  94. package/dist/testing/index.js +205 -0
  95. package/dist/testing/index.js.map +1 -0
  96. package/dist/tree-BXbXfjF1.d.cts +236 -0
  97. package/dist/tree-BXbXfjF1.d.ts +236 -0
  98. package/dist/types-CctvUAs2.d.cts +192 -0
  99. package/dist/types-CctvUAs2.d.ts +192 -0
  100. package/package.json +233 -3
@@ -0,0 +1,192 @@
1
+ /** The five statuses every service reports */
2
+ type Status = "up" | "degraded" | "down" | "sleeping" | "unconfigured";
3
+ /** What a check itself can report: "unconfigured" is decided by the library, never by a check */
4
+ type OutcomeStatus = Exclude<Status, "unconfigured">;
5
+ type ScoreLabel = "operational" | "degraded" | "outage" | "unknown";
6
+ /** Small labelled values shown as chips (balance, machine count, VM state…) */
7
+ type Metrics = Record<string, string | number>;
8
+ /** A consumable quota, rendered as a usage bar */
9
+ type Usage = {
10
+ label: string;
11
+ used: number;
12
+ limit: number;
13
+ unit?: string;
14
+ /** When the quota resets (ms epoch), if the provider says */
15
+ resetsAt?: number;
16
+ };
17
+ /** One machine/region of a multi-instance service, tracked individually */
18
+ type Instance = {
19
+ /** Stable across deploys (e.g. the region, suffixed when a region runs several machines) */
20
+ key: string;
21
+ region?: string;
22
+ /** Platform identifier of the machine/instance */
23
+ id?: string;
24
+ /** Raw platform state: started, suspended, RUNNING… */
25
+ state?: string;
26
+ status: OutcomeStatus;
27
+ latencyMs?: number;
28
+ httpStatus?: number;
29
+ error?: string;
30
+ };
31
+ /** What a check returns */
32
+ type CheckOutcome = {
33
+ status: OutcomeStatus;
34
+ /** Measured for you (wall time of the check) when omitted */
35
+ latencyMs?: number;
36
+ httpStatus?: number;
37
+ /** Shown publicly: secrets are redacted and long text is truncated */
38
+ error?: string;
39
+ metrics?: Metrics;
40
+ usage?: Usage[];
41
+ instances?: Instance[];
42
+ /** Set to false when the target was deliberately not touched (e.g. a sleeping machine) */
43
+ probed?: boolean;
44
+ };
45
+ /** `true`/nothing → up, `false` → down, or a full outcome */
46
+ type CheckReturn = CheckOutcome | boolean | void;
47
+ /** The stored result of one check run */
48
+ type CheckResult = Omit<CheckOutcome, "status" | "probed"> & {
49
+ key: string;
50
+ status: Status;
51
+ checkedAt: number;
52
+ probed: boolean;
53
+ };
54
+ type HttpInit = RequestInit & {
55
+ /** Extra statuses that mean "reachable and healthy" besides 2xx/3xx */
56
+ okStatuses?: number[];
57
+ };
58
+ type HttpResult = {
59
+ /** 2xx/3xx, or one of `okStatuses` */
60
+ ok: boolean;
61
+ /** Undefined when the request never got a response (network error, timeout) */
62
+ status?: number;
63
+ latencyMs: number;
64
+ text: string;
65
+ /** Parsed body, or undefined when it isn't JSON */
66
+ json: unknown;
67
+ headers?: Headers;
68
+ /** Ready-made outcome: 2xx/3xx up, 429 degraded, anything else down */
69
+ outcome: CheckOutcome;
70
+ };
71
+ type ProbeHelpers = {
72
+ /** Timed `fetch` that never throws */
73
+ http: (url: string, init?: HttpInit) => Promise<HttpResult>;
74
+ /** Times any async call (SDK, database, TCP…); a throw becomes a down outcome */
75
+ measure: (fn: () => Promise<CheckReturn>) => Promise<CheckOutcome>;
76
+ /** Merges several probes of the same service: worst status wins */
77
+ combine: (outcomes: CheckOutcome[]) => CheckOutcome;
78
+ };
79
+ /** Small key/value cache backed by the store, for checks that keep state between runs */
80
+ type CheckCache = {
81
+ get: (key: string) => Promise<string | null>;
82
+ set: (key: string, value: string, ttlMs: number) => Promise<void>;
83
+ };
84
+ type CheckContext<Secrets extends SecretsInput = SecretsInput> = ProbeHelpers & {
85
+ /** The secrets given to the service; every key is guaranteed non-empty */
86
+ secrets: {
87
+ [K in keyof Secrets]-?: string;
88
+ };
89
+ /** Aborted when the check's time budget is over */
90
+ signal: AbortSignal;
91
+ timeoutMs: number;
92
+ /** Latency above this turns "up" into "degraded" */
93
+ slowMs: number;
94
+ cache: CheckCache;
95
+ now: number;
96
+ };
97
+ type SecretsInput = Record<string, string | undefined>;
98
+ /** Options shared by every service (the five concerns, minus what the preset defines) */
99
+ type CommonOptions = {
100
+ /** How to call it */
101
+ name?: string;
102
+ description?: string;
103
+ /** Critical services weigh more in the score, and one being down means "outage" */
104
+ critical?: boolean;
105
+ /** Latency above this turns "up" into "degraded" (default 2000) */
106
+ slowMs?: number;
107
+ /** Hard cap for one check (default 10000) */
108
+ timeoutMs?: number;
109
+ };
110
+ /** Per-service statistics computed from history */
111
+ type InstanceStats = {
112
+ uptime24h: number | null;
113
+ p50: number | null;
114
+ samples24h: number;
115
+ };
116
+ type ServiceStats = {
117
+ /** Share of runs that were not "down", in percent */
118
+ uptime24h: number | null;
119
+ uptime7d: number | null;
120
+ p50: number | null;
121
+ p95: number | null;
122
+ samples24h: number;
123
+ /** Latency series over the last 24h, oldest first (for sparklines) */
124
+ latency: Array<number | null>;
125
+ lastFailure?: {
126
+ at: number;
127
+ status: Status;
128
+ error?: string;
129
+ };
130
+ instances?: Record<string, InstanceStats>;
131
+ };
132
+ type ServiceSnapshot = {
133
+ type: "service";
134
+ /** Derived, internal: only used for anchors, single-service runs and history routes */
135
+ key: string;
136
+ /** The preset kind: "custom", "generic.http", "fly.app"… */
137
+ kind: string;
138
+ name: string;
139
+ description?: string;
140
+ critical: boolean;
141
+ slowMs: number;
142
+ configured: boolean;
143
+ /** Which required secrets/fields are missing when not configured */
144
+ missing?: string[];
145
+ result?: CheckResult;
146
+ stats?: ServiceStats;
147
+ };
148
+ type GroupSnapshot = {
149
+ type: "group";
150
+ key: string;
151
+ title: string;
152
+ description?: string;
153
+ children: SnapshotNode[];
154
+ };
155
+ type SnapshotNode = GroupSnapshot | ServiceSnapshot;
156
+ type Trigger = "scheduled" | "manual";
157
+ type StatusSnapshot = {
158
+ schemaVersion: 1;
159
+ generatedAt: number;
160
+ /** Most recent check of any service */
161
+ lastCheckedAt: number | null;
162
+ /** Last run of every service, and how it was triggered */
163
+ lastRunAt: number | null;
164
+ lastRunTrigger: Trigger | null;
165
+ /** When the next full run is due, based on `interval` */
166
+ nextDueAt: number | null;
167
+ intervalMs: number;
168
+ /** How long history is kept */
169
+ retentionMs: number;
170
+ score: number | null;
171
+ label: ScoreLabel;
172
+ counts: Record<Status, number>;
173
+ tree: SnapshotNode[];
174
+ };
175
+ type HistoryRange = "24h" | "7d";
176
+ type HistoryBar = {
177
+ start: number;
178
+ /** Worst score in the bucket; null when no run happened */
179
+ score: number | null;
180
+ label: ScoreLabel;
181
+ runs: number;
182
+ /** Services that were degraded or down in the bucket ("down" wins) */
183
+ failing: Record<string, Status>;
184
+ };
185
+ type HistoryPayload = {
186
+ schemaVersion: 1;
187
+ range: HistoryRange;
188
+ bucketMs: number;
189
+ bars: HistoryBar[];
190
+ };
191
+
192
+ export type { CheckOutcome as C, GroupSnapshot as G, HistoryRange as H, Instance as I, Metrics as M, OutcomeStatus as O, ProbeHelpers as P, ServiceStats as S, Trigger as T, Usage as U, HistoryBar as a, HttpInit as b, HttpResult as c, CheckReturn as d, CheckCache as e, CheckContext as f, CheckResult as g, CommonOptions as h, HistoryPayload as i, InstanceStats as j, ScoreLabel as k, SecretsInput as l, ServiceSnapshot as m, SnapshotNode as n, Status as o, StatusSnapshot as p };
@@ -0,0 +1,192 @@
1
+ /** The five statuses every service reports */
2
+ type Status = "up" | "degraded" | "down" | "sleeping" | "unconfigured";
3
+ /** What a check itself can report: "unconfigured" is decided by the library, never by a check */
4
+ type OutcomeStatus = Exclude<Status, "unconfigured">;
5
+ type ScoreLabel = "operational" | "degraded" | "outage" | "unknown";
6
+ /** Small labelled values shown as chips (balance, machine count, VM state…) */
7
+ type Metrics = Record<string, string | number>;
8
+ /** A consumable quota, rendered as a usage bar */
9
+ type Usage = {
10
+ label: string;
11
+ used: number;
12
+ limit: number;
13
+ unit?: string;
14
+ /** When the quota resets (ms epoch), if the provider says */
15
+ resetsAt?: number;
16
+ };
17
+ /** One machine/region of a multi-instance service, tracked individually */
18
+ type Instance = {
19
+ /** Stable across deploys (e.g. the region, suffixed when a region runs several machines) */
20
+ key: string;
21
+ region?: string;
22
+ /** Platform identifier of the machine/instance */
23
+ id?: string;
24
+ /** Raw platform state: started, suspended, RUNNING… */
25
+ state?: string;
26
+ status: OutcomeStatus;
27
+ latencyMs?: number;
28
+ httpStatus?: number;
29
+ error?: string;
30
+ };
31
+ /** What a check returns */
32
+ type CheckOutcome = {
33
+ status: OutcomeStatus;
34
+ /** Measured for you (wall time of the check) when omitted */
35
+ latencyMs?: number;
36
+ httpStatus?: number;
37
+ /** Shown publicly: secrets are redacted and long text is truncated */
38
+ error?: string;
39
+ metrics?: Metrics;
40
+ usage?: Usage[];
41
+ instances?: Instance[];
42
+ /** Set to false when the target was deliberately not touched (e.g. a sleeping machine) */
43
+ probed?: boolean;
44
+ };
45
+ /** `true`/nothing → up, `false` → down, or a full outcome */
46
+ type CheckReturn = CheckOutcome | boolean | void;
47
+ /** The stored result of one check run */
48
+ type CheckResult = Omit<CheckOutcome, "status" | "probed"> & {
49
+ key: string;
50
+ status: Status;
51
+ checkedAt: number;
52
+ probed: boolean;
53
+ };
54
+ type HttpInit = RequestInit & {
55
+ /** Extra statuses that mean "reachable and healthy" besides 2xx/3xx */
56
+ okStatuses?: number[];
57
+ };
58
+ type HttpResult = {
59
+ /** 2xx/3xx, or one of `okStatuses` */
60
+ ok: boolean;
61
+ /** Undefined when the request never got a response (network error, timeout) */
62
+ status?: number;
63
+ latencyMs: number;
64
+ text: string;
65
+ /** Parsed body, or undefined when it isn't JSON */
66
+ json: unknown;
67
+ headers?: Headers;
68
+ /** Ready-made outcome: 2xx/3xx up, 429 degraded, anything else down */
69
+ outcome: CheckOutcome;
70
+ };
71
+ type ProbeHelpers = {
72
+ /** Timed `fetch` that never throws */
73
+ http: (url: string, init?: HttpInit) => Promise<HttpResult>;
74
+ /** Times any async call (SDK, database, TCP…); a throw becomes a down outcome */
75
+ measure: (fn: () => Promise<CheckReturn>) => Promise<CheckOutcome>;
76
+ /** Merges several probes of the same service: worst status wins */
77
+ combine: (outcomes: CheckOutcome[]) => CheckOutcome;
78
+ };
79
+ /** Small key/value cache backed by the store, for checks that keep state between runs */
80
+ type CheckCache = {
81
+ get: (key: string) => Promise<string | null>;
82
+ set: (key: string, value: string, ttlMs: number) => Promise<void>;
83
+ };
84
+ type CheckContext<Secrets extends SecretsInput = SecretsInput> = ProbeHelpers & {
85
+ /** The secrets given to the service; every key is guaranteed non-empty */
86
+ secrets: {
87
+ [K in keyof Secrets]-?: string;
88
+ };
89
+ /** Aborted when the check's time budget is over */
90
+ signal: AbortSignal;
91
+ timeoutMs: number;
92
+ /** Latency above this turns "up" into "degraded" */
93
+ slowMs: number;
94
+ cache: CheckCache;
95
+ now: number;
96
+ };
97
+ type SecretsInput = Record<string, string | undefined>;
98
+ /** Options shared by every service (the five concerns, minus what the preset defines) */
99
+ type CommonOptions = {
100
+ /** How to call it */
101
+ name?: string;
102
+ description?: string;
103
+ /** Critical services weigh more in the score, and one being down means "outage" */
104
+ critical?: boolean;
105
+ /** Latency above this turns "up" into "degraded" (default 2000) */
106
+ slowMs?: number;
107
+ /** Hard cap for one check (default 10000) */
108
+ timeoutMs?: number;
109
+ };
110
+ /** Per-service statistics computed from history */
111
+ type InstanceStats = {
112
+ uptime24h: number | null;
113
+ p50: number | null;
114
+ samples24h: number;
115
+ };
116
+ type ServiceStats = {
117
+ /** Share of runs that were not "down", in percent */
118
+ uptime24h: number | null;
119
+ uptime7d: number | null;
120
+ p50: number | null;
121
+ p95: number | null;
122
+ samples24h: number;
123
+ /** Latency series over the last 24h, oldest first (for sparklines) */
124
+ latency: Array<number | null>;
125
+ lastFailure?: {
126
+ at: number;
127
+ status: Status;
128
+ error?: string;
129
+ };
130
+ instances?: Record<string, InstanceStats>;
131
+ };
132
+ type ServiceSnapshot = {
133
+ type: "service";
134
+ /** Derived, internal: only used for anchors, single-service runs and history routes */
135
+ key: string;
136
+ /** The preset kind: "custom", "generic.http", "fly.app"… */
137
+ kind: string;
138
+ name: string;
139
+ description?: string;
140
+ critical: boolean;
141
+ slowMs: number;
142
+ configured: boolean;
143
+ /** Which required secrets/fields are missing when not configured */
144
+ missing?: string[];
145
+ result?: CheckResult;
146
+ stats?: ServiceStats;
147
+ };
148
+ type GroupSnapshot = {
149
+ type: "group";
150
+ key: string;
151
+ title: string;
152
+ description?: string;
153
+ children: SnapshotNode[];
154
+ };
155
+ type SnapshotNode = GroupSnapshot | ServiceSnapshot;
156
+ type Trigger = "scheduled" | "manual";
157
+ type StatusSnapshot = {
158
+ schemaVersion: 1;
159
+ generatedAt: number;
160
+ /** Most recent check of any service */
161
+ lastCheckedAt: number | null;
162
+ /** Last run of every service, and how it was triggered */
163
+ lastRunAt: number | null;
164
+ lastRunTrigger: Trigger | null;
165
+ /** When the next full run is due, based on `interval` */
166
+ nextDueAt: number | null;
167
+ intervalMs: number;
168
+ /** How long history is kept */
169
+ retentionMs: number;
170
+ score: number | null;
171
+ label: ScoreLabel;
172
+ counts: Record<Status, number>;
173
+ tree: SnapshotNode[];
174
+ };
175
+ type HistoryRange = "24h" | "7d";
176
+ type HistoryBar = {
177
+ start: number;
178
+ /** Worst score in the bucket; null when no run happened */
179
+ score: number | null;
180
+ label: ScoreLabel;
181
+ runs: number;
182
+ /** Services that were degraded or down in the bucket ("down" wins) */
183
+ failing: Record<string, Status>;
184
+ };
185
+ type HistoryPayload = {
186
+ schemaVersion: 1;
187
+ range: HistoryRange;
188
+ bucketMs: number;
189
+ bars: HistoryBar[];
190
+ };
191
+
192
+ export type { CheckOutcome as C, GroupSnapshot as G, HistoryRange as H, Instance as I, Metrics as M, OutcomeStatus as O, ProbeHelpers as P, ServiceStats as S, Trigger as T, Usage as U, HistoryBar as a, HttpInit as b, HttpResult as c, CheckReturn as d, CheckCache as e, CheckContext as f, CheckResult as g, CommonOptions as h, HistoryPayload as i, InstanceStats as j, ScoreLabel as k, SecretsInput as l, ServiceSnapshot as m, SnapshotNode as n, Status as o, StatusSnapshot as p };
package/package.json CHANGED
@@ -1,6 +1,236 @@
1
1
  {
2
2
  "name": "sermon-js",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.2.0",
4
+ "description": "Service monitor: build status pages fast. Typed checks and presets, sleep-safe probes, scoring, history, a host-agnostic API and a React UI kit.",
5
+ "license": "MIT",
6
+ "author": "BSide-Tech",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/bside-tech/sermon-js.git"
10
+ },
11
+ "homepage": "https://github.com/bside-tech/sermon-js#readme",
12
+ "bugs": "https://github.com/bside-tech/sermon-js/issues",
13
+ "type": "module",
14
+ "sideEffects": [
15
+ "**/*.css"
16
+ ],
17
+ "engines": {
18
+ "node": ">=20"
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "publishConfig": {
26
+ "access": "public"
27
+ },
28
+ "main": "./dist/index.cjs",
29
+ "module": "./dist/index.js",
30
+ "types": "./dist/index.d.ts",
31
+ "typesVersions": {
32
+ "*": {
33
+ "api": [
34
+ "./dist/api/index.d.cts"
35
+ ],
36
+ "presets": [
37
+ "./dist/presets/index.d.cts"
38
+ ],
39
+ "stores/upstash": [
40
+ "./dist/stores/upstash.d.cts"
41
+ ],
42
+ "stores/redis": [
43
+ "./dist/stores/redis.d.cts"
44
+ ],
45
+ "stores/sql": [
46
+ "./dist/stores/sql.d.cts"
47
+ ],
48
+ "stores/mongodb": [
49
+ "./dist/stores/mongodb.d.cts"
50
+ ],
51
+ "react": [
52
+ "./dist/react/index.d.cts"
53
+ ],
54
+ "react/heroui": [
55
+ "./dist/react/heroui/index.d.cts"
56
+ ],
57
+ "testing": [
58
+ "./dist/testing/index.d.cts"
59
+ ]
60
+ }
61
+ },
62
+ "exports": {
63
+ ".": {
64
+ "import": {
65
+ "types": "./dist/index.d.ts",
66
+ "default": "./dist/index.js"
67
+ },
68
+ "require": {
69
+ "types": "./dist/index.d.cts",
70
+ "default": "./dist/index.cjs"
71
+ }
72
+ },
73
+ "./api": {
74
+ "import": {
75
+ "types": "./dist/api/index.d.ts",
76
+ "default": "./dist/api/index.js"
77
+ },
78
+ "require": {
79
+ "types": "./dist/api/index.d.cts",
80
+ "default": "./dist/api/index.cjs"
81
+ }
82
+ },
83
+ "./presets": {
84
+ "import": {
85
+ "types": "./dist/presets/index.d.ts",
86
+ "default": "./dist/presets/index.js"
87
+ },
88
+ "require": {
89
+ "types": "./dist/presets/index.d.cts",
90
+ "default": "./dist/presets/index.cjs"
91
+ }
92
+ },
93
+ "./stores/upstash": {
94
+ "import": {
95
+ "types": "./dist/stores/upstash.d.ts",
96
+ "default": "./dist/stores/upstash.js"
97
+ },
98
+ "require": {
99
+ "types": "./dist/stores/upstash.d.cts",
100
+ "default": "./dist/stores/upstash.cjs"
101
+ }
102
+ },
103
+ "./stores/redis": {
104
+ "import": {
105
+ "types": "./dist/stores/redis.d.ts",
106
+ "default": "./dist/stores/redis.js"
107
+ },
108
+ "require": {
109
+ "types": "./dist/stores/redis.d.cts",
110
+ "default": "./dist/stores/redis.cjs"
111
+ }
112
+ },
113
+ "./stores/sql": {
114
+ "import": {
115
+ "types": "./dist/stores/sql.d.ts",
116
+ "default": "./dist/stores/sql.js"
117
+ },
118
+ "require": {
119
+ "types": "./dist/stores/sql.d.cts",
120
+ "default": "./dist/stores/sql.cjs"
121
+ }
122
+ },
123
+ "./stores/mongodb": {
124
+ "import": {
125
+ "types": "./dist/stores/mongodb.d.ts",
126
+ "default": "./dist/stores/mongodb.js"
127
+ },
128
+ "require": {
129
+ "types": "./dist/stores/mongodb.d.cts",
130
+ "default": "./dist/stores/mongodb.cjs"
131
+ }
132
+ },
133
+ "./react": {
134
+ "import": {
135
+ "types": "./dist/react/index.d.ts",
136
+ "default": "./dist/react/index.js"
137
+ },
138
+ "require": {
139
+ "types": "./dist/react/index.d.cts",
140
+ "default": "./dist/react/index.cjs"
141
+ }
142
+ },
143
+ "./react/heroui": {
144
+ "import": {
145
+ "types": "./dist/react/heroui/index.d.ts",
146
+ "default": "./dist/react/heroui/index.js"
147
+ },
148
+ "require": {
149
+ "types": "./dist/react/heroui/index.d.cts",
150
+ "default": "./dist/react/heroui/index.cjs"
151
+ }
152
+ },
153
+ "./react/heroui/styles.css": "./dist/react/heroui/styles.css",
154
+ "./testing": {
155
+ "import": {
156
+ "types": "./dist/testing/index.d.ts",
157
+ "default": "./dist/testing/index.js"
158
+ },
159
+ "require": {
160
+ "types": "./dist/testing/index.d.cts",
161
+ "default": "./dist/testing/index.cjs"
162
+ }
163
+ },
164
+ "./package.json": "./package.json"
165
+ },
166
+ "keywords": [
167
+ "status-page",
168
+ "uptime",
169
+ "monitoring",
170
+ "health-check",
171
+ "service-monitor"
172
+ ],
173
+ "devDependencies": {
174
+ "@changesets/cli": "^2.27.9",
175
+ "@edge-runtime/vm": "^5.0.0",
176
+ "@eslint/js": "^9.22.0",
177
+ "@heroui/react": "^3.2.6",
178
+ "@heroui/styles": "^3.2.6",
179
+ "@tanstack/react-query": "^5.104.2",
180
+ "@testing-library/react": "^16.3.3",
181
+ "@types/better-sqlite3": "^9.6.0",
182
+ "@types/node": "^22.18.6",
183
+ "@types/pg": "^8.23.1",
184
+ "@types/react": "^19.3.0",
185
+ "@types/react-dom": "^19.3.0",
186
+ "better-sqlite3": "^12.11.1",
187
+ "esbuild": "^0.28.2",
188
+ "eslint": "^9.22.0",
189
+ "eslint-plugin-react-hooks": "^7.1.1",
190
+ "globals": "^16.0.0",
191
+ "happy-dom": "^20.14.6",
192
+ "ioredis": "^6.0.0",
193
+ "mongodb": "^7.7.0",
194
+ "mysql2": "^3.24.5",
195
+ "pg": "^8.23.1",
196
+ "react": "^19.3.0",
197
+ "react-dom": "^19.3.0",
198
+ "tailwind-variants": "^3.3.1",
199
+ "tailwindcss": "^4.3.3",
200
+ "tsup": "^8.3.5",
201
+ "typescript": "^5.9.3",
202
+ "typescript-eslint": "^8.26.1",
203
+ "vitest": "^2.1.6"
204
+ },
205
+ "dependencies": {
206
+ "aws4fetch": "^1.0.20"
207
+ },
208
+ "peerDependencies": {
209
+ "@heroui/react": ">=3",
210
+ "@tanstack/react-query": ">=5",
211
+ "react": ">=18"
212
+ },
213
+ "peerDependenciesMeta": {
214
+ "react": {
215
+ "optional": true
216
+ },
217
+ "@tanstack/react-query": {
218
+ "optional": true
219
+ },
220
+ "@heroui/react": {
221
+ "optional": true
222
+ }
223
+ },
224
+ "scripts": {
225
+ "build": "tsup",
226
+ "dev": "tsup --watch",
227
+ "typecheck": "tsc --noEmit",
228
+ "lint": "eslint .",
229
+ "test": "vitest --run --typecheck",
230
+ "test:watch": "vitest",
231
+ "changeset": "changeset",
232
+ "release": "node scripts/assert-versioned.mjs && pnpm build && changeset publish",
233
+ "prebuild": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
234
+ "version": "changeset version"
235
+ }
6
236
  }