@classytic/arc 2.19.0 → 2.21.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/README.md +1 -1
- package/bin/arc.js +37 -0
- package/dist/{BaseController-Dy6EQHjM.mjs → BaseController-BnLYgE9A.mjs} +4 -4
- package/dist/{EventTransport-IEn7Tn-Q.d.mts → EventTransport-QmY7A258.d.mts} +0 -1
- package/dist/{QueryCache-TRfXau3W.d.mts → QueryCache-Z1B38koh.d.mts} +0 -1
- package/dist/{ResourceRegistry-5fKZwhK_.mjs → ResourceRegistry-7RnrEWNP.mjs} +1 -1
- package/dist/{actionPermissions-D7NGwcAR.mjs → actionPermissions-ze70xXJi.mjs} +1 -1
- package/dist/audit/index.d.mts +9 -5
- package/dist/audit/index.mjs +1 -1
- package/dist/auth/audit.d.mts +7 -4
- package/dist/auth/audit.mjs +5 -0
- package/dist/auth/index.d.mts +7 -14
- package/dist/auth/index.mjs +7 -5
- package/dist/auth/redis-session.d.mts +1 -2
- package/dist/{buildHandler-B0qvAguf.mjs → buildHandler-D_2ULWxZ.mjs} +3 -3
- package/dist/cache/index.d.mts +2 -3
- package/dist/cache/index.mjs +2 -2
- package/dist/cli/commands/describe.d.mts +1 -2
- package/dist/cli/commands/describe.mjs +2 -2
- package/dist/cli/commands/docs.mjs +2 -2
- package/dist/cli/commands/generate.mjs +1 -1
- package/dist/cli/commands/init.mjs +1 -1
- package/dist/cli/commands/introspect.mjs +4 -13
- package/dist/cli/index.mjs +2 -2
- package/dist/{constants-gaEeMlz-.mjs → constants-DNre0wRg.mjs} +1 -1
- package/dist/context/index.d.mts +2 -2
- package/dist/core/index.d.mts +3 -3
- package/dist/core/index.mjs +5 -5
- package/dist/{core-Ba-6Sue6.mjs → core-DZ6Xe1jR.mjs} +182 -55
- package/dist/{createActionRouter-B_WzBFyf.mjs → createActionRouter-BWMDW-dL.mjs} +4 -4
- package/dist/{createAggregationRouter-B_G_nIjm.mjs → createAggregationRouter-l5mNdYrZ.mjs} +5 -4
- package/dist/{createApp--703hQE1.mjs → createApp-Bi61XxqU.mjs} +229 -24
- package/dist/discovery/index.d.mts +0 -1
- package/dist/docs/index.d.mts +1 -2
- package/dist/docs/index.mjs +1 -1
- package/dist/{elevation-xGUBq6p_.d.mts → elevation-C9s5hFP_.d.mts} +0 -1
- package/dist/encryption/index.d.mts +2 -144
- package/dist/{errorHandler-BtUUDPEa.d.mts → errorHandler-B0e-bq-O.d.mts} +0 -1
- package/dist/{errors-DOHkjQlD.d.mts → errors-DHcHVAgk.d.mts} +0 -1
- package/dist/{eventPlugin-DbBFd3x_.d.mts → eventPlugin-A6EbthXR.d.mts} +10 -6
- package/dist/events/index.d.mts +9 -6
- package/dist/events/index.mjs +9 -6
- package/dist/events/transports/redis-stream-entry.d.mts +1 -1
- package/dist/events/transports/redis.d.mts +1 -2
- package/dist/factory/index.d.mts +5 -4
- package/dist/factory/index.mjs +3 -3
- package/dist/{fastify-augmentation-D-5_yQJi.d.mts → fastify-augmentation-DafigGQp.d.mts} +12 -2
- package/dist/{fields-C7ahdGYf.d.mts → fields-BGqrAa_u.d.mts} +1 -2
- package/dist/{generate-Brans3fW.mjs → generate-usRSdQmP.mjs} +4 -3
- package/dist/hooks/index.d.mts +1 -1
- package/dist/idempotency/index.d.mts +4 -3
- package/dist/idempotency/index.mjs +1 -1
- package/dist/idempotency/redis.d.mts +1 -1
- package/dist/{index-CP6A1Ffj.d.mts → index-B5N-NaHs.d.mts} +88 -7
- package/dist/{index-CRKiiP5o.d.mts → index-B5PoNbfu.d.mts} +41 -7
- package/dist/{index-CUTG2Cuo.d.mts → index-Dtrj6XZk.d.mts} +90 -29
- package/dist/index.d.mts +7 -7
- package/dist/index.mjs +7 -7
- package/dist/{init-Bqpt1Hxf.mjs → init-0YhHkXGk.mjs} +239 -140
- package/dist/integrations/event-gateway.d.mts +2 -3
- package/dist/integrations/index.d.mts +2 -2
- package/dist/integrations/jobs.d.mts +0 -1
- package/dist/integrations/mcp/index.d.mts +6 -7
- package/dist/integrations/mcp/index.mjs +1 -1
- package/dist/integrations/mcp/testing.d.mts +1 -2
- package/dist/integrations/mcp/testing.mjs +1 -1
- package/dist/integrations/streamline.d.mts +19 -7
- package/dist/integrations/streamline.mjs +9 -5
- package/dist/integrations/webhooks.d.mts +0 -1
- package/dist/integrations/websocket-pushref-redis.d.mts +1 -2
- package/dist/integrations/websocket-redis.d.mts +1 -2
- package/dist/integrations/websocket.d.mts +2 -2
- package/dist/{loadResources-B8UmpITt.mjs → loadResources-DpU8pfjV.mjs} +4 -3
- package/dist/{loadResourcesFromEntry-BTlFEx05.mjs → loadResourcesFromEntry-OMCvIEE7.mjs} +1 -1
- package/dist/{mcpPlugin-C088Nd-G.mjs → mcpPlugin-B9XjjNVG.mjs} +148 -49
- package/dist/middleware/index.d.mts +1 -2
- package/dist/middleware/index.mjs +1 -1
- package/dist/module-WeuU5jfd.d.mts +429 -0
- package/dist/{openapi-DZ-5a5Op.mjs → openapi-Kyod_di6.mjs} +3 -3
- package/dist/permissions/index.d.mts +3 -3
- package/dist/permissions/index.mjs +2 -2
- package/dist/{permissions-BPB1xqGf.mjs → permissions-BJMuKMl7.mjs} +43 -3
- package/dist/pipeline/index.d.mts +1 -2
- package/dist/plugins/index.d.mts +87 -10
- package/dist/plugins/index.mjs +91 -4
- package/dist/plugins/response-cache.d.mts +5 -3
- package/dist/plugins/tracing-entry.d.mts +1 -1
- package/dist/plugins/tracing-entry.mjs +1 -1
- package/dist/{pluralize-DccFV9R7.mjs → pluralize-BhrgwZb9.mjs} +3 -3
- package/dist/presets/filesUpload.d.mts +4 -5
- package/dist/presets/filesUpload.mjs +1 -1
- package/dist/presets/index.d.mts +16 -3
- package/dist/presets/index.mjs +1 -1
- package/dist/presets/multiTenant.d.mts +1 -2
- package/dist/presets/multiTenant.mjs +1 -1
- package/dist/presets/search.d.mts +2 -3
- package/dist/presets/search.mjs +3 -2
- package/dist/{presets-BtyFwTO4.mjs → presets-gw0ciIUD.mjs} +1 -1
- package/dist/{pushref-registry-DnCqL3aa.d.mts → pushref-registry-BbcnpNTm.d.mts} +4 -2
- package/dist/{queryCachePlugin-xzFyKAjT.d.mts → queryCachePlugin-CfYWq-Ak.d.mts} +1 -2
- package/dist/{queryCachePlugin-emHb0CuX.mjs → queryCachePlugin-DzqLN904.mjs} +2 -2
- package/dist/{redis-C3W0qbz8.d.mts → redis-UDtLaNj6.d.mts} +0 -1
- package/dist/{redis-stream-DsP1vqZB.d.mts → redis-stream-iVR2l7aS.d.mts} +1 -2
- package/dist/{registerRoute-BdV8DDwU.mjs → registerRoute-oGAl0oA8.mjs} +1 -1
- package/dist/registry/index.d.mts +2 -2
- package/dist/registry/index.mjs +2 -2
- package/dist/{registry-Bm9LjWKs.mjs → registry-vcOCtPij.mjs} +1 -1
- package/dist/{schemaIR-D1MJwqmp.mjs → schemaIR-ajetw3Fv.mjs} +1 -42
- package/dist/schemas/index.d.mts +0 -1
- package/dist/scim/index.d.mts +0 -1
- package/dist/scim/index.mjs +2 -2
- package/dist/scope/index.d.mts +2 -3
- package/dist/{sessionManager-BXG-HGwG.d.mts → sessionManager-BHOM3N_0.d.mts} +10 -6
- package/dist/{storage-Co_PQpeQ.d.mts → storage-DLUZ04kK.d.mts} +8 -4
- package/dist/sync/changelog.d.mts +2 -0
- package/dist/sync/changelog.mjs +2 -0
- package/dist/testing/index.d.mts +2 -3
- package/dist/testing/index.mjs +6 -3
- package/dist/testing/storageContract.d.mts +1 -2
- package/dist/{tracing-D8jlGXP7.d.mts → tracing-CsGKQJGg.d.mts} +0 -1
- package/dist/types/index.d.mts +4 -4
- package/dist/types/storage.d.mts +1 -1
- package/dist/types-Cc91nXuA.d.mts +132 -0
- package/dist/{types-LNebCoJx.d.mts → types-DH0GupI7.d.mts} +8 -4
- package/dist/{types-DpvSF5Hh.d.mts → types-DRj-Ut4n.d.mts} +1 -2
- package/dist/{types-9_wtNPsI.d.mts → types-DpxoNX5v.d.mts} +112 -214
- package/dist/utils/index.d.mts +182 -128
- package/dist/utils/index.mjs +2 -2
- package/dist/{utils-C6QQ9-hd.mjs → utils-CO8a3B_1.mjs} +1435 -1391
- package/dist/{validate-CRcaWzp2.mjs → validate-C2mGgSXg.mjs} +3 -3
- package/dist/{versioning-D_eBCfNr.d.mts → versioning-DQ4mCvg0.d.mts} +1 -2
- package/dist/{websocket-MlYlrYq0.d.mts → websocket-uuWqM6UY.d.mts} +5 -4
- package/package.json +18 -13
- package/skills/arc/SKILL.md +10 -0
- package/skills/arc/references/mcp.md +2 -0
- package/skills/arc-module-publishing/SKILL.md +242 -0
- package/skills/arc-module-publishing/references/authoring-modules.md +272 -0
- package/skills/arc-module-publishing/references/package-manifest.md +155 -0
- package/skills/arc-module-publishing/references/publishing-workflow.md +182 -0
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { a as QueryCacheConfig } from "./QueryCache-
|
|
2
|
-
import { i as RequestScope } from "./types-
|
|
3
|
-
import { c as PermissionCheck, d as UserBase, n as FieldPermissionMap } from "./fields-
|
|
4
|
-
import
|
|
1
|
+
import { a as QueryCacheConfig } from "./QueryCache-Z1B38koh.mjs";
|
|
2
|
+
import { i as RequestScope } from "./types-DH0GupI7.mjs";
|
|
3
|
+
import { c as PermissionCheck, d as UserBase, n as FieldPermissionMap } from "./fields-BGqrAa_u.mjs";
|
|
4
|
+
import "./elevation-C9s5hFP_.mjs";
|
|
5
|
+
import { n as EncryptionDirective } from "./types-Cc91nXuA.mjs";
|
|
6
|
+
import { n as DomainEvent } from "./EventTransport-QmY7A258.mjs";
|
|
5
7
|
import { KeysetPaginationResult, OffsetPaginationResult } from "@classytic/repo-core/pagination";
|
|
6
8
|
import { FastifyInstance, FastifyPluginAsync, FastifyReply, FastifyRequest, RouteHandlerMethod, RouteHandlerMethod as RouteHandlerMethod$1 } from "fastify";
|
|
7
9
|
import { DataAdapter, RepositoryLike } from "@classytic/repo-core/adapter";
|
|
8
10
|
import { AggDateBucket, AggMeasure, AggTopN, QueryOptions, StandardRepo, TenantPurgeStrategy } from "@classytic/repo-core/repository";
|
|
9
11
|
import { LookupSpec } from "@classytic/repo-core/lookup";
|
|
10
12
|
import { FieldRule, SchemaBuilderOptions } from "@classytic/repo-core/schema";
|
|
11
|
-
|
|
12
13
|
//#region src/core/BodySanitizer.d.ts
|
|
13
14
|
/**
|
|
14
15
|
* Policy for handling fields the caller lacks write permission for.
|
|
@@ -1082,7 +1083,8 @@ type ObjectId = string | {
|
|
|
1082
1083
|
* The actual user structure is defined by your app's auth system.
|
|
1083
1084
|
*/
|
|
1084
1085
|
type UserLike = UserBase & {
|
|
1085
|
-
/** User email (optional) */
|
|
1086
|
+
/** User email (optional) */
|
|
1087
|
+
email?: string;
|
|
1086
1088
|
};
|
|
1087
1089
|
interface UserOrganization {
|
|
1088
1090
|
userId: string;
|
|
@@ -1229,11 +1231,17 @@ interface AuthPluginOptions {
|
|
|
1229
1231
|
* utilities are available in the authenticator context.
|
|
1230
1232
|
*/
|
|
1231
1233
|
jwt?: {
|
|
1232
|
-
/** JWT secret (required for JWT features) */
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1234
|
+
/** JWT secret (required for JWT features) */
|
|
1235
|
+
secret: string;
|
|
1236
|
+
/** Access token expiry (default: '15m') */
|
|
1237
|
+
expiresIn?: string;
|
|
1238
|
+
/** Refresh token secret (defaults to main secret) */
|
|
1239
|
+
refreshSecret?: string;
|
|
1240
|
+
/** Refresh token expiry (default: '7d') */
|
|
1241
|
+
refreshExpiresIn?: string;
|
|
1242
|
+
/** Additional `@fastify/jwt` sign options */
|
|
1243
|
+
sign?: Record<string, unknown>;
|
|
1244
|
+
/** Additional `@fastify/jwt` verify options */
|
|
1237
1245
|
verify?: Record<string, unknown>;
|
|
1238
1246
|
};
|
|
1239
1247
|
/**
|
|
@@ -2467,6 +2475,25 @@ interface RouteDefinition {
|
|
|
2467
2475
|
* pipeline entirely.
|
|
2468
2476
|
*/
|
|
2469
2477
|
readonly fieldWrite?: boolean;
|
|
2478
|
+
/**
|
|
2479
|
+
* Per-route rate limit. A custom route is its own Fastify route, so this
|
|
2480
|
+
* overrides the resource-level `rateLimit` for THIS endpoint only:
|
|
2481
|
+
*
|
|
2482
|
+
* - omitted → inherit the resource-level limit (or app default)
|
|
2483
|
+
* - `false` → disable rate limiting on this route
|
|
2484
|
+
* - `{ max, timeWindow }` → apply this specific limit
|
|
2485
|
+
*
|
|
2486
|
+
* Requires `@fastify/rate-limit` registered (arc's factory wires it by
|
|
2487
|
+
* default). Use for an expensive `/export` or an auth-sensitive `/reset`
|
|
2488
|
+
* that needs a tighter cap than the resource's read-heavy CRUD, or `false`
|
|
2489
|
+
* on an internal health/webhook route that must not be throttled.
|
|
2490
|
+
*
|
|
2491
|
+
* Note: this is per-route because each custom route is a distinct endpoint.
|
|
2492
|
+
* `actions` share ONE `POST /:id/action` mount by design, so a per-ACTION
|
|
2493
|
+
* limit can't be expressed here — throttle a specific action by promoting
|
|
2494
|
+
* it to a dedicated `routes:` entry, or rely on the resource-level limit.
|
|
2495
|
+
*/
|
|
2496
|
+
readonly rateLimit?: RateLimitConfig | false;
|
|
2470
2497
|
/**
|
|
2471
2498
|
* Fastify route schema. Each slot (`body`, `querystring`, `params`,
|
|
2472
2499
|
* `headers`, `response[status]`) accepts a plain JSON Schema object
|
|
@@ -2504,7 +2531,15 @@ interface RouteDefinition {
|
|
|
2504
2531
|
* ID, action-specific data, and the request.
|
|
2505
2532
|
*/
|
|
2506
2533
|
type ActionHandlerFn = (id: string, data: Record<string, unknown>, req: RequestWithExtras) => Promise<unknown>;
|
|
2507
|
-
/**
|
|
2534
|
+
/**
|
|
2535
|
+
* Full action configuration with handler, permissions, and schema.
|
|
2536
|
+
*
|
|
2537
|
+
* Rate limiting is intentionally NOT per-action: every action shares one
|
|
2538
|
+
* `POST /:id/action` (or `POST /action`) mount, so Fastify's per-route limit
|
|
2539
|
+
* can't distinguish them. Actions inherit the resource-level `rateLimit`; to
|
|
2540
|
+
* throttle a specific operation, promote it to a `routes:` entry (which
|
|
2541
|
+
* supports `RouteDefinition.rateLimit`).
|
|
2542
|
+
*/
|
|
2508
2543
|
interface ActionDefinition {
|
|
2509
2544
|
readonly handler: ActionHandlerFn;
|
|
2510
2545
|
/** Per-action permission (overrides resource-level `actionPermissions`) */
|
|
@@ -2671,14 +2706,22 @@ interface ResourcePermissions {
|
|
|
2671
2706
|
* Plugin extension namespace — arc's typed escape hatch for attaching
|
|
2672
2707
|
* declarative, per-resource config that **plugins** read at request time.
|
|
2673
2708
|
*
|
|
2674
|
-
*
|
|
2675
|
-
*
|
|
2709
|
+
* **External** plugins augment it via TypeScript declaration merging
|
|
2710
|
+
* (`declare module "@classytic/arc/types"`) to register their own typed
|
|
2676
2711
|
* slice — exactly the model Fastify uses for `FastifyInstance` decorators.
|
|
2677
|
-
*
|
|
2678
|
-
* gets full autocomplete + compile-time checking on the matching
|
|
2712
|
+
* The host gets full autocomplete + compile-time checking on the matching
|
|
2679
2713
|
* `extensions` block, and a typo (`extensions: { encyrption: … }`) is a
|
|
2680
2714
|
* type error rather than a silent no-op.
|
|
2681
2715
|
*
|
|
2716
|
+
* **First-party** slices (arc's own subpath plugins) are declared inline
|
|
2717
|
+
* below with type-only imports instead of `declare module`. Not a style
|
|
2718
|
+
* choice: arc bundles its declarations, and a relative module augmentation
|
|
2719
|
+
* (`declare module "../types/resource.js"`) survives bundling as an
|
|
2720
|
+
* unresolvable specifier — the merge silently never happens for consumers,
|
|
2721
|
+
* so the key would be a compile ERROR downstream while working inside this
|
|
2722
|
+
* repo. Inline declaration is bundler-proof; the type-only import is erased
|
|
2723
|
+
* at runtime, so the plugin stays fully opt-in.
|
|
2724
|
+
*
|
|
2682
2725
|
* **The "React for backend" composition model.** `defineResource()` is the
|
|
2683
2726
|
* declarative component, `extensions` is its typed props bag, and plugins
|
|
2684
2727
|
* are the providers that consume those props at the framework boundary.
|
|
@@ -2691,11 +2734,11 @@ interface ResourcePermissions {
|
|
|
2691
2734
|
* at request time via `request.routeOptions.config.arcExtensions` without
|
|
2692
2735
|
* re-deriving which resource a route belongs to.
|
|
2693
2736
|
*
|
|
2694
|
-
* @example
|
|
2737
|
+
* @example An external plugin package registers its slice
|
|
2695
2738
|
* ```ts
|
|
2696
2739
|
* declare module "@classytic/arc/types" {
|
|
2697
2740
|
* interface ResourceExtensions {
|
|
2698
|
-
*
|
|
2741
|
+
* myPlugin?: import("my-arc-plugin").MyPluginDirective;
|
|
2699
2742
|
* }
|
|
2700
2743
|
* }
|
|
2701
2744
|
* ```
|
|
@@ -2708,7 +2751,16 @@ interface ResourcePermissions {
|
|
|
2708
2751
|
* });
|
|
2709
2752
|
* ```
|
|
2710
2753
|
*/
|
|
2711
|
-
interface ResourceExtensions {
|
|
2754
|
+
interface ResourceExtensions {
|
|
2755
|
+
/**
|
|
2756
|
+
* Encrypt this resource's responses — full-body JWE or specific fields.
|
|
2757
|
+
* Read at request time by `@classytic/arc/encryption`'s `encryptionPlugin`
|
|
2758
|
+
* from `request.routeOptions.config.arcExtensions.encryption`; inert (and
|
|
2759
|
+
* dependency-free — the import is type-only) unless that plugin is
|
|
2760
|
+
* registered.
|
|
2761
|
+
*/
|
|
2762
|
+
encryption?: EncryptionDirective;
|
|
2763
|
+
}
|
|
2712
2764
|
interface ResourceConfig<TDoc = AnyRecord> {
|
|
2713
2765
|
name: string;
|
|
2714
2766
|
displayName?: string;
|
|
@@ -2908,7 +2960,7 @@ interface ResourceConfig<TDoc = AnyRecord> {
|
|
|
2908
2960
|
* });
|
|
2909
2961
|
* ```
|
|
2910
2962
|
*/
|
|
2911
|
-
crud?: false | { [K in CrudRouteKey]?: boolean };
|
|
2963
|
+
crud?: false | { [K in CrudRouteKey]?: boolean; };
|
|
2912
2964
|
/**
|
|
2913
2965
|
* Field name used for multi-tenant scoping (default: 'organizationId').
|
|
2914
2966
|
* Override to match your schema: 'workspaceId', 'tenantId', etc.
|
|
@@ -3599,7 +3651,8 @@ type FastifyWithDecorators = FastifyInstance & {
|
|
|
3599
3651
|
arc?: ArcDecorator;
|
|
3600
3652
|
events?: EventsDecorator;
|
|
3601
3653
|
authenticate?: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
|
|
3602
|
-
optionalAuthenticate?: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
|
|
3654
|
+
optionalAuthenticate?: (request: FastifyRequest, reply: FastifyReply) => Promise<void>;
|
|
3655
|
+
/** Organization-scoped filtering — from `multiTenant` preset */
|
|
3603
3656
|
organizationScoped?: (options?: {
|
|
3604
3657
|
required?: boolean;
|
|
3605
3658
|
}) => RouteHandlerMethod;
|
|
@@ -3964,8 +4017,10 @@ interface RegistryEntry extends ResourceMetadata {
|
|
|
3964
4017
|
*/
|
|
3965
4018
|
actions?: Array<{
|
|
3966
4019
|
readonly name: string;
|
|
3967
|
-
readonly description?: string;
|
|
3968
|
-
|
|
4020
|
+
readonly description?: string;
|
|
4021
|
+
/** Raw per-action schema (JSON Schema, Zod v4, or legacy field map) */
|
|
4022
|
+
readonly schema?: unknown;
|
|
4023
|
+
/** Per-action permission check (if different from resource-level `actionPermissions`) */
|
|
3969
4024
|
readonly permissions?: PermissionCheck;
|
|
3970
4025
|
/**
|
|
3971
4026
|
* 2.15.5: mount point — `true` (default) for `POST /:id/action`,
|
|
@@ -3974,7 +4029,8 @@ interface RegistryEntry extends ResourceMetadata {
|
|
|
3974
4029
|
* resource manifests so callers can pick the right URL without
|
|
3975
4030
|
* reading the action definition itself.
|
|
3976
4031
|
*/
|
|
3977
|
-
readonly id?: boolean;
|
|
4032
|
+
readonly id?: boolean;
|
|
4033
|
+
/** MCP tool generation flag — `false` to skip, object for overrides */
|
|
3978
4034
|
readonly mcp?: boolean | {
|
|
3979
4035
|
readonly description?: string;
|
|
3980
4036
|
readonly annotations?: Record<string, unknown>;
|
|
@@ -4001,13 +4057,17 @@ interface RegistryEntry extends ResourceMetadata {
|
|
|
4001
4057
|
readonly summary?: string;
|
|
4002
4058
|
readonly description?: string;
|
|
4003
4059
|
readonly permissions: PermissionCheck;
|
|
4004
|
-
readonly groupBy?: string | readonly string[];
|
|
4005
|
-
|
|
4006
|
-
readonly
|
|
4060
|
+
readonly groupBy?: string | readonly string[];
|
|
4061
|
+
/** Measure aliases keyed to their op-tag (e.g. `'count'`, `'sum:price'`). */
|
|
4062
|
+
readonly measures: Readonly<Record<string, string>>;
|
|
4063
|
+
/** Lookup alias names (`as` or `from`) — used by OpenAPI to know which dotted-path output keys nest. */
|
|
4064
|
+
readonly lookupAliases: readonly string[];
|
|
4065
|
+
/** Whether the aggregation requires a date range — surfaced in docs. */
|
|
4007
4066
|
readonly requireDateRange?: {
|
|
4008
4067
|
field: string;
|
|
4009
4068
|
maxRangeDays?: number;
|
|
4010
|
-
};
|
|
4069
|
+
};
|
|
4070
|
+
/** Whether the aggregation requires named filters — surfaced in docs. */
|
|
4011
4071
|
readonly requireFilters?: readonly string[];
|
|
4012
4072
|
/**
|
|
4013
4073
|
* Static result-row cap (no URL override). Mutually exclusive with
|
|
@@ -4025,7 +4085,8 @@ interface RegistryEntry extends ResourceMetadata {
|
|
|
4025
4085
|
* URL-driven limit ceiling (only meaningful with `defaultLimit`).
|
|
4026
4086
|
* OpenAPI docs render this as the `maximum` constraint on `?limit`.
|
|
4027
4087
|
*/
|
|
4028
|
-
readonly maxLimit?: number;
|
|
4088
|
+
readonly maxLimit?: number;
|
|
4089
|
+
/** MCP tool generation flag — `false` to skip, object for overrides. */
|
|
4029
4090
|
readonly mcp?: boolean | {
|
|
4030
4091
|
readonly description?: string;
|
|
4031
4092
|
readonly annotations?: Record<string, unknown>;
|
package/dist/index.d.mts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { $t as UserOrganization, A as RequestIdOptions, An as ArcCreateResult, At as AggregationMaterializedResult, B as defineResource, C as RequestContext, Ct as AggMeasureInput, D as HealthCheck, Dt as AggregationDateRangeRequirement, E as GracefulShutdownOptions, Et as AggregationConfig, F as FastifyWithDecorators, Fn as BaseControllerOptions, Ht as AuthPluginOptions, In as ControllerConfigurableOptions, J as CrudRouteKey, Jt as ApiResponse, L as RequestWithExtras, Ln as ControllerConstructionOptions, Mn as ArcGetResult, Mt as AggregationsMap, N as FastifyRequestExtras, Nn as ArcListResult, O as HealthOptions, Ot as AggregationIndexHint, P as FastifyWithAuth, Pn as ArcUpdateResult, Q as MiddlewareConfig, Rn as ListResult, S as QueryParserInterface, St as RouteHandler, T as CrudRouterOptions, Tt as AggregationCacheConfig, V as ResourceDefinition, X as EventDefinition, Xt as JWTPayload, Y as CrudSchemas, Yt as ArcRequest, Z as FieldRule, _t as ControllerLike, a as InferAdapterDoc, an as SlugExt, bt as IControllerResponse, c as TypedController, cn as BulkMixin, d as PaginationResult, en as BaseController, f as IntrospectionData, g as ArcInternalMetadata, h as ResourceMetadata, ht as RouteSchemaOptions, i as ValidationResult, in as TreeMixin, it as RateLimitConfig, jn as ArcDeleteResult, jt as AggregationRateLimit, k as IntrospectionPluginOptions, kt as AggregationMaterializedContext, l as TypedRepository, ln as BaseCrudController, m as RegistryStats, n as ConfigError, nn as SoftDeleteMixin, o as InferDocType, on as SlugMixin, p as RegistryEntry, q as CrudController, qt as AnyRecord, r as ValidateOptions, rn as TreeExt, rt as PresetResult, s as InferResourceDoc, sn as BulkExt, st as ResourceConfig, t as RouteHandlerMethod, tn as SoftDeleteExt, tt as PresetFunction, u as TypedResourceConfig, w as ServiceContext, wt as AggMeasureShorthand, xt as IRequestContext, y as OwnershipCheck, yt as IController } from "./index-
|
|
2
|
-
import { a as applyFieldWritePermissions, c as PermissionCheck, d as UserBase, i as applyFieldReadPermissions, l as PermissionContext, n as FieldPermissionMap, o as fields, t as FieldPermission, u as PermissionResult } from "./fields-
|
|
3
|
-
import
|
|
4
|
-
import { A as
|
|
5
|
-
import {
|
|
6
|
-
|
|
1
|
+
import { $t as UserOrganization, A as RequestIdOptions, An as ArcCreateResult, At as AggregationMaterializedResult, B as defineResource, C as RequestContext, Ct as AggMeasureInput, D as HealthCheck, Dt as AggregationDateRangeRequirement, E as GracefulShutdownOptions, Et as AggregationConfig, F as FastifyWithDecorators, Fn as BaseControllerOptions, Ht as AuthPluginOptions, In as ControllerConfigurableOptions, J as CrudRouteKey, Jt as ApiResponse, L as RequestWithExtras, Ln as ControllerConstructionOptions, Mn as ArcGetResult, Mt as AggregationsMap, N as FastifyRequestExtras, Nn as ArcListResult, O as HealthOptions, Ot as AggregationIndexHint, P as FastifyWithAuth, Pn as ArcUpdateResult, Q as MiddlewareConfig, Rn as ListResult, S as QueryParserInterface, St as RouteHandler, T as CrudRouterOptions, Tt as AggregationCacheConfig, V as ResourceDefinition, X as EventDefinition, Xt as JWTPayload, Y as CrudSchemas, Yt as ArcRequest, Z as FieldRule, _t as ControllerLike, a as InferAdapterDoc, an as SlugExt, bt as IControllerResponse, c as TypedController, cn as BulkMixin, d as PaginationResult, en as BaseController, f as IntrospectionData, g as ArcInternalMetadata, h as ResourceMetadata, ht as RouteSchemaOptions, i as ValidationResult, in as TreeMixin, it as RateLimitConfig, jn as ArcDeleteResult, jt as AggregationRateLimit, k as IntrospectionPluginOptions, kt as AggregationMaterializedContext, l as TypedRepository, ln as BaseCrudController, m as RegistryStats, n as ConfigError, nn as SoftDeleteMixin, o as InferDocType, on as SlugMixin, p as RegistryEntry, q as CrudController, qt as AnyRecord, r as ValidateOptions, rn as TreeExt, rt as PresetResult, s as InferResourceDoc, sn as BulkExt, st as ResourceConfig, t as RouteHandlerMethod, tn as SoftDeleteExt, tt as PresetFunction, u as TypedResourceConfig, w as ServiceContext, wt as AggMeasureShorthand, xt as IRequestContext, y as OwnershipCheck, yt as IController } from "./index-Dtrj6XZk.mjs";
|
|
2
|
+
import { a as applyFieldWritePermissions, c as PermissionCheck, d as UserBase, i as applyFieldReadPermissions, l as PermissionContext, n as FieldPermissionMap, o as fields, t as FieldPermission, u as PermissionResult } from "./fields-BGqrAa_u.mjs";
|
|
3
|
+
import "./fastify-augmentation-DafigGQp.mjs";
|
|
4
|
+
import { A as HOOK_OPERATIONS, B as SYSTEM_FIELDS, C as CrudOperation, D as DEFAULT_SORT, E as DEFAULT_MAX_LIMIT, F as MAX_REGEX_LENGTH, I as MAX_SEARCH_LENGTH, L as MUTATION_OPERATIONS, M as HookOperation, N as HookPhase, O as DEFAULT_TENANT_FIELD, P as MAX_FILTER_DEPTH, R as MutationOperation, S as CRUD_OPERATIONS, T as DEFAULT_LIMIT, f as defineResourceVariants, g as mergeResourceConfig, h as SeamedResourceConfig, j as HOOK_PHASES, k as DEFAULT_UPDATE_METHOD, m as ResourceSeams, p as AdapterLike, s as getControllerScope, v as defineAction, w as DEFAULT_ID_FIELD, x as defineAggregation, z as RESERVED_QUERY_PARAMS } from "./index-B5N-NaHs.mjs";
|
|
5
|
+
import { A as requireOwnership, C as createOrgPermissions, D as denyAll, E as anyOf, N as when, S as createDynamicPermissionMatrix, T as allowPublic, b as DynamicPermissionMatrixConfig, c as publicReadAdminWrite, d as requireOrgMembership, f as requireOrgRole, h as requireTeamMembership, i as ownerWithAdminBypass, j as requireRoles, k as requireAuth, l as readOnly, m as requireServiceScope, n as authenticated, o as presets_d_exports, p as requireScopeContext, r as fullPublic, s as publicRead, t as adminOnly, u as requireOrgInScope, w as allOf, y as DynamicPermissionMatrix } from "./index-B5PoNbfu.mjs";
|
|
6
|
+
import { a as NotFoundError, d as ValidationError, f as createDomainError, i as ForbiddenError, t as ArcError, u as UnauthorizedError } from "./errors-DHcHVAgk.mjs";
|
|
7
7
|
//#region src/index.d.ts
|
|
8
8
|
declare const version: string;
|
|
9
9
|
//#endregion
|
|
10
|
-
export { type AggMeasureInput, type AggMeasureShorthand, type AggregationCacheConfig, type AggregationConfig, type AggregationDateRangeRequirement, type AggregationIndexHint, type AggregationMaterializedContext, type AggregationMaterializedResult, type AggregationRateLimit, type AggregationsMap, type AnyRecord, type ApiResponse, type ArcCreateResult, type ArcDeleteResult, ArcError, type ArcGetResult, type ArcInternalMetadata, type ArcListResult, type ArcRequest, type ArcUpdateResult, type AuthPluginOptions, BaseController, type BaseControllerOptions, BaseCrudController, type BulkExt, BulkMixin, CRUD_OPERATIONS, type ConfigError, type ControllerConfigurableOptions, type ControllerConstructionOptions, type ControllerLike, type CrudController, type CrudOperation, type CrudRouteKey, type CrudRouterOptions, type CrudSchemas, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, type DynamicPermissionMatrix, type DynamicPermissionMatrixConfig, type EventDefinition, type FastifyRequestExtras, type FastifyWithAuth, type FastifyWithDecorators, type FieldPermission, type FieldPermissionMap, type FieldRule, ForbiddenError, type GracefulShutdownOptions, HOOK_OPERATIONS, HOOK_PHASES, type HealthCheck, type HealthOptions, type HookOperation, type HookPhase, type IController, type IControllerResponse, type IRequestContext, type InferAdapterDoc, type InferDocType, type InferResourceDoc, type IntrospectionData, type IntrospectionPluginOptions, type JWTPayload, type ListResult, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, type MiddlewareConfig, type MutationOperation, NotFoundError, type OwnershipCheck, type PaginationResult, type PermissionCheck, type PermissionContext, type PermissionResult, type PresetFunction, type PresetResult, type QueryParserInterface, RESERVED_QUERY_PARAMS, type RateLimitConfig, type RegistryEntry, type RegistryStats, type RequestContext, type RequestIdOptions, type RequestWithExtras, type ResourceConfig, ResourceDefinition, type ResourceMetadata, type RouteHandler, type RouteHandlerMethod, type RouteSchemaOptions, SYSTEM_FIELDS, type ServiceContext, type SlugExt, SlugMixin, type SoftDeleteExt, SoftDeleteMixin, type TreeExt, TreeMixin, type TypedController, type TypedRepository, type TypedResourceConfig, UnauthorizedError, type UserBase, type UserOrganization, type ValidateOptions, ValidationError, type ValidationResult, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, authenticated, createDomainError, createDynamicPermissionMatrix, createOrgPermissions, defineAction, defineAggregation, defineResource, defineResourceVariants, denyAll, fields, fullPublic, getControllerScope, ownerWithAdminBypass, presets_d_exports as permissions, publicRead, publicReadAdminWrite, readOnly, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, version, when };
|
|
10
|
+
export { type AdapterLike, type AggMeasureInput, type AggMeasureShorthand, type AggregationCacheConfig, type AggregationConfig, type AggregationDateRangeRequirement, type AggregationIndexHint, type AggregationMaterializedContext, type AggregationMaterializedResult, type AggregationRateLimit, type AggregationsMap, type AnyRecord, type ApiResponse, type ArcCreateResult, type ArcDeleteResult, ArcError, type ArcGetResult, type ArcInternalMetadata, type ArcListResult, type ArcRequest, type ArcUpdateResult, type AuthPluginOptions, BaseController, type BaseControllerOptions, BaseCrudController, type BulkExt, BulkMixin, CRUD_OPERATIONS, type ConfigError, type ControllerConfigurableOptions, type ControllerConstructionOptions, type ControllerLike, type CrudController, type CrudOperation, type CrudRouteKey, type CrudRouterOptions, type CrudSchemas, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, type DynamicPermissionMatrix, type DynamicPermissionMatrixConfig, type EventDefinition, type FastifyRequestExtras, type FastifyWithAuth, type FastifyWithDecorators, type FieldPermission, type FieldPermissionMap, type FieldRule, ForbiddenError, type GracefulShutdownOptions, HOOK_OPERATIONS, HOOK_PHASES, type HealthCheck, type HealthOptions, type HookOperation, type HookPhase, type IController, type IControllerResponse, type IRequestContext, type InferAdapterDoc, type InferDocType, type InferResourceDoc, type IntrospectionData, type IntrospectionPluginOptions, type JWTPayload, type ListResult, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, type MiddlewareConfig, type MutationOperation, NotFoundError, type OwnershipCheck, type PaginationResult, type PermissionCheck, type PermissionContext, type PermissionResult, type PresetFunction, type PresetResult, type QueryParserInterface, RESERVED_QUERY_PARAMS, type RateLimitConfig, type RegistryEntry, type RegistryStats, type RequestContext, type RequestIdOptions, type RequestWithExtras, type ResourceConfig, ResourceDefinition, type ResourceMetadata, type ResourceSeams, type RouteHandler, type RouteHandlerMethod, type RouteSchemaOptions, SYSTEM_FIELDS, type SeamedResourceConfig, type ServiceContext, type SlugExt, SlugMixin, type SoftDeleteExt, SoftDeleteMixin, type TreeExt, TreeMixin, type TypedController, type TypedRepository, type TypedResourceConfig, UnauthorizedError, type UserBase, type UserOrganization, type ValidateOptions, ValidationError, type ValidationResult, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, authenticated, createDomainError, createDynamicPermissionMatrix, createOrgPermissions, defineAction, defineAggregation, defineResource, defineResourceVariants, denyAll, fields, fullPublic, getControllerScope, mergeResourceConfig, ownerWithAdminBypass, presets_d_exports as permissions, publicRead, publicReadAdminWrite, readOnly, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, version, when };
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { a as DEFAULT_SORT, c as HOOK_OPERATIONS, d as MAX_REGEX_LENGTH, f as MAX_SEARCH_LENGTH, h as SYSTEM_FIELDS, i as DEFAULT_MAX_LIMIT, l as HOOK_PHASES, m as RESERVED_QUERY_PARAMS, n as DEFAULT_ID_FIELD, o as DEFAULT_TENANT_FIELD, p as MUTATION_OPERATIONS, r as DEFAULT_LIMIT, s as DEFAULT_UPDATE_METHOD, t as CRUD_OPERATIONS, u as MAX_FILTER_DEPTH } from "./constants-
|
|
1
|
+
import { a as DEFAULT_SORT, c as HOOK_OPERATIONS, d as MAX_REGEX_LENGTH, f as MAX_SEARCH_LENGTH, h as SYSTEM_FIELDS, i as DEFAULT_MAX_LIMIT, l as HOOK_PHASES, m as RESERVED_QUERY_PARAMS, n as DEFAULT_ID_FIELD, o as DEFAULT_TENANT_FIELD, p as MUTATION_OPERATIONS, r as DEFAULT_LIMIT, s as DEFAULT_UPDATE_METHOD, t as CRUD_OPERATIONS, u as MAX_FILTER_DEPTH } from "./constants-DNre0wRg.mjs";
|
|
2
2
|
import { d as createDomainError, i as NotFoundError, l as UnauthorizedError, r as ForbiddenError, t as ArcError, u as ValidationError } from "./errors-DkO8Nk6-.mjs";
|
|
3
|
-
import { a as BulkMixin, i as SlugMixin, n as TreeMixin, o as BaseCrudController, r as SoftDeleteMixin, t as BaseController } from "./BaseController-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { l as getControllerScope } from "./actionPermissions-
|
|
3
|
+
import { a as BulkMixin, i as SlugMixin, n as TreeMixin, o as BaseCrudController, r as SoftDeleteMixin, t as BaseController } from "./BaseController-BnLYgE9A.mjs";
|
|
4
|
+
import { E as requireRoles, F as applyFieldReadPermissions, I as applyFieldWritePermissions, L as fields, O as when, S as denyAll, T as requireOwnership, _ as requireServiceScope, b as allowPublic, c as publicReadAdminWrite, d as createDynamicPermissionMatrix, f as createOrgPermissions, g as requireScopeContext, h as requireOrgRole, i as ownerWithAdminBypass, l as readOnly, m as requireOrgMembership, n as authenticated, o as presets_exports, p as requireOrgInScope, r as fullPublic, s as publicRead, t as adminOnly, v as requireTeamMembership, w as requireAuth, x as anyOf, y as allOf } from "./permissions-BJMuKMl7.mjs";
|
|
5
|
+
import { a as mergeResourceConfig, c as defineAction, d as defineAggregation, i as defineResourceVariants, o as defineResource, s as ResourceDefinition } from "./core-DZ6Xe1jR.mjs";
|
|
6
|
+
import { l as getControllerScope } from "./actionPermissions-ze70xXJi.mjs";
|
|
7
7
|
//#region src/index.ts
|
|
8
|
-
const version = "2.
|
|
8
|
+
const version = "2.21.0";
|
|
9
9
|
//#endregion
|
|
10
|
-
export { ArcError, BaseController, BaseCrudController, BulkMixin, CRUD_OPERATIONS, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, ForbiddenError, HOOK_OPERATIONS, HOOK_PHASES, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, NotFoundError, RESERVED_QUERY_PARAMS, ResourceDefinition, SYSTEM_FIELDS, SlugMixin, SoftDeleteMixin, TreeMixin, UnauthorizedError, ValidationError, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, authenticated, createDomainError, createDynamicPermissionMatrix, createOrgPermissions, defineAction, defineAggregation, defineResource, defineResourceVariants, denyAll, fields, fullPublic, getControllerScope, ownerWithAdminBypass, presets_exports as permissions, publicRead, publicReadAdminWrite, readOnly, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, version, when };
|
|
10
|
+
export { ArcError, BaseController, BaseCrudController, BulkMixin, CRUD_OPERATIONS, DEFAULT_ID_FIELD, DEFAULT_LIMIT, DEFAULT_MAX_LIMIT, DEFAULT_SORT, DEFAULT_TENANT_FIELD, DEFAULT_UPDATE_METHOD, ForbiddenError, HOOK_OPERATIONS, HOOK_PHASES, MAX_FILTER_DEPTH, MAX_REGEX_LENGTH, MAX_SEARCH_LENGTH, MUTATION_OPERATIONS, NotFoundError, RESERVED_QUERY_PARAMS, ResourceDefinition, SYSTEM_FIELDS, SlugMixin, SoftDeleteMixin, TreeMixin, UnauthorizedError, ValidationError, adminOnly, allOf, allowPublic, anyOf, applyFieldReadPermissions, applyFieldWritePermissions, authenticated, createDomainError, createDynamicPermissionMatrix, createOrgPermissions, defineAction, defineAggregation, defineResource, defineResourceVariants, denyAll, fields, fullPublic, getControllerScope, mergeResourceConfig, ownerWithAdminBypass, presets_exports as permissions, publicRead, publicReadAdminWrite, readOnly, requireAuth, requireOrgInScope, requireOrgMembership, requireOrgRole, requireOwnership, requireRoles, requireScopeContext, requireServiceScope, requireTeamMembership, version, when };
|