@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 +142 -23
- package/dist/define-action.test-d.d.ts +31 -0
- package/dist/define-action.test-d.d.ts.map +1 -0
- package/dist/define-action.test-d.js +48 -0
- package/dist/define-signal-app-prop.test-d.d.ts +39 -0
- package/dist/define-signal-app-prop.test-d.d.ts.map +1 -0
- package/dist/define-signal-app-prop.test-d.js +32 -0
- package/dist/define-signal-hook-this.test-d.d.ts +27 -0
- package/dist/define-signal-hook-this.test-d.d.ts.map +1 -0
- package/dist/define-signal-hook-this.test-d.js +40 -0
- package/dist/http-request-cache.d.ts +52 -0
- package/dist/http-request-cache.d.ts.map +1 -0
- package/dist/http-request-cache.js +10 -0
- package/dist/index.d.ts +188 -44
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/package.json +1 -1
- package/src/define-action.test-d.ts +69 -0
- package/src/define-signal-app-prop.test-d.ts +44 -0
- package/src/define-signal-hook-this.test-d.ts +49 -0
- package/src/http-request-cache.ts +56 -0
- package/src/index.ts +285 -42
- package/src/resolve-signal-hook-is-draft.spec.ts +13 -0
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
|
-
|
|
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
|
|
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
|
|
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
|
-
##
|
|
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:
|
|
35
|
-
app:
|
|
38
|
+
type: 'app',
|
|
39
|
+
app: 'example_app',
|
|
36
40
|
props: {
|
|
37
|
-
|
|
38
|
-
label:
|
|
39
|
-
|
|
40
|
-
type: "string",
|
|
41
|
+
apiKey: {
|
|
42
|
+
label: 'API Key',
|
|
43
|
+
type: 'string',
|
|
41
44
|
},
|
|
42
45
|
} as const,
|
|
43
46
|
methods: {
|
|
44
|
-
async
|
|
45
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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=
|