@prave/shared 1.4.2 → 1.4.3
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/dist/schemas/index.d.ts +4 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +4 -0
- package/dist/schemas/kv.schema.d.ts +56 -0
- package/dist/schemas/kv.schema.d.ts.map +1 -0
- package/dist/schemas/kv.schema.js +39 -0
- package/dist/schemas/sdk.schema.d.ts +51 -0
- package/dist/schemas/sdk.schema.d.ts.map +1 -0
- package/dist/schemas/sdk.schema.js +36 -0
- package/dist/schemas/vault.schema.d.ts +54 -0
- package/dist/schemas/vault.schema.d.ts.map +1 -0
- package/dist/schemas/vault.schema.js +39 -0
- package/dist/schemas/webhook-endpoint.schema.d.ts +161 -0
- package/dist/schemas/webhook-endpoint.schema.d.ts.map +1 -0
- package/dist/schemas/webhook-endpoint.schema.js +74 -0
- package/dist/types/plan-limits.d.ts +23 -0
- package/dist/types/plan-limits.d.ts.map +1 -1
- package/dist/types/plan-limits.js +12 -0
- package/package.json +1 -1
package/dist/schemas/index.d.ts
CHANGED
|
@@ -15,4 +15,8 @@ export * from './intelligence.schema.js';
|
|
|
15
15
|
export * from './api-keys.schema.js';
|
|
16
16
|
export * from './skill-report.schema.js';
|
|
17
17
|
export * from './run.schema.js';
|
|
18
|
+
export * from './vault.schema.js';
|
|
19
|
+
export * from './kv.schema.js';
|
|
20
|
+
export * from './webhook-endpoint.schema.js';
|
|
21
|
+
export * from './sdk.schema.js';
|
|
18
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,2BAA2B,CAAA;AACzC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,yBAAyB,CAAA;AACvC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iBAAiB,CAAA"}
|
package/dist/schemas/index.js
CHANGED
|
@@ -15,3 +15,7 @@ export * from './intelligence.schema.js';
|
|
|
15
15
|
export * from './api-keys.schema.js';
|
|
16
16
|
export * from './skill-report.schema.js';
|
|
17
17
|
export * from './run.schema.js';
|
|
18
|
+
export * from './vault.schema.js';
|
|
19
|
+
export * from './kv.schema.js';
|
|
20
|
+
export * from './webhook-endpoint.schema.js';
|
|
21
|
+
export * from './sdk.schema.js';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* KV — per-run persistent key/value store, encrypted at rest.
|
|
4
|
+
*
|
|
5
|
+
* Lives in the `run_kv` table. Each row is scoped to a single `run_id`;
|
|
6
|
+
* RLS for dashboard reads, JWT-scoped service-role for SDK reads.
|
|
7
|
+
*
|
|
8
|
+
* Designed for the canonical "skill exchanged OAuth code → access token,
|
|
9
|
+
* stashes it for the next cron tick" pattern. Values are opaque blobs
|
|
10
|
+
* (we don't introspect them); 64KB per value, optional TTL.
|
|
11
|
+
*/
|
|
12
|
+
export declare const kvKeySchema: z.ZodString;
|
|
13
|
+
export type KvKey = z.infer<typeof kvKeySchema>;
|
|
14
|
+
export declare const kvEntrySchema: z.ZodObject<{
|
|
15
|
+
key: z.ZodString;
|
|
16
|
+
value: z.ZodString;
|
|
17
|
+
size_bytes: z.ZodNumber;
|
|
18
|
+
expires_at: z.ZodNullable<z.ZodString>;
|
|
19
|
+
updated_at: z.ZodString;
|
|
20
|
+
}, "strip", z.ZodTypeAny, {
|
|
21
|
+
value: string;
|
|
22
|
+
size_bytes: number;
|
|
23
|
+
updated_at: string;
|
|
24
|
+
expires_at: string | null;
|
|
25
|
+
key: string;
|
|
26
|
+
}, {
|
|
27
|
+
value: string;
|
|
28
|
+
size_bytes: number;
|
|
29
|
+
updated_at: string;
|
|
30
|
+
expires_at: string | null;
|
|
31
|
+
key: string;
|
|
32
|
+
}>;
|
|
33
|
+
export type KvEntry = z.infer<typeof kvEntrySchema>;
|
|
34
|
+
export declare const kvPutInputSchema: z.ZodObject<{
|
|
35
|
+
value: z.ZodString;
|
|
36
|
+
ttl_seconds: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
value: string;
|
|
39
|
+
ttl_seconds?: number | undefined;
|
|
40
|
+
}, {
|
|
41
|
+
value: string;
|
|
42
|
+
ttl_seconds?: number | undefined;
|
|
43
|
+
}>;
|
|
44
|
+
export type KvPutInput = z.infer<typeof kvPutInputSchema>;
|
|
45
|
+
export declare const kvListQuerySchema: z.ZodObject<{
|
|
46
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
47
|
+
limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
limit?: number | undefined;
|
|
50
|
+
prefix?: string | undefined;
|
|
51
|
+
}, {
|
|
52
|
+
limit?: number | undefined;
|
|
53
|
+
prefix?: string | undefined;
|
|
54
|
+
}>;
|
|
55
|
+
export type KvListQuery = z.infer<typeof kvListQuerySchema>;
|
|
56
|
+
//# sourceMappingURL=kv.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/kv.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;GASG;AAMH,eAAO,MAAM,WAAW,aAOrB,CAAA;AACH,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAA;AAE/C,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;EAMxB,CAAA;AACF,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAA;AAKnD,eAAO,MAAM,gBAAgB;;;;;;;;;EAG3B,CAAA;AACF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAGzD,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* KV — per-run persistent key/value store, encrypted at rest.
|
|
4
|
+
*
|
|
5
|
+
* Lives in the `run_kv` table. Each row is scoped to a single `run_id`;
|
|
6
|
+
* RLS for dashboard reads, JWT-scoped service-role for SDK reads.
|
|
7
|
+
*
|
|
8
|
+
* Designed for the canonical "skill exchanged OAuth code → access token,
|
|
9
|
+
* stashes it for the next cron tick" pattern. Values are opaque blobs
|
|
10
|
+
* (we don't introspect them); 64KB per value, optional TTL.
|
|
11
|
+
*/
|
|
12
|
+
// Same shape as a URL path-segment with a few "scoped" delimiters so
|
|
13
|
+
// skills can build namespaces (`oauth:tiktok:state`, `queue:pending`).
|
|
14
|
+
// We keep it permissive enough not to surprise users; the colon /
|
|
15
|
+
// dash / dot are common across all KV ecosystems.
|
|
16
|
+
export const kvKeySchema = z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(256)
|
|
20
|
+
.regex(/^[A-Za-z0-9_\-.:]+$/, 'Letters, digits, and any of `_ - . :` — no spaces or slashes.');
|
|
21
|
+
export const kvEntrySchema = z.object({
|
|
22
|
+
key: kvKeySchema,
|
|
23
|
+
value: z.string(),
|
|
24
|
+
size_bytes: z.number().int().nonnegative(),
|
|
25
|
+
expires_at: z.string().datetime().nullable(),
|
|
26
|
+
updated_at: z.string().datetime(),
|
|
27
|
+
});
|
|
28
|
+
// Body for PUT /api/v1/sdk/kv/:key (the SDK route) and PUT
|
|
29
|
+
// /api/v1/runs/:slug/kv/:key (the dashboard debug route). ttlSeconds
|
|
30
|
+
// translates to expires_at = now() + ttlSeconds in the service layer.
|
|
31
|
+
export const kvPutInputSchema = z.object({
|
|
32
|
+
value: z.string().max(65_536),
|
|
33
|
+
ttl_seconds: z.number().int().positive().max(60 * 60 * 24 * 365).optional(),
|
|
34
|
+
});
|
|
35
|
+
// GET list filter — prefix is the only filter supported.
|
|
36
|
+
export const kvListQuerySchema = z.object({
|
|
37
|
+
prefix: z.string().max(256).optional(),
|
|
38
|
+
limit: z.number().int().min(1).max(1_000).default(100).optional(),
|
|
39
|
+
});
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Shapes for the authenticated SDK surface mounted at `/api/v1/sdk/*`.
|
|
4
|
+
*
|
|
5
|
+
* Auth: middleware verifies a HS256 JWT passed as Bearer in the
|
|
6
|
+
* `PRAVE_SDK_TOKEN` env var inside the bwrap sandbox. Claims fall into
|
|
7
|
+
* the shape below, which is also what `sdkAuth` attaches to `req`.
|
|
8
|
+
*
|
|
9
|
+
* Every SDK request resolves to a single run_id; the rest of the
|
|
10
|
+
* surface is scoped accordingly (no cross-run reads).
|
|
11
|
+
*/
|
|
12
|
+
export declare const sdkTokenClaimsSchema: z.ZodObject<{
|
|
13
|
+
run_id: z.ZodString;
|
|
14
|
+
exec_id: z.ZodString;
|
|
15
|
+
exp: z.ZodNumber;
|
|
16
|
+
iat: z.ZodOptional<z.ZodNumber>;
|
|
17
|
+
}, "strip", z.ZodTypeAny, {
|
|
18
|
+
run_id: string;
|
|
19
|
+
exec_id: string;
|
|
20
|
+
exp: number;
|
|
21
|
+
iat?: number | undefined;
|
|
22
|
+
}, {
|
|
23
|
+
run_id: string;
|
|
24
|
+
exec_id: string;
|
|
25
|
+
exp: number;
|
|
26
|
+
iat?: number | undefined;
|
|
27
|
+
}>;
|
|
28
|
+
export type SdkTokenClaims = z.infer<typeof sdkTokenClaimsSchema>;
|
|
29
|
+
export declare const sdkLogInputSchema: z.ZodObject<{
|
|
30
|
+
level: z.ZodEnum<["debug", "info", "warn", "error"]>;
|
|
31
|
+
message: z.ZodString;
|
|
32
|
+
context: z.ZodEffects<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>, Record<string, unknown> | undefined, Record<string, unknown> | undefined>;
|
|
33
|
+
}, "strip", z.ZodTypeAny, {
|
|
34
|
+
message: string;
|
|
35
|
+
level: "error" | "debug" | "info" | "warn";
|
|
36
|
+
context?: Record<string, unknown> | undefined;
|
|
37
|
+
}, {
|
|
38
|
+
message: string;
|
|
39
|
+
level: "error" | "debug" | "info" | "warn";
|
|
40
|
+
context?: Record<string, unknown> | undefined;
|
|
41
|
+
}>;
|
|
42
|
+
export type SdkLogInput = z.infer<typeof sdkLogInputSchema>;
|
|
43
|
+
export declare const sdkWebhooksAckInputSchema: z.ZodObject<{
|
|
44
|
+
ids: z.ZodArray<z.ZodString, "many">;
|
|
45
|
+
}, "strip", z.ZodTypeAny, {
|
|
46
|
+
ids: string[];
|
|
47
|
+
}, {
|
|
48
|
+
ids: string[];
|
|
49
|
+
}>;
|
|
50
|
+
export type SdkWebhooksAckInput = z.infer<typeof sdkWebhooksAckInputSchema>;
|
|
51
|
+
//# sourceMappingURL=sdk.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/sdk.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;GASG;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAO/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAIjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;EAW5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAK3D,eAAO,MAAM,yBAAyB;;;;;;EAEpC,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Shapes for the authenticated SDK surface mounted at `/api/v1/sdk/*`.
|
|
4
|
+
*
|
|
5
|
+
* Auth: middleware verifies a HS256 JWT passed as Bearer in the
|
|
6
|
+
* `PRAVE_SDK_TOKEN` env var inside the bwrap sandbox. Claims fall into
|
|
7
|
+
* the shape below, which is also what `sdkAuth` attaches to `req`.
|
|
8
|
+
*
|
|
9
|
+
* Every SDK request resolves to a single run_id; the rest of the
|
|
10
|
+
* surface is scoped accordingly (no cross-run reads).
|
|
11
|
+
*/
|
|
12
|
+
export const sdkTokenClaimsSchema = z.object({
|
|
13
|
+
run_id: z.string().uuid(),
|
|
14
|
+
exec_id: z.string().uuid(),
|
|
15
|
+
// Standard JWT registered fields. `exp` is required, `iat` is convenient
|
|
16
|
+
// for debugging in logs but not enforced.
|
|
17
|
+
exp: z.number().int().positive(),
|
|
18
|
+
iat: z.number().int().positive().optional(),
|
|
19
|
+
});
|
|
20
|
+
// POST /api/v1/sdk/log — structured log line forwarded to
|
|
21
|
+
// `run_executions.log_text` so it surfaces in the dashboard log viewer.
|
|
22
|
+
export const sdkLogInputSchema = z.object({
|
|
23
|
+
level: z.enum(['debug', 'info', 'warn', 'error']),
|
|
24
|
+
message: z.string().max(8_192),
|
|
25
|
+
// Arbitrary structured context — must JSON-stringify under 4 KB.
|
|
26
|
+
context: z
|
|
27
|
+
.record(z.string(), z.unknown())
|
|
28
|
+
.optional()
|
|
29
|
+
.refine((v) => v === undefined || JSON.stringify(v).length <= 4_096, 'context must serialise to under 4 KB'),
|
|
30
|
+
});
|
|
31
|
+
// POST /api/v1/sdk/webhooks/:endpointId/ack — body is `{ ids: [..] }`
|
|
32
|
+
// or an empty body to ack the events implicitly returned in the prior
|
|
33
|
+
// drain call (cookied via the SDK).
|
|
34
|
+
export const sdkWebhooksAckInputSchema = z.object({
|
|
35
|
+
ids: z.array(z.string().uuid()).min(1).max(500),
|
|
36
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Vault — user-supplied secrets bound to a Run.
|
|
4
|
+
*
|
|
5
|
+
* Values are AES-256-GCM-encrypted at rest (same master key as
|
|
6
|
+
* `runs.env_encrypted` and `user_api_keys`). The plaintext only ever
|
|
7
|
+
* surfaces to the worker via the `/api/v1/sdk/vault/:key` route, which
|
|
8
|
+
* authenticates with the short-lived `PRAVE_SDK_TOKEN` JWT minted per
|
|
9
|
+
* execution.
|
|
10
|
+
*
|
|
11
|
+
* Dashboard UI sets values; SDK reads them. There is intentionally no
|
|
12
|
+
* read endpoint that returns plaintext to the dashboard — once set, a
|
|
13
|
+
* value can only be overwritten, never read back through the web app.
|
|
14
|
+
*/
|
|
15
|
+
export declare const vaultKeySchema: z.ZodString;
|
|
16
|
+
export type VaultKey = z.infer<typeof vaultKeySchema>;
|
|
17
|
+
export declare const vaultSecretSchema: z.ZodObject<{
|
|
18
|
+
key: z.ZodString;
|
|
19
|
+
label: z.ZodNullable<z.ZodString>;
|
|
20
|
+
link: z.ZodNullable<z.ZodString>;
|
|
21
|
+
size_bytes: z.ZodNumber;
|
|
22
|
+
created_at: z.ZodString;
|
|
23
|
+
updated_at: z.ZodString;
|
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
|
25
|
+
size_bytes: number;
|
|
26
|
+
created_at: string;
|
|
27
|
+
updated_at: string;
|
|
28
|
+
label: string | null;
|
|
29
|
+
key: string;
|
|
30
|
+
link: string | null;
|
|
31
|
+
}, {
|
|
32
|
+
size_bytes: number;
|
|
33
|
+
created_at: string;
|
|
34
|
+
updated_at: string;
|
|
35
|
+
label: string | null;
|
|
36
|
+
key: string;
|
|
37
|
+
link: string | null;
|
|
38
|
+
}>;
|
|
39
|
+
export type VaultSecret = z.infer<typeof vaultSecretSchema>;
|
|
40
|
+
export declare const vaultPutInputSchema: z.ZodObject<{
|
|
41
|
+
value: z.ZodString;
|
|
42
|
+
label: z.ZodOptional<z.ZodString>;
|
|
43
|
+
link: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
value: string;
|
|
46
|
+
label?: string | undefined;
|
|
47
|
+
link?: string | undefined;
|
|
48
|
+
}, {
|
|
49
|
+
value: string;
|
|
50
|
+
label?: string | undefined;
|
|
51
|
+
link?: string | undefined;
|
|
52
|
+
}>;
|
|
53
|
+
export type VaultPutInput = z.infer<typeof vaultPutInputSchema>;
|
|
54
|
+
//# sourceMappingURL=vault.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/vault.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;;;;GAYG;AAMH,eAAO,MAAM,cAAc,aAOxB,CAAA;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAA;AAErD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAO5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAK3D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;EAI9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Vault — user-supplied secrets bound to a Run.
|
|
4
|
+
*
|
|
5
|
+
* Values are AES-256-GCM-encrypted at rest (same master key as
|
|
6
|
+
* `runs.env_encrypted` and `user_api_keys`). The plaintext only ever
|
|
7
|
+
* surfaces to the worker via the `/api/v1/sdk/vault/:key` route, which
|
|
8
|
+
* authenticates with the short-lived `PRAVE_SDK_TOKEN` JWT minted per
|
|
9
|
+
* execution.
|
|
10
|
+
*
|
|
11
|
+
* Dashboard UI sets values; SDK reads them. There is intentionally no
|
|
12
|
+
* read endpoint that returns plaintext to the dashboard — once set, a
|
|
13
|
+
* value can only be overwritten, never read back through the web app.
|
|
14
|
+
*/
|
|
15
|
+
// POSIX-ish key — same shape as env var names so skill code can stash
|
|
16
|
+
// secrets under the same identifier (`prave.vault.get('TIKTOK_CLIENT_ID')`)
|
|
17
|
+
// or, where a skill expects an env var directly, the SDK's loader can
|
|
18
|
+
// project them into the bwrap env without renaming.
|
|
19
|
+
export const vaultKeySchema = z
|
|
20
|
+
.string()
|
|
21
|
+
.min(1)
|
|
22
|
+
.max(128)
|
|
23
|
+
.regex(/^[A-Za-z_][A-Za-z0-9_]*$/, 'Use POSIX-style names: letters, digits, underscore; cannot start with a digit.');
|
|
24
|
+
export const vaultSecretSchema = z.object({
|
|
25
|
+
key: vaultKeySchema,
|
|
26
|
+
label: z.string().max(120).nullable(),
|
|
27
|
+
link: z.string().url().max(2_048).nullable(),
|
|
28
|
+
size_bytes: z.number().int().nonnegative(),
|
|
29
|
+
created_at: z.string().datetime(),
|
|
30
|
+
updated_at: z.string().datetime(),
|
|
31
|
+
});
|
|
32
|
+
// Body for PUT /api/v1/runs/:slug/vault/:key. Caller passes the full
|
|
33
|
+
// new value; we encrypt + replace. Empty string is allowed (some
|
|
34
|
+
// providers expect a literal "" header).
|
|
35
|
+
export const vaultPutInputSchema = z.object({
|
|
36
|
+
value: z.string().max(65_536),
|
|
37
|
+
label: z.string().max(120).optional(),
|
|
38
|
+
link: z.string().url().max(2_048).optional(),
|
|
39
|
+
});
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Webhook endpoint declarations — each one mints a stable HTTPS URL on
|
|
4
|
+
* `in.prave.app/w/<runs.webhook_token>/<endpoint_id>` that buffers
|
|
5
|
+
* inbound traffic into `webhook_events` (or, when trigger_mode is
|
|
6
|
+
* 'immediate', also enqueues a fresh run execution).
|
|
7
|
+
*
|
|
8
|
+
* Two flavours of inbound traffic share this surface:
|
|
9
|
+
* • short-lived OAuth callbacks (`?code=…&state=…`) — almost always
|
|
10
|
+
* 'immediate' so the code is exchanged before its ~10-minute window
|
|
11
|
+
* closes;
|
|
12
|
+
* • long-tail webhooks (Slack interactivity, TikTok post.published,
|
|
13
|
+
* etc.) — 'buffer', drained by `prave.webhooks.drain()` on the
|
|
14
|
+
* next cron run.
|
|
15
|
+
*
|
|
16
|
+
* HMAC verification is optional and only meaningful for buffered
|
|
17
|
+
* webhooks where the provider signs the body. OAuth callbacks rarely
|
|
18
|
+
* sign — providers rely on the redirect_uri being preregistered.
|
|
19
|
+
*/
|
|
20
|
+
export declare const webhookEndpointIdSchema: z.ZodString;
|
|
21
|
+
export type WebhookEndpointId = z.infer<typeof webhookEndpointIdSchema>;
|
|
22
|
+
export declare const webhookTriggerModeSchema: z.ZodEnum<["buffer", "immediate"]>;
|
|
23
|
+
export type WebhookTriggerMode = z.infer<typeof webhookTriggerModeSchema>;
|
|
24
|
+
export declare const webhookHmacAlgorithmSchema: z.ZodEnum<["sha256", "sha1", "sha512"]>;
|
|
25
|
+
export type WebhookHmacAlgorithm = z.infer<typeof webhookHmacAlgorithmSchema>;
|
|
26
|
+
export declare const webhookEndpointSchema: z.ZodObject<{
|
|
27
|
+
id: z.ZodString;
|
|
28
|
+
endpoint_id: z.ZodString;
|
|
29
|
+
label: z.ZodNullable<z.ZodString>;
|
|
30
|
+
url: z.ZodString;
|
|
31
|
+
hmac_header: z.ZodNullable<z.ZodString>;
|
|
32
|
+
hmac_algorithm: z.ZodNullable<z.ZodEnum<["sha256", "sha1", "sha512"]>>;
|
|
33
|
+
signing_secret_preview: z.ZodNullable<z.ZodString>;
|
|
34
|
+
trigger_mode: z.ZodEnum<["buffer", "immediate"]>;
|
|
35
|
+
response_status: z.ZodNumber;
|
|
36
|
+
response_body: z.ZodNullable<z.ZodString>;
|
|
37
|
+
response_content_type: z.ZodNullable<z.ZodString>;
|
|
38
|
+
events_30d: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
last_received_at: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
40
|
+
created_at: z.ZodString;
|
|
41
|
+
updated_at: z.ZodString;
|
|
42
|
+
}, "strip", z.ZodTypeAny, {
|
|
43
|
+
id: string;
|
|
44
|
+
created_at: string;
|
|
45
|
+
updated_at: string;
|
|
46
|
+
url: string;
|
|
47
|
+
label: string | null;
|
|
48
|
+
endpoint_id: string;
|
|
49
|
+
hmac_header: string | null;
|
|
50
|
+
hmac_algorithm: "sha256" | "sha1" | "sha512" | null;
|
|
51
|
+
signing_secret_preview: string | null;
|
|
52
|
+
trigger_mode: "buffer" | "immediate";
|
|
53
|
+
response_status: number;
|
|
54
|
+
response_body: string | null;
|
|
55
|
+
response_content_type: string | null;
|
|
56
|
+
events_30d?: number | undefined;
|
|
57
|
+
last_received_at?: string | null | undefined;
|
|
58
|
+
}, {
|
|
59
|
+
id: string;
|
|
60
|
+
created_at: string;
|
|
61
|
+
updated_at: string;
|
|
62
|
+
url: string;
|
|
63
|
+
label: string | null;
|
|
64
|
+
endpoint_id: string;
|
|
65
|
+
hmac_header: string | null;
|
|
66
|
+
hmac_algorithm: "sha256" | "sha1" | "sha512" | null;
|
|
67
|
+
signing_secret_preview: string | null;
|
|
68
|
+
trigger_mode: "buffer" | "immediate";
|
|
69
|
+
response_status: number;
|
|
70
|
+
response_body: string | null;
|
|
71
|
+
response_content_type: string | null;
|
|
72
|
+
events_30d?: number | undefined;
|
|
73
|
+
last_received_at?: string | null | undefined;
|
|
74
|
+
}>;
|
|
75
|
+
export type WebhookEndpoint = z.infer<typeof webhookEndpointSchema>;
|
|
76
|
+
export declare const webhookEndpointCreateInputSchema: z.ZodObject<{
|
|
77
|
+
endpoint_id: z.ZodString;
|
|
78
|
+
label: z.ZodOptional<z.ZodString>;
|
|
79
|
+
trigger_mode: z.ZodDefault<z.ZodEnum<["buffer", "immediate"]>>;
|
|
80
|
+
hmac_header: z.ZodOptional<z.ZodString>;
|
|
81
|
+
hmac_algorithm: z.ZodOptional<z.ZodEnum<["sha256", "sha1", "sha512"]>>;
|
|
82
|
+
signing_secret: z.ZodOptional<z.ZodString>;
|
|
83
|
+
response_status: z.ZodOptional<z.ZodNumber>;
|
|
84
|
+
response_body: z.ZodOptional<z.ZodString>;
|
|
85
|
+
response_content_type: z.ZodOptional<z.ZodString>;
|
|
86
|
+
}, "strip", z.ZodTypeAny, {
|
|
87
|
+
endpoint_id: string;
|
|
88
|
+
trigger_mode: "buffer" | "immediate";
|
|
89
|
+
label?: string | undefined;
|
|
90
|
+
hmac_header?: string | undefined;
|
|
91
|
+
hmac_algorithm?: "sha256" | "sha1" | "sha512" | undefined;
|
|
92
|
+
response_status?: number | undefined;
|
|
93
|
+
response_body?: string | undefined;
|
|
94
|
+
response_content_type?: string | undefined;
|
|
95
|
+
signing_secret?: string | undefined;
|
|
96
|
+
}, {
|
|
97
|
+
endpoint_id: string;
|
|
98
|
+
label?: string | undefined;
|
|
99
|
+
hmac_header?: string | undefined;
|
|
100
|
+
hmac_algorithm?: "sha256" | "sha1" | "sha512" | undefined;
|
|
101
|
+
trigger_mode?: "buffer" | "immediate" | undefined;
|
|
102
|
+
response_status?: number | undefined;
|
|
103
|
+
response_body?: string | undefined;
|
|
104
|
+
response_content_type?: string | undefined;
|
|
105
|
+
signing_secret?: string | undefined;
|
|
106
|
+
}>;
|
|
107
|
+
export type WebhookEndpointCreateInput = z.infer<typeof webhookEndpointCreateInputSchema>;
|
|
108
|
+
export declare const webhookEndpointPatchInputSchema: z.ZodObject<Omit<{
|
|
109
|
+
endpoint_id: z.ZodOptional<z.ZodString>;
|
|
110
|
+
label: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
111
|
+
trigger_mode: z.ZodOptional<z.ZodDefault<z.ZodEnum<["buffer", "immediate"]>>>;
|
|
112
|
+
hmac_header: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
113
|
+
hmac_algorithm: z.ZodOptional<z.ZodOptional<z.ZodEnum<["sha256", "sha1", "sha512"]>>>;
|
|
114
|
+
signing_secret: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
115
|
+
response_status: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
116
|
+
response_body: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
117
|
+
response_content_type: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
118
|
+
}, "endpoint_id">, "strip", z.ZodTypeAny, {
|
|
119
|
+
label?: string | undefined;
|
|
120
|
+
hmac_header?: string | undefined;
|
|
121
|
+
hmac_algorithm?: "sha256" | "sha1" | "sha512" | undefined;
|
|
122
|
+
trigger_mode?: "buffer" | "immediate" | undefined;
|
|
123
|
+
response_status?: number | undefined;
|
|
124
|
+
response_body?: string | undefined;
|
|
125
|
+
response_content_type?: string | undefined;
|
|
126
|
+
signing_secret?: string | undefined;
|
|
127
|
+
}, {
|
|
128
|
+
label?: string | undefined;
|
|
129
|
+
hmac_header?: string | undefined;
|
|
130
|
+
hmac_algorithm?: "sha256" | "sha1" | "sha512" | undefined;
|
|
131
|
+
trigger_mode?: "buffer" | "immediate" | undefined;
|
|
132
|
+
response_status?: number | undefined;
|
|
133
|
+
response_body?: string | undefined;
|
|
134
|
+
response_content_type?: string | undefined;
|
|
135
|
+
signing_secret?: string | undefined;
|
|
136
|
+
}>;
|
|
137
|
+
export type WebhookEndpointPatchInput = z.infer<typeof webhookEndpointPatchInputSchema>;
|
|
138
|
+
export declare const webhookEventForSdkSchema: z.ZodObject<{
|
|
139
|
+
id: z.ZodString;
|
|
140
|
+
received_at: z.ZodString;
|
|
141
|
+
method: z.ZodString;
|
|
142
|
+
headers: z.ZodRecord<z.ZodString, z.ZodString>;
|
|
143
|
+
body: z.ZodNullable<z.ZodString>;
|
|
144
|
+
body_base64: z.ZodNullable<z.ZodString>;
|
|
145
|
+
}, "strip", z.ZodTypeAny, {
|
|
146
|
+
id: string;
|
|
147
|
+
body: string | null;
|
|
148
|
+
received_at: string;
|
|
149
|
+
method: string;
|
|
150
|
+
headers: Record<string, string>;
|
|
151
|
+
body_base64: string | null;
|
|
152
|
+
}, {
|
|
153
|
+
id: string;
|
|
154
|
+
body: string | null;
|
|
155
|
+
received_at: string;
|
|
156
|
+
method: string;
|
|
157
|
+
headers: Record<string, string>;
|
|
158
|
+
body_base64: string | null;
|
|
159
|
+
}>;
|
|
160
|
+
export type WebhookEventForSdk = z.infer<typeof webhookEventForSdkSchema>;
|
|
161
|
+
//# sourceMappingURL=webhook-endpoint.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-endpoint.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/webhook-endpoint.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB;;;;;;;;;;;;;;;;;GAiBG;AAKH,eAAO,MAAM,uBAAuB,aAOjC,CAAA;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE,eAAO,MAAM,wBAAwB,oCAAkC,CAAA;AACvE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE,eAAO,MAAM,0BAA0B,yCAAuC,CAAA;AAC9E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBhC,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEnE,eAAO,MAAM,gCAAgC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU3C,CAAA;AACF,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAEzF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAC4B,CAAA;AACxE,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAA;AAKvF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;EAOnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Webhook endpoint declarations — each one mints a stable HTTPS URL on
|
|
4
|
+
* `in.prave.app/w/<runs.webhook_token>/<endpoint_id>` that buffers
|
|
5
|
+
* inbound traffic into `webhook_events` (or, when trigger_mode is
|
|
6
|
+
* 'immediate', also enqueues a fresh run execution).
|
|
7
|
+
*
|
|
8
|
+
* Two flavours of inbound traffic share this surface:
|
|
9
|
+
* • short-lived OAuth callbacks (`?code=…&state=…`) — almost always
|
|
10
|
+
* 'immediate' so the code is exchanged before its ~10-minute window
|
|
11
|
+
* closes;
|
|
12
|
+
* • long-tail webhooks (Slack interactivity, TikTok post.published,
|
|
13
|
+
* etc.) — 'buffer', drained by `prave.webhooks.drain()` on the
|
|
14
|
+
* next cron run.
|
|
15
|
+
*
|
|
16
|
+
* HMAC verification is optional and only meaningful for buffered
|
|
17
|
+
* webhooks where the provider signs the body. OAuth callbacks rarely
|
|
18
|
+
* sign — providers rely on the redirect_uri being preregistered.
|
|
19
|
+
*/
|
|
20
|
+
// URL-path-segment shaped — short and lowercase. Skill-builders use
|
|
21
|
+
// it both in their `prave.webhooks.drain('<endpoint_id>')` calls and as
|
|
22
|
+
// the literal path segment in the public URL.
|
|
23
|
+
export const webhookEndpointIdSchema = z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1)
|
|
26
|
+
.max(64)
|
|
27
|
+
.regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/, 'Lowercase letters, digits and dashes — must start and end with an alphanumeric.');
|
|
28
|
+
export const webhookTriggerModeSchema = z.enum(['buffer', 'immediate']);
|
|
29
|
+
export const webhookHmacAlgorithmSchema = z.enum(['sha256', 'sha1', 'sha512']);
|
|
30
|
+
export const webhookEndpointSchema = z.object({
|
|
31
|
+
id: z.string().uuid(),
|
|
32
|
+
endpoint_id: webhookEndpointIdSchema,
|
|
33
|
+
label: z.string().nullable(),
|
|
34
|
+
// Public URL the user pastes into their provider's developer console.
|
|
35
|
+
url: z.string().url(),
|
|
36
|
+
// HMAC config — `null` everywhere means no verification.
|
|
37
|
+
hmac_header: z.string().max(80).nullable(),
|
|
38
|
+
hmac_algorithm: webhookHmacAlgorithmSchema.nullable(),
|
|
39
|
+
// Last 4 chars of the signing secret, to confirm "yes I have one set".
|
|
40
|
+
signing_secret_preview: z.string().nullable(),
|
|
41
|
+
trigger_mode: webhookTriggerModeSchema,
|
|
42
|
+
// Static-response config (Slack slash command wants "200 ok" right back).
|
|
43
|
+
response_status: z.number().int().min(100).max(599),
|
|
44
|
+
response_body: z.string().nullable(),
|
|
45
|
+
response_content_type: z.string().nullable(),
|
|
46
|
+
// Stats surfaced in the UI card.
|
|
47
|
+
events_30d: z.number().int().nonnegative().optional(),
|
|
48
|
+
last_received_at: z.string().datetime().nullable().optional(),
|
|
49
|
+
created_at: z.string().datetime(),
|
|
50
|
+
updated_at: z.string().datetime(),
|
|
51
|
+
});
|
|
52
|
+
export const webhookEndpointCreateInputSchema = z.object({
|
|
53
|
+
endpoint_id: webhookEndpointIdSchema,
|
|
54
|
+
label: z.string().max(120).optional(),
|
|
55
|
+
trigger_mode: webhookTriggerModeSchema.default('buffer'),
|
|
56
|
+
hmac_header: z.string().max(80).optional(),
|
|
57
|
+
hmac_algorithm: webhookHmacAlgorithmSchema.optional(),
|
|
58
|
+
signing_secret: z.string().min(8).max(512).optional(),
|
|
59
|
+
response_status: z.number().int().min(100).max(599).optional(),
|
|
60
|
+
response_body: z.string().max(8_192).optional(),
|
|
61
|
+
response_content_type: z.string().max(120).optional(),
|
|
62
|
+
});
|
|
63
|
+
export const webhookEndpointPatchInputSchema = webhookEndpointCreateInputSchema.partial().omit({ endpoint_id: true });
|
|
64
|
+
// Shape returned to the SDK by GET /api/v1/sdk/webhooks/:endpointId.
|
|
65
|
+
// `body` is a UTF-8 best-effort decode; binary uploads return
|
|
66
|
+
// `body_base64` instead. Headers are forwarded as the captured object.
|
|
67
|
+
export const webhookEventForSdkSchema = z.object({
|
|
68
|
+
id: z.string().uuid(),
|
|
69
|
+
received_at: z.string().datetime(),
|
|
70
|
+
method: z.string(),
|
|
71
|
+
headers: z.record(z.string(), z.string()),
|
|
72
|
+
body: z.string().nullable(),
|
|
73
|
+
body_base64: z.string().nullable(),
|
|
74
|
+
});
|
|
@@ -145,6 +145,29 @@ export interface PlanLimits {
|
|
|
145
145
|
runs_max_timeout_seconds: number;
|
|
146
146
|
/** Max stdout/stderr captured per execution (bytes). */
|
|
147
147
|
runs_max_log_bytes: number;
|
|
148
|
+
/**
|
|
149
|
+
* Vault keys per run. Each key holds a single user-supplied secret
|
|
150
|
+
* (API key, OAuth client_secret, etc.) readable from the skill via
|
|
151
|
+
* `prave.vault.get('KEY')`. `null` = unlimited.
|
|
152
|
+
*/
|
|
153
|
+
vault_keys_max: number | null;
|
|
154
|
+
/**
|
|
155
|
+
* Per-run KV bytes budget — the total encrypted-value size summed
|
|
156
|
+
* across all `run_kv` rows for the run. Hits 413 on PUT once
|
|
157
|
+
* exceeded. `null` = unlimited.
|
|
158
|
+
*/
|
|
159
|
+
kv_bytes_max: number | null;
|
|
160
|
+
/**
|
|
161
|
+
* Webhook endpoints per run. Each endpoint mints one stable URL on
|
|
162
|
+
* `in.prave.app/w/<token>/<endpoint_id>`. `null` = unlimited.
|
|
163
|
+
*/
|
|
164
|
+
webhooks_max: number | null;
|
|
165
|
+
/**
|
|
166
|
+
* Inbound webhook events per day across all endpoints on the run.
|
|
167
|
+
* Over-cap requests are dropped with 429 (event NOT buffered).
|
|
168
|
+
* `null` = unlimited.
|
|
169
|
+
*/
|
|
170
|
+
webhook_events_per_day: number | null;
|
|
148
171
|
}
|
|
149
172
|
export declare const PLAN_LIMITS: Record<Plan, PlanLimits>;
|
|
150
173
|
export declare const PLAN_RANK: Record<Plan, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-limits.d.ts","sourceRoot":"","sources":["../../src/types/plan-limits.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,8BAA8B,CAAA;AAExD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAA;IACb,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAA;IACzB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAA;IACxB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAA;IACZ,0DAA0D;IAC1D,SAAS,EAAE,OAAO,CAAA;IAGlB,+EAA+E;IAC/E,YAAY,EAAE,OAAO,CAAA;IACrB,8BAA8B;IAC9B,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;;;;OAQG;IACH,mBAAmB,EAAE,OAAO,CAAA;IAG5B;;;OAGG;IACH,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,mEAAmE;IACnE,mBAAmB,EAAE,aAAa,CAAC,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC,CAAA;IAC9F,4BAA4B;IAC5B,YAAY,EAAE,OAAO,CAAA;IACrB,wDAAwD;IACxD,cAAc,EAAE,OAAO,CAAA;IACvB,yCAAyC;IACzC,sBAAsB,EAAE,OAAO,CAAA;IAG/B,0CAA0C;IAC1C,oBAAoB,EAAE,OAAO,CAAA;IAC7B,0CAA0C;IAC1C,qBAAqB,EAAE,OAAO,CAAA;IAC9B;;OAEG;IACH,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,4BAA4B;IAC5B,cAAc,EAAE,OAAO,CAAA;IACvB,oDAAoD;IACpD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,+CAA+C;IAC/C,iBAAiB,EAAE,OAAO,CAAA;IAG1B;;;;OAIG;IACH,sBAAsB,EAAE,MAAM,CAAA;IAC9B,gDAAgD;IAChD,mBAAmB,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,uBAAuB,EAAE,MAAM,CAAA;IAC/B,6EAA6E;IAC7E,kBAAkB,EAAE,OAAO,CAAA;IAG3B,gDAAgD;IAChD,gBAAgB,EAAE,OAAO,CAAA;IACzB;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC;;;;;OAKG;IACH,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAA;IACvC,uDAAuD;IACvD,aAAa,EAAE,OAAO,CAAA;IACtB,qCAAqC;IACrC,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,mCAAmC;IACnC,gBAAgB,EAAE,OAAO,CAAA;IAGzB,8CAA8C;IAC9C,kBAAkB,EAAE,OAAO,CAAA;IAC3B;;;OAGG;IACH,oBAAoB,EAAE,OAAO,CAAA;IAC7B,oDAAoD;IACpD,kBAAkB,EAAE,OAAO,CAAA;IAC3B,mEAAmE;IACnE,kBAAkB,EAAE,OAAO,CAAA;IAG3B,6CAA6C;IAC7C,oBAAoB,EAAE,OAAO,CAAA;IAC7B,+CAA+C;IAC/C,gBAAgB,EAAE,OAAO,CAAA;IAGzB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAA;IACvB;;;;;;;;OAQG;IACH,kBAAkB,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;IAC1D,uDAAuD;IACvD,wBAAwB,EAAE,MAAM,CAAA;IAChC,wDAAwD;IACxD,kBAAkB,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"plan-limits.d.ts","sourceRoot":"","sources":["../../src/types/plan-limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,6 +54,10 @@ export const PLAN_LIMITS = {
|
|
|
54
54
|
runs_min_frequency: 'none',
|
|
55
55
|
runs_max_timeout_seconds: 0,
|
|
56
56
|
runs_max_log_bytes: 0,
|
|
57
|
+
vault_keys_max: 0,
|
|
58
|
+
kv_bytes_max: 0,
|
|
59
|
+
webhooks_max: 0,
|
|
60
|
+
webhook_events_per_day: 0,
|
|
57
61
|
},
|
|
58
62
|
// ── Pro (internally `explorer`) ───────────────────────────────────
|
|
59
63
|
explorer: {
|
|
@@ -104,6 +108,10 @@ export const PLAN_LIMITS = {
|
|
|
104
108
|
runs_min_frequency: 'daily',
|
|
105
109
|
runs_max_timeout_seconds: 60,
|
|
106
110
|
runs_max_log_bytes: 65_536,
|
|
111
|
+
vault_keys_max: 25,
|
|
112
|
+
kv_bytes_max: 1_048_576,
|
|
113
|
+
webhooks_max: 5,
|
|
114
|
+
webhook_events_per_day: 5_000,
|
|
107
115
|
},
|
|
108
116
|
// ── Max (internally `creator`) ────────────────────────────────────
|
|
109
117
|
creator: {
|
|
@@ -152,6 +160,10 @@ export const PLAN_LIMITS = {
|
|
|
152
160
|
runs_min_frequency: 'custom',
|
|
153
161
|
runs_max_timeout_seconds: 300,
|
|
154
162
|
runs_max_log_bytes: 262_144,
|
|
163
|
+
vault_keys_max: null,
|
|
164
|
+
kv_bytes_max: 16_777_216,
|
|
165
|
+
webhooks_max: null,
|
|
166
|
+
webhook_events_per_day: 50_000,
|
|
155
167
|
},
|
|
156
168
|
};
|
|
157
169
|
export const PLAN_RANK = {
|