@process.co/element-types 0.0.18 → 0.0.20

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 CHANGED
@@ -1,12 +1,13 @@
1
- # @process.co/element-types
1
+ # @process.co/element-types
2
2
 
3
- [<img src="https://img.shields.io/npm/v/%40process.co%2Felement-types" />](https://www.npmjs.com/package/@process.co/element-types)
4
- [<img src="https://img.shields.io/github/v/release/process-co/npm-element-types" />](https://github.com/process-co/npm-element-types/releases/latest)
3
+ [<img src="https://img.shields.io/npm/v/%40process.co%2Felement-types" />](https://www.npmjs.com/package/@process.co/element-types)
4
+ [<img src="https://img.shields.io/github/v/release/process-co/npm-element-types" />](https://github.com/process-co/npm-element-types/releases/latest)
5
5
  [<img alt="GitHub package.json version (branch)" src="https://img.shields.io/github/package-json/v/process-co/npm-element-types/main?color=%23AA00AA" />
6
6
  ](https://github.com/process-co/npm-element-types#main)
7
7
 
8
+ TypeScript types and authoring helpers for **Process.co element modules** (apps, actions, signals). Use this package when defining element source in TypeScript so `this`, props, hooks, and host `params.$` surfaces are checked at compile time.
8
9
 
9
- TypeScript types and utilities for defining Process.co Elements.
10
+ Runtime loaders, FERN merge output, and compatibility shims live in other packages (for example **`@process.co/compatibility`**, **`@process.co/elements`**).
10
11
 
11
12
  ## Installation
12
13
 
@@ -14,49 +15,167 @@ TypeScript types and utilities for defining Process.co Elements.
14
15
  npm install @process.co/element-types
15
16
  ```
16
17
 
17
- ### Pinned Version
18
+ ### Pinned version (GitHub)
19
+
18
20
  ```bash
19
21
  npm install git+https://github.com/process-co/npm-element-types.git#v0.0.1
20
22
  ```
21
23
 
22
- ### Latest Development Version
24
+ ### Latest from `main` (GitHub)
25
+
23
26
  ```bash
24
27
  npm install git+https://github.com/process-co/npm-element-types.git#main
25
28
  ```
26
29
 
27
- ## Usage
30
+ ## Element modules
31
+
32
+ ### App (`defineApp`)
28
33
 
29
34
  ```typescript
30
- import { defineApp } from '@process.co/element-types';
35
+ import { defineApp, type DeriveAppInstance } from '@process.co/element-types';
31
36
 
32
- // Define the app
33
37
  const exampleApp = defineApp({
34
- type: "app",
35
- app: "example_app",
38
+ type: 'app',
39
+ app: 'example_app',
36
40
  props: {
37
- someProp: {
38
- label: "Some Prop",
39
- description: "This is some prop",
40
- type: "string",
41
+ apiKey: {
42
+ label: 'API Key',
43
+ type: 'string',
41
44
  },
42
45
  } as const,
43
46
  methods: {
44
- async doSomthing(this: DeriveAppInstance<ExampleApp>, $: any, switchExpression: string, cases: Record<string, unknown>) {
45
- // Implementation
46
- return {};
47
+ async ping(this: DeriveAppInstance<typeof exampleApp>) {
48
+ return { ok: true };
47
49
  },
48
- // ... other methods
49
50
  },
50
51
  });
51
52
 
52
- // Derive types from the implementation
53
53
  export type ExampleApp = typeof exampleApp;
54
- export type ExampleAppInstance = DeriveAppInstance<ExampleApp>;
54
+ export default exampleApp;
55
+ ```
56
+
57
+ ### Action (`defineAction`)
58
+
59
+ ```typescript
60
+ import { defineAction, type DeriveActionInstance } from '@process.co/element-types';
61
+
62
+ export const sendMessage = defineAction({
63
+ type: 'action',
64
+ app: 'example_app',
65
+ key: 'send_message',
66
+ props: { /* … */ } as const,
67
+ methods: {
68
+ async run(this: DeriveActionInstance<typeof sendMessage>, params) {
69
+ // params.$ — FlowFunctions, send, stash, etc.
70
+ return {};
71
+ },
72
+ },
73
+ });
74
+ ```
55
75
 
56
- export default processInternalApp;
76
+ ### Signal (`defineSignal`)
57
77
 
78
+ Signals handle inbound events (webhooks, etc.) via **`run`**. Optional **`hooks`** run on publish/save and lifecycle transitions.
79
+
80
+ ```typescript
81
+ import { defineSignal } from '@process.co/element-types';
82
+
83
+ export const inboundWebhook = defineSignal({
84
+ type: 'signal',
85
+ app: 'example_app',
86
+ key: 'inbound_webhook',
87
+ props: {
88
+ httpInterface: { type: '$.interface.http' },
89
+ cacheMaxAge: { type: '$.interface.duration', default: 86_400 },
90
+ } as const,
91
+ hooks: {
92
+ async save({ $ }) {
93
+ if ($.isDraft) return;
94
+ await $.http.configureResponseCaching({
95
+ maxAge: this.cacheMaxAge,
96
+ varyBy: '*',
97
+ });
98
+ },
99
+ async activate({ $ }) {
100
+ $.export('lifecycle', 'activated');
101
+ },
102
+ },
103
+ async run({ $, event }) {
104
+ const parsed = await $.enforceSchema($.interfaceEmitSchema, event.body);
105
+ if (!parsed.ok) throw new Error(parsed.message);
106
+ await this.httpInterface.respond({ status: 200, body: { ok: true } });
107
+ },
108
+ });
58
109
  ```
59
110
 
111
+ Hook names accept both modern (`save`, `activate`, `deactivate`) and legacy (`onSave`, `onActivate`, `onDeactivate`) aliases.
112
+
113
+ ## Signal host surfaces
114
+
115
+ Host capabilities are **split by hook** so TypeScript prevents calling the wrong API:
116
+
117
+ | Surface | When | `params.$` type | Typical capabilities |
118
+ |--------|------|-----------------|----------------------|
119
+ | **`run`** | Live webhook / test execution | `SignalRunHostServices` | `enforceSchema`, `export`, `$transitionToSlot`, `interfaceEmitSchema` |
120
+ | **`hooks.save`** | Publish / save materialization | `SignalSaveHookHostServices` | `isDraft`, `http.configureResponseCaching` |
121
+ | **`hooks.activate` / `hooks.deactivate`** | Lifecycle | `SignalLifecycleHookHostServices` | `isDraft`, `export` |
122
+
123
+ `this` in hooks is **`DeriveSignalHookInstance`** (props only). `this` in **`run`** is **`DeriveSignalInstance`** (includes runtime helpers such as HTTP interface methods).
124
+
125
+ ### Draft vs production (`$.isDraft`)
126
+
127
+ `SignalHookHostContext.isDraft` is `true` during draft/editor materialization and `false` on publish/production hook runs.
128
+
129
+ The API runner resolves this with **`resolveSignalHookIsDraft`**:
130
+
131
+ ```typescript
132
+ import { resolveSignalHookIsDraft } from '@process.co/element-types';
133
+
134
+ resolveSignalHookIsDraft({ isDraft: true }); // explicit flag wins
135
+ resolveSignalHookIsDraft({ executionContext: 'editor' }); // true
136
+ resolveSignalHookIsDraft({ executionContext: 'production' }); // false
137
+ ```
138
+
139
+ ## HTTP interface schema validation
140
+
141
+ Design-time schema blobs on `$.interface.schema` are described by **`HttpInterfaceSchemaWire`**. When **`validation`** is enabled, the runtime loads the compiled Zod ESM at **`compiledValidatorKey`** and validates through the host — not by parsing `exportSchema` JSON alone.
142
+
143
+ In element code:
144
+
145
+ - **`await $.enforceSchema(schema, value)`** — full Zod parse via the Process API (in **`run`**).
146
+ - **`validateEmitPayload`** / **`setSignalEmitValidationHost`** — shared emit validation when a host binding is installed (worker / bundled copies).
147
+
148
+ See JSDoc on **`HttpInterfaceSchemaWire`**, **`EnforceSchemaResult`**, and **`PROCESS_CO_ENFORCE_SCHEMA_HOST_PAYLOAD_MARKER`** for RPC envelope details.
149
+
150
+ ## Type helpers
151
+
152
+ | Export | Purpose |
153
+ |--------|---------|
154
+ | `DeriveAppInstance<T>` | `this` for app methods |
155
+ | `DeriveActionInstance<T>` | `this` for action methods |
156
+ | `DeriveSignalInstance<T>` | `this` for signal **`run`** |
157
+ | `DeriveSignalHookInstance<T>` | `this` for signal hooks |
158
+ | `PropType<T>`, `PropDefinitionType<…>` | Prop value types from definitions |
159
+ | `SignalEventShape`, `SignalRunOptions` | Inbound event + run parameters |
160
+ | `RunReturn<T>` | Awaited return type of a module’s `run` |
161
+
162
+ ## Other exports
163
+
164
+ - **Slots** — `ISlotDefinition`, builtin action slot registry types.
165
+ - **Authoring contract** — `ELEMENT_AUTHORING_CONTRACT_VERSION`, `*AuthoringContract` wire types (runtime materialization: **`@process.co/compatibility`** `authoring-spec`).
166
+ - **CLI wire types** — `ProcessElementCliOutputWire` and related shapes from **`process-element`** output.
167
+ - **HTTP cache policy** — `ConfigureResponseCachingOptions`, `HTTP_REQUEST_CACHE_POLICY_KEY`, replay/vary wire types.
168
+ - **Zod → JSON Schema** — `zodObjectToContainerExportJsonSchema` for container export tooling.
169
+ - **Platform loader** — `isPlatformBoundLoaderType`, `PLATFORM_BOUND_LOADER_TYPE_PREFIXES`.
170
+
171
+ ## Development (monorepo)
172
+
173
+ ```bash
174
+ pnpm --filter @process.co/element-types build
175
+ ```
176
+
177
+ To publish to npm, prune/build/sync from the monorepo root — see root **`AGENTS.md`** and **`.cursor/skills/process-publishing-workflow`**.
178
+
60
179
  ## License
61
180
 
62
- MIT
181
+ ISC
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Compile-only checks for defineAction (not emitted).
3
+ */
4
+ import { type ActionRunOptions } from './index';
5
+ declare const _action: {
6
+ readonly type: "action";
7
+ readonly key: "test-action";
8
+ readonly version: "1.0.0";
9
+ readonly props: {
10
+ readonly label: {
11
+ readonly type: "string";
12
+ readonly default: "";
13
+ };
14
+ readonly http: {
15
+ readonly type: "app";
16
+ readonly app: "http";
17
+ readonly propDefinitions: {
18
+ readonly httpRequest: {
19
+ readonly type: "http_request";
20
+ readonly label: "HTTP Request";
21
+ };
22
+ };
23
+ };
24
+ };
25
+ readonly methods: {
26
+ readonly run: ({ $, steps }: ActionRunOptions<import("./index").ProcessFunctions>) => Promise<void>;
27
+ };
28
+ };
29
+ export type _actionType = typeof _action;
30
+ export {};
31
+ //# sourceMappingURL=define-action.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-action.test-d.d.ts","sourceRoot":"","sources":["../src/define-action.test-d.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGH,KAAK,gBAAgB,EAGxB,MAAM,SAAS,CAAC;AAUjB,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;CAiBX,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Compile-only checks for defineAction (not emitted).
5
+ */
6
+ const index_1 = require("./index");
7
+ const httpApp = (0, index_1.defineApp)({
8
+ type: 'app',
9
+ app: 'http',
10
+ propDefinitions: {
11
+ httpRequest: { type: 'http_request', label: 'HTTP Request' },
12
+ },
13
+ });
14
+ const _action = (0, index_1.defineAction)({
15
+ type: 'action',
16
+ key: 'test-action',
17
+ version: '1.0.0',
18
+ props: {
19
+ label: { type: 'string', default: '' },
20
+ http: httpApp,
21
+ },
22
+ methods: {
23
+ async run({ $, steps }) {
24
+ void steps;
25
+ $.export('out', {});
26
+ void $.flow;
27
+ this.label;
28
+ this.http.httpRequest.execute;
29
+ },
30
+ },
31
+ });
32
+ const _runDollarCheck = true;
33
+ const _httpPropCheck = true;
34
+ const _notDefinitionCheck = true;
35
+ const _runOnThisCheck = true;
36
+ /** @deprecated top-level `run` — still accepted for older elements. */
37
+ const _legacyTopLevelRun = (0, index_1.defineAction)({
38
+ type: 'action',
39
+ key: 'legacy-run',
40
+ version: '1.0.0',
41
+ props: {},
42
+ async run({ $, steps }) {
43
+ void steps;
44
+ $.export('legacy', true);
45
+ },
46
+ });
47
+ void _legacyTopLevelRun;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLWFjdGlvbi50ZXN0LWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmaW5lLWFjdGlvbi50ZXN0LWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNILG1DQU1pQjtBQUVqQixNQUFNLE9BQU8sR0FBRyxJQUFBLGlCQUFTLEVBQUM7SUFDdEIsSUFBSSxFQUFFLEtBQUs7SUFDWCxHQUFHLEVBQUUsTUFBTTtJQUNYLGVBQWUsRUFBRTtRQUNiLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtLQUMvRDtDQUNLLENBQUMsQ0FBQztBQUVaLE1BQU0sT0FBTyxHQUFHLElBQUEsb0JBQVksRUFBQztJQUN6QixJQUFJLEVBQUUsUUFBUTtJQUNkLEdBQUcsRUFBRSxhQUFhO0lBQ2xCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLEtBQUssRUFBRTtRQUNILEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUN0QyxJQUFJLEVBQUUsT0FBTztLQUNoQjtJQUNELE9BQU8sRUFBRTtRQUNMLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO1lBQ2xCLEtBQUssS0FBSyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxDQUFDO0tBQ0o7Q0FDSixDQUFDLENBQUM7QUFPSCxNQUFNLGVBQWUsR0FBcUIsSUFBSSxDQUFDO0FBSy9DLE1BQU0sY0FBYyxHQUFvQixJQUFJLENBQUM7QUFFN0MsTUFBTSxtQkFBbUIsR0FBeUIsSUFBSSxDQUFDO0FBSXZELE1BQU0sZUFBZSxHQUFxQixJQUFJLENBQUM7QUFFL0MsdUVBQXVFO0FBQ3ZFLE1BQU0sa0JBQWtCLEdBQUcsSUFBQSxvQkFBWSxFQUFDO0lBQ3BDLElBQUksRUFBRSxRQUFRO0lBQ2QsR0FBRyxFQUFFLFlBQVk7SUFDakIsT0FBTyxFQUFFLE9BQU87SUFDaEIsS0FBSyxFQUFFLEVBQUU7SUFDVCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRTtRQUNsQixLQUFLLEtBQUssQ0FBQztRQUNYLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7Q0FDSixDQUFDLENBQUM7QUFFSCxLQUFLLGtCQUFrQixDQUFDIn0=
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Compile-only: embedded `defineApp` in signal `props` (not emitted).
3
+ */
4
+ import { type DeriveEmbeddedAppPropInstance, type DeriveSignalInstance } from './index';
5
+ declare const httpApp: {
6
+ readonly type: "app";
7
+ readonly app: "http";
8
+ readonly noAuth: true;
9
+ readonly propDefinitions: {
10
+ readonly httpRequest: {
11
+ readonly type: "http_request";
12
+ readonly label: "HTTP Request Configuration";
13
+ };
14
+ };
15
+ };
16
+ declare const _signal: {
17
+ readonly type: "signal";
18
+ readonly props: {
19
+ readonly httpInterface: {
20
+ readonly type: "$.interface.http";
21
+ };
22
+ readonly http: {
23
+ readonly type: "app";
24
+ readonly app: "http";
25
+ readonly noAuth: true;
26
+ readonly propDefinitions: {
27
+ readonly httpRequest: {
28
+ readonly type: "http_request";
29
+ readonly label: "HTTP Request Configuration";
30
+ };
31
+ };
32
+ };
33
+ };
34
+ readonly run: () => Promise<void>;
35
+ };
36
+ export type _HttpOnThis = DeriveSignalInstance<typeof _signal>['http'];
37
+ export type _HttpRuntime = DeriveEmbeddedAppPropInstance<typeof httpApp>;
38
+ export {};
39
+ //# sourceMappingURL=define-signal-app-prop.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-signal-app-prop.test-d.d.ts","sourceRoot":"","sources":["../src/define-signal-app-prop.test-d.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGH,KAAK,6BAA6B,EAClC,KAAK,oBAAoB,EAC5B,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,OAAO;;;;;;;;;;CAUF,CAAC;AAEZ,QAAA,MAAM,OAAO;;;;;;;;;;;;;;;;;;;CAUX,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAG,6BAA6B,CAAC,OAAO,OAAO,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Compile-only: embedded `defineApp` in signal `props` (not emitted).
5
+ */
6
+ const index_1 = require("./index");
7
+ const httpApp = (0, index_1.defineApp)({
8
+ type: 'app',
9
+ app: 'http',
10
+ noAuth: true,
11
+ propDefinitions: {
12
+ httpRequest: {
13
+ type: 'http_request',
14
+ label: 'HTTP Request Configuration',
15
+ },
16
+ },
17
+ });
18
+ const _signal = (0, index_1.defineSignal)({
19
+ type: 'signal',
20
+ props: {
21
+ httpInterface: { type: '$.interface.http' },
22
+ http: httpApp,
23
+ },
24
+ async run() {
25
+ this.http.httpRequest.execute;
26
+ this.httpInterface.deferHttpResponse;
27
+ },
28
+ });
29
+ const _httpPropCheck = true;
30
+ const _notDefinitionCheck = true;
31
+ const _httpRequestCheck = true;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLXNpZ25hbC1hcHAtcHJvcC50ZXN0LWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZGVmaW5lLXNpZ25hbC1hcHAtcHJvcC50ZXN0LWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7R0FFRztBQUNILG1DQUtpQjtBQUVqQixNQUFNLE9BQU8sR0FBRyxJQUFBLGlCQUFTLEVBQUM7SUFDdEIsSUFBSSxFQUFFLEtBQUs7SUFDWCxHQUFHLEVBQUUsTUFBTTtJQUNYLE1BQU0sRUFBRSxJQUFJO0lBQ1osZUFBZSxFQUFFO1FBQ2IsV0FBVyxFQUFFO1lBQ1QsSUFBSSxFQUFFLGNBQWM7WUFDcEIsS0FBSyxFQUFFLDRCQUE0QjtTQUN0QztLQUNKO0NBQ0ssQ0FBQyxDQUFDO0FBRVosTUFBTSxPQUFPLEdBQUcsSUFBQSxvQkFBWSxFQUFDO0lBQ3pCLElBQUksRUFBRSxRQUFRO0lBQ2QsS0FBSyxFQUFFO1FBQ0gsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1FBQzNDLElBQUksRUFBRSxPQUFPO0tBQ2hCO0lBQ0QsS0FBSyxDQUFDLEdBQUc7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztJQUN6QyxDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBS0gsTUFBTSxjQUFjLEdBQW9CLElBQUksQ0FBQztBQUU3QyxNQUFNLG1CQUFtQixHQUF5QixJQUFJLENBQUM7QUFJdkQsTUFBTSxpQkFBaUIsR0FBdUIsSUFBSSxDQUFDIn0=
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Compile-only checks for defineSignal hook vs run `this` (not emitted).
3
+ */
4
+ import { type SignalSaveHostParameters } from './index';
5
+ declare const _webhook: {
6
+ readonly type: "signal";
7
+ readonly props: {
8
+ readonly httpInterface: {
9
+ readonly type: "$.interface.http";
10
+ };
11
+ readonly cacheMaxAge: {
12
+ readonly type: "$.interface.duration";
13
+ readonly default: 86400;
14
+ };
15
+ readonly authType: {
16
+ readonly type: "string";
17
+ readonly default: "none";
18
+ };
19
+ };
20
+ readonly hooks: {
21
+ readonly save: ({ $ }: SignalSaveHostParameters) => Promise<void>;
22
+ };
23
+ readonly run: ({ $, event }: import("./index").SignalRunOptions) => Promise<void>;
24
+ };
25
+ export type _webhookType = typeof _webhook;
26
+ export {};
27
+ //# sourceMappingURL=define-signal-hook-this.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-signal-hook-this.test-d.d.ts","sourceRoot":"","sources":["../src/define-signal-hook-this.test-d.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAGH,KAAK,wBAAwB,EAChC,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;CA8BZ,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /**
4
+ * Compile-only checks for defineSignal hook vs run `this` (not emitted).
5
+ */
6
+ const index_1 = require("./index");
7
+ const _webhook = (0, index_1.defineSignal)({
8
+ type: 'signal',
9
+ props: {
10
+ httpInterface: { type: '$.interface.http' },
11
+ cacheMaxAge: { type: '$.interface.duration', default: 86400 },
12
+ authType: { type: 'string', default: 'none' },
13
+ },
14
+ hooks: {
15
+ async save({ $ }) {
16
+ const _draft = $.isDraft;
17
+ void _draft;
18
+ await $.http.configureResponseCaching({
19
+ maxAge: this.cacheMaxAge,
20
+ varyBy: '*',
21
+ });
22
+ // @ts-expect-error — `run` host `$` is not available in hooks.save
23
+ $.enforceSchema;
24
+ // @ts-expect-error — `$emit` is only on `run` `this`, not hooks
25
+ this.$emit;
26
+ // @ts-expect-error — no runtime HTTP interface on hook `this`
27
+ await this.httpInterface.respond({ status: 200, body: {} });
28
+ },
29
+ },
30
+ async run({ $, event }) {
31
+ void event;
32
+ $.enforceSchema;
33
+ // @ts-expect-error — save-only host `$` is not available in run
34
+ $.http;
35
+ await this.httpInterface.deferHttpResponse(30_000);
36
+ },
37
+ });
38
+ const _saveDollarCheck = true;
39
+ const _saveDollarNotRunCheck = true;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLXNpZ25hbC1ob29rLXRoaXMudGVzdC1kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RlZmluZS1zaWduYWwtaG9vay10aGlzLnRlc3QtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOztHQUVHO0FBQ0gsbUNBSWlCO0FBRWpCLE1BQU0sUUFBUSxHQUFHLElBQUEsb0JBQVksRUFBQztJQUMxQixJQUFJLEVBQUUsUUFBUTtJQUNkLEtBQUssRUFBRTtRQUNILGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtRQUMzQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRTtRQUM3RCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7S0FDaEQ7SUFDRCxLQUFLLEVBQUU7UUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ1osTUFBTSxNQUFNLEdBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsQyxLQUFLLE1BQU0sQ0FBQztZQUNaLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztnQkFDbEMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUN4QixNQUFNLEVBQUUsR0FBRzthQUNkLENBQUMsQ0FBQztZQUNILG1FQUFtRTtZQUNuRSxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ2hCLGdFQUFnRTtZQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ1gsOERBQThEO1lBQzlELE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7S0FDSjtJQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFO1FBQ2xCLEtBQUssS0FBSyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNoQixnRUFBZ0U7UUFDaEUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNQLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0osQ0FBQyxDQUFDO0FBT0gsTUFBTSxnQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO0FBRWpELE1BQU0sc0JBQXNCLEdBQXNCLElBQUksQ0FBQyJ9
@@ -0,0 +1,52 @@
1
+ /**
2
+ * HTTP response replay cache — policy at save, vary key at runtime.
3
+ */
4
+ export type HttpRequestCacheMode = 'cache-only' | 'stale-while-revalidate';
5
+ /** Materialized at save → elementData.$httpRequestCachePolicy */
6
+ export type HttpRequestCachePolicy = {
7
+ mode: HttpRequestCacheMode;
8
+ ttlSeconds: number;
9
+ refreshAfterSeconds?: number;
10
+ vary: HttpRequestCacheVary;
11
+ /** When true, webhook loads trigger so author can call setRequestVaryKey. */
12
+ needsRuntimeVaryKey?: boolean;
13
+ };
14
+ export type HttpRequestCacheVary = {
15
+ headers?: Array<{
16
+ name: string;
17
+ lowerCase?: boolean;
18
+ }>;
19
+ clientIp?: boolean;
20
+ pathTemplate?: string;
21
+ query?: string[];
22
+ body?: BodyVaryProjection;
23
+ };
24
+ /** Boolean leaves select fields; nested objects recurse. */
25
+ export type BodyVaryProjection = {
26
+ [key: string]: boolean | BodyVaryProjection;
27
+ };
28
+ /** Editor wire for $.interface.cacheVaryInfo */
29
+ export type CacheVaryInfoWire = {
30
+ headers?: Array<{
31
+ name: string;
32
+ }>;
33
+ query?: string[];
34
+ clientIp?: boolean;
35
+ pathTemplate?: string;
36
+ bodyPaths?: BodyVaryProjection;
37
+ customRuntimeKey?: boolean;
38
+ };
39
+ /** Seconds (TTL). $.interface.duration */
40
+ export type DurationWire = number;
41
+ /** Save-only: hooks.save → $.http.configureResponseCaching */
42
+ export type ConfigureResponseCachingOptions = {
43
+ maxAge: number;
44
+ varyBy: HttpRequestCacheVary | CacheVaryInfoWire | '*' | string[];
45
+ mode?: HttpRequestCacheMode;
46
+ refreshAfterSeconds?: number;
47
+ needsRuntimeVaryKey?: boolean;
48
+ };
49
+ export declare const HTTP_REQUEST_CACHE_POLICY_KEY: "$httpRequestCachePolicy";
50
+ export declare const REPLAY_BINDING_RANGE: "$replayBinding";
51
+ export declare const REPLAY_META_RANGE: "$replayMeta";
52
+ //# sourceMappingURL=http-request-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request-cache.d.ts","sourceRoot":"","sources":["../src/http-request-cache.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,wBAAwB,CAAC;AAE3E,iEAAiE;AACjE,MAAM,MAAM,sBAAsB,GAAG;IACjC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,6EAA6E;IAC7E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAC/B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC7B,CAAC;AAEF,4DAA4D;AAC5D,MAAM,MAAM,kBAAkB,GAAG;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,kBAAkB,CAAC;CAC/C,CAAC;AAEF,gDAAgD;AAChD,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,kBAAkB,CAAC;IAC/B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,0CAA0C;AAC1C,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,8DAA8D;AAC9D,MAAM,MAAM,+BAA+B,GAAG;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,oBAAoB,GAAG,iBAAiB,GAAG,GAAG,GAAG,MAAM,EAAE,CAAC;IAClE,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAG,yBAAkC,CAAC;AAEhF,eAAO,MAAM,oBAAoB,EAAG,gBAAyB,CAAC;AAE9D,eAAO,MAAM,iBAAiB,EAAG,aAAsB,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /**
3
+ * HTTP response replay cache — policy at save, vary key at runtime.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.REPLAY_META_RANGE = exports.REPLAY_BINDING_RANGE = exports.HTTP_REQUEST_CACHE_POLICY_KEY = void 0;
7
+ exports.HTTP_REQUEST_CACHE_POLICY_KEY = '$httpRequestCachePolicy';
8
+ exports.REPLAY_BINDING_RANGE = '$replayBinding';
9
+ exports.REPLAY_META_RANGE = '$replayMeta';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LWNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2h0dHAtcmVxdWVzdC1jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7O0dBRUc7OztBQWlEVSxRQUFBLDZCQUE2QixHQUFHLHlCQUFrQyxDQUFDO0FBRW5FLFFBQUEsb0JBQW9CLEdBQUcsZ0JBQXlCLENBQUM7QUFFakQsUUFBQSxpQkFBaUIsR0FBRyxhQUFzQixDQUFDIn0=