automate.ax 0.1.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -74,6 +74,8 @@ may be any value. `signal.transform(fn)` is the unary convenience form, and
74
74
  `signal.property` is shorthand for
75
75
  `signal.transform((value) => value.property)`. Property access composes across
76
76
  objects and primitives, so `request.path.length` is a `Signal<number>`.
77
+ Function-valued signals are callable and return a signal for the result, so
78
+ `names.join(", ")` is a `Signal<string>` when `names` is a `Signal<string[]>`.
77
79
 
78
80
  Declare custom actions at the top level, then call them inside an automation:
79
81
 
@@ -1,9 +1,13 @@
1
1
  import { type Encodable, type ObjectProducingSchema, type ProducingSchema } from "@automate.ax/codec";
2
2
  import type { StandardSchemaV1 } from "@standard-schema/spec";
3
3
  import { type AccountAuthorizationAction, type IntegrationAccountReference, type IntegrationScopeRequirement, type ResolvedIntegrationAccount } from "./integrations.js";
4
+ import { signalValueType } from "./signal.js";
4
5
  import type { Signal } from "./signal.js";
5
6
  declare const DEFAULT_ACTION_INPUT_SCHEMA: StandardSchemaV1<Record<string, never>>;
6
7
  declare const DEFAULT_ACTION_OUTPUT_SCHEMA: StandardSchemaV1<void>;
8
+ type ActionInputSignal<T> = Signal & {
9
+ readonly [signalValueType]: () => T;
10
+ };
7
11
  /**
8
12
  * Executor-only platform capabilities available to action handlers.
9
13
  *
@@ -95,9 +99,10 @@ export interface ActionBuilder<TInputSchema extends ObjectProducingSchema<unknow
95
99
  * @template TNextAccountServiceId - Integration service required by the
96
100
  * resulting builder.
97
101
  * @param serviceId - Stable identifier of the required integration service.
98
- * @param requiredScopes - Provider scopes the selected account must satisfy.
102
+ * @param requiredScope - Provider scope requirement the selected account must
103
+ * satisfy.
99
104
  */
100
- account<TNextAccountServiceId extends string>(serviceId: TNextAccountServiceId, requiredScopes?: IntegrationScopeRequirement[]): ActionBuilder<TInputSchema, TOutputSchema, TNextAccountServiceId>;
105
+ account<TNextAccountServiceId extends string>(serviceId: TNextAccountServiceId, requiredScope?: IntegrationScopeRequirement): ActionBuilder<TInputSchema, TOutputSchema, TNextAccountServiceId>;
101
106
  /**
102
107
  * Adds a human-readable description to action metadata.
103
108
  *
@@ -146,7 +151,7 @@ export type ActionSchemaInput<TInputSchema extends ObjectProducingSchema<unknown
146
151
  * @template TInputSchema - Object-producing action input schema.
147
152
  */
148
153
  export type ActionCallInput<TInputSchema extends ObjectProducingSchema<unknown>> = {
149
- [TKey in keyof ActionSchemaInput<TInputSchema>]: ActionSchemaInput<TInputSchema>[TKey] | Signal<ActionSchemaInput<TInputSchema>[TKey]>;
154
+ [TKey in keyof ActionSchemaInput<TInputSchema>]: ActionSchemaInput<TInputSchema>[TKey] | ActionInputSignal<ActionSchemaInput<TInputSchema>[TKey]>;
150
155
  };
151
156
  /**
152
157
  * Optional account selection added to account-backed action calls.
@@ -158,7 +163,7 @@ export type ActionCallInput<TInputSchema extends ObjectProducingSchema<unknown>>
158
163
  */
159
164
  type ActionAccountCallInput<TAccountServiceId extends string> = {
160
165
  /** Project account binding to use for this invocation. */
161
- account?: string | IntegrationAccountReference<TAccountServiceId> | Signal<string> | Signal<IntegrationAccountReference<TAccountServiceId>> | Signal<string | IntegrationAccountReference<TAccountServiceId>>;
166
+ account?: string | IntegrationAccountReference<TAccountServiceId> | ActionInputSignal<string | IntegrationAccountReference<TAccountServiceId>>;
162
167
  };
163
168
  type ActionInvocationInput<TInputSchema extends ObjectProducingSchema<unknown>, TAccountServiceId extends string> = [TAccountServiceId] extends [never] ? ActionCallInput<TInputSchema> : [TInputSchema] extends [typeof DEFAULT_ACTION_INPUT_SCHEMA] ? ActionAccountCallInput<TAccountServiceId> : ActionCallInput<TInputSchema> & ActionAccountCallInput<TAccountServiceId>;
164
169
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/automation/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/automation/actions.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@ import { mapValues } from "@zachsents/zippy";
2
2
  import { omit, pick } from "remeda";
3
3
  import { z } from "zod";
4
4
  import { actionAccountRequirementDefinition, DEFAULT_ACCOUNT_BINDING, isIntegrationAccountReference, serializedIntegrationAccountDefinition, } from "./integrations.js";
5
- import { actionProvenance, createActionSignal, isSignal, signalTransform, subscriptionProvenance, transform, } from "./signal.js";
5
+ import { actionProvenance, createActionSignal, isSignal, signalTransform, signalValueType, subscriptionProvenance, transform, } from "./signal.js";
6
6
  import { consumeHookSlot } from "./runtime.js";
7
7
  const DEFAULT_ACTION_INPUT_SCHEMA = z.record(z.string(), z.never());
8
8
  const DEFAULT_ACTION_OUTPUT_SCHEMA = z.void();
@@ -31,10 +31,13 @@ export function defineAction(name) {
31
31
  */
32
32
  function createActionBuilder(definition) {
33
33
  return {
34
- account(serviceId, requiredScopes = []) {
34
+ account(serviceId, requiredScope) {
35
35
  return createActionBuilder({
36
36
  ...definition,
37
- account: { requiredScopes, serviceId },
37
+ account: {
38
+ requiredScopes: requiredScope === undefined ? [] : [requiredScope],
39
+ serviceId,
40
+ },
38
41
  });
39
42
  },
40
43
  describe(description) {
@@ -11,7 +11,7 @@ export declare const scope: {
11
11
  *
12
12
  * @param requirements - Required scopes and nested groups.
13
13
  */
14
- all(...requirements: IntegrationScopeRequirement[]): ScopeRequirementGroup;
14
+ and(...requirements: IntegrationScopeRequirement[]): ScopeRequirementGroup;
15
15
  /**
16
16
  * Requires any scope or nested group.
17
17
  *
@@ -5,7 +5,7 @@ export const scope = {
5
5
  *
6
6
  * @param requirements - Required scopes and nested groups.
7
7
  */
8
- all(...requirements) {
8
+ and(...requirements) {
9
9
  return { requirements: [...new Set(requirements)], type: "and" };
10
10
  },
11
11
  /**
@@ -2,10 +2,14 @@ export declare const actionProvenance: unique symbol;
2
2
  export declare const signalTransform: unique symbol;
3
3
  export declare const subscriptionProvenance: unique symbol;
4
4
  export declare const signalValueType: unique symbol;
5
- /** Maps an object payload's properties to child signals. */
5
+ /** Maps a payload's properties to child signals. */
6
6
  type SignalProperties<T> = {
7
7
  readonly [TKey in keyof NonNullable<T> as TKey extends keyof SignalProtocol<T> ? never : TKey extends string | number ? TKey : never]-?: Signal<NonNullable<T>[TKey]>;
8
8
  };
9
+ /** Makes signals carrying functions callable as derived-value transforms. */
10
+ type SignalCallable<T> = NonNullable<T> extends (...arguments_: infer TArguments) => infer TResult ? {
11
+ (...arguments_: TArguments): Signal<TResult>;
12
+ } : unknown;
9
13
  type SignalProtocol<T> = {
10
14
  readonly [actionProvenance]?: {
11
15
  slot: number;
@@ -20,7 +24,31 @@ type SignalProtocol<T> = {
20
24
  readonly [signalValueType]: () => T;
21
25
  transform<TMapped>(transformer: (value: T) => TMapped): Signal<TMapped>;
22
26
  };
23
- export type Signal<T = unknown> = SignalProtocol<T> & SignalProperties<T>;
27
+ /**
28
+ * A durable symbolic reference to a value that will be materialized during
29
+ * automation execution.
30
+ *
31
+ * Signals compose synchronously while their values are unavailable. Accessing a
32
+ * property creates a derived signal, so `request.path` is equivalent to
33
+ * `request.transform((value) => value.path)`. Property access can be chained
34
+ * across objects and primitives; for example, `request.path.length` is a
35
+ * `Signal<number>`. Resolving a property derived from a `null` or `undefined`
36
+ * value throws a `TypeError`.
37
+ *
38
+ * Function-valued signals are callable. Calling one creates another derived
39
+ * signal for its eventual result without invoking the function during
40
+ * orchestration. Functions reached through property access retain their
41
+ * receiver, so methods such as `names.join(", ")` behave like their ordinary
42
+ * JavaScript equivalents while returning a signal.
43
+ *
44
+ * TypeScript cannot preserve arbitrary generic call signatures when wrapping
45
+ * their return values. Generic methods such as `Array.prototype.map` therefore
46
+ * produce `Signal<unknown[]>`; use `transform` when the precise generic result
47
+ * type must be retained.
48
+ *
49
+ * @template T - Value represented by the signal.
50
+ */
51
+ export type Signal<T = unknown> = SignalProtocol<T> & SignalProperties<T> & SignalCallable<T>;
24
52
  export type SignalTransform = {
25
53
  transform(...inputs: unknown[]): unknown;
26
54
  }["transform"];
@@ -1 +1 @@
1
- {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/automation/signal.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAErC,CAAA;AACD,eAAO,MAAM,eAAe,EAAE,OAAO,MAEpC,CAAA;AACD,eAAO,MAAM,sBAAsB,EAAE,OAAO,MAE3C,CAAA;AACD,eAAO,MAAM,eAAe,EAAE,OAAO,MAEpC,CAAA;AAED,4DAA4D;AAC5D,KAAK,gBAAgB,CAAC,CAAC,IAAI;IACzB,QAAQ,EAAE,IAAI,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,MAAM,cAAc,CAAC,CAAC,CAAC,GAC1E,KAAK,GACL,IAAI,SAAS,MAAM,GAAG,MAAM,GAC1B,IAAI,GACJ,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAA;AAED,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE;QAC3B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;QAC7B,SAAS,EAAE,eAAe,CAAA;KAC3B,CAAA;IACD,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE;QAClC,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAA;IACnC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;CACxE,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAEzE,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;CACzC,CAAC,WAAW,CAAC,CAAA;AAEd;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAOxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAI7D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAInE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,OAAO,EAAE,EAAE,OAAO,EACzE,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,EACD,WAAW,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,KAAK,OAAO,GAC3C,MAAM,CAAC,OAAO,CAAC,CAAA"}
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/automation/signal.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,OAAO,MAErC,CAAA;AACD,eAAO,MAAM,eAAe,EAAE,OAAO,MAEpC,CAAA;AACD,eAAO,MAAM,sBAAsB,EAAE,OAAO,MAE3C,CAAA;AACD,eAAO,MAAM,eAAe,EAAE,OAAO,MAEpC,CAAA;AAED,oDAAoD;AACpD,KAAK,gBAAgB,CAAC,CAAC,IAAI;IACzB,QAAQ,EAAE,IAAI,IAAI,MAAM,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,MAAM,cAAc,CAAC,CAAC,CAAC,GAC1E,KAAK,GACL,IAAI,SAAS,MAAM,GAAG,MAAM,GAC1B,IAAI,GACJ,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAC7C,CAAA;AAED,6EAA6E;AAC7E,KAAK,cAAc,CAAC,CAAC,IACnB,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,UAAU,EAAE,MAAM,UAAU,KAAK,MAAM,OAAO,GACrE;IACE,CAAC,GAAG,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;CAC7C,GACD,OAAO,CAAA;AAEb,KAAK,cAAc,CAAC,CAAC,IAAI;IACvB,QAAQ,CAAC,CAAC,gBAAgB,CAAC,CAAC,EAAE;QAC5B,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,QAAQ,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE;QAC3B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;QAC7B,SAAS,EAAE,eAAe,CAAA;KAC3B,CAAA;IACD,QAAQ,CAAC,CAAC,sBAAsB,CAAC,CAAC,EAAE;QAClC,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IACD,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,CAAA;IACnC,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;CACxE,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,GAAG,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,GACjD,gBAAgB,CAAC,CAAC,CAAC,GACnB,cAAc,CAAC,CAAC,CAAC,CAAA;AAEnB,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;CACzC,CAAC,WAAW,CAAC,CAAA;AAEd;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAOxD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAI7D;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAInE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,CAAC,OAAO,SAAS,SAAS,OAAO,EAAE,EAAE,OAAO,EACzE,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;CAC5D,EACD,WAAW,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,KAAK,OAAO,GAC3C,MAAM,CAAC,OAAO,CAAC,CAAA"}
@@ -8,7 +8,7 @@ export const signalValueType = Symbol("automation.signalValueType");
8
8
  * @param value - Value to inspect.
9
9
  */
10
10
  export function isSignal(value) {
11
- return (typeof value === "object" &&
11
+ return ((typeof value === "object" || typeof value === "function") &&
12
12
  value !== null &&
13
13
  signalValueType in value &&
14
14
  typeof value[signalValueType] === "function");
@@ -38,18 +38,24 @@ export function transform(inputs, transformer) {
38
38
  }
39
39
  /** Creates the proxy that implements behavior shared by every signal. */
40
40
  function createSignalProxy() {
41
- const target = {
41
+ const target = Object.assign(() => {
42
+ throw new Error("Signal proxies cannot be called directly.");
43
+ }, {
42
44
  [signalValueType]: () => {
43
45
  throw new Error("Signal type markers cannot be called.");
44
46
  },
45
47
  transform(transformer) {
46
48
  return transform([signal], transformer);
47
49
  },
48
- };
50
+ });
49
51
  // oxlint-disable-next-line typescript/no-unsafe-type-assertion -- Proxy traps provide the mapped properties.
50
52
  const signal = new Proxy(target, {
51
53
  get(target, property, receiver) {
52
- if (Object.hasOwn(target, property)) {
54
+ if (property === "transform" ||
55
+ property === actionProvenance ||
56
+ property === signalTransform ||
57
+ property === subscriptionProvenance ||
58
+ property === signalValueType) {
53
59
  return Reflect.get(target, property, receiver);
54
60
  }
55
61
  if (typeof property !== "string")
@@ -58,7 +64,18 @@ function createSignalProxy() {
58
64
  if (value == null) {
59
65
  throw new TypeError(`Cannot read property ${property} from ${String(value)}.`);
60
66
  }
61
- return Reflect.get(Object(value), property);
67
+ const propertyValue = Reflect.get(Object(value), property);
68
+ return typeof propertyValue === "function"
69
+ ? propertyValue.bind(value)
70
+ : propertyValue;
71
+ });
72
+ },
73
+ apply(_target, _thisArgument, argumentsList) {
74
+ return transform([signal], (value) => {
75
+ if (typeof value !== "function") {
76
+ throw new TypeError("Signal value is not callable.");
77
+ }
78
+ return Reflect.apply(value, undefined, argumentsList);
62
79
  });
63
80
  },
64
81
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "automate.ax",
3
- "version": "0.1.3",
3
+ "version": "0.3.0",
4
4
  "description": "TypeScript SDK and CLI for Automate.ax automations.",
5
5
  "license": "MIT",
6
6
  "repository": {