@relkit/app 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 (46) hide show
  1. package/README.md +21 -42
  2. package/dist/app-validation.d.ts +4 -0
  3. package/dist/app-validation.d.ts.map +1 -0
  4. package/dist/app-validation.js +23 -0
  5. package/dist/app-validation.js.map +1 -0
  6. package/dist/config.d.ts +2 -32
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +2 -74
  9. package/dist/config.js.map +1 -1
  10. package/dist/define-app-types.d.ts +59 -0
  11. package/dist/define-app-types.d.ts.map +1 -0
  12. package/dist/define-app-types.js +2 -0
  13. package/dist/define-app-types.js.map +1 -0
  14. package/dist/define-app.d.ts +22 -0
  15. package/dist/define-app.d.ts.map +1 -0
  16. package/dist/define-app.js +86 -0
  17. package/dist/define-app.js.map +1 -0
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -0
  21. package/dist/index.js.map +1 -1
  22. package/package.json +16 -14
  23. package/dist/config-types.d.ts +0 -59
  24. package/dist/config-types.d.ts.map +0 -1
  25. package/dist/config-types.js +0 -2
  26. package/dist/config-types.js.map +0 -1
  27. package/dist/config-validation.d.ts +0 -10
  28. package/dist/config-validation.d.ts.map +0 -1
  29. package/dist/config-validation.js +0 -83
  30. package/dist/config-validation.js.map +0 -1
  31. package/dist/model-providers.d.ts +0 -18
  32. package/dist/model-providers.d.ts.map +0 -1
  33. package/dist/model-providers.js +0 -48
  34. package/dist/model-providers.js.map +0 -1
  35. package/dist/providers-validation-utils.d.ts +0 -13
  36. package/dist/providers-validation-utils.d.ts.map +0 -1
  37. package/dist/providers-validation-utils.js +0 -155
  38. package/dist/providers-validation-utils.js.map +0 -1
  39. package/dist/providers-validation.d.ts +0 -8
  40. package/dist/providers-validation.d.ts.map +0 -1
  41. package/dist/providers-validation.js +0 -130
  42. package/dist/providers-validation.js.map +0 -1
  43. package/dist/providers.d.ts +0 -107
  44. package/dist/providers.d.ts.map +0 -1
  45. package/dist/providers.js +0 -78
  46. package/dist/providers.js.map +0 -1
package/README.md CHANGED
@@ -1,54 +1,33 @@
1
1
  # @relkit/app
2
2
 
3
- `@relkit/app` is the public entry point for application configuration, descriptors, and composable
4
- provider bindings. `relkit.config.ts` contains settings and provider profiles; database and auth are
5
- registered by their own discovered descriptors.
3
+ `@relkit/app` is the public entry point for application configuration and descriptors. Provider
4
+ implementations live in independently installable integration packages.
6
5
 
7
6
  ```ts
8
- import { defineConfig, defineEnv, env, external, redis, s3 } from "@relkit/app/config";
7
+ import "@relkit/pulumi";
8
+ import { defineApp, defineEnv, env as binding } from "@relkit/app/config";
9
+ import { aws } from "@relkit/aws";
10
+ import { docker } from "@relkit/docker";
11
+ import { redis } from "@relkit/redis";
12
+ import { s3 } from "@relkit/s3";
9
13
 
10
- const values = defineEnv({
11
- BUCKET_ENDPOINT: env.url(),
12
- BUCKET_NAME: env.string(),
13
- BUCKET_REGION: env.string(),
14
- BUCKET_ACCESS_KEY_ID: env.secret().optional(),
15
- BUCKET_SECRET_ACCESS_KEY: env.secret().optional(),
16
- CACHE_URL: env.secret(),
17
- });
18
-
19
- export default defineConfig({
20
- env: values,
21
- buckets: {
22
- assets: external(
23
- s3({
24
- endpoint: values.BUCKET_ENDPOINT,
25
- bucketName: values.BUCKET_NAME,
26
- region: values.BUCKET_REGION,
27
- credentials: {
28
- accessKeyId: values.BUCKET_ACCESS_KEY_ID,
29
- secretAccessKey: values.BUCKET_SECRET_ACCESS_KEY,
30
- },
31
- }),
32
- ),
14
+ export default defineApp({
15
+ env: defineEnv({}),
16
+ cache: {
17
+ requests: docker(redis({ url: binding.secret("REQUESTS_REDIS_URL") })),
18
+ timeline: aws(redis(), { engine: "valkey" }),
33
19
  },
34
- caches: { primary: external(redis({ url: values.CACHE_URL })) },
35
- defaults: { bucket: "assets", cache: "primary" },
20
+ bucket: { receipts: aws(s3(), { versioning: true }) },
21
+ defaults: { cache: "requests", bucket: "receipts" },
22
+ deployment: { engine: "pulumi", host: "aws" },
36
23
  server: { port: 3000 },
37
24
  inspector: { port: 3210 },
38
25
  });
39
26
  ```
40
27
 
41
- Use MinIO and Redis values locally, R2 and Upstash values in a hosted pipeline, or `managed()` S3 and
42
- Valkey bindings with an AWS deployment. `external()` resources are never provisioned and receive no
43
- deployment IAM statements. Secret adapter fields require secret environment references.
28
+ Direct adapters describe connected services. `docker(adapter)` adds a local development recipe, and
29
+ `aws(adapter)` makes AWS own that resource in deployment. Named binding values are private to their
30
+ provider binding and do not become handler-visible `ctx.env` fields.
44
31
 
45
- `id` defaults to the normalized `package.json.name`. `PORT` and `RELKIT_ENV` are framework-reserved.
46
- Hosting remains in `relkit.config.ts`:
47
-
48
- ```ts
49
- export default defineConfig({
50
- deployment: { target: "aws", adapter: "pulumi" },
51
- server: { port: 3000 },
52
- inspector: { port: 3210 },
53
- });
54
- ```
32
+ Cloud and deployment default to `none`. Tests provide replacements explicitly by capability and
33
+ profile; environment names never swap providers.
@@ -0,0 +1,4 @@
1
+ import { type EnvDefinition, type EnvShape } from "@relkit/config";
2
+ export declare function isEnvDefinition(value: unknown): value is EnvDefinition<EnvShape>;
3
+ export declare function deriveApplicationId(packageName: string): string;
4
+ //# sourceMappingURL=app-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-validation.d.ts","sourceRoot":"","sources":["../src/app-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,CAahF;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG/D"}
@@ -0,0 +1,23 @@
1
+ import { isEnvRef } from "@relkit/config";
2
+ import { normalizeId } from "@relkit/contracts";
3
+ export function isEnvDefinition(value) {
4
+ if (!isRecord(value) || value.kind !== "env-definition" || !isRecord(value.shape))
5
+ return false;
6
+ return Object.entries(value.shape).every(([name, builder]) => {
7
+ const reference = value[name];
8
+ return (isRecord(builder) &&
9
+ builder.kind === "env-builder" &&
10
+ typeof builder.parse === "function" &&
11
+ typeof builder.getDefault === "function" &&
12
+ isEnvRef(reference) &&
13
+ reference.name === name);
14
+ });
15
+ }
16
+ export function deriveApplicationId(packageName) {
17
+ const normalized = packageName.startsWith("@") ? packageName.slice(1) : packageName;
18
+ return normalizeId(normalized.replaceAll("/", "."));
19
+ }
20
+ function isRecord(value) {
21
+ return value !== null && typeof value === "object" && !Array.isArray(value);
22
+ }
23
+ //# sourceMappingURL=app-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-validation.js","sourceRoot":"","sources":["../src/app-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqC,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,CACL,QAAQ,CAAC,OAAO,CAAC;YACjB,OAAO,CAAC,IAAI,KAAK,aAAa;YAC9B,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU;YACnC,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU;YACxC,QAAQ,CAAC,SAAS,CAAC;YACnB,SAAS,CAAC,IAAI,KAAK,IAAI,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACpF,OAAO,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
package/dist/config.d.ts CHANGED
@@ -1,34 +1,4 @@
1
- import type { ApplicationConfigDescriptor, ConfigProviderMaps, DefineConfigOptions } from "./config-types.js";
2
- export * from "./config-types.js";
3
- export { deriveApplicationId } from "./config-validation.js";
4
- export * from "./providers.js";
1
+ export { deriveApplicationId } from "./app-validation.js";
2
+ export * from "./define-app.js";
5
3
  export * from "@relkit/config";
6
- /**
7
- * Defines application, environment, provider, runtime, and deployment settings.
8
- *
9
- * @example
10
- * ```ts
11
- * import { defineConfig, defineEnv, env, external, s3 } from "@relkit/app/config"
12
- *
13
- * const values = defineEnv({
14
- * BUCKET_ENDPOINT: env.url(),
15
- * BUCKET_NAME: env.string(),
16
- * })
17
- *
18
- * export default defineConfig({
19
- * env: values,
20
- * buckets: {
21
- * assets: external(s3({
22
- * endpoint: values.BUCKET_ENDPOINT,
23
- * bucketName: values.BUCKET_NAME,
24
- * region: "us-east-1",
25
- * })),
26
- * },
27
- * defaults: { bucket: "assets" },
28
- * })
29
- * ```
30
- * @category Application
31
- * @since 0.2.0
32
- */
33
- export declare function defineConfig<const S extends import("@relkit/config").EnvShape, const Maps extends ConfigProviderMaps>(options: DefineConfigOptions<S, Maps>): ApplicationConfigDescriptor<string, S, Maps>;
34
4
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,2BAA2B,EAC3B,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAC1B,KAAK,CAAC,CAAC,SAAS,OAAO,gBAAgB,EAAE,QAAQ,EACjD,KAAK,CAAC,IAAI,SAAS,kBAAkB,EACrC,OAAO,EAAE,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CA4CrF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
package/dist/config.js CHANGED
@@ -1,76 +1,4 @@
1
- import { createDescriptorBase, deepFreeze } from "@relkit/contracts";
2
- import { createUnboundIdentity } from "@relkit/invocation";
3
- import { isEnvRef } from "@relkit/config";
4
- import { copyProviderMaps, isEnvDefinition, resolveDefaults } from "./config-validation.js";
5
- export * from "./config-types.js";
6
- export { deriveApplicationId } from "./config-validation.js";
7
- export * from "./providers.js";
1
+ export { deriveApplicationId } from "./app-validation.js";
2
+ export * from "./define-app.js";
8
3
  export * from "@relkit/config";
9
- /**
10
- * Defines application, environment, provider, runtime, and deployment settings.
11
- *
12
- * @example
13
- * ```ts
14
- * import { defineConfig, defineEnv, env, external, s3 } from "@relkit/app/config"
15
- *
16
- * const values = defineEnv({
17
- * BUCKET_ENDPOINT: env.url(),
18
- * BUCKET_NAME: env.string(),
19
- * })
20
- *
21
- * export default defineConfig({
22
- * env: values,
23
- * buckets: {
24
- * assets: external(s3({
25
- * endpoint: values.BUCKET_ENDPOINT,
26
- * bucketName: values.BUCKET_NAME,
27
- * region: "us-east-1",
28
- * })),
29
- * },
30
- * defaults: { bucket: "assets" },
31
- * })
32
- * ```
33
- * @category Application
34
- * @since 0.2.0
35
- */
36
- export function defineConfig(options) {
37
- if (!isRecord(options) || !isEnvDefinition(options.env)) {
38
- throw new TypeError("RELKIT config requires an environment definition");
39
- }
40
- if (options.deployment !== undefined &&
41
- (options.deployment.target !== "aws" || options.deployment.adapter !== "pulumi")) {
42
- throw new TypeError("RELKIT deployment must select the aws target and pulumi adapter");
43
- }
44
- if (options.sentry?.sendDefaultPii !== undefined && options.sentry.sendDefaultPii !== false) {
45
- throw new TypeError("Sentry PII collection cannot be enabled through RELKIT config");
46
- }
47
- if (options.sentry !== undefined &&
48
- !((typeof options.sentry.dsn === "string" && options.sentry.dsn.trim() !== "") ||
49
- isEnvRef(options.sentry.dsn))) {
50
- throw new TypeError("Sentry dsn must be nonempty text or an environment reference");
51
- }
52
- if (options.sentry?.tracesSampleRate !== undefined &&
53
- (!Number.isFinite(options.sentry.tracesSampleRate) ||
54
- options.sentry.tracesSampleRate < 0 ||
55
- options.sentry.tracesSampleRate > 1)) {
56
- throw new TypeError("Sentry tracesSampleRate must be between 0 and 1");
57
- }
58
- const maps = copyProviderMaps(options);
59
- const defaults = resolveDefaults(maps, options.defaults);
60
- const base = createDescriptorBase("app", options.id ?? createUnboundIdentity(), options);
61
- return deepFreeze({
62
- ...base,
63
- env: options.env,
64
- ...maps,
65
- ...(Object.keys(defaults).length === 0 ? {} : { defaults }),
66
- ...(options.sentry === undefined ? {} : { sentry: { ...options.sentry } }),
67
- ...(options.telemetry === undefined ? {} : { telemetry: { ...options.telemetry } }),
68
- ...(options.server === undefined ? {} : { server: { ...options.server } }),
69
- ...(options.inspector === undefined ? {} : { inspector: { ...options.inspector } }),
70
- ...(options.deployment === undefined ? {} : { deployment: { ...options.deployment } }),
71
- });
72
- }
73
- function isRecord(value) {
74
- return value !== null && typeof value === "object" && !Array.isArray(value);
75
- }
76
4
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { EnvDefinition, EnvShape } from "@relkit/config";
2
+ import type { DescriptorBase, DescriptorMetadata, JsonValue } from "@relkit/contracts";
3
+ import type { TelemetryConfiguration, TelemetryExporterMap } from "@relkit/observability/telemetry";
4
+ import type { NormalizedProviderProfiles, ProviderAdapter, ProviderCapability, ProviderInput, ProviderSourceInput } from "@relkit/provider";
5
+ export interface ApiDocsConfig {
6
+ readonly enabledInProduction?: boolean;
7
+ readonly excludeDomains?: readonly string[];
8
+ }
9
+ export interface ServerConfig {
10
+ readonly port?: number;
11
+ readonly maxBodyBytes?: number;
12
+ readonly apiDocs?: ApiDocsConfig;
13
+ readonly clientContract?: boolean;
14
+ readonly mcp?: boolean;
15
+ }
16
+ export interface InspectorConfig {
17
+ readonly port?: number;
18
+ readonly enabledInProduction?: boolean;
19
+ readonly maxPreviewBytes?: number;
20
+ }
21
+ export declare const APP_PROVIDER_CAPABILITIES: readonly ["bucket", "cache", "job", "event", "model"];
22
+ export type AppProviderCapability = (typeof APP_PROVIDER_CAPABILITIES)[number];
23
+ type CapabilityInput<Capability extends AppProviderCapability> = ProviderInput<ProviderSourceInput<ProviderAdapter<ProviderCapability<Capability>>>>;
24
+ export interface AppProviderInputs {
25
+ readonly bucket?: CapabilityInput<"bucket">;
26
+ readonly cache?: CapabilityInput<"cache">;
27
+ readonly job?: CapabilityInput<"job">;
28
+ readonly event?: CapabilityInput<"event">;
29
+ readonly model?: CapabilityInput<"model">;
30
+ }
31
+ type Profile<Input> = Input extends ProviderSourceInput ? "default" : Extract<keyof Input, string>;
32
+ export type AppProviderDefaults<Providers extends AppProviderInputs> = Readonly<{
33
+ [Capability in AppProviderCapability]?: Capability extends keyof Providers ? Profile<NonNullable<Providers[Capability]>> : never;
34
+ }>;
35
+ export type AppTelemetryConfig<Exporters extends TelemetryExporterMap = TelemetryExporterMap> = TelemetryConfiguration<Exporters>;
36
+ export type AppDeploymentConfig = Readonly<Record<string, JsonValue>>;
37
+ export type DefineAppOptions<Shape extends EnvShape, Providers extends AppProviderInputs, Exporters extends TelemetryExporterMap = TelemetryExporterMap> = DescriptorMetadata & Providers & {
38
+ readonly id?: string;
39
+ readonly env: EnvDefinition<Shape>;
40
+ readonly defaults?: AppProviderDefaults<Providers>;
41
+ readonly telemetry?: AppTelemetryConfig<Exporters>;
42
+ readonly server?: ServerConfig;
43
+ readonly inspector?: InspectorConfig;
44
+ readonly deployment?: AppDeploymentConfig;
45
+ };
46
+ type AdapterOf<Input> = Input extends ProviderSourceInput<infer Adapter> ? Adapter : Input extends Readonly<Record<string, infer Binding>> ? Binding extends ProviderSourceInput<infer Adapter> ? Adapter : never : never;
47
+ type NormalizedProviders<Providers extends AppProviderInputs> = {
48
+ readonly [Capability in keyof Providers & AppProviderCapability]: NormalizedProviderProfiles<AdapterOf<NonNullable<Providers[Capability]>>>;
49
+ };
50
+ export type ApplicationDescriptor<Shape extends EnvShape = EnvShape, Providers extends AppProviderInputs = AppProviderInputs, Exporters extends TelemetryExporterMap = TelemetryExporterMap> = DescriptorBase<"app", string> & NormalizedProviders<Providers> & {
51
+ readonly env: EnvDefinition<Shape>;
52
+ readonly defaults: AppProviderDefaults<Providers>;
53
+ readonly telemetry?: AppTelemetryConfig<Exporters>;
54
+ readonly server?: ServerConfig;
55
+ readonly inspector?: InspectorConfig;
56
+ readonly deployment?: AppDeploymentConfig;
57
+ };
58
+ export {};
59
+ //# sourceMappingURL=define-app-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-app-types.d.ts","sourceRoot":"","sources":["../src/define-app-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export const APP_PROVIDER_CAPABILITIES = ["bucket", "cache", "job", "event", "model"];
2
+ //# sourceMappingURL=define-app-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-app-types.js","sourceRoot":"","sources":["../src/define-app-types.ts"],"names":[],"mappings":"AA8BA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { EnvShape } from "@relkit/config";
2
+ import { type TelemetryExporterMap } from "@relkit/observability/telemetry";
3
+ import { type ApplicationDescriptor, type AppProviderInputs, type DefineAppOptions } from "./define-app-types.js";
4
+ export * from "./define-app-types.js";
5
+ /**
6
+ * Defines one immutable application topology.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { defineApp, defineEnv } from "@relkit/app";
11
+ * export default defineApp({
12
+ * id: "orders-api",
13
+ * env: defineEnv({}),
14
+ * server: { port: 3000 },
15
+ * inspector: { port: 3210 },
16
+ * });
17
+ * ```
18
+ * @category Application
19
+ * @since 0.2.0
20
+ */
21
+ export declare function defineApp<const Shape extends EnvShape, const Providers extends AppProviderInputs, const Exporters extends TelemetryExporterMap = TelemetryExporterMap>(options: DefineAppOptions<Shape, Providers, Exporters>): ApplicationDescriptor<Shape, Providers, Exporters>;
22
+ //# sourceMappingURL=define-app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-app.d.ts","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EAEL,KAAK,qBAAqB,EAG1B,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,cAAc,uBAAuB,CAAC;AAgBtC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,SAAS,CACvB,KAAK,CAAC,KAAK,SAAS,QAAQ,EAC5B,KAAK,CAAC,SAAS,SAAS,iBAAiB,EACzC,KAAK,CAAC,SAAS,SAAS,oBAAoB,GAAG,oBAAoB,EAEnE,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,GACrD,qBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAoBpD"}
@@ -0,0 +1,86 @@
1
+ import { createDescriptorBase, deepFreeze, serializeJson } from "@relkit/contracts";
2
+ import { createUnboundIdentity } from "@relkit/invocation";
3
+ import { normalizeTelemetryConfiguration, } from "@relkit/observability/telemetry";
4
+ import { defineProviderCapability, normalizeProviderProfiles, } from "@relkit/provider";
5
+ import { isEnvDefinition } from "./app-validation.js";
6
+ import { APP_PROVIDER_CAPABILITIES, } from "./define-app-types.js";
7
+ export * from "./define-app-types.js";
8
+ const OPTION_KEYS = new Set([
9
+ "id",
10
+ "title",
11
+ "description",
12
+ "tags",
13
+ "env",
14
+ "defaults",
15
+ "telemetry",
16
+ "server",
17
+ "inspector",
18
+ "deployment",
19
+ ...APP_PROVIDER_CAPABILITIES,
20
+ ]);
21
+ /**
22
+ * Defines one immutable application topology.
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * import { defineApp, defineEnv } from "@relkit/app";
27
+ * export default defineApp({
28
+ * id: "orders-api",
29
+ * env: defineEnv({}),
30
+ * server: { port: 3000 },
31
+ * inspector: { port: 3210 },
32
+ * });
33
+ * ```
34
+ * @category Application
35
+ * @since 0.2.0
36
+ */
37
+ export function defineApp(options) {
38
+ if (!isRecord(options) || !isEnvDefinition(options.env))
39
+ throw new TypeError("RELKIT app requires an environment definition");
40
+ for (const key of Object.keys(options))
41
+ if (!OPTION_KEYS.has(key))
42
+ throw new TypeError(`Unknown defineApp option "${key}"`);
43
+ const providers = normalizeProviders(options);
44
+ const defaults = normalizeDefaults(providers, options.defaults);
45
+ const base = createDescriptorBase("app", options.id ?? createUnboundIdentity(), options);
46
+ return deepFreeze({
47
+ ...base,
48
+ env: options.env,
49
+ ...providers,
50
+ defaults,
51
+ ...(options.telemetry === undefined
52
+ ? {}
53
+ : { telemetry: normalizeTelemetryConfiguration(options.telemetry) }),
54
+ ...(options.server === undefined ? {} : { server: copy(options.server) }),
55
+ ...(options.inspector === undefined ? {} : { inspector: copy(options.inspector) }),
56
+ ...(options.deployment === undefined ? {} : { deployment: copy(options.deployment) }),
57
+ });
58
+ }
59
+ function normalizeProviders(options) {
60
+ const result = {};
61
+ for (const capability of APP_PROVIDER_CAPABILITIES) {
62
+ const input = options[capability];
63
+ if (input !== undefined)
64
+ result[capability] = normalizeProviderProfiles(defineProviderCapability(capability), input);
65
+ }
66
+ return result;
67
+ }
68
+ function normalizeDefaults(providers, defaults) {
69
+ const result = {};
70
+ for (const [capability, selected] of Object.entries(defaults ?? {})) {
71
+ if (!APP_PROVIDER_CAPABILITIES.includes(capability))
72
+ throw new TypeError(`Unknown default capability "${capability}"`);
73
+ const profiles = providers[capability]?.profiles;
74
+ if (typeof selected !== "string" || profiles?.[selected] === undefined)
75
+ throw new TypeError(`defaults.${capability} must reference a configured profile`);
76
+ result[capability] = selected;
77
+ }
78
+ return copy(result);
79
+ }
80
+ function copy(value) {
81
+ return JSON.parse(serializeJson(value));
82
+ }
83
+ function isRecord(value) {
84
+ return value !== null && typeof value === "object" && !Array.isArray(value);
85
+ }
86
+ //# sourceMappingURL=define-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-app.js","sourceRoot":"","sources":["../src/define-app.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from "@relkit/buckets";
6
6
  export * from "@relkit/cache";
7
7
  export * from "@relkit/events";
8
8
  export * from "@relkit/functions";
9
+ export { bindDescriptorIdentity } from "@relkit/invocation";
9
10
  export type { EventAttributeValue, EventPublishOptions, EventPublishResult } from "@relkit/events";
10
11
  export * from "@relkit/jobs";
11
12
  export * from "@relkit/routes";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnG,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACnG,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ export * from "@relkit/buckets";
6
6
  export * from "@relkit/cache";
7
7
  export * from "@relkit/events";
8
8
  export * from "@relkit/functions";
9
+ export { bindDescriptorIdentity } from "@relkit/invocation";
9
10
  export * from "@relkit/jobs";
10
11
  export * from "@relkit/routes";
11
12
  export * from "@relkit/services";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAElC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@relkit/app",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "The primary typed application-authoring API for RELKIT.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -73,19 +73,21 @@
73
73
  }
74
74
  },
75
75
  "dependencies": {
76
- "@relkit/agents": "0.1.0",
77
- "@relkit/buckets": "0.1.0",
78
- "@relkit/cache": "0.1.0",
79
- "@relkit/config": "0.1.0",
80
- "@relkit/contracts": "0.1.0",
81
- "@relkit/events": "0.1.0",
82
- "@relkit/functions": "0.1.0",
83
- "@relkit/invocation": "0.1.0",
84
- "@relkit/jobs": "0.1.0",
85
- "@relkit/routes": "0.1.0",
86
- "@relkit/schema": "0.1.0",
87
- "@relkit/services": "0.1.0",
88
- "@relkit/tools": "0.1.0"
76
+ "@relkit/agents": "0.3.0",
77
+ "@relkit/buckets": "0.3.0",
78
+ "@relkit/cache": "0.3.0",
79
+ "@relkit/config": "0.3.0",
80
+ "@relkit/contracts": "0.3.0",
81
+ "@relkit/events": "0.3.0",
82
+ "@relkit/functions": "0.3.0",
83
+ "@relkit/invocation": "0.3.0",
84
+ "@relkit/jobs": "0.3.0",
85
+ "@relkit/observability": "0.3.0",
86
+ "@relkit/provider": "0.3.0",
87
+ "@relkit/routes": "0.3.0",
88
+ "@relkit/schema": "0.3.0",
89
+ "@relkit/services": "0.3.0",
90
+ "@relkit/tools": "0.3.0"
89
91
  },
90
92
  "scripts": {
91
93
  "build": "tsc -b",
@@ -1,59 +0,0 @@
1
- import type { EnvDefinition, EnvRef, EnvShape } from "@relkit/config";
2
- import type { DescriptorBase, DescriptorMetadata, JsonValue } from "@relkit/contracts";
3
- import type { CapabilityBindings } from "./providers.js";
4
- export interface ApiDocsConfig {
5
- readonly enabledInProduction?: boolean;
6
- readonly excludeDomains?: readonly string[];
7
- }
8
- export interface ServerConfig {
9
- readonly port?: number;
10
- readonly maxBodyBytes?: number;
11
- readonly apiDocs?: ApiDocsConfig;
12
- readonly clientContract?: boolean;
13
- readonly mcp?: boolean;
14
- }
15
- export interface InspectorConfig {
16
- readonly port?: number;
17
- readonly enabledInProduction?: boolean;
18
- readonly maxPreviewBytes?: number;
19
- }
20
- export interface DeploymentConfig {
21
- readonly target: "aws";
22
- readonly adapter: "pulumi";
23
- }
24
- export interface SentryConfig {
25
- readonly dsn: string | EnvRef;
26
- readonly tracesSampleRate?: number;
27
- readonly sendDefaultPii?: false;
28
- }
29
- export interface ConfigProviderMaps {
30
- readonly buckets?: CapabilityBindings<"buckets">;
31
- readonly caches?: CapabilityBindings<"cache">;
32
- readonly jobs?: CapabilityBindings<"jobs">;
33
- readonly events?: CapabilityBindings<"events">;
34
- readonly models?: CapabilityBindings<"models">;
35
- readonly observability?: CapabilityBindings<"observability">;
36
- }
37
- type Profile<Map> = Extract<keyof NonNullable<Map>, string>;
38
- export type CapabilityDefaults<Maps extends ConfigProviderMaps> = Readonly<{
39
- bucket?: Profile<Maps["buckets"]>;
40
- cache?: Profile<Maps["caches"]>;
41
- job?: Profile<Maps["jobs"]>;
42
- event?: Profile<Maps["events"]>;
43
- model?: Profile<Maps["models"]>;
44
- observability?: Profile<Maps["observability"]>;
45
- }>;
46
- export type TelemetryConfig = Readonly<Record<string, JsonValue | EnvRef>>;
47
- export type DefineConfigOptions<S extends EnvShape, Maps extends ConfigProviderMaps> = DescriptorMetadata & Maps & {
48
- readonly id?: string;
49
- readonly env: EnvDefinition<S>;
50
- readonly defaults?: CapabilityDefaults<Maps>;
51
- readonly sentry?: SentryConfig;
52
- readonly telemetry?: TelemetryConfig;
53
- readonly server?: ServerConfig;
54
- readonly inspector?: InspectorConfig;
55
- readonly deployment?: DeploymentConfig;
56
- };
57
- export type ApplicationConfigDescriptor<Id extends string = string, S extends EnvShape = EnvShape, Maps extends ConfigProviderMaps = ConfigProviderMaps> = DescriptorBase<"app", Id> & Omit<DefineConfigOptions<S, Maps>, keyof DescriptorMetadata | "id">;
58
- export {};
59
- //# sourceMappingURL=config-types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=config-types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-types.js","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
1
- import { type EnvDefinition, type EnvShape } from "@relkit/config";
2
- import type { ConfigProviderMaps } from "./config-types.js";
3
- import { type ProviderTopology } from "./providers.js";
4
- export declare function copyProviderMaps(value: ConfigProviderMaps): ConfigProviderMaps;
5
- export declare function providerTopology(value: ConfigProviderMaps): ProviderTopology;
6
- export declare function validateDefaults(maps: ConfigProviderMaps, defaults: Readonly<Record<string, unknown>> | undefined): void;
7
- export declare function resolveDefaults(maps: ConfigProviderMaps, defaults: Readonly<Record<string, unknown>> | undefined): Readonly<Record<string, string>>;
8
- export declare function isEnvDefinition(value: unknown): value is EnvDefinition<EnvShape>;
9
- export declare function deriveApplicationId(packageName: string): string;
10
- //# sourceMappingURL=config-validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-validation.d.ts","sourceRoot":"","sources":["../src/config-validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAwB,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAY7E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAU9E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,GAAG,gBAAgB,CAS5E;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,GACtD,IAAI,CAiBN;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,kBAAkB,EACxB,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,GACtD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAUlC;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,CAahF;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG/D"}