bunderstack 0.23.4 → 0.24.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/CHANGELOG.md +56 -0
- package/README.md +6 -4
- package/dist/api/builder.d.ts +13 -11
- package/dist/api/builder.d.ts.map +1 -1
- package/dist/api/builder.js.map +1 -1
- package/dist/api/context.d.ts +6 -6
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +1 -1
- package/dist/api/context.js.map +1 -1
- package/dist/api/crud-router.d.ts +6 -6
- package/dist/api/realtime-router.d.ts +1 -1
- package/dist/api/storage-router.d.ts +5 -5
- package/dist/backend-internals.d.ts +5 -13
- package/dist/backend-internals.d.ts.map +1 -1
- package/dist/backend-internals.js.map +1 -1
- package/dist/backend.d.ts +39 -5
- package/dist/backend.d.ts.map +1 -1
- package/dist/backend.js +37 -46
- package/dist/backend.js.map +1 -1
- package/dist/blueprint-generator.d.ts +1 -0
- package/dist/blueprint-generator.d.ts.map +1 -1
- package/dist/blueprint-generator.js +29 -1
- package/dist/blueprint-generator.js.map +1 -1
- package/dist/blueprint.d.ts +2 -1
- package/dist/blueprint.d.ts.map +1 -1
- package/dist/blueprint.js +9 -2
- package/dist/blueprint.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +14 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +13 -19
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/email/smtp.d.ts +7 -1
- package/dist/email/smtp.d.ts.map +1 -1
- package/dist/email/smtp.js +5 -1
- package/dist/email/smtp.js.map +1 -1
- package/dist/email.d.ts +3 -29
- package/dist/email.d.ts.map +1 -1
- package/dist/email.js +1 -194
- package/dist/email.js.map +1 -1
- package/dist/env-probe.d.ts +9 -0
- package/dist/env-probe.d.ts.map +1 -0
- package/dist/env-probe.js +73 -0
- package/dist/env-probe.js.map +1 -0
- package/dist/env.d.ts +2 -5
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +2 -9
- package/dist/env.js.map +1 -1
- package/dist/hosted-contract.d.ts +11 -0
- package/dist/hosted-contract.d.ts.map +1 -0
- package/dist/hosted-contract.js +46 -0
- package/dist/hosted-contract.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inspect.d.ts +15 -0
- package/dist/inspect.d.ts.map +1 -0
- package/dist/inspect.js +43 -0
- package/dist/inspect.js.map +1 -0
- package/dist/internal-tables-pg.d.ts +43 -94
- package/dist/internal-tables-pg.d.ts.map +1 -1
- package/dist/internal-tables-pg.js +14 -17
- package/dist/internal-tables-pg.js.map +1 -1
- package/dist/internal-tables.d.ts +213 -488
- package/dist/internal-tables.d.ts.map +1 -1
- package/dist/internal-tables.js +33 -33
- package/dist/internal-tables.js.map +1 -1
- package/dist/jobs/define.d.ts +20 -20
- package/dist/jobs/define.d.ts.map +1 -1
- package/dist/jobs/define.js.map +1 -1
- package/dist/manifest-diff.d.ts +6 -0
- package/dist/manifest-diff.d.ts.map +1 -0
- package/dist/manifest-diff.js +42 -0
- package/dist/manifest-diff.js.map +1 -0
- package/dist/manifest.d.ts +10 -2
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +27 -29
- package/dist/manifest.js.map +1 -1
- package/dist/messaging/email.d.ts +16 -0
- package/dist/messaging/email.d.ts.map +1 -0
- package/dist/messaging/email.js +8 -0
- package/dist/messaging/email.js.map +1 -0
- package/dist/messaging/index.d.ts +8 -0
- package/dist/messaging/index.d.ts.map +1 -0
- package/dist/messaging/index.js +4 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/journal.d.ts +4 -0
- package/dist/messaging/journal.d.ts.map +1 -0
- package/dist/messaging/journal.js +19 -0
- package/dist/messaging/journal.js.map +1 -0
- package/dist/messaging/runtime.d.ts +16 -0
- package/dist/messaging/runtime.d.ts.map +1 -0
- package/dist/messaging/runtime.js +213 -0
- package/dist/messaging/runtime.js.map +1 -0
- package/dist/messaging/standalone.d.ts +27 -0
- package/dist/messaging/standalone.d.ts.map +1 -0
- package/dist/messaging/standalone.js +18 -0
- package/dist/messaging/standalone.js.map +1 -0
- package/dist/messaging/telegram.d.ts +16 -0
- package/dist/messaging/telegram.d.ts.map +1 -0
- package/dist/messaging/telegram.js +5 -0
- package/dist/messaging/telegram.js.map +1 -0
- package/dist/messaging/types.d.ts +22 -0
- package/dist/messaging/types.d.ts.map +1 -0
- package/dist/messaging/types.js +17 -0
- package/dist/messaging/types.js.map +1 -0
- package/dist/runtime.d.ts +11 -10
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +19 -31
- package/dist/runtime.js.map +1 -1
- package/dist/schema-export-pg.d.ts +1 -1
- package/dist/schema-export-pg.d.ts.map +1 -1
- package/dist/schema-export-pg.js +1 -1
- package/dist/schema-export-pg.js.map +1 -1
- package/dist/schema-export.d.ts +1 -1
- package/dist/schema-export.d.ts.map +1 -1
- package/dist/schema-export.js +1 -1
- package/dist/schema-export.js.map +1 -1
- package/dist/testing/fixture.d.ts +2 -2
- package/dist/testing/fixture.d.ts.map +1 -1
- package/dist/testing/fixture.js +11 -9
- package/dist/testing/fixture.js.map +1 -1
- package/dist/testing/messaging.d.ts +21 -0
- package/dist/testing/messaging.d.ts.map +1 -0
- package/dist/testing/messaging.js +34 -0
- package/dist/testing/messaging.js.map +1 -0
- package/dist/testing.d.ts +1 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js.map +1 -1
- package/package.json +6 -2
- package/skills/creating-bunderstack-apps/references/application-structure.md +16 -7
- package/skills/migrating-to-bunderstack/SKILL.md +72 -50
- package/skills/migrating-to-bunderstack/references/audit-checklist.md +2 -2
- package/skills/migrating-to-bunderstack/references/runtime-replacements.md +16 -12
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,62 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `bunderstack` will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.24.0] - 2026-09-05
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **Env-first declarations.** The declaration stays one object, and the slots
|
|
10
|
+
that hold credentials — `database`, `storage`, `messaging`, and `realtime` —
|
|
11
|
+
now also accept a function of the validated environment; `auth` has taken a
|
|
12
|
+
`{ db, env }` builder since 0.22. A slot function is resolved once per
|
|
13
|
+
`inspect()`, `start()`, and test fixture, and it supplies values, never
|
|
14
|
+
shapes.
|
|
15
|
+
- **`backend.manifest` becomes `backend.inspect({ env })`.** A manifest depends
|
|
16
|
+
on the environment, so it is a call. Inspection validates the environment,
|
|
17
|
+
resolves the declaration, and builds the manifest without opening a database,
|
|
18
|
+
a bucket, a provider connection, or a worker.
|
|
19
|
+
- **`email` becomes `messaging`.** Channels are named, each names one provider,
|
|
20
|
+
and each provider carries its own message type. `app.email.send()` becomes
|
|
21
|
+
`app.messaging.<channel>.send()`, `ctx.email` becomes `ctx.messaging`, and
|
|
22
|
+
`t.email.sent` becomes `t.messaging.<channel>.sent`. Providers are declared
|
|
23
|
+
with `resend()`, `smtp()`, `customEmail()`, and `telegram()`.
|
|
24
|
+
- **Capture replaces the console provider.** A channel whose required
|
|
25
|
+
configuration is absent or empty writes the message to the journal instead of
|
|
26
|
+
sending, and prints it locally. On a host the body stays out of the logs. A
|
|
27
|
+
wrong key and a rejected request still raise.
|
|
28
|
+
- **The message journal replaces the email log.** `_bunderstack_messages` and
|
|
29
|
+
`_bunderstack_message_events` replace `_bunderstack_emails` and
|
|
30
|
+
`_bunderstack_email_events`, and record the channel, provider, credential
|
|
31
|
+
source, status, recipients, content, and error. Applications with committed
|
|
32
|
+
migrations must run their `db:generate` command and apply the generated
|
|
33
|
+
migration after upgrading.
|
|
34
|
+
- Manifest version 4 adds `messaging.channels`; the blueprint gains
|
|
35
|
+
`resources.messaging`. Neither carries a key, a token, or a sender address.
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **Managed messaging credentials.** `BUNDERSTACK_MESSAGING_CONFIG` supplies
|
|
40
|
+
provider-keyed defaults that every channel of that provider shares. A field
|
|
41
|
+
the channel declares itself wins field by field, and each journal row records
|
|
42
|
+
whether its credentials were `explicit`, `managed`, or `capture`.
|
|
43
|
+
- **Blueprint shape probes.** Blueprint generation resolves the declaration
|
|
44
|
+
against two accepted environments and rejects a declaration whose shape
|
|
45
|
+
depends on a value, naming the differing paths and never a value.
|
|
46
|
+
- **Hosted contract checking.** `bunderstack blueprint --hosted-check` compares
|
|
47
|
+
an inspected declaration with the committed blueprint. At runtime,
|
|
48
|
+
`BUNDERSTACK_BLUEPRINT_PATH` makes `start()` verify that contract before it
|
|
49
|
+
connects to anything.
|
|
50
|
+
- `defineApi({ schema, env, messaging })` types `context.messaging` exactly for
|
|
51
|
+
a router declared in its own module.
|
|
52
|
+
- `createMessaging(channels, { env, db })` builds the same channel facades
|
|
53
|
+
outside a started app, for a Better Auth builder or a script. It replaces
|
|
54
|
+
`createEmail`.
|
|
55
|
+
|
|
56
|
+
### Removed
|
|
57
|
+
|
|
58
|
+
- The eager `backend.manifest` property, the `email` configuration key,
|
|
59
|
+
`app.email`, `ctx.email`, and `t.email`. See `docs/MIGRATION-0.24.md`.
|
|
60
|
+
|
|
5
61
|
## [0.23.4] - 2026-09-01
|
|
6
62
|
|
|
7
63
|
### Fixed
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# bunderstack
|
|
2
2
|
|
|
3
|
-
The complete backend & full-stack framework for Bun: type-safe oRPC APIs, auth, storage, realtime, jobs,
|
|
3
|
+
The complete backend & full-stack framework for Bun: type-safe oRPC APIs, auth, storage, realtime, jobs, messaging, live views, and client bindings from one single file declaration.
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
6
|
bun add bunderstack better-auth drizzle-orm valibot @libsql/client
|
|
@@ -14,7 +14,7 @@ import * as schema from './schema'
|
|
|
14
14
|
|
|
15
15
|
export const backend = bunderstack({
|
|
16
16
|
schema,
|
|
17
|
-
database: { adapter: libsql()
|
|
17
|
+
database: { adapter: libsql() },
|
|
18
18
|
access: { posts: { crud: true } },
|
|
19
19
|
realtime: true,
|
|
20
20
|
api: {
|
|
@@ -42,7 +42,7 @@ await context.realtime.publish(schema.posts, 'update', post)
|
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
Use the in-memory Publisher for one process or configure
|
|
45
|
-
`realtime: { redis:
|
|
45
|
+
`realtime: (env) => ({ redis: env.REDIS_URL })` for multi-process delivery and
|
|
46
46
|
replay. Deployment metadata is generated with `bunx bunderstack blueprint`.
|
|
47
47
|
|
|
48
48
|
## Package Subpaths (0.21+)
|
|
@@ -59,7 +59,8 @@ replay. Deployment metadata is generated with `bunx bunderstack blueprint`.
|
|
|
59
59
|
- `bunderstack/start` & `bunderstack/start-auth` — TanStack Start full-stack integration
|
|
60
60
|
- `bunderstack/libsql`, `bunderstack/postgres-js`, `bunderstack/bun-sql`, `bunderstack/bun-sqlite`, `bunderstack/pglite` — Database adapters
|
|
61
61
|
- `bunderstack/storage/*` — Storage adapters (`s3`, `disk`)
|
|
62
|
-
- `bunderstack/
|
|
62
|
+
- `bunderstack/messaging` — Messaging channel descriptors (`resend`, `customEmail`, `telegram`)
|
|
63
|
+
- `bunderstack/email-smtp` — SMTP email channel
|
|
63
64
|
- `bunderstack/jobs/*` — Job queue adapters (`memory`, `redis`)
|
|
64
65
|
|
|
65
66
|
See the [workspace documentation](https://github.com/kirill-dev-pro/bunderstack#readme) for webhooks, clients,
|
|
@@ -69,6 +70,7 @@ storage, collections, lifecycle, and complete examples.
|
|
|
69
70
|
|
|
70
71
|
Every change is listed with before/after code in the migration guides, which live in full at:
|
|
71
72
|
|
|
73
|
+
- [Migrating to 0.24](https://github.com/kirill-dev-pro/bunderstack/blob/main/docs/MIGRATION-0.24.md)
|
|
72
74
|
- [Migrating to 0.22](https://github.com/kirill-dev-pro/bunderstack/blob/main/docs/MIGRATION-0.22.md)
|
|
73
75
|
- [Migrating to 0.21](https://github.com/kirill-dev-pro/bunderstack/blob/main/docs/MIGRATION-0.21.md)
|
|
74
76
|
- [Migrating to 0.17](https://github.com/kirill-dev-pro/bunderstack/blob/main/docs/MIGRATION-0.17.md)
|
package/dist/api/builder.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type AnyMiddleware, type AnyRouter, type Context, type Middleware } from '@orpc/server';
|
|
2
2
|
import type { EnvConfigInput, ValidatedEnv } from '../env.js';
|
|
3
|
+
import type { MessagingConfig } from '../messaging/index.js';
|
|
3
4
|
import type { ApiContext } from './context.js';
|
|
4
5
|
import { BUNDERSTACK_ERRORS } from '../errors.js';
|
|
5
6
|
export type { ProtectedContextAdditions } from './types.js';
|
|
6
|
-
export declare function createApiBuilder<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown
|
|
7
|
-
public: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, TEnv> & object, object, {
|
|
7
|
+
export declare function createApiBuilder<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown>, TMessaging extends MessagingConfig | undefined = MessagingConfig>(): {
|
|
8
|
+
public: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, TEnv, TMessaging> & object, object, {
|
|
8
9
|
readonly BAD_REQUEST: {
|
|
9
10
|
readonly data: import("valibot").OptionalSchema<import("valibot").StrictObjectSchema<{
|
|
10
11
|
readonly code: import("valibot").OptionalSchema<import("valibot").LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
|
|
@@ -62,7 +63,7 @@ export declare function createApiBuilder<TSchema extends Record<string, unknown>
|
|
|
62
63
|
}>;
|
|
63
64
|
};
|
|
64
65
|
}>;
|
|
65
|
-
protected: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, TEnv> & object, Omit<object, "user" | "session"> & {
|
|
66
|
+
protected: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, TEnv, TMessaging> & object, Omit<object, "user" | "session"> & {
|
|
66
67
|
user: import("..").AccessUser;
|
|
67
68
|
session: {
|
|
68
69
|
activeOrganizationId: string | null;
|
|
@@ -125,7 +126,7 @@ export declare function createApiBuilder<TSchema extends Record<string, unknown>
|
|
|
125
126
|
}>;
|
|
126
127
|
};
|
|
127
128
|
}>;
|
|
128
|
-
webhook: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, TEnv> & object, object, {
|
|
129
|
+
webhook: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, TEnv, TMessaging> & object, object, {
|
|
129
130
|
readonly BAD_REQUEST: {
|
|
130
131
|
readonly data: import("valibot").OptionalSchema<import("valibot").StrictObjectSchema<{
|
|
131
132
|
readonly code: import("valibot").OptionalSchema<import("valibot").LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
|
|
@@ -191,18 +192,19 @@ export declare function createApiBuilder<TSchema extends Record<string, unknown>
|
|
|
191
192
|
* The annotation is explicit because the inferred `DecoratedMiddleware`
|
|
192
193
|
* is internal to `@orpc/server` and cannot be named in the emitted types.
|
|
193
194
|
*/
|
|
194
|
-
middleware: <TOutContext extends Context>(middleware: Middleware<ApiContext<TSchema, TEnv>, TOutContext, unknown, unknown, typeof BUNDERSTACK_ERRORS>) => AnyMiddleware;
|
|
195
|
+
middleware: <TOutContext extends Context>(middleware: Middleware<ApiContext<TSchema, TEnv, TMessaging>, TOutContext, unknown, unknown, typeof BUNDERSTACK_ERRORS>) => AnyMiddleware;
|
|
195
196
|
};
|
|
196
197
|
/**
|
|
197
198
|
* Same builder as `createApiBuilder`, but the generics come from the values an
|
|
198
199
|
* application already has. It reads nothing at runtime, so a module can call it
|
|
199
200
|
* at import time and export the bases that its router modules import.
|
|
200
201
|
*/
|
|
201
|
-
export declare function defineApi<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined>(_options: {
|
|
202
|
+
export declare function defineApi<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined, TMessaging extends MessagingConfig = MessagingConfig>(_options: {
|
|
202
203
|
schema: TSchema;
|
|
203
204
|
env?: TEnv;
|
|
205
|
+
messaging?: TMessaging;
|
|
204
206
|
}): {
|
|
205
|
-
public: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, ValidatedEnv<TEnv
|
|
207
|
+
public: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, ValidatedEnv<TEnv>, TMessaging> & object, object, {
|
|
206
208
|
readonly BAD_REQUEST: {
|
|
207
209
|
readonly data: import("valibot").OptionalSchema<import("valibot").StrictObjectSchema<{
|
|
208
210
|
readonly code: import("valibot").OptionalSchema<import("valibot").LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
|
|
@@ -260,7 +262,7 @@ export declare function defineApi<TSchema extends Record<string, unknown>, TEnv
|
|
|
260
262
|
}>;
|
|
261
263
|
};
|
|
262
264
|
}>;
|
|
263
|
-
protected: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, ValidatedEnv<TEnv
|
|
265
|
+
protected: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, ValidatedEnv<TEnv>, TMessaging> & object, Omit<object, "user" | "session"> & {
|
|
264
266
|
user: import("..").AccessUser;
|
|
265
267
|
session: {
|
|
266
268
|
activeOrganizationId: string | null;
|
|
@@ -323,7 +325,7 @@ export declare function defineApi<TSchema extends Record<string, unknown>, TEnv
|
|
|
323
325
|
}>;
|
|
324
326
|
};
|
|
325
327
|
}>;
|
|
326
|
-
webhook: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, ValidatedEnv<TEnv
|
|
328
|
+
webhook: import("@orpc/server").BuilderWithMiddlewares<ApiContext<TSchema, ValidatedEnv<TEnv>, TMessaging> & object, object, {
|
|
327
329
|
readonly BAD_REQUEST: {
|
|
328
330
|
readonly data: import("valibot").OptionalSchema<import("valibot").StrictObjectSchema<{
|
|
329
331
|
readonly code: import("valibot").OptionalSchema<import("valibot").LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
|
|
@@ -389,7 +391,7 @@ export declare function defineApi<TSchema extends Record<string, unknown>, TEnv
|
|
|
389
391
|
* The annotation is explicit because the inferred `DecoratedMiddleware`
|
|
390
392
|
* is internal to `@orpc/server` and cannot be named in the emitted types.
|
|
391
393
|
*/
|
|
392
|
-
middleware: <TOutContext extends Context>(middleware: Middleware<ApiContext<TSchema, ValidatedEnv<TEnv
|
|
394
|
+
middleware: <TOutContext extends Context>(middleware: Middleware<ApiContext<TSchema, ValidatedEnv<TEnv>, TMessaging>, TOutContext, unknown, unknown, {
|
|
393
395
|
readonly BAD_REQUEST: {
|
|
394
396
|
readonly data: import("valibot").OptionalSchema<import("valibot").StrictObjectSchema<{
|
|
395
397
|
readonly code: import("valibot").OptionalSchema<import("valibot").LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
|
|
@@ -448,6 +450,6 @@ export declare function defineApi<TSchema extends Record<string, unknown>, TEnv
|
|
|
448
450
|
};
|
|
449
451
|
}>) => AnyMiddleware;
|
|
450
452
|
};
|
|
451
|
-
export type BunderstackApiBuilder<TSchema extends Record<string, unknown>, TEnv = Record<string, unknown
|
|
453
|
+
export type BunderstackApiBuilder<TSchema extends Record<string, unknown>, TEnv = Record<string, unknown>, TMessaging extends MessagingConfig | undefined = MessagingConfig> = ReturnType<typeof createApiBuilder<TSchema, TEnv, TMessaging>>;
|
|
452
454
|
export type ApiFactory<TSchema extends Record<string, unknown>, TEnv, TCustomApiRouter extends AnyRouter> = (builder: BunderstackApiBuilder<TSchema, TEnv>) => TCustomApiRouter;
|
|
453
455
|
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/api/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,cAAc,CAAA;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EACL,kBAAkB,EAGnB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAExD,wBAAgB,gBAAgB,CAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/api/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,UAAU,EAChB,MAAM,cAAc,CAAA;AAErB,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EACL,kBAAkB,EAGnB,MAAM,WAAW,CAAA;AAClB,YAAY,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAExD,wBAAgB,gBAAgB,CAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,UAAU,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA0B9D;;;;;;;OAOG;gBACuC,CAAC,WAAW,SAAS,OAAO,EACpE,UAAU,EAAE,UAAU,CACpB,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EACrC,WAAW,EACX,OAAO,EACP,OAAO,EACP,OAAO,kBAAkB,CAC1B,KACE,aAAa;EAErB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,IAAI,SAAS,cAAc,GAAG,SAAS,GAAG,SAAS,EACnD,UAAU,SAAS,eAAe,GAAG,eAAe,EACpD,QAAQ,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,UAAU,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA7B/D;;;;;;;OAOG;iBACwC,WAAW,SAAS,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAQjE,aAAa;EAerB;AAED,MAAM,MAAM,qBAAqB,CAC/B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,UAAU,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe,IAC9D,UAAU,CAAC,OAAO,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;AAElE,MAAM,MAAM,UAAU,CACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,IAAI,EACJ,gBAAgB,SAAS,SAAS,IAChC,CAAC,OAAO,EAAE,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,gBAAgB,CAAA"}
|
package/dist/api/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/api/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,GAKH,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/api/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,GAKH,MAAM,cAAc,CAAA;AAMrB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAGlB,MAAM,UAAU,gBAAgB;IAK9B,MAAM,IAAI,GAAG,EAAE;SACZ,QAAQ,EAAyC;SACjD,MAAM,CAAC,kBAAkB,CAAC;SAC1B,GAAG,CAAC,oBAAoB,CAAC,CAAA;IAE5B,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACzD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;QAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAAA;QACvE,CAAC;QACD,OAAO,IAAI,CAAC;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,OAAO,EAAE;oBACP,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;iBACnD;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,IAAI;QACb;;;;;;;WAOG;QACH,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAQnB;KACnB,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAIvB,QAAiE;IACjE,OAAO,gBAAgB,EAA2C,CAAA;AACpE,CAAC","sourcesContent":["import {\n os,\n type AnyMiddleware,\n type AnyRouter,\n type Context,\n type Middleware,\n} from '@orpc/server'\n\nimport type { EnvConfigInput, ValidatedEnv } from '../env'\nimport type { MessagingConfig } from '../messaging'\nimport type { ApiContext } from './context'\n\nimport {\n BUNDERSTACK_ERRORS,\n BunderstackError,\n mapBunderstackErrors,\n} from '../errors'\nexport type { ProtectedContextAdditions } from './types'\n\nexport function createApiBuilder<\n TSchema extends Record<string, unknown> = Record<string, unknown>,\n TEnv = Record<string, unknown>,\n TMessaging extends MessagingConfig | undefined = MessagingConfig,\n>() {\n const base = os\n .$context<ApiContext<TSchema, TEnv, TMessaging>>()\n .errors(BUNDERSTACK_ERRORS)\n .use(mapBunderstackErrors)\n\n const protectedProc = base.use(async ({ context, next }) => {\n const session = await context.getSession()\n if (!session.user) {\n throw new BunderstackError('UNAUTHORIZED', 'Authentication required')\n }\n return next({\n context: {\n user: session.user,\n session: {\n activeOrganizationId: session.activeOrganizationId,\n },\n },\n })\n })\n\n return {\n public: base,\n protected: protectedProc,\n webhook: base,\n /**\n * Declares a standalone middleware over the base context. Use it for\n * `bunderstack({ middleware })`, which reaches every procedure in\n * the graph, and for `.use(...)` on any base declared here.\n *\n * The annotation is explicit because the inferred `DecoratedMiddleware`\n * is internal to `@orpc/server` and cannot be named in the emitted types.\n */\n middleware: base.middleware.bind(base) as <TOutContext extends Context>(\n middleware: Middleware<\n ApiContext<TSchema, TEnv, TMessaging>,\n TOutContext,\n unknown,\n unknown,\n typeof BUNDERSTACK_ERRORS\n >,\n ) => AnyMiddleware,\n }\n}\n\n/**\n * Same builder as `createApiBuilder`, but the generics come from the values an\n * application already has. It reads nothing at runtime, so a module can call it\n * at import time and export the bases that its router modules import.\n */\nexport function defineApi<\n TSchema extends Record<string, unknown>,\n TEnv extends EnvConfigInput | undefined = undefined,\n TMessaging extends MessagingConfig = MessagingConfig,\n>(_options: { schema: TSchema; env?: TEnv; messaging?: TMessaging }) {\n return createApiBuilder<TSchema, ValidatedEnv<TEnv>, TMessaging>()\n}\n\nexport type BunderstackApiBuilder<\n TSchema extends Record<string, unknown>,\n TEnv = Record<string, unknown>,\n TMessaging extends MessagingConfig | undefined = MessagingConfig,\n> = ReturnType<typeof createApiBuilder<TSchema, TEnv, TMessaging>>\n\nexport type ApiFactory<\n TSchema extends Record<string, unknown>,\n TEnv,\n TCustomApiRouter extends AnyRouter,\n> = (builder: BunderstackApiBuilder<TSchema, TEnv>) => TCustomApiRouter\n"]}
|
package/dist/api/context.d.ts
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
import type { AccessUser, AuthSessionResolver } from '../access.js';
|
|
2
2
|
import type { DbFor } from '../db.js';
|
|
3
|
-
import type { EmailFacade } from '../email.js';
|
|
4
3
|
import type { JobsRuntimeFacade } from '../jobs/define.js';
|
|
5
4
|
import type { BunderstackLogger } from '../logging.js';
|
|
5
|
+
import type { MessagingConfig, MessagingFacadesFor } from '../messaging/index.js';
|
|
6
6
|
import type { RealtimeFacade } from '../realtime/facade.js';
|
|
7
7
|
import type { AuthInstance, StorageFacade } from '../runtime.js';
|
|
8
|
-
export interface ApiContextDeps<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown
|
|
8
|
+
export interface ApiContextDeps<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown>, TMessaging extends MessagingConfig | undefined = MessagingConfig> {
|
|
9
9
|
db: DbFor<TSchema>;
|
|
10
10
|
env: TEnv;
|
|
11
11
|
storage: StorageFacade;
|
|
12
|
-
|
|
12
|
+
messaging: MessagingFacadesFor<TMessaging>;
|
|
13
13
|
jobs: JobsRuntimeFacade;
|
|
14
14
|
realtime: RealtimeFacade<TSchema>;
|
|
15
15
|
auth: AuthInstance;
|
|
16
16
|
authResolver?: AuthSessionResolver;
|
|
17
17
|
logger?: BunderstackLogger;
|
|
18
18
|
}
|
|
19
|
-
export interface ApiContext<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown
|
|
19
|
+
export interface ApiContext<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown>, TMessaging extends MessagingConfig | undefined = MessagingConfig> {
|
|
20
20
|
db: DbFor<TSchema>;
|
|
21
21
|
env: TEnv;
|
|
22
22
|
storage: StorageFacade;
|
|
23
|
-
|
|
23
|
+
messaging: MessagingFacadesFor<TMessaging>;
|
|
24
24
|
jobs: JobsRuntimeFacade;
|
|
25
25
|
realtime: RealtimeFacade<TSchema>;
|
|
26
26
|
auth: AuthInstance;
|
|
@@ -43,5 +43,5 @@ export interface ApiContext<TSchema extends Record<string, unknown> = Record<str
|
|
|
43
43
|
activeOrganizationId: string | null;
|
|
44
44
|
} | undefined;
|
|
45
45
|
}
|
|
46
|
-
export declare function createApiContext<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown
|
|
46
|
+
export declare function createApiContext<TSchema extends Record<string, unknown> = Record<string, unknown>, TEnv = Record<string, unknown>, TMessaging extends MessagingConfig | undefined = MessagingConfig>(deps: ApiContextDeps<TSchema, TEnv, TMessaging>, request: Request): ApiContext<TSchema, TEnv, TMessaging>;
|
|
47
47
|
//# sourceMappingURL=context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AACxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK7D,MAAM,WAAW,cAAc,CAC7B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,UAAU,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe;IAEhE,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,GAAG,EAAE,IAAI,CAAA;IACT,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC1C,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IACjC,IAAI,EAAE,YAAY,CAAA;IAClB,YAAY,CAAC,EAAE,mBAAmB,CAAA;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAA;CAC3B;AAED,MAAM,WAAW,UAAU,CACzB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,UAAU,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe;IAEhE,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAClB,GAAG,EAAE,IAAI,CAAA;IACT,OAAO,EAAE,aAAa,CAAA;IACtB,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC1C,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IACjC,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,UAAU,EAAE,MAAM,OAAO,CAAC;QACxB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;QACvB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;KACpC,CAAC,CAAA;IACF;;;;;OAKG;IACH,WAAW,EAAE,MACT;QAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;QAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAChE,SAAS,CAAA;CACd;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,UAAU,SAAS,eAAe,GAAG,SAAS,GAAG,eAAe,EAEhE,IAAI,EAAE,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAC/C,OAAO,EAAE,OAAO,GACf,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CA8CvC"}
|
package/dist/api/context.js
CHANGED
package/dist/api/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAiD1C,MAAM,UAAU,gBAAgB,CAK9B,IAA+C,EAC/C,OAAgB;IAEhB,uEAAuE;IACvE,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,EAAE,CAAA;IACtC,IAAI,cAA2C,CAAA;IAC/C,IAAI,cAES,CAAA;IAEb,IAAI,cAES,CAAA;IAEb,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACtE,CAAC,OAAO,EAAE,EAAE;gBACV,cAAc,GAAG,OAAO,CAAA;gBACxB,OAAO,OAAO,CAAA;YAChB,CAAC,CACF,CAAA;QACH,CAAC;QACD,OAAO,cAAc,CAAA;IACvB,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,cAAc,CAAA;IAExC,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,CAAC,cAAc;YAAE,cAAc,GAAG,cAAc,CAAC,IAAI,EAAE,CAAA;QAC3D,OAAO,cAAc,CAAA;IACvB,CAAC,CAAA;IAED,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,aAAa;QACpC,OAAO;QACP,UAAU,EAAE,IAAI,OAAO,EAAE;QACzB,UAAU;QACV,UAAU;QACV,WAAW;KACZ,CAAA;AACH,CAAC","sourcesContent":["import type { AccessUser, AuthSessionResolver } from '../access'\nimport type { DbFor } from '../db'\nimport type { JobsRuntimeFacade } from '../jobs/define'\nimport type { BunderstackLogger } from '../logging'\nimport type { MessagingConfig, MessagingFacadesFor } from '../messaging'\nimport type { RealtimeFacade } from '../realtime/facade'\nimport type { AuthInstance, StorageFacade } from '../runtime'\n\nimport { resolveSession } from '../access'\nimport { consoleLogger } from '../logging'\n\nexport interface ApiContextDeps<\n TSchema extends Record<string, unknown> = Record<string, unknown>,\n TEnv = Record<string, unknown>,\n TMessaging extends MessagingConfig | undefined = MessagingConfig,\n> {\n db: DbFor<TSchema>\n env: TEnv\n storage: StorageFacade\n messaging: MessagingFacadesFor<TMessaging>\n jobs: JobsRuntimeFacade\n realtime: RealtimeFacade<TSchema>\n auth: AuthInstance\n authResolver?: AuthSessionResolver\n logger?: BunderstackLogger\n}\n\nexport interface ApiContext<\n TSchema extends Record<string, unknown> = Record<string, unknown>,\n TEnv = Record<string, unknown>,\n TMessaging extends MessagingConfig | undefined = MessagingConfig,\n> {\n db: DbFor<TSchema>\n env: TEnv\n storage: StorageFacade\n messaging: MessagingFacadesFor<TMessaging>\n jobs: JobsRuntimeFacade\n realtime: RealtimeFacade<TSchema>\n auth: AuthInstance\n logger: BunderstackLogger\n request: Request\n resHeaders: Headers\n getRawBody: () => Promise<string>\n getSession: () => Promise<{\n user: AccessUser | null\n activeOrganizationId: string | null\n }>\n /**\n * The session that some earlier code already resolved, or `undefined`.\n * Never starts a resolution, so a global middleware can log the caller\n * without removing the lazy session behavior that signed webhooks rely on.\n * Use it for observability only. Never use it for authorization.\n */\n peekSession: () =>\n | { user: AccessUser | null; activeOrganizationId: string | null }\n | undefined\n}\n\nexport function createApiContext<\n TSchema extends Record<string, unknown> = Record<string, unknown>,\n TEnv = Record<string, unknown>,\n TMessaging extends MessagingConfig | undefined = MessagingConfig,\n>(\n deps: ApiContextDeps<TSchema, TEnv, TMessaging>,\n request: Request,\n): ApiContext<TSchema, TEnv, TMessaging> {\n // Reserve the body stream before a transport codec consumes `request`.\n const rawBodyRequest = request.clone()\n let rawBodyPromise: Promise<string> | undefined\n let sessionPromise:\n | Promise<{ user: AccessUser | null; activeOrganizationId: string | null }>\n | undefined\n\n let settledSession:\n | { user: AccessUser | null; activeOrganizationId: string | null }\n | undefined\n\n const getSession = () => {\n if (!sessionPromise) {\n sessionPromise = resolveSession(deps.authResolver, request.headers).then(\n (session) => {\n settledSession = session\n return session\n },\n )\n }\n return sessionPromise\n }\n\n const peekSession = () => settledSession\n\n const getRawBody = () => {\n if (!rawBodyPromise) rawBodyPromise = rawBodyRequest.text()\n return rawBodyPromise\n }\n\n return {\n db: deps.db,\n env: deps.env,\n storage: deps.storage,\n messaging: deps.messaging,\n jobs: deps.jobs,\n realtime: deps.realtime,\n auth: deps.auth,\n logger: deps.logger ?? consoleLogger,\n request,\n resHeaders: new Headers(),\n getRawBody,\n getSession,\n peekSession,\n }\n}\n"]}
|
|
@@ -61,7 +61,7 @@ export type BuildTableCrudProceduresArgs<TSchema extends Record<string, unknown>
|
|
|
61
61
|
livePublisher?: RealtimePublisher;
|
|
62
62
|
};
|
|
63
63
|
export declare function buildTableCrudProcedures<TSchema extends Record<string, unknown>, TTable extends Table, TFilterable extends string = string, TSortable extends string = string>(args: BuildTableCrudProceduresArgs<TSchema, TTable>): {
|
|
64
|
-
list: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown
|
|
64
|
+
list: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.GenericSchema<ListInputFor<TTable, TFilterable, TSortable>, ListInputFor<TTable, TFilterable, TSortable>>, v.StrictObjectSchema<{
|
|
65
65
|
readonly items: v.ArraySchema<v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, undefined>;
|
|
66
66
|
readonly nextCursor: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
67
67
|
readonly hasMore: v.BooleanSchema<undefined>;
|
|
@@ -130,7 +130,7 @@ export declare function buildTableCrudProcedures<TSchema extends Record<string,
|
|
|
130
130
|
}>;
|
|
131
131
|
};
|
|
132
132
|
}, never>;
|
|
133
|
-
get: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown
|
|
133
|
+
get: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
134
134
|
readonly id: v.StringSchema<undefined>;
|
|
135
135
|
}, undefined>, v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, {
|
|
136
136
|
readonly BAD_REQUEST: {
|
|
@@ -190,7 +190,7 @@ export declare function buildTableCrudProcedures<TSchema extends Record<string,
|
|
|
190
190
|
}>;
|
|
191
191
|
};
|
|
192
192
|
}, Extract<TTable["$inferSelect"], import("@orpc/client").AnyORPCError>>;
|
|
193
|
-
create: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown
|
|
193
|
+
create: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.GenericSchema<Partial<TTable["$inferInsert"]>, Partial<TTable["$inferInsert"]>>, v.GenericSchema<TTable["$inferSelect"], TTable["$inferSelect"]>, {
|
|
194
194
|
readonly BAD_REQUEST: {
|
|
195
195
|
readonly data: v.OptionalSchema<v.StrictObjectSchema<{
|
|
196
196
|
readonly code: v.OptionalSchema<v.LiteralSchema<"BAD_REQUEST", undefined>, "BAD_REQUEST">;
|
|
@@ -248,7 +248,7 @@ export declare function buildTableCrudProcedures<TSchema extends Record<string,
|
|
|
248
248
|
}>;
|
|
249
249
|
};
|
|
250
250
|
}, Extract<TTable["$inferSelect"], import("@orpc/client").AnyORPCError>>;
|
|
251
|
-
update: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown
|
|
251
|
+
update: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.GenericSchema<{
|
|
252
252
|
id: string;
|
|
253
253
|
} & Partial<Omit<TTable["$inferInsert"], "id">>, {
|
|
254
254
|
id: string;
|
|
@@ -310,7 +310,7 @@ export declare function buildTableCrudProcedures<TSchema extends Record<string,
|
|
|
310
310
|
}>;
|
|
311
311
|
};
|
|
312
312
|
}, Extract<TTable["$inferSelect"], import("@orpc/client").AnyORPCError>>;
|
|
313
|
-
delete: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown
|
|
313
|
+
delete: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
314
314
|
readonly id: v.StringSchema<undefined>;
|
|
315
315
|
}, undefined>, v.UndefinedSchema<undefined>, {
|
|
316
316
|
readonly BAD_REQUEST: {
|
|
@@ -370,7 +370,7 @@ export declare function buildTableCrudProcedures<TSchema extends Record<string,
|
|
|
370
370
|
}>;
|
|
371
371
|
};
|
|
372
372
|
}, never>;
|
|
373
|
-
live: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown
|
|
373
|
+
live: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<TSchema, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.GenericSchema<LiveInputFor<TTable, TFilterable, TSortable>, LiveInputFor<TTable, TFilterable, TSortable>>, import("@orpc/contract").Schema<AsyncIteratorObject<{
|
|
374
374
|
type: "snapshot";
|
|
375
375
|
items: TTable["$inferSelect"][];
|
|
376
376
|
sort: string;
|
|
@@ -7,7 +7,7 @@ type RealtimeRouterOptions = {
|
|
|
7
7
|
};
|
|
8
8
|
export declare function buildRealtimeApiRouter(publisher: RealtimePublisher | undefined, access: ResolvedAccess, options?: RealtimeRouterOptions): {
|
|
9
9
|
realtime: {
|
|
10
|
-
changes: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<Record<string, unknown>, Record<string, unknown
|
|
10
|
+
changes: import("@orpc/server").DecoratedProcedure<import("./context.js").ApiContext<Record<string, unknown>, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
11
11
|
readonly tables: v.SchemaWithPipe<readonly [v.UnionSchema<[v.StringSchema<undefined>, v.ArraySchema<v.StringSchema<undefined>, undefined>], undefined>, v.TransformAction<string | string[], string[]>]>;
|
|
12
12
|
}, undefined>, import("@orpc/contract").Schema<AsyncIteratorObject<{
|
|
13
13
|
table: string;
|
|
@@ -6,7 +6,7 @@ import type { ApiContext } from './context.js';
|
|
|
6
6
|
export declare function buildStorageApiRouter(registry: BucketStorageRegistry, operations: StorageOperations): {
|
|
7
7
|
files: {
|
|
8
8
|
[k: string]: {
|
|
9
|
-
prepareUpload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown
|
|
9
|
+
prepareUpload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
10
10
|
readonly filename: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
11
11
|
readonly contentType: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
12
12
|
}, undefined>, v.VariantSchema<"mode", [v.StrictObjectSchema<{
|
|
@@ -76,7 +76,7 @@ export declare function buildStorageApiRouter(registry: BucketStorageRegistry, o
|
|
|
76
76
|
}>;
|
|
77
77
|
};
|
|
78
78
|
}, never>;
|
|
79
|
-
upload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown
|
|
79
|
+
upload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
80
80
|
readonly params: v.OptionalSchema<v.StrictObjectSchema<{}, undefined>, {}>;
|
|
81
81
|
readonly query: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
|
|
82
82
|
readonly headers: v.OptionalSchema<v.RecordSchema<v.StringSchema<undefined>, v.UnknownSchema, undefined>, {}>;
|
|
@@ -147,7 +147,7 @@ export declare function buildStorageApiRouter(registry: BucketStorageRegistry, o
|
|
|
147
147
|
}>;
|
|
148
148
|
};
|
|
149
149
|
}, never>;
|
|
150
|
-
confirmUpload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown
|
|
150
|
+
confirmUpload: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
151
151
|
readonly id: v.StringSchema<undefined>;
|
|
152
152
|
}, undefined>, v.StrictObjectSchema<{
|
|
153
153
|
readonly fileId: v.StringSchema<undefined>;
|
|
@@ -210,7 +210,7 @@ export declare function buildStorageApiRouter(registry: BucketStorageRegistry, o
|
|
|
210
210
|
}>;
|
|
211
211
|
};
|
|
212
212
|
}, never>;
|
|
213
|
-
download: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown
|
|
213
|
+
download: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
214
214
|
readonly params: v.StrictObjectSchema<{
|
|
215
215
|
readonly path: v.StringSchema<undefined>;
|
|
216
216
|
}, undefined>;
|
|
@@ -283,7 +283,7 @@ export declare function buildStorageApiRouter(registry: BucketStorageRegistry, o
|
|
|
283
283
|
}>;
|
|
284
284
|
};
|
|
285
285
|
}, never>;
|
|
286
|
-
delete: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown
|
|
286
|
+
delete: import("@orpc/server").DecoratedProcedure<ApiContext<Record<string, unknown>, Record<string, unknown>, import("..").MessagingConfig> & object, object, v.StrictObjectSchema<{
|
|
287
287
|
readonly path: v.StringSchema<undefined>;
|
|
288
288
|
}, undefined>, v.UndefinedSchema<undefined>, {
|
|
289
289
|
readonly BAD_REQUEST: {
|
|
@@ -1,17 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { EnvConfigInput } from './env.js';
|
|
2
|
+
import type { InspectedDefinition } from './inspect.js';
|
|
2
3
|
import type { TickResult } from './jobs/index.js';
|
|
3
4
|
import type { RuntimeOverrides } from './runtime.js';
|
|
4
|
-
import type { StorageConfigInput } from './storage/buckets.js';
|
|
5
5
|
export declare const BACKEND_INTERNALS: unique symbol;
|
|
6
|
-
export type ResolvedDeclaration = {
|
|
7
|
-
readonly config: {
|
|
8
|
-
readonly database: {
|
|
9
|
-
readonly adapter: DatabaseAdapter;
|
|
10
|
-
};
|
|
11
|
-
readonly storage?: StorageConfigInput;
|
|
12
|
-
};
|
|
13
|
-
readonly jobsDefs: unknown;
|
|
14
|
-
};
|
|
15
6
|
export type RuntimeJobFailure = {
|
|
16
7
|
id: string;
|
|
17
8
|
name: string;
|
|
@@ -37,7 +28,8 @@ export type RuntimeTestingHandle = {
|
|
|
37
28
|
}>;
|
|
38
29
|
};
|
|
39
30
|
export type BackendInternals<TApp> = {
|
|
40
|
-
readonly
|
|
41
|
-
|
|
31
|
+
readonly envSchema: EnvConfigInput | undefined;
|
|
32
|
+
inspect(source: Record<string, string | undefined>): InspectedDefinition;
|
|
33
|
+
start(source: Record<string, string | undefined>, overrides?: RuntimeOverrides, inspected?: InspectedDefinition): Promise<TApp>;
|
|
42
34
|
};
|
|
43
35
|
//# sourceMappingURL=backend-internals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-internals.d.ts","sourceRoot":"","sources":["../src/backend-internals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"backend-internals.d.ts","sourceRoot":"","sources":["../src/backend-internals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAA;AAEjD,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAEtC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,KAAK,GAAG,MAAM,CAAA;IACpB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;IACtD,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACtC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5B,QAAQ,EAAE,MAAM,CAAA;QAChB,MAAM,EAAE,iBAAiB,EAAE,CAAA;QAC3B,IAAI,EAAE,cAAc,EAAE,CAAA;KACvB,CAAC,CAAA;CACH,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,IAAI,IAAI;IACnC,QAAQ,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,CAAA;IAC9C,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,mBAAmB,CAAA;IACxE,KAAK,CACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC1C,SAAS,CAAC,EAAE,gBAAgB,EAC5B,SAAS,CAAC,EAAE,mBAAmB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAA;CACjB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend-internals.js","sourceRoot":"","sources":["../src/backend-internals.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CACxD,+BAA+B,CAChC,CAAA","sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"backend-internals.js","sourceRoot":"","sources":["../src/backend-internals.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,iBAAiB,GAAkB,MAAM,CAAC,GAAG,CACxD,+BAA+B,CAChC,CAAA","sourcesContent":["import type { EnvConfigInput } from './env'\nimport type { InspectedDefinition } from './inspect'\nimport type { TickResult } from './jobs'\nimport type { RuntimeOverrides } from './runtime'\n\nexport const BACKEND_INTERNALS: unique symbol = Symbol.for(\n 'bunderstack.backend-internals',\n)\n\nexport type RuntimeJobFailure = {\n id: string\n name: string\n attempts: number\n lastError: string | null\n}\n\nexport type RuntimeTestJob = {\n id: string\n name: string\n kind: 'job' | 'cron'\n status: 'pending' | 'running' | 'succeeded' | 'failed'\n attempts: number\n runAt: number\n dedupeKey: string | null\n lastError: string | null\n}\n\nexport type RuntimeTestingHandle = {\n tick(now: number): Promise<TickResult>\n inspect(now: number): Promise<{\n runnable: number\n failed: RuntimeJobFailure[]\n jobs: RuntimeTestJob[]\n }>\n}\n\nexport type BackendInternals<TApp> = {\n readonly envSchema: EnvConfigInput | undefined\n inspect(source: Record<string, string | undefined>): InspectedDefinition\n start(\n source: Record<string, string | undefined>,\n overrides?: RuntimeOverrides,\n inspected?: InspectedDefinition,\n ): Promise<TApp>\n}\n"]}
|
package/dist/backend.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { AnyRouter as AnyORPCRouter } from '@orpc/server';
|
|
2
2
|
import type { TableAccessInput } from './access.js';
|
|
3
|
-
import type { BunderstackConfig } from './config.js';
|
|
3
|
+
import type { BunderstackConfig, RealtimeConfigInput } from './config.js';
|
|
4
4
|
import type { EnvConfigInput, ValidatedEnv } from './env.js';
|
|
5
5
|
import type { BunderstackJobsBuilder, JobsDefs } from './jobs/index.js';
|
|
6
6
|
import type { BunderstackManifest } from './manifest.js';
|
|
7
|
+
import type { MessagingConfig } from './messaging/index.js';
|
|
7
8
|
import type { BunderstackApp, BucketNamesOf } from './runtime.js';
|
|
8
9
|
import type { StorageConfigInput } from './storage/buckets.js';
|
|
9
10
|
import type { TestMethod } from './testing/fixture.js';
|
|
@@ -12,15 +13,48 @@ export type StartOptions = {
|
|
|
12
13
|
env?: Record<string, string | undefined>;
|
|
13
14
|
};
|
|
14
15
|
export type BunderstackBackend<TApp> = {
|
|
15
|
-
|
|
16
|
+
inspect(options?: StartOptions): BunderstackManifest;
|
|
16
17
|
start(options?: StartOptions): Promise<TApp>;
|
|
17
18
|
test: TestMethod<TApp>;
|
|
18
19
|
readonly [BACKEND_INTERNALS]: BackendInternals<TApp>;
|
|
19
20
|
};
|
|
20
|
-
export type BunderstackDefinitionConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TEnv extends EnvConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined> = Omit<BunderstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter>, 'realtime'> & {
|
|
21
|
+
export type BunderstackDefinitionConfig<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TEnv extends EnvConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined, TMessaging extends MessagingConfig | undefined = undefined> = Omit<BunderstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter>, 'realtime' | 'messaging' | 'api'> & {
|
|
22
|
+
/**
|
|
23
|
+
* An inline `api` or `jobs` builder receives the open `MessagingConfig`, not
|
|
24
|
+
* `TMessaging`. Naming `TMessaging` in a callback parameter makes TypeScript
|
|
25
|
+
* fix it before it reads the sibling `messaging` property, and the whole
|
|
26
|
+
* declaration then loses its inferred channels. Declare the builder in its
|
|
27
|
+
* own module with an annotated parameter to type `ctx.messaging` exactly —
|
|
28
|
+
* `defineApi({ schema, env, messaging })` and `BunderstackJobsBuilder` both
|
|
29
|
+
* take the channel record.
|
|
30
|
+
*/
|
|
21
31
|
realtime?: TRealtime;
|
|
22
|
-
|
|
32
|
+
messaging?: TMessaging;
|
|
33
|
+
api?: TCustomApiRouter | ((builder: import('./api/builder.js').BunderstackApiBuilder<TSchema, ValidatedEnv<TEnv>, MessagingConfig>) => TCustomApiRouter);
|
|
34
|
+
jobs?: TJobsDefs | ((builder: BunderstackJobsBuilder<TSchema, ValidatedEnv<TEnv>, MessagingConfig>) => TJobsDefs);
|
|
23
35
|
};
|
|
24
36
|
export declare function isBunderstackBackend(value: unknown): value is BunderstackBackend<unknown>;
|
|
25
|
-
|
|
37
|
+
/**
|
|
38
|
+
* A configuration slot that may read validated environment values. The shape a
|
|
39
|
+
* slot produces reaches the manifest, so a callback belongs here to supply a
|
|
40
|
+
* key, a URL, or a sender — never to change which channels, buckets, or tables
|
|
41
|
+
* exist. Blueprint generation resolves the declaration against two accepted
|
|
42
|
+
* environments and rejects a shape that differs between them.
|
|
43
|
+
*/
|
|
44
|
+
export type EnvAware<TEnv extends EnvConfigInput | undefined, T> = T | ((env: ValidatedEnv<NoInfer<TEnv>>) => T);
|
|
45
|
+
export type DatabaseSlot = BunderstackConfig<Record<string, unknown>, undefined, undefined, undefined, undefined>['database'];
|
|
46
|
+
/**
|
|
47
|
+
* The whole application in one object. `schema`, `access`, and the routers are
|
|
48
|
+
* plain data; the slots that hold credentials also accept a function of the
|
|
49
|
+
* validated environment.
|
|
50
|
+
*/
|
|
51
|
+
export type BunderstackDeclaration<TSchema extends Record<string, unknown>, TEnv extends EnvConfigInput | undefined = undefined, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TStorage extends StorageConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined, TMessaging extends MessagingConfig | undefined = undefined> = Omit<BunderstackDefinitionConfig<TSchema, TAccess, TStorage, TEnv, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging>, 'database' | 'storage' | 'messaging' | 'realtime'> & {
|
|
52
|
+
/** Declared environment. Its names reach the blueprint; its values never do. */
|
|
53
|
+
env?: TEnv;
|
|
54
|
+
database: EnvAware<TEnv, DatabaseSlot>;
|
|
55
|
+
storage?: EnvAware<TEnv, TStorage>;
|
|
56
|
+
messaging?: EnvAware<TEnv, TMessaging>;
|
|
57
|
+
realtime?: EnvAware<TEnv, TRealtime>;
|
|
58
|
+
};
|
|
59
|
+
export declare function bunderstack<TSchema extends Record<string, unknown>, const TEnv extends EnvConfigInput | undefined = undefined, const TAccess extends Record<string, TableAccessInput> | undefined = undefined, const TStorage extends StorageConfigInput | undefined = undefined, const TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, const TRealtime extends RealtimeConfigInput | undefined = undefined, const TMessaging extends MessagingConfig | undefined = undefined>(declaration: BunderstackDeclaration<TSchema, TEnv, TAccess, TStorage, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging>): BunderstackBackend<BunderstackApp<TSchema, TAccess, BucketNamesOf<TStorage>, TEnv, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging>>;
|
|
26
60
|
//# sourceMappingURL=backend.d.ts.map
|
package/dist/backend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AAE9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
|