sermon-js 0.1.0 → 0.3.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 (52) hide show
  1. package/README.md +2 -1
  2. package/dist/api/index.d.cts +4 -4
  3. package/dist/api/index.d.ts +4 -4
  4. package/dist/{chunk-PARE6EUZ.cjs → chunk-NZTKXXW2.cjs} +7 -3
  5. package/dist/chunk-NZTKXXW2.cjs.map +1 -0
  6. package/dist/{chunk-2M4UBCDM.js → chunk-R7BDAQOM.js} +7 -3
  7. package/dist/chunk-R7BDAQOM.js.map +1 -0
  8. package/dist/{config-BEbP-uLf.d.cts → config-gro29syt.d.cts} +1 -1
  9. package/dist/{config-w1tm1bdu.d.ts → config-iY18j9IA.d.ts} +1 -1
  10. package/dist/{generic-lmrGxMDC.d.cts → generic-BUiaKpNp.d.cts} +2 -2
  11. package/dist/{generic-BJmlgtUM.d.ts → generic-CV2O4aNH.d.ts} +2 -2
  12. package/dist/index.cjs +6 -6
  13. package/dist/index.d.cts +8 -8
  14. package/dist/index.d.ts +8 -8
  15. package/dist/index.js +2 -2
  16. package/dist/presets/index.cjs +552 -47
  17. package/dist/presets/index.cjs.map +1 -1
  18. package/dist/presets/index.d.cts +261 -13
  19. package/dist/presets/index.d.ts +261 -13
  20. package/dist/presets/index.js +542 -48
  21. package/dist/presets/index.js.map +1 -1
  22. package/dist/react/heroui/index.cjs +27 -18
  23. package/dist/react/heroui/index.cjs.map +1 -1
  24. package/dist/react/heroui/index.d.cts +7 -2
  25. package/dist/react/heroui/index.d.ts +7 -2
  26. package/dist/react/heroui/index.js +13 -4
  27. package/dist/react/heroui/index.js.map +1 -1
  28. package/dist/react/index.d.cts +2 -2
  29. package/dist/react/index.d.ts +2 -2
  30. package/dist/{status-DsWzgb9Q.d.cts → status-BExBb08T.d.cts} +3 -3
  31. package/dist/{status-zd04ZQ98.d.ts → status-DmRhwvVC.d.ts} +3 -3
  32. package/dist/{store-_GuzSP0z.d.ts → store-BfKP7CjW.d.ts} +1 -1
  33. package/dist/{store-DybhDphS.d.cts → store-CAIB7Esp.d.cts} +1 -1
  34. package/dist/stores/mongodb.d.cts +2 -2
  35. package/dist/stores/mongodb.d.ts +2 -2
  36. package/dist/stores/redis.d.cts +2 -2
  37. package/dist/stores/redis.d.ts +2 -2
  38. package/dist/stores/sql.d.cts +2 -2
  39. package/dist/stores/sql.d.ts +2 -2
  40. package/dist/stores/upstash.d.cts +2 -2
  41. package/dist/stores/upstash.d.ts +2 -2
  42. package/dist/testing/index.cjs +3 -3
  43. package/dist/testing/index.d.cts +3 -3
  44. package/dist/testing/index.d.ts +3 -3
  45. package/dist/testing/index.js +1 -1
  46. package/dist/{tree-BXbXfjF1.d.cts → tree-J3riUyI9.d.cts} +9 -0
  47. package/dist/{tree-BXbXfjF1.d.ts → tree-J3riUyI9.d.ts} +9 -0
  48. package/dist/{types-CctvUAs2.d.cts → types-BVa6vIKk.d.cts} +9 -0
  49. package/dist/{types-CctvUAs2.d.ts → types-BVa6vIKk.d.ts} +9 -0
  50. package/package.json +1 -1
  51. package/dist/chunk-2M4UBCDM.js.map +0 -1
  52. package/dist/chunk-PARE6EUZ.cjs.map +0 -1
@@ -1,6 +1,6 @@
1
- export { G as GenericHttpOptions, g as generic } from '../generic-lmrGxMDC.cjs';
2
- import { b as PresetOptions, S as ServiceDefinition } from '../config-BEbP-uLf.cjs';
3
- import { P as ProbeHelpers, h as CommonOptions } from '../types-CctvUAs2.cjs';
1
+ export { G as GenericHttpOptions, g as generic } from '../generic-BUiaKpNp.cjs';
2
+ import { b as PresetOptions, S as ServiceDefinition } from '../config-gro29syt.cjs';
3
+ import { P as ProbeHelpers, h as CommonOptions } from '../types-BVa6vIKk.cjs';
4
4
 
5
5
  type FlyAppOptions = PresetOptions & {
6
6
  /** The Fly app name, e.g. "my-api" */
@@ -108,10 +108,71 @@ type S3BucketOptions = PresetOptions & {
108
108
  region?: string;
109
109
  secrets: AwsSecrets;
110
110
  };
111
+ type BedrockOptions = PresetOptions & {
112
+ /** AWS region of the Bedrock runtime, e.g. "eu-west-1" */
113
+ region: string | undefined;
114
+ /**
115
+ * The models you invoke, as the runtime expects them: a model ID or an inference profile
116
+ * ID ("eu.anthropic.claude-haiku-4-5-20251001-v1:0"). Each one is reported on its own row.
117
+ */
118
+ models: string[];
119
+ /** A Bedrock API key (`bearerToken`), or an access key pair */
120
+ secrets: {
121
+ bearerToken?: string | undefined;
122
+ accessKeyId?: string | undefined;
123
+ secretAccessKey?: string | undefined;
124
+ };
125
+ };
126
+ /**
127
+ * Amazon Bedrock. Invokes each model in `models` with a one-token request (the runtime has
128
+ * no free call that proves a model can be invoked).
129
+ * - up: every model answers
130
+ * - degraded: some models fail, or one is throttled (HTTP 429)
131
+ * - down: every model fails (wrong credentials, no access, wrong region)
132
+ *
133
+ * Reports one `instances` row per model. Authenticates with a Bedrock API key when
134
+ * `secrets.bearerToken` is given, otherwise signs with the access key pair (SigV4).
135
+ */
136
+ declare function bedrock(options: BedrockOptions): ServiceDefinition;
111
137
  /** Presets for AWS and S3-compatible storage */
112
138
  declare const aws: {
113
139
  credentials: (options: AwsCredentialsOptions) => ServiceDefinition;
114
140
  s3Bucket: (options: S3BucketOptions) => ServiceDefinition;
141
+ bedrock: typeof bedrock;
142
+ };
143
+
144
+ type NeonProjectOptions = PresetOptions & {
145
+ projectId: string | undefined;
146
+ /** A Neon API key (account, organization or project-scoped) */
147
+ secrets: {
148
+ apiKey: string | undefined;
149
+ };
150
+ /**
151
+ * Runs one statement with the driver you already use, e.g. `(sql) => pool.query(sql)`.
152
+ * `select 1` is only sent while the compute is active, so a check never wakes the database.
153
+ */
154
+ query?: (sql: string) => Promise<unknown>;
155
+ /**
156
+ * The compute `query` connects to: the `ep-…` part of the connection host.
157
+ * Default: the read-write compute of the default branch.
158
+ */
159
+ endpoint?: string;
160
+ track?: {
161
+ /** Your plan's compute allowance for the billing period, in CU-hours: adds a usage bar */
162
+ compute?: {
163
+ maxHours: number;
164
+ warnAbovePct?: number;
165
+ };
166
+ /** Your plan's storage allowance in GB: adds a usage bar (sum of the branches' logical sizes) */
167
+ storage?: {
168
+ maxGb: number;
169
+ warnAbovePct?: number;
170
+ };
171
+ };
172
+ };
173
+ /** Presets for Neon */
174
+ declare const neon: {
175
+ project: (options: NeonProjectOptions) => ServiceDefinition;
115
176
  };
116
177
 
117
178
  type MongoDatabase = {
@@ -150,13 +211,28 @@ type RedisPingOptions = PresetOptions & {
150
211
  declare const redis: {
151
212
  ping: (options: RedisPingOptions) => ServiceDefinition;
152
213
  };
214
+ type PostgresPingOptions = PresetOptions & {
215
+ /**
216
+ * Runs one statement with the driver you already use (pg, postgres.js, Neon…). When
217
+ * undefined the service is "not configured".
218
+ */
219
+ query: ((sql: string) => Promise<unknown>) | undefined;
220
+ /** Optional: the connection string, only so it is redacted from public errors */
221
+ secrets?: {
222
+ url?: string;
223
+ };
224
+ };
225
+ /** Presets for PostgreSQL servers reached with a client library */
226
+ declare const postgres: {
227
+ ping: (options: PostgresPingOptions) => ServiceDefinition;
228
+ };
153
229
 
154
- type ApiKey = {
230
+ type ApiKey$1 = {
155
231
  secrets: {
156
232
  apiKey: string | undefined;
157
233
  };
158
234
  };
159
- type DeepgramOptions = PresetOptions & ApiKey & {
235
+ type DeepgramOptions = PresetOptions & ApiKey$1 & {
160
236
  track?: {
161
237
  /** Warn when the prepaid balance drops below this amount (default 20). `false` skips the balance. */
162
238
  balance?: {
@@ -174,14 +250,14 @@ type DeepgramOptions = PresetOptions & ApiKey & {
174
250
  */
175
251
  declare const deepgram: (options: DeepgramOptions) => ServiceDefinition;
176
252
  /** Gladia. Lists live sessions (limit 1). up when the key works; down when rejected. */
177
- declare const gladia: (options: CommonOptions & ApiKey) => ServiceDefinition;
178
- type SpeechmaticsOptions = PresetOptions & ApiKey & {
253
+ declare const gladia: (options: CommonOptions & ApiKey$1) => ServiceDefinition;
254
+ type SpeechmaticsOptions = PresetOptions & ApiKey$1 & {
179
255
  /** API base URL, e.g. the EU endpoint (default "https://asr.api.speechmatics.com") */
180
256
  baseUrl?: string;
181
257
  };
182
258
  /** Speechmatics. Lists batch jobs (limit 1), which validates the API key. */
183
259
  declare const speechmatics: (options: SpeechmaticsOptions) => ServiceDefinition;
184
- type OpenAIOptions = PresetOptions & ApiKey & {
260
+ type OpenAIOptions = PresetOptions & ApiKey$1 & {
185
261
  /** Sent as the `OpenAI-Organization` header */
186
262
  organization?: string;
187
263
  track?: {
@@ -194,12 +270,48 @@ type OpenAIOptions = PresetOptions & ApiKey & {
194
270
  * It proves the key works; it can't see billing problems, which only show on real requests.
195
271
  */
196
272
  declare const openai: (options: OpenAIOptions) => ServiceDefinition;
197
- /** Anthropic. Lists models (limit 1). up when the key works; down when rejected. */
198
- declare const anthropic: (options: CommonOptions & ApiKey) => ServiceDefinition;
273
+ type AnthropicOptions = PresetOptions & ApiKey$1 & {
274
+ track?: {
275
+ /**
276
+ * The models you depend on (IDs or aliases, e.g. "claude-sonnet-4-6"). Each one is
277
+ * reported on its own row. Without a list, only the key is validated.
278
+ */
279
+ models?: string[];
280
+ };
281
+ };
282
+ /**
283
+ * Anthropic. Reads each model in `track.models` (free, no tokens), or lists models when
284
+ * there is no list.
285
+ * - up: the key works and every listed model is available to it
286
+ * - degraded: some models are missing or retired, or the API is rate limited or overloaded
287
+ * - down: the API rejects the key, errors, or none of the listed models is available
288
+ *
289
+ * Reports one `instances` row per model, so each keeps its own uptime and response time.
290
+ * It proves a model exists for this key; it can't see capacity problems on real requests.
291
+ */
292
+ declare const anthropic: (options: AnthropicOptions) => ServiceDefinition;
199
293
  /** Google Gemini. Lists models (page size 1). */
200
- declare const gemini: (options: CommonOptions & ApiKey) => ServiceDefinition;
294
+ declare const gemini: (options: CommonOptions & ApiKey$1) => ServiceDefinition;
201
295
  /** CAMB.AI. Lists source languages. */
202
- declare const cambai: (options: CommonOptions & ApiKey) => ServiceDefinition;
296
+ declare const cambai: (options: CommonOptions & ApiKey$1) => ServiceDefinition;
297
+ type ElevenLabsOptions = PresetOptions & ApiKey$1 & {
298
+ track?: {
299
+ /** Warn when less than this share of the period's credits is left (default 10) */
300
+ quota?: {
301
+ warnBelowPct?: number;
302
+ };
303
+ };
304
+ };
305
+ /**
306
+ * ElevenLabs. Reads the subscription, which validates the API key.
307
+ * - up: the key works. A key without the user scope is refused with `missing_permissions`,
308
+ * which still proves it is valid.
309
+ * - degraded: less than `track.quota.warnBelowPct` of the credits left
310
+ * - down: the API rejects the key or errors
311
+ *
312
+ * Reports a `usage` bar (credits used this period, with the reset time) and `metrics.tier`.
313
+ */
314
+ declare const elevenlabs: (options: ElevenLabsOptions) => ServiceDefinition;
203
315
 
204
316
  type DeepLOptions = PresetOptions & {
205
317
  secrets: {
@@ -377,6 +489,40 @@ type StatuspageOptions = PresetOptions & {
377
489
  * The provider's own description becomes the error text.
378
490
  */
379
491
  declare const statuspage: (options: StatuspageOptions) => ServiceDefinition;
492
+ type ResendOptions = PresetOptions & {
493
+ secrets: {
494
+ apiKey: string | undefined;
495
+ };
496
+ };
497
+ /**
498
+ * Resend. Lists domains, which validates the API key.
499
+ * - up: the key works. A sending-only key is refused with `restricted_api_key`, which still
500
+ * proves it is valid.
501
+ * - degraded: domains exist, but none is verified
502
+ * - down: the API rejects the key or errors
503
+ *
504
+ * Reports `metrics.domains` and `metrics.verified` for full-access keys.
505
+ */
506
+ declare const resend: (options: ResendOptions) => ServiceDefinition;
507
+ type MeilisearchOptions = PresetOptions & {
508
+ /** The server, e.g. "https://search.example.com" */
509
+ host: string | undefined;
510
+ /** Also require this index, and report its document count */
511
+ index?: string;
512
+ secrets: {
513
+ apiKey: string | undefined;
514
+ };
515
+ };
516
+ /**
517
+ * Meilisearch. Reads `/health`, then the index (or the list of indexes), which validates the key.
518
+ * - up: the server is available and the key works
519
+ * - degraded: the index does not exist
520
+ * - down: the server is unavailable, or rejects the key
521
+ *
522
+ * Reports `metrics.documents`, and `metrics.indexing` while a batch is running, when the key
523
+ * may read statistics; scoped keys often may not, and that is not held against them.
524
+ */
525
+ declare const meilisearch: (options: MeilisearchOptions) => ServiceDefinition;
380
526
 
381
527
  type PusherOptions = PresetOptions & {
382
528
  appId: string | undefined;
@@ -424,4 +570,106 @@ declare function signPusherRequest({ appId, key, secret, path, params, timestamp
424
570
  */
425
571
  declare const pusher: (options: PusherOptions) => ServiceDefinition;
426
572
 
427
- export { type AttendeeOptions, type AwsCredentialsOptions, type AxiomOptions, type AzureTranslatorOptions, type CloudflareStreamOptions, type DeepLOptions, type DeepgramOptions, type FlyAppOptions, type GcpInstanceOptions, type GitHubOptions, type GoogleServiceAccount, type GoogleTranslateOptions, type MailerSendOptions, type MongoPingOptions, type MuxOptions, type OpenAIOptions, type PusherOptions, type RedisPingOptions, type RevolutOptions, type S3BucketOptions, type SpeechmaticsOptions, type StatuspageOptions, type UpstashRedisOptions, anthropic, attendee, aws, axiom, azureTranslator, cambai, clearGoogleTokens, cloudflareStream, crashReason, deepgram, deepl, fly, gcp, gemini, github, gladia, googleServiceAccountToken, googleTranslate, mailersend, mongodb, mux, openai, parseServiceAccount, pusher, redis, revolut, signGoogleAssertion, signPusherRequest, speechmatics, statuspage, upstashRedis };
573
+ type VercelAiGatewayOptions = PresetOptions & {
574
+ secrets: {
575
+ apiKey: string | undefined;
576
+ };
577
+ track?: {
578
+ /** Warn when the credit balance drops below this amount in USD (default 5). `false` skips the balance. */
579
+ credits?: {
580
+ warnBelow?: number;
581
+ } | false;
582
+ };
583
+ };
584
+ type VercelBlobOptions = PresetOptions & {
585
+ secrets: {
586
+ token: string | undefined;
587
+ };
588
+ };
589
+ /** Presets for Vercel products */
590
+ declare const vercel: {
591
+ aiGateway: (options: VercelAiGatewayOptions) => ServiceDefinition;
592
+ blob: (options: VercelBlobOptions) => ServiceDefinition;
593
+ };
594
+
595
+ type StripeOptions = PresetOptions & {
596
+ /** A secret or restricted key. Restricted keys need read access to what you track. */
597
+ secrets: {
598
+ apiKey: string | undefined;
599
+ };
600
+ track?: {
601
+ /** Warn when a live account can't take charges or payouts, or has overdue requirements (default true) */
602
+ account?: boolean;
603
+ /** Report each webhook endpoint, and events Stripe could not deliver in the last 24 h (default true) */
604
+ webhooks?: boolean;
605
+ /** Count disputes awaiting your response (default true) */
606
+ disputes?: boolean;
607
+ };
608
+ };
609
+ /**
610
+ * Stripe. Reads the balance, which validates the key, then what `track` asks for. All calls
611
+ * are free and read-only.
612
+ * - up: the key works
613
+ * - degraded: a webhook endpoint is disabled, Stripe could not deliver events in the last
614
+ * 24 h, or a live account can't take charges or payouts or has overdue requirements
615
+ * - down: the API rejects the key or errors
616
+ *
617
+ * Reports `metrics.mode` (live/test), `metrics.available`, `metrics.pending`,
618
+ * `metrics.undelivered24h`, `metrics.openDisputes`, and one `instances` row per webhook
619
+ * endpoint. What a restricted key may not read is left out, never counted as a failure.
620
+ */
621
+ declare const stripe: (options: StripeOptions) => ServiceDefinition;
622
+
623
+ type ApiKey = {
624
+ secrets: {
625
+ apiKey: string | undefined;
626
+ };
627
+ };
628
+ /**
629
+ * Exa. Sends an empty search, which Exa refuses for validation once the key is accepted:
630
+ * nothing is searched or billed.
631
+ * - up: the key is accepted
632
+ * - degraded: rate limited, or out of credits (HTTP 402)
633
+ * - down: the API rejects the key or errors
634
+ */
635
+ declare const exa: (options: CommonOptions & ApiKey) => ServiceDefinition;
636
+ /**
637
+ * Nimble. Sends an empty search, which Nimble refuses for validation once the key is
638
+ * accepted: nothing is searched or billed.
639
+ * - up: the key is accepted
640
+ * - degraded: rate limited, or out of credits (HTTP 402)
641
+ * - down: the API rejects the key or errors
642
+ */
643
+ declare const nimble: (options: CommonOptions & ApiKey) => ServiceDefinition;
644
+ type TavilyOptions = PresetOptions & ApiKey & {
645
+ track?: {
646
+ /** Warn when this share of the credits is used (default 90) */
647
+ quota?: {
648
+ warnAbovePct?: number;
649
+ };
650
+ };
651
+ };
652
+ /**
653
+ * Tavily. Reads `/usage`, which validates the API key.
654
+ * - up: the key works
655
+ * - degraded: `track.quota.warnAbovePct` of the credits are used
656
+ * - down: the API rejects the key or errors
657
+ *
658
+ * Reports a `usage` bar (the key's own limit when it has one, otherwise the plan's) and
659
+ * `metrics.plan`.
660
+ */
661
+ declare const tavily: (options: TavilyOptions) => ServiceDefinition;
662
+ type EmeliaOptions = PresetOptions & ApiKey & {
663
+ /** API base URL (default "https://api.emelia.io") */
664
+ baseUrl?: string;
665
+ };
666
+ /**
667
+ * Emelia. Sends an empty email-finder request, which Emelia refuses for validation once the
668
+ * key is accepted: nothing is looked up or billed.
669
+ * - up: the key is accepted
670
+ * - degraded: rate limited, or out of credits (HTTP 402)
671
+ * - down: the API rejects the key or errors
672
+ */
673
+ declare const emelia: (options: EmeliaOptions) => ServiceDefinition;
674
+
675
+ export { type AnthropicOptions, type AttendeeOptions, type AwsCredentialsOptions, type AxiomOptions, type AzureTranslatorOptions, type BedrockOptions, type CloudflareStreamOptions, type DeepLOptions, type DeepgramOptions, type ElevenLabsOptions, type EmeliaOptions, type FlyAppOptions, type GcpInstanceOptions, type GitHubOptions, type GoogleServiceAccount, type GoogleTranslateOptions, type MailerSendOptions, type MeilisearchOptions, type MongoPingOptions, type MuxOptions, type NeonProjectOptions, type OpenAIOptions, type PostgresPingOptions, type PusherOptions, type RedisPingOptions, type ResendOptions, type RevolutOptions, type S3BucketOptions, type SpeechmaticsOptions, type StatuspageOptions, type StripeOptions, type TavilyOptions, type UpstashRedisOptions, type VercelAiGatewayOptions, type VercelBlobOptions, anthropic, attendee, aws, axiom, azureTranslator, cambai, clearGoogleTokens, cloudflareStream, crashReason, deepgram, deepl, elevenlabs, emelia, exa, fly, gcp, gemini, github, gladia, googleServiceAccountToken, googleTranslate, mailersend, meilisearch, mongodb, mux, neon, nimble, openai, parseServiceAccount, postgres, pusher, redis, resend, revolut, signGoogleAssertion, signPusherRequest, speechmatics, statuspage, stripe, tavily, upstashRedis, vercel };
@@ -1,6 +1,6 @@
1
- export { G as GenericHttpOptions, g as generic } from '../generic-BJmlgtUM.js';
2
- import { b as PresetOptions, S as ServiceDefinition } from '../config-w1tm1bdu.js';
3
- import { P as ProbeHelpers, h as CommonOptions } from '../types-CctvUAs2.js';
1
+ export { G as GenericHttpOptions, g as generic } from '../generic-CV2O4aNH.js';
2
+ import { b as PresetOptions, S as ServiceDefinition } from '../config-iY18j9IA.js';
3
+ import { P as ProbeHelpers, h as CommonOptions } from '../types-BVa6vIKk.js';
4
4
 
5
5
  type FlyAppOptions = PresetOptions & {
6
6
  /** The Fly app name, e.g. "my-api" */
@@ -108,10 +108,71 @@ type S3BucketOptions = PresetOptions & {
108
108
  region?: string;
109
109
  secrets: AwsSecrets;
110
110
  };
111
+ type BedrockOptions = PresetOptions & {
112
+ /** AWS region of the Bedrock runtime, e.g. "eu-west-1" */
113
+ region: string | undefined;
114
+ /**
115
+ * The models you invoke, as the runtime expects them: a model ID or an inference profile
116
+ * ID ("eu.anthropic.claude-haiku-4-5-20251001-v1:0"). Each one is reported on its own row.
117
+ */
118
+ models: string[];
119
+ /** A Bedrock API key (`bearerToken`), or an access key pair */
120
+ secrets: {
121
+ bearerToken?: string | undefined;
122
+ accessKeyId?: string | undefined;
123
+ secretAccessKey?: string | undefined;
124
+ };
125
+ };
126
+ /**
127
+ * Amazon Bedrock. Invokes each model in `models` with a one-token request (the runtime has
128
+ * no free call that proves a model can be invoked).
129
+ * - up: every model answers
130
+ * - degraded: some models fail, or one is throttled (HTTP 429)
131
+ * - down: every model fails (wrong credentials, no access, wrong region)
132
+ *
133
+ * Reports one `instances` row per model. Authenticates with a Bedrock API key when
134
+ * `secrets.bearerToken` is given, otherwise signs with the access key pair (SigV4).
135
+ */
136
+ declare function bedrock(options: BedrockOptions): ServiceDefinition;
111
137
  /** Presets for AWS and S3-compatible storage */
112
138
  declare const aws: {
113
139
  credentials: (options: AwsCredentialsOptions) => ServiceDefinition;
114
140
  s3Bucket: (options: S3BucketOptions) => ServiceDefinition;
141
+ bedrock: typeof bedrock;
142
+ };
143
+
144
+ type NeonProjectOptions = PresetOptions & {
145
+ projectId: string | undefined;
146
+ /** A Neon API key (account, organization or project-scoped) */
147
+ secrets: {
148
+ apiKey: string | undefined;
149
+ };
150
+ /**
151
+ * Runs one statement with the driver you already use, e.g. `(sql) => pool.query(sql)`.
152
+ * `select 1` is only sent while the compute is active, so a check never wakes the database.
153
+ */
154
+ query?: (sql: string) => Promise<unknown>;
155
+ /**
156
+ * The compute `query` connects to: the `ep-…` part of the connection host.
157
+ * Default: the read-write compute of the default branch.
158
+ */
159
+ endpoint?: string;
160
+ track?: {
161
+ /** Your plan's compute allowance for the billing period, in CU-hours: adds a usage bar */
162
+ compute?: {
163
+ maxHours: number;
164
+ warnAbovePct?: number;
165
+ };
166
+ /** Your plan's storage allowance in GB: adds a usage bar (sum of the branches' logical sizes) */
167
+ storage?: {
168
+ maxGb: number;
169
+ warnAbovePct?: number;
170
+ };
171
+ };
172
+ };
173
+ /** Presets for Neon */
174
+ declare const neon: {
175
+ project: (options: NeonProjectOptions) => ServiceDefinition;
115
176
  };
116
177
 
117
178
  type MongoDatabase = {
@@ -150,13 +211,28 @@ type RedisPingOptions = PresetOptions & {
150
211
  declare const redis: {
151
212
  ping: (options: RedisPingOptions) => ServiceDefinition;
152
213
  };
214
+ type PostgresPingOptions = PresetOptions & {
215
+ /**
216
+ * Runs one statement with the driver you already use (pg, postgres.js, Neon…). When
217
+ * undefined the service is "not configured".
218
+ */
219
+ query: ((sql: string) => Promise<unknown>) | undefined;
220
+ /** Optional: the connection string, only so it is redacted from public errors */
221
+ secrets?: {
222
+ url?: string;
223
+ };
224
+ };
225
+ /** Presets for PostgreSQL servers reached with a client library */
226
+ declare const postgres: {
227
+ ping: (options: PostgresPingOptions) => ServiceDefinition;
228
+ };
153
229
 
154
- type ApiKey = {
230
+ type ApiKey$1 = {
155
231
  secrets: {
156
232
  apiKey: string | undefined;
157
233
  };
158
234
  };
159
- type DeepgramOptions = PresetOptions & ApiKey & {
235
+ type DeepgramOptions = PresetOptions & ApiKey$1 & {
160
236
  track?: {
161
237
  /** Warn when the prepaid balance drops below this amount (default 20). `false` skips the balance. */
162
238
  balance?: {
@@ -174,14 +250,14 @@ type DeepgramOptions = PresetOptions & ApiKey & {
174
250
  */
175
251
  declare const deepgram: (options: DeepgramOptions) => ServiceDefinition;
176
252
  /** Gladia. Lists live sessions (limit 1). up when the key works; down when rejected. */
177
- declare const gladia: (options: CommonOptions & ApiKey) => ServiceDefinition;
178
- type SpeechmaticsOptions = PresetOptions & ApiKey & {
253
+ declare const gladia: (options: CommonOptions & ApiKey$1) => ServiceDefinition;
254
+ type SpeechmaticsOptions = PresetOptions & ApiKey$1 & {
179
255
  /** API base URL, e.g. the EU endpoint (default "https://asr.api.speechmatics.com") */
180
256
  baseUrl?: string;
181
257
  };
182
258
  /** Speechmatics. Lists batch jobs (limit 1), which validates the API key. */
183
259
  declare const speechmatics: (options: SpeechmaticsOptions) => ServiceDefinition;
184
- type OpenAIOptions = PresetOptions & ApiKey & {
260
+ type OpenAIOptions = PresetOptions & ApiKey$1 & {
185
261
  /** Sent as the `OpenAI-Organization` header */
186
262
  organization?: string;
187
263
  track?: {
@@ -194,12 +270,48 @@ type OpenAIOptions = PresetOptions & ApiKey & {
194
270
  * It proves the key works; it can't see billing problems, which only show on real requests.
195
271
  */
196
272
  declare const openai: (options: OpenAIOptions) => ServiceDefinition;
197
- /** Anthropic. Lists models (limit 1). up when the key works; down when rejected. */
198
- declare const anthropic: (options: CommonOptions & ApiKey) => ServiceDefinition;
273
+ type AnthropicOptions = PresetOptions & ApiKey$1 & {
274
+ track?: {
275
+ /**
276
+ * The models you depend on (IDs or aliases, e.g. "claude-sonnet-4-6"). Each one is
277
+ * reported on its own row. Without a list, only the key is validated.
278
+ */
279
+ models?: string[];
280
+ };
281
+ };
282
+ /**
283
+ * Anthropic. Reads each model in `track.models` (free, no tokens), or lists models when
284
+ * there is no list.
285
+ * - up: the key works and every listed model is available to it
286
+ * - degraded: some models are missing or retired, or the API is rate limited or overloaded
287
+ * - down: the API rejects the key, errors, or none of the listed models is available
288
+ *
289
+ * Reports one `instances` row per model, so each keeps its own uptime and response time.
290
+ * It proves a model exists for this key; it can't see capacity problems on real requests.
291
+ */
292
+ declare const anthropic: (options: AnthropicOptions) => ServiceDefinition;
199
293
  /** Google Gemini. Lists models (page size 1). */
200
- declare const gemini: (options: CommonOptions & ApiKey) => ServiceDefinition;
294
+ declare const gemini: (options: CommonOptions & ApiKey$1) => ServiceDefinition;
201
295
  /** CAMB.AI. Lists source languages. */
202
- declare const cambai: (options: CommonOptions & ApiKey) => ServiceDefinition;
296
+ declare const cambai: (options: CommonOptions & ApiKey$1) => ServiceDefinition;
297
+ type ElevenLabsOptions = PresetOptions & ApiKey$1 & {
298
+ track?: {
299
+ /** Warn when less than this share of the period's credits is left (default 10) */
300
+ quota?: {
301
+ warnBelowPct?: number;
302
+ };
303
+ };
304
+ };
305
+ /**
306
+ * ElevenLabs. Reads the subscription, which validates the API key.
307
+ * - up: the key works. A key without the user scope is refused with `missing_permissions`,
308
+ * which still proves it is valid.
309
+ * - degraded: less than `track.quota.warnBelowPct` of the credits left
310
+ * - down: the API rejects the key or errors
311
+ *
312
+ * Reports a `usage` bar (credits used this period, with the reset time) and `metrics.tier`.
313
+ */
314
+ declare const elevenlabs: (options: ElevenLabsOptions) => ServiceDefinition;
203
315
 
204
316
  type DeepLOptions = PresetOptions & {
205
317
  secrets: {
@@ -377,6 +489,40 @@ type StatuspageOptions = PresetOptions & {
377
489
  * The provider's own description becomes the error text.
378
490
  */
379
491
  declare const statuspage: (options: StatuspageOptions) => ServiceDefinition;
492
+ type ResendOptions = PresetOptions & {
493
+ secrets: {
494
+ apiKey: string | undefined;
495
+ };
496
+ };
497
+ /**
498
+ * Resend. Lists domains, which validates the API key.
499
+ * - up: the key works. A sending-only key is refused with `restricted_api_key`, which still
500
+ * proves it is valid.
501
+ * - degraded: domains exist, but none is verified
502
+ * - down: the API rejects the key or errors
503
+ *
504
+ * Reports `metrics.domains` and `metrics.verified` for full-access keys.
505
+ */
506
+ declare const resend: (options: ResendOptions) => ServiceDefinition;
507
+ type MeilisearchOptions = PresetOptions & {
508
+ /** The server, e.g. "https://search.example.com" */
509
+ host: string | undefined;
510
+ /** Also require this index, and report its document count */
511
+ index?: string;
512
+ secrets: {
513
+ apiKey: string | undefined;
514
+ };
515
+ };
516
+ /**
517
+ * Meilisearch. Reads `/health`, then the index (or the list of indexes), which validates the key.
518
+ * - up: the server is available and the key works
519
+ * - degraded: the index does not exist
520
+ * - down: the server is unavailable, or rejects the key
521
+ *
522
+ * Reports `metrics.documents`, and `metrics.indexing` while a batch is running, when the key
523
+ * may read statistics; scoped keys often may not, and that is not held against them.
524
+ */
525
+ declare const meilisearch: (options: MeilisearchOptions) => ServiceDefinition;
380
526
 
381
527
  type PusherOptions = PresetOptions & {
382
528
  appId: string | undefined;
@@ -424,4 +570,106 @@ declare function signPusherRequest({ appId, key, secret, path, params, timestamp
424
570
  */
425
571
  declare const pusher: (options: PusherOptions) => ServiceDefinition;
426
572
 
427
- export { type AttendeeOptions, type AwsCredentialsOptions, type AxiomOptions, type AzureTranslatorOptions, type CloudflareStreamOptions, type DeepLOptions, type DeepgramOptions, type FlyAppOptions, type GcpInstanceOptions, type GitHubOptions, type GoogleServiceAccount, type GoogleTranslateOptions, type MailerSendOptions, type MongoPingOptions, type MuxOptions, type OpenAIOptions, type PusherOptions, type RedisPingOptions, type RevolutOptions, type S3BucketOptions, type SpeechmaticsOptions, type StatuspageOptions, type UpstashRedisOptions, anthropic, attendee, aws, axiom, azureTranslator, cambai, clearGoogleTokens, cloudflareStream, crashReason, deepgram, deepl, fly, gcp, gemini, github, gladia, googleServiceAccountToken, googleTranslate, mailersend, mongodb, mux, openai, parseServiceAccount, pusher, redis, revolut, signGoogleAssertion, signPusherRequest, speechmatics, statuspage, upstashRedis };
573
+ type VercelAiGatewayOptions = PresetOptions & {
574
+ secrets: {
575
+ apiKey: string | undefined;
576
+ };
577
+ track?: {
578
+ /** Warn when the credit balance drops below this amount in USD (default 5). `false` skips the balance. */
579
+ credits?: {
580
+ warnBelow?: number;
581
+ } | false;
582
+ };
583
+ };
584
+ type VercelBlobOptions = PresetOptions & {
585
+ secrets: {
586
+ token: string | undefined;
587
+ };
588
+ };
589
+ /** Presets for Vercel products */
590
+ declare const vercel: {
591
+ aiGateway: (options: VercelAiGatewayOptions) => ServiceDefinition;
592
+ blob: (options: VercelBlobOptions) => ServiceDefinition;
593
+ };
594
+
595
+ type StripeOptions = PresetOptions & {
596
+ /** A secret or restricted key. Restricted keys need read access to what you track. */
597
+ secrets: {
598
+ apiKey: string | undefined;
599
+ };
600
+ track?: {
601
+ /** Warn when a live account can't take charges or payouts, or has overdue requirements (default true) */
602
+ account?: boolean;
603
+ /** Report each webhook endpoint, and events Stripe could not deliver in the last 24 h (default true) */
604
+ webhooks?: boolean;
605
+ /** Count disputes awaiting your response (default true) */
606
+ disputes?: boolean;
607
+ };
608
+ };
609
+ /**
610
+ * Stripe. Reads the balance, which validates the key, then what `track` asks for. All calls
611
+ * are free and read-only.
612
+ * - up: the key works
613
+ * - degraded: a webhook endpoint is disabled, Stripe could not deliver events in the last
614
+ * 24 h, or a live account can't take charges or payouts or has overdue requirements
615
+ * - down: the API rejects the key or errors
616
+ *
617
+ * Reports `metrics.mode` (live/test), `metrics.available`, `metrics.pending`,
618
+ * `metrics.undelivered24h`, `metrics.openDisputes`, and one `instances` row per webhook
619
+ * endpoint. What a restricted key may not read is left out, never counted as a failure.
620
+ */
621
+ declare const stripe: (options: StripeOptions) => ServiceDefinition;
622
+
623
+ type ApiKey = {
624
+ secrets: {
625
+ apiKey: string | undefined;
626
+ };
627
+ };
628
+ /**
629
+ * Exa. Sends an empty search, which Exa refuses for validation once the key is accepted:
630
+ * nothing is searched or billed.
631
+ * - up: the key is accepted
632
+ * - degraded: rate limited, or out of credits (HTTP 402)
633
+ * - down: the API rejects the key or errors
634
+ */
635
+ declare const exa: (options: CommonOptions & ApiKey) => ServiceDefinition;
636
+ /**
637
+ * Nimble. Sends an empty search, which Nimble refuses for validation once the key is
638
+ * accepted: nothing is searched or billed.
639
+ * - up: the key is accepted
640
+ * - degraded: rate limited, or out of credits (HTTP 402)
641
+ * - down: the API rejects the key or errors
642
+ */
643
+ declare const nimble: (options: CommonOptions & ApiKey) => ServiceDefinition;
644
+ type TavilyOptions = PresetOptions & ApiKey & {
645
+ track?: {
646
+ /** Warn when this share of the credits is used (default 90) */
647
+ quota?: {
648
+ warnAbovePct?: number;
649
+ };
650
+ };
651
+ };
652
+ /**
653
+ * Tavily. Reads `/usage`, which validates the API key.
654
+ * - up: the key works
655
+ * - degraded: `track.quota.warnAbovePct` of the credits are used
656
+ * - down: the API rejects the key or errors
657
+ *
658
+ * Reports a `usage` bar (the key's own limit when it has one, otherwise the plan's) and
659
+ * `metrics.plan`.
660
+ */
661
+ declare const tavily: (options: TavilyOptions) => ServiceDefinition;
662
+ type EmeliaOptions = PresetOptions & ApiKey & {
663
+ /** API base URL (default "https://api.emelia.io") */
664
+ baseUrl?: string;
665
+ };
666
+ /**
667
+ * Emelia. Sends an empty email-finder request, which Emelia refuses for validation once the
668
+ * key is accepted: nothing is looked up or billed.
669
+ * - up: the key is accepted
670
+ * - degraded: rate limited, or out of credits (HTTP 402)
671
+ * - down: the API rejects the key or errors
672
+ */
673
+ declare const emelia: (options: EmeliaOptions) => ServiceDefinition;
674
+
675
+ export { type AnthropicOptions, type AttendeeOptions, type AwsCredentialsOptions, type AxiomOptions, type AzureTranslatorOptions, type BedrockOptions, type CloudflareStreamOptions, type DeepLOptions, type DeepgramOptions, type ElevenLabsOptions, type EmeliaOptions, type FlyAppOptions, type GcpInstanceOptions, type GitHubOptions, type GoogleServiceAccount, type GoogleTranslateOptions, type MailerSendOptions, type MeilisearchOptions, type MongoPingOptions, type MuxOptions, type NeonProjectOptions, type OpenAIOptions, type PostgresPingOptions, type PusherOptions, type RedisPingOptions, type ResendOptions, type RevolutOptions, type S3BucketOptions, type SpeechmaticsOptions, type StatuspageOptions, type StripeOptions, type TavilyOptions, type UpstashRedisOptions, type VercelAiGatewayOptions, type VercelBlobOptions, anthropic, attendee, aws, axiom, azureTranslator, cambai, clearGoogleTokens, cloudflareStream, crashReason, deepgram, deepl, elevenlabs, emelia, exa, fly, gcp, gemini, github, gladia, googleServiceAccountToken, googleTranslate, mailersend, meilisearch, mongodb, mux, neon, nimble, openai, parseServiceAccount, postgres, pusher, redis, resend, revolut, signGoogleAssertion, signPusherRequest, speechmatics, statuspage, stripe, tavily, upstashRedis, vercel };