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
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createMessaging as materialize } from './runtime.js';
|
|
2
|
+
/**
|
|
3
|
+
* Builds channel facades outside a started app, for code that runs before or
|
|
4
|
+
* beside it — a Better Auth builder sending an invitation, a script, a
|
|
5
|
+
* one-off worker. Channels behave exactly as they do on `app.messaging`,
|
|
6
|
+
* capture included.
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* export const auth = defineAuth(schema, ({ db, env }) => {
|
|
10
|
+
* const messaging = createMessaging({ email: resend({ from: env.EMAIL_FROM }) }, { env, db })
|
|
11
|
+
* return { …, sendInvitation: (to) => messaging.email.send({ to, … }) }
|
|
12
|
+
* })
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export function createMessaging(channels, context) {
|
|
16
|
+
return materialize(channels, { env: context.env, db: context.db });
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=standalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standalone.js","sourceRoot":"","sources":["../../src/messaging/standalone.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,IAAI,WAAW,EAAE,MAAM,WAAW,CAAA;AAY1D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,QAAiB,EACjB,OAAyB;IAEzB,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC","sourcesContent":["import type { AnyDb } from '../dialect'\nimport type { BaseEnv } from '../env'\nimport type { MessagingConfig, MessagingFacades } from './types'\n\nimport { createMessaging as materialize } from './runtime'\n\n/**\n * What a standalone messaging facade needs. `db` is the application's own\n * connection: pass it so captured and sent messages reach the same journal the\n * app writes, and omit it only when there is no database to write to.\n */\nexport type MessagingContext = {\n env: BaseEnv\n db?: AnyDb\n}\n\n/**\n * Builds channel facades outside a started app, for code that runs before or\n * beside it — a Better Auth builder sending an invitation, a script, a\n * one-off worker. Channels behave exactly as they do on `app.messaging`,\n * capture included.\n *\n * ```ts\n * export const auth = defineAuth(schema, ({ db, env }) => {\n * const messaging = createMessaging({ email: resend({ from: env.EMAIL_FROM }) }, { env, db })\n * return { …, sendInvitation: (to) => messaging.email.send({ to, … }) }\n * })\n * ```\n */\nexport function createMessaging<const TConfig extends MessagingConfig>(\n channels: TConfig,\n context: MessagingContext,\n): MessagingFacades<TConfig> {\n return materialize(channels, { env: context.env, db: context.db })\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type MessagingDescriptor } from './types.js';
|
|
2
|
+
export type TelegramMessage = {
|
|
3
|
+
to: string | number;
|
|
4
|
+
text: string;
|
|
5
|
+
parseMode?: 'HTML' | 'MarkdownV2';
|
|
6
|
+
};
|
|
7
|
+
export type SentTelegramMessage = {
|
|
8
|
+
id?: string;
|
|
9
|
+
providerId?: string;
|
|
10
|
+
};
|
|
11
|
+
export type TelegramConfig = {
|
|
12
|
+
botToken?: string;
|
|
13
|
+
};
|
|
14
|
+
export type TelegramDescriptor = MessagingDescriptor<'telegram', 'telegram', TelegramMessage, SentTelegramMessage, TelegramConfig>;
|
|
15
|
+
export declare function telegram(config?: TelegramConfig): TelegramDescriptor;
|
|
16
|
+
//# sourceMappingURL=telegram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.d.ts","sourceRoot":"","sources":["../../src/messaging/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAE9D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,CAAA;CAClC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAElD,MAAM,MAAM,kBAAkB,GAAG,mBAAmB,CAClD,UAAU,EACV,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,CACf,CAAA;AAED,wBAAgB,QAAQ,CAAC,MAAM,GAAE,cAAmB,GAAG,kBAAkB,CAExE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../src/messaging/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,SAAS,CAAA;AAuB9D,MAAM,UAAU,QAAQ,CAAC,SAAyB,EAAE;IAClD,OAAO,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;AACnD,CAAC","sourcesContent":["import { descriptor, type MessagingDescriptor } from './types'\n\nexport type TelegramMessage = {\n to: string | number\n text: string\n parseMode?: 'HTML' | 'MarkdownV2'\n}\n\nexport type SentTelegramMessage = {\n id?: string\n providerId?: string\n}\n\nexport type TelegramConfig = { botToken?: string }\n\nexport type TelegramDescriptor = MessagingDescriptor<\n 'telegram',\n 'telegram',\n TelegramMessage,\n SentTelegramMessage,\n TelegramConfig\n>\n\nexport function telegram(config: TelegramConfig = {}): TelegramDescriptor {\n return descriptor('telegram', 'telegram', config)\n}\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare const MESSAGING_DESCRIPTOR: unique symbol;
|
|
2
|
+
export type MessagingDescriptor<TKind extends string, TProvider extends string, TInput, TResult, TConfig = unknown> = {
|
|
3
|
+
readonly kind: TKind;
|
|
4
|
+
readonly provider: TProvider;
|
|
5
|
+
readonly config: Readonly<TConfig>;
|
|
6
|
+
readonly [MESSAGING_DESCRIPTOR]: {
|
|
7
|
+
readonly input: TInput;
|
|
8
|
+
readonly result: TResult;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
export type AnyMessagingDescriptor = MessagingDescriptor<string, string, any, any, any>;
|
|
12
|
+
export type MessagingConfig = Record<string, AnyMessagingDescriptor>;
|
|
13
|
+
export type MessagingFacade<TDescriptor extends AnyMessagingDescriptor> = {
|
|
14
|
+
send(input: TDescriptor[typeof MESSAGING_DESCRIPTOR]['input']): Promise<TDescriptor[typeof MESSAGING_DESCRIPTOR]['result']>;
|
|
15
|
+
};
|
|
16
|
+
export type MessagingFacades<TConfig extends MessagingConfig> = {
|
|
17
|
+
readonly [K in keyof TConfig]: MessagingFacade<TConfig[K]>;
|
|
18
|
+
};
|
|
19
|
+
export type MessagingFacadesFor<TConfig extends MessagingConfig | undefined> = TConfig extends MessagingConfig ? MessagingFacades<TConfig> : Record<never, never>;
|
|
20
|
+
export declare function descriptor<TKind extends string, TProvider extends string, TInput, TResult, TConfig>(kind: TKind, provider: TProvider, config: TConfig): MessagingDescriptor<TKind, TProvider, TInput, TResult, TConfig>;
|
|
21
|
+
export declare function isMessagingDescriptor(value: unknown): value is AnyMessagingDescriptor;
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/messaging/types.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,EAAE,OAAO,MAEzC,CAAA;AAED,MAAM,MAAM,mBAAmB,CAC7B,KAAK,SAAS,MAAM,EACpB,SAAS,SAAS,MAAM,EACxB,MAAM,EACN,OAAO,EACP,OAAO,GAAG,OAAO,IACf;IACF,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAClC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,EAAE;QAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KACzB,CAAA;CACF,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CACtD,MAAM,EACN,MAAM,EACN,GAAG,EACH,GAAG,EACH,GAAG,CACJ,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;AAEpE,MAAM,MAAM,eAAe,CAAC,WAAW,SAAS,sBAAsB,IAAI;IACxE,IAAI,CACF,KAAK,EAAE,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAC,OAAO,CAAC,GACvD,OAAO,CAAC,WAAW,CAAC,OAAO,oBAAoB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;CAC/D,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,OAAO,SAAS,eAAe,IAAI;IAC9D,QAAQ,EAAE,CAAC,IAAI,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAA;AAED,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,eAAe,GAAG,SAAS,IACzE,OAAO,SAAS,eAAe,GAC3B,gBAAgB,CAAC,OAAO,CAAC,GACzB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAE1B,wBAAgB,UAAU,CACxB,KAAK,SAAS,MAAM,EACpB,SAAS,SAAS,MAAM,EACxB,MAAM,EACN,OAAO,EACP,OAAO,EAEP,IAAI,EAAE,KAAK,EACX,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,OAAO,GACd,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAOjE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,sBAAsB,CAQjC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const MESSAGING_DESCRIPTOR = Symbol.for('bunderstack.messaging-descriptor');
|
|
2
|
+
export function descriptor(kind, provider, config) {
|
|
3
|
+
return Object.freeze({
|
|
4
|
+
kind,
|
|
5
|
+
provider,
|
|
6
|
+
config: Object.freeze({ ...config }),
|
|
7
|
+
[MESSAGING_DESCRIPTOR]: undefined,
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export function isMessagingDescriptor(value) {
|
|
11
|
+
return (typeof value === 'object' &&
|
|
12
|
+
value !== null &&
|
|
13
|
+
MESSAGING_DESCRIPTOR in value &&
|
|
14
|
+
typeof value.kind === 'string' &&
|
|
15
|
+
typeof value.provider === 'string');
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/messaging/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAkB,MAAM,CAAC,GAAG,CAC3D,kCAAkC,CACnC,CAAA;AA2CD,MAAM,UAAU,UAAU,CAOxB,IAAW,EACX,QAAmB,EACnB,MAAe;IAEf,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI;QACJ,QAAQ;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QACpC,CAAC,oBAAoB,CAAC,EAAE,SAAkB;KAC3C,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAc;IAEd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,oBAAoB,IAAI,KAAK;QAC7B,OAAQ,KAAgC,CAAC,IAAI,KAAK,QAAQ;QAC1D,OAAQ,KAAgC,CAAC,QAAQ,KAAK,QAAQ,CAC/D,CAAA;AACH,CAAC","sourcesContent":["export const MESSAGING_DESCRIPTOR: unique symbol = Symbol.for(\n 'bunderstack.messaging-descriptor',\n)\n\nexport type MessagingDescriptor<\n TKind extends string,\n TProvider extends string,\n TInput,\n TResult,\n TConfig = unknown,\n> = {\n readonly kind: TKind\n readonly provider: TProvider\n readonly config: Readonly<TConfig>\n readonly [MESSAGING_DESCRIPTOR]: {\n readonly input: TInput\n readonly result: TResult\n }\n}\n\nexport type AnyMessagingDescriptor = MessagingDescriptor<\n string,\n string,\n any,\n any,\n any\n>\n\nexport type MessagingConfig = Record<string, AnyMessagingDescriptor>\n\nexport type MessagingFacade<TDescriptor extends AnyMessagingDescriptor> = {\n send(\n input: TDescriptor[typeof MESSAGING_DESCRIPTOR]['input'],\n ): Promise<TDescriptor[typeof MESSAGING_DESCRIPTOR]['result']>\n}\n\nexport type MessagingFacades<TConfig extends MessagingConfig> = {\n readonly [K in keyof TConfig]: MessagingFacade<TConfig[K]>\n}\n\nexport type MessagingFacadesFor<TConfig extends MessagingConfig | undefined> =\n TConfig extends MessagingConfig\n ? MessagingFacades<TConfig>\n : Record<never, never>\n\nexport function descriptor<\n TKind extends string,\n TProvider extends string,\n TInput,\n TResult,\n TConfig,\n>(\n kind: TKind,\n provider: TProvider,\n config: TConfig,\n): MessagingDescriptor<TKind, TProvider, TInput, TResult, TConfig> {\n return Object.freeze({\n kind,\n provider,\n config: Object.freeze({ ...config }),\n [MESSAGING_DESCRIPTOR]: undefined as never,\n })\n}\n\nexport function isMessagingDescriptor(\n value: unknown,\n): value is AnyMessagingDescriptor {\n return (\n typeof value === 'object' &&\n value !== null &&\n MESSAGING_DESCRIPTOR in value &&\n typeof (value as AnyMessagingDescriptor).kind === 'string' &&\n typeof (value as AnyMessagingDescriptor).provider === 'string'\n )\n}\n"]}
|
package/dist/runtime.d.ts
CHANGED
|
@@ -7,11 +7,12 @@ import type { RuntimeTestingHandle } from './backend-internals.js';
|
|
|
7
7
|
import type { DatabaseConnection } from './database/adapter.js';
|
|
8
8
|
import type { DbFor } from './db.js';
|
|
9
9
|
import type { BunderstackJobsBuilder, JobsDefs, JobsFacade, StartWorkerOptions, WorkerHandle } from './jobs/index.js';
|
|
10
|
+
import type { MessagingConfig, MessagingFacadesFor } from './messaging/index.js';
|
|
11
|
+
import type { MessagingAdapter } from './messaging/runtime.js';
|
|
10
12
|
import type { ResolvedStorageBuckets, StorageConfigInput } from './storage/buckets.js';
|
|
11
13
|
import type { StorageAdapter } from './storage/index.js';
|
|
12
14
|
import { createAuth } from './auth.js';
|
|
13
15
|
import { type BunderstackConfig } from './config.js';
|
|
14
|
-
import { type EmailAdapter, type EmailFacade } from './email.js';
|
|
15
16
|
import { type EnvConfigInput, type ValidatedEnv } from './env.js';
|
|
16
17
|
import { type LifecycleStatus } from './lifecycle.js';
|
|
17
18
|
import { type BunderstackLogger } from './logging.js';
|
|
@@ -20,7 +21,7 @@ export type AuthInstance = ReturnType<typeof createAuth>;
|
|
|
20
21
|
export type RuntimeOverrides = {
|
|
21
22
|
database?: DatabaseConnection;
|
|
22
23
|
resolvedStorage?: ResolvedStorageBuckets;
|
|
23
|
-
|
|
24
|
+
messagingAdapters?: Record<string, MessagingAdapter>;
|
|
24
25
|
forceMemoryRealtime?: boolean;
|
|
25
26
|
backgroundAutoStart?: false;
|
|
26
27
|
authResolver?: AuthSessionResolver;
|
|
@@ -76,15 +77,15 @@ export type AppRunWorkerOptions = AppStartWorkerOptions & {
|
|
|
76
77
|
export type BucketNamesOf<TStorage> = TStorage extends {
|
|
77
78
|
buckets: infer B extends Record<string, unknown>;
|
|
78
79
|
} ? keyof B & string : string;
|
|
79
|
-
export type BunderstackApp<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TBuckets extends string = string, TEnv extends EnvConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined> = {
|
|
80
|
+
export type BunderstackApp<TSchema extends Record<string, unknown>, TAccess extends Record<string, TableAccessInput> | undefined = undefined, TBuckets extends string = string, TEnv extends EnvConfigInput | undefined = undefined, TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, TRealtime = undefined, TMessaging extends MessagingConfig | undefined = undefined> = {
|
|
80
81
|
handler: (req: Request) => Promise<Response>;
|
|
81
82
|
db: DbFor<TSchema>;
|
|
82
83
|
auth: AuthInstance;
|
|
83
84
|
storage: StorageFacade;
|
|
84
85
|
/** Validated env: bunderstack's base vars plus the config's `env` extension. */
|
|
85
86
|
env: ValidatedEnv<TEnv>;
|
|
86
|
-
/**
|
|
87
|
-
|
|
87
|
+
/** Named, provider-specific outbound messaging channels. */
|
|
88
|
+
messaging: MessagingFacadesFor<TMessaging>;
|
|
88
89
|
/** Job queue facade; always present — enqueue throws when jobs aren't configured. */
|
|
89
90
|
jobs: JobsFacade<TJobsDefs extends JobsDefs ? TJobsDefs : Record<never, never>>;
|
|
90
91
|
/** Typed custom row publication; enabled=false/no-op when realtime is off. */
|
|
@@ -112,10 +113,11 @@ export type BunderstackApp<TSchema extends Record<string, unknown>, TAccess exte
|
|
|
112
113
|
] extends [false | undefined] ? {} : RealtimeApiRouter>;
|
|
113
114
|
};
|
|
114
115
|
};
|
|
115
|
-
export declare function materializeBunderstack<TSchema extends Record<string, unknown>, const TAccess extends Record<string, TableAccessInput> | undefined = undefined, const TStorage extends StorageConfigInput | undefined = undefined, const TEnv extends EnvConfigInput | undefined = undefined, const TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, const TRealtime extends BunderstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter>['realtime'] = undefined>(options: BunderstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter> & {
|
|
116
|
+
export declare function materializeBunderstack<TSchema extends Record<string, unknown>, const TAccess extends Record<string, TableAccessInput> | undefined = undefined, const TStorage extends StorageConfigInput | undefined = undefined, const TEnv extends EnvConfigInput | undefined = undefined, const TJobsDefs extends JobsDefs | undefined = undefined, TCustomApiRouter extends AnyORPCRouter | undefined = undefined, const TRealtime extends BunderstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter>['realtime'] = undefined, const TMessaging extends MessagingConfig | undefined = undefined>(options: BunderstackConfig<TSchema, TAccess, TStorage, TEnv, TCustomApiRouter> & {
|
|
116
117
|
realtime?: TRealtime;
|
|
117
|
-
|
|
118
|
-
|
|
118
|
+
messaging?: TMessaging;
|
|
119
|
+
jobs?: TJobsDefs | ((j: BunderstackJobsBuilder<TSchema, ValidatedEnv<TEnv>, TMessaging>) => TJobsDefs);
|
|
120
|
+
}, source: Record<string, string | undefined>, overrides?: RuntimeOverrides, env?: ValidatedEnv<TEnv>): Promise<BunderstackApp<TSchema, TAccess, BucketNamesOf<TStorage>, TEnv, TJobsDefs, TCustomApiRouter, TRealtime, TMessaging>>;
|
|
119
121
|
export { listSpec } from './api/list-spec.js';
|
|
120
122
|
export type { ListSpecOptions } from './api/list-spec.js';
|
|
121
123
|
export type { BunderstackDb, BunderstackTx } from './db.js';
|
|
@@ -128,8 +130,7 @@ export { validateEnv, createClientEnv, BunderstackEnvError } from './env.js';
|
|
|
128
130
|
export type { EnvConfigInput, BaseEnv, ValidatedEnv } from './env.js';
|
|
129
131
|
export { buildManifest, parseManifest } from './manifest.js';
|
|
130
132
|
export type { BunderstackManifest, ManifestEnvVar } from './manifest.js';
|
|
131
|
-
export {
|
|
132
|
-
export type { EmailMessage, EmailAdapter, EmailConfigInput, EmailFacade, } from './email.js';
|
|
133
|
+
export type { EmailMessage, EmailAdapter } from './email.js';
|
|
133
134
|
export { createJobsBuilder } from './jobs/index.js';
|
|
134
135
|
export type { BunderstackJobContext, BunderstackJobsBuilder, BackgroundDefinition, BackgroundDefs, CronDefinition, CronInvocation, EnqueueOptions, JobContext, JobDefinition, JobsDefs, JobsFacade, JobsRuntimeFacade, QueueJobDefinition, QueueJobKeys, RunWorkerOptions, StartWorkerOptions, WorkerHandle, } from './jobs/index.js';
|
|
135
136
|
export { defineAccess, validateAndResolveAccess, checkAccess, AUTH_TABLE_NAMES, } from './access.js';
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AAS9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime.js
CHANGED
|
@@ -5,7 +5,6 @@ import { OpenAPIHandler } from '@orpc/openapi/fetch';
|
|
|
5
5
|
import { RPCHandler } from '@orpc/server/fetch';
|
|
6
6
|
import { ValibotToJsonSchemaConverter } from '@orpc/valibot';
|
|
7
7
|
import { validateAndResolveAccess } from './access.js';
|
|
8
|
-
import { createApiBuilder } from './api/builder.js';
|
|
9
8
|
import { createApiContext } from './api/context.js';
|
|
10
9
|
import { buildCrudApiRouter } from './api/crud-router.js';
|
|
11
10
|
import { mergeOpenAPISpecs } from './api/openapi.js';
|
|
@@ -18,13 +17,13 @@ import { resolveConfig } from './config.js';
|
|
|
18
17
|
import { resolveAuthConfig, resolveRealtimeRedisUrl } from './config.js';
|
|
19
18
|
import { createDb } from './db.js';
|
|
20
19
|
import { detectDialect } from './dialect.js';
|
|
21
|
-
import {
|
|
22
|
-
import { validateEnv } from './env.js';
|
|
20
|
+
import {} from './env.js';
|
|
23
21
|
import { buildHandler } from './handler.js';
|
|
24
22
|
import { withInternalTables } from './internal-tables.js';
|
|
25
|
-
import {
|
|
23
|
+
import { createJobRunner, enqueueJob, startJobWorker } from './jobs/index.js';
|
|
26
24
|
import { Lifecycle } from './lifecycle.js';
|
|
27
25
|
import { consoleLogger } from './logging.js';
|
|
26
|
+
import { createMessaging } from './messaging/runtime.js';
|
|
28
27
|
import { PROVISION_INTERNALS, } from './provision-internals.js';
|
|
29
28
|
import { buildReadinessReport } from './readiness.js';
|
|
30
29
|
import { createReadinessProbes } from './readiness-probes.js';
|
|
@@ -57,25 +56,14 @@ function waitForWorkerShutdown(signal, installProcessListeners) {
|
|
|
57
56
|
}
|
|
58
57
|
/** Default age before an unconfirmed `pending` file is treated as an orphan. */
|
|
59
58
|
const DEFAULT_PENDING_TTL_MS = 30 * 60_000;
|
|
60
|
-
export async function materializeBunderstack(options, source, overrides = {}) {
|
|
59
|
+
export async function materializeBunderstack(options, source, overrides = {}, inspectedEnv) {
|
|
61
60
|
const logger = overrides.logger ?? consoleLogger;
|
|
62
61
|
const dialect = detectDialect(options.schema);
|
|
63
|
-
const jobsDefs = options.jobs
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (jobsDefs)
|
|
69
|
-
validateJobsDefs(jobsDefs);
|
|
70
|
-
// Env is validated FIRST: the app refuses to boot on missing/invalid vars,
|
|
71
|
-
// and everything downstream consumes the result.
|
|
72
|
-
const env = validateEnv(options.env, {
|
|
73
|
-
emailProvider: overrides.emailAdapter === undefined
|
|
74
|
-
? (source.BUNDERSTACK_EMAIL_PROVIDER ?? emailProviderTag(options.email))
|
|
75
|
-
: undefined,
|
|
76
|
-
defaultDatabaseUrl: dialect === 'pg' ? 'file:./data.pglite' : 'file:./data.db',
|
|
77
|
-
source,
|
|
78
|
-
});
|
|
62
|
+
const jobsDefs = options.jobs;
|
|
63
|
+
if (!inspectedEnv) {
|
|
64
|
+
throw new Error('[bunderstack] runtime requires an inspected environment');
|
|
65
|
+
}
|
|
66
|
+
const env = inspectedEnv;
|
|
79
67
|
const resolvedConfig = resolveConfig(options, env, source);
|
|
80
68
|
const config = {
|
|
81
69
|
...resolvedConfig,
|
|
@@ -93,10 +81,10 @@ export async function materializeBunderstack(options, source, overrides = {}) {
|
|
|
93
81
|
...config.database,
|
|
94
82
|
dialect,
|
|
95
83
|
});
|
|
96
|
-
const
|
|
84
|
+
const messaging = createMessaging((options.messaging ?? {}), {
|
|
97
85
|
env,
|
|
98
86
|
db,
|
|
99
|
-
|
|
87
|
+
adapterOverrides: overrides.messagingAdapters,
|
|
100
88
|
});
|
|
101
89
|
if (closeDatabase)
|
|
102
90
|
lifecycle.add(closeDatabase);
|
|
@@ -111,7 +99,10 @@ export async function materializeBunderstack(options, source, overrides = {}) {
|
|
|
111
99
|
// An `auth` builder gets the user-facing db, so better-auth hooks in another
|
|
112
100
|
// file can write through the app's own connection without importing the app.
|
|
113
101
|
const authConfig = resolveAuthConfig(config.auth, { db: userDb, env });
|
|
114
|
-
const
|
|
102
|
+
const authEmail = options.messaging?.email?.kind === 'email'
|
|
103
|
+
? messaging.email
|
|
104
|
+
: undefined;
|
|
105
|
+
const auth = createAuth(db, withEmailAuthDefaults(authConfig, authEmail ?? { send: async () => ({}) }, Boolean(authEmail)), dialect, options.schema);
|
|
115
106
|
// Internal routers consume the narrow AuthSessionResolver contract, not the
|
|
116
107
|
// raw better-auth instance. app.auth still exposes `auth` unchanged. An app
|
|
117
108
|
// whose schema declares no better-auth models gets no resolver at all, so
|
|
@@ -249,7 +240,7 @@ export async function materializeBunderstack(options, source, overrides = {}) {
|
|
|
249
240
|
? createJobRunner({
|
|
250
241
|
db,
|
|
251
242
|
defs: resolvedDefs,
|
|
252
|
-
ctx: { db: userDb, env,
|
|
243
|
+
ctx: { db: userDb, env, messaging, storage, realtime },
|
|
253
244
|
logger,
|
|
254
245
|
})
|
|
255
246
|
: undefined;
|
|
@@ -329,9 +320,7 @@ export async function materializeBunderstack(options, source, overrides = {}) {
|
|
|
329
320
|
realtime,
|
|
330
321
|
livePublisher: publisher,
|
|
331
322
|
});
|
|
332
|
-
const customApiRouter =
|
|
333
|
-
? options.api(createApiBuilder())
|
|
334
|
-
: options.api;
|
|
323
|
+
const customApiRouter = options.api;
|
|
335
324
|
const readinessProbes = createReadinessProbes(userDb);
|
|
336
325
|
const queueJobsDeclared = Object.values(options.jobs ?? {}).some((def) => def.kind === 'job');
|
|
337
326
|
const readiness = () => buildReadinessReport({
|
|
@@ -450,7 +439,7 @@ export async function materializeBunderstack(options, source, overrides = {}) {
|
|
|
450
439
|
db: userDb,
|
|
451
440
|
env,
|
|
452
441
|
storage,
|
|
453
|
-
|
|
442
|
+
messaging,
|
|
454
443
|
jobs,
|
|
455
444
|
realtime,
|
|
456
445
|
auth,
|
|
@@ -494,7 +483,7 @@ export async function materializeBunderstack(options, source, overrides = {}) {
|
|
|
494
483
|
auth,
|
|
495
484
|
storage,
|
|
496
485
|
env,
|
|
497
|
-
|
|
486
|
+
messaging,
|
|
498
487
|
realtime,
|
|
499
488
|
// Runtime facade is untyped (JobsRuntimeFacade); the generic-typed field
|
|
500
489
|
// narrows `enqueue` per-app from the declared job defs — same relationship
|
|
@@ -536,7 +525,6 @@ export { BunderstackError } from './errors.js';
|
|
|
536
525
|
export { resolveConfig, resolveAuthConfig, defineAuth } from './config.js';
|
|
537
526
|
export { validateEnv, createClientEnv, BunderstackEnvError } from './env.js';
|
|
538
527
|
export { buildManifest, parseManifest } from './manifest.js';
|
|
539
|
-
export { createEmail } from './email.js';
|
|
540
528
|
export { createJobsBuilder } from './jobs/index.js';
|
|
541
529
|
export { defineAccess, validateAndResolveAccess, checkAccess, AUTH_TABLE_NAMES, } from './access.js';
|
|
542
530
|
export { typeid, generate as generateTypeId, parse as parseTypeId, asTypeId, } from './typeid.js';
|