@assemblyline-agents/core 1.0.0 → 3.0.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.
Files changed (118) hide show
  1. package/LICENSE +1 -1
  2. package/dist/adapter-metadata.d.ts.map +1 -1
  3. package/dist/adapter-metadata.js +94 -36
  4. package/dist/adapter-metadata.js.map +1 -1
  5. package/dist/agent-capabilities.d.ts +34 -0
  6. package/dist/agent-capabilities.d.ts.map +1 -0
  7. package/dist/agent-capabilities.js +50 -0
  8. package/dist/agent-capabilities.js.map +1 -0
  9. package/dist/agent-definition.d.ts +43 -0
  10. package/dist/agent-definition.d.ts.map +1 -0
  11. package/dist/agent-definition.js +4 -0
  12. package/dist/agent-definition.js.map +1 -0
  13. package/dist/agent-hooks.d.ts +60 -0
  14. package/dist/agent-hooks.d.ts.map +1 -0
  15. package/dist/agent-hooks.js +198 -0
  16. package/dist/agent-hooks.js.map +1 -0
  17. package/dist/agent-state.d.ts +18 -0
  18. package/dist/agent-state.d.ts.map +1 -0
  19. package/dist/agent-state.js +2 -0
  20. package/dist/agent-state.js.map +1 -0
  21. package/dist/artifact-dir.d.ts +1 -7
  22. package/dist/artifact-dir.d.ts.map +1 -1
  23. package/dist/artifact-dir.js +3 -12
  24. package/dist/artifact-dir.js.map +1 -1
  25. package/dist/audience.d.ts +16 -0
  26. package/dist/audience.d.ts.map +1 -0
  27. package/dist/audience.js +2 -0
  28. package/dist/audience.js.map +1 -0
  29. package/dist/brand.d.ts +2 -17
  30. package/dist/brand.d.ts.map +1 -1
  31. package/dist/brand.js +2 -17
  32. package/dist/brand.js.map +1 -1
  33. package/dist/connection-auth.d.ts.map +1 -1
  34. package/dist/connection-auth.js +17 -2
  35. package/dist/connection-auth.js.map +1 -1
  36. package/dist/connection-events.d.ts +35 -0
  37. package/dist/connection-events.d.ts.map +1 -0
  38. package/dist/connection-events.js +131 -0
  39. package/dist/connection-events.js.map +1 -0
  40. package/dist/connection-types.d.ts +240 -6
  41. package/dist/connection-types.d.ts.map +1 -1
  42. package/dist/connection-types.js +8 -1
  43. package/dist/connection-types.js.map +1 -1
  44. package/dist/definitions.d.ts +11 -43
  45. package/dist/definitions.d.ts.map +1 -1
  46. package/dist/definitions.js +60 -14
  47. package/dist/definitions.js.map +1 -1
  48. package/dist/deploy-secrets.d.ts +16 -0
  49. package/dist/deploy-secrets.d.ts.map +1 -0
  50. package/dist/deploy-secrets.js +43 -0
  51. package/dist/deploy-secrets.js.map +1 -0
  52. package/dist/deploy.d.ts +17 -5
  53. package/dist/deploy.d.ts.map +1 -1
  54. package/dist/deploy.js.map +1 -1
  55. package/dist/harness.d.ts +40 -2
  56. package/dist/harness.d.ts.map +1 -1
  57. package/dist/harness.js.map +1 -1
  58. package/dist/index.d.ts +84 -41
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +32 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/manifest-types.d.ts +138 -22
  63. package/dist/manifest-types.d.ts.map +1 -1
  64. package/dist/model-metadata.d.ts +33 -0
  65. package/dist/model-metadata.d.ts.map +1 -0
  66. package/dist/model-metadata.js +13 -0
  67. package/dist/model-metadata.js.map +1 -0
  68. package/dist/plugin-connection-factories.d.ts +31 -0
  69. package/dist/plugin-connection-factories.d.ts.map +1 -0
  70. package/dist/plugin-connection-factories.js +416 -0
  71. package/dist/plugin-connection-factories.js.map +1 -0
  72. package/dist/plugin-contract.d.ts +161 -0
  73. package/dist/plugin-contract.d.ts.map +1 -0
  74. package/dist/plugin-contract.js +52 -0
  75. package/dist/plugin-contract.js.map +1 -0
  76. package/dist/plugin.d.ts +5 -126
  77. package/dist/plugin.d.ts.map +1 -1
  78. package/dist/plugin.js +863 -369
  79. package/dist/plugin.js.map +1 -1
  80. package/dist/resource-types.d.ts +1 -1
  81. package/dist/resource-types.d.ts.map +1 -1
  82. package/dist/sandbox-file-metadata.d.ts +9 -0
  83. package/dist/sandbox-file-metadata.d.ts.map +1 -0
  84. package/dist/sandbox-file-metadata.js +33 -0
  85. package/dist/sandbox-file-metadata.js.map +1 -0
  86. package/dist/sandbox-filesystem-contract.d.ts +9 -9
  87. package/dist/sandbox-filesystem-contract.d.ts.map +1 -1
  88. package/dist/sandbox-filesystem-contract.js +31 -29
  89. package/dist/sandbox-filesystem-contract.js.map +1 -1
  90. package/dist/sandbox-paths.d.ts +1 -1
  91. package/dist/sandbox-paths.d.ts.map +1 -1
  92. package/dist/sandbox-paths.js +1 -1
  93. package/dist/sandbox-paths.js.map +1 -1
  94. package/dist/sandbox-security.d.ts +0 -3
  95. package/dist/sandbox-security.d.ts.map +1 -1
  96. package/dist/sandbox-security.js +7 -12
  97. package/dist/sandbox-security.js.map +1 -1
  98. package/dist/sandbox-types.d.ts +74 -3
  99. package/dist/sandbox-types.d.ts.map +1 -1
  100. package/dist/sandbox-types.js +13 -1
  101. package/dist/sandbox-types.js.map +1 -1
  102. package/dist/secrets-types.d.ts +25 -0
  103. package/dist/secrets-types.d.ts.map +1 -0
  104. package/dist/secrets-types.js +22 -0
  105. package/dist/secrets-types.js.map +1 -0
  106. package/dist/skill-bundles.d.ts +14 -0
  107. package/dist/skill-bundles.d.ts.map +1 -0
  108. package/dist/skill-bundles.js +85 -0
  109. package/dist/skill-bundles.js.map +1 -0
  110. package/dist/tool-wire-name.d.ts +8 -0
  111. package/dist/tool-wire-name.d.ts.map +1 -0
  112. package/dist/tool-wire-name.js +26 -0
  113. package/dist/tool-wire-name.js.map +1 -0
  114. package/package.json +1 -1
  115. package/dist/env-alias.d.ts +0 -38
  116. package/dist/env-alias.d.ts.map +0 -1
  117. package/dist/env-alias.js +0 -82
  118. package/dist/env-alias.js.map +0 -1
@@ -0,0 +1,198 @@
1
+ /** Define one filesystem-discovered agent hook. */
2
+ export function defineHook(definition) {
3
+ return definition;
4
+ }
5
+ export function isHookDefinition(candidate) {
6
+ if (!candidate || typeof candidate !== "object")
7
+ return false;
8
+ const events = candidate.events;
9
+ if (!events || typeof events !== "object" || Array.isArray(events))
10
+ return false;
11
+ return Object.values(events).every((handler) => typeof handler === "function");
12
+ }
13
+ // Deployment artifacts may resolve their packaged core module separately from
14
+ // the runtime's core module. The synchronous stack lives on the shared isolate
15
+ // global so both copies participate in the same evaluation frame.
16
+ const dispatcherGlobal = globalThis;
17
+ const dispatcherStack = dispatcherGlobal.__assemblyLineAgentHookDispatcherV1 ??= [];
18
+ export function useRun() {
19
+ return currentFrame("useRun").run;
20
+ }
21
+ export function usePersistentState(key, initial) {
22
+ const frame = currentFrame("usePersistentState");
23
+ assertStateKey(key);
24
+ assertJsonValue(initial, `initial value for hook state "${key}"`);
25
+ const stored = frame.state.values[key];
26
+ const value = stored === undefined ? initial : stored;
27
+ const setter = (next) => {
28
+ if (dispatcherStack.includes(frame)) {
29
+ throw new Error(`The setter for hook state "${key}" cannot be called during agent.setup(); setup evaluation is side-effect free.`);
30
+ }
31
+ return frame.setState(key, typeof next === "function"
32
+ ? (current) => {
33
+ const resolved = next((current === undefined ? initial : current));
34
+ assertJsonValue(resolved, `next value for hook state "${key}"`);
35
+ return resolved;
36
+ }
37
+ : next);
38
+ };
39
+ return [value, setter];
40
+ }
41
+ export function useModel(model) {
42
+ const frame = currentFrame("useModel");
43
+ assertName("model", model);
44
+ if (frame.model !== undefined && frame.model !== model) {
45
+ throw new Error(`Conflicting useModel() calls selected "${frame.model}" and "${model}".`);
46
+ }
47
+ frame.model = model;
48
+ }
49
+ export function useReasoning(level) {
50
+ const frame = currentFrame("useReasoning");
51
+ if (!["off", "minimal", "low", "medium", "high", "xhigh"].includes(level)) {
52
+ throw new Error(`useReasoning() received invalid level "${String(level)}".`);
53
+ }
54
+ if (frame.reasoning !== undefined && frame.reasoning !== level) {
55
+ throw new Error(`Conflicting useReasoning() calls selected "${frame.reasoning}" and "${level}".`);
56
+ }
57
+ frame.reasoning = level;
58
+ }
59
+ export function useInstructions(text) {
60
+ const frame = currentFrame("useInstructions");
61
+ if (typeof text !== "string" || !text.trim())
62
+ throw new Error("useInstructions() requires non-empty text.");
63
+ frame.instructions.push(text);
64
+ }
65
+ export function useTool(name) {
66
+ addName(currentFrame("useTool").tools, "tool", name);
67
+ }
68
+ export function useSandbox(name) {
69
+ const frame = currentFrame("useSandbox");
70
+ assertName("sandbox", name);
71
+ if (frame.sandbox !== undefined && frame.sandbox !== name) {
72
+ throw new Error(`Conflicting useSandbox() calls selected "${frame.sandbox}" and "${name}".`);
73
+ }
74
+ frame.sandbox = name;
75
+ }
76
+ export function useOutputSchema(schema) {
77
+ const frame = currentFrame("useOutputSchema");
78
+ assertJsonValue(schema, "output schema");
79
+ if (frame.outputSchema !== undefined && stableJson(frame.outputSchema) !== stableJson(schema)) {
80
+ throw new Error("Conflicting useOutputSchema() calls selected different schemas.");
81
+ }
82
+ frame.outputSchema = schema;
83
+ }
84
+ /** @deprecated Author after-persist event reactions in `hooks/*.ts` with `defineHook()`. */
85
+ export function useEvent(type, handler) {
86
+ const frame = currentFrame("useEvent");
87
+ if (typeof type !== "string" || !type.trim())
88
+ throw new Error("useEvent() requires a non-empty event type.");
89
+ if (typeof handler !== "function")
90
+ throw new Error("useEvent() requires a handler function.");
91
+ frame.events.push({ type, handler });
92
+ }
93
+ /** Runtime/compiler seam for one synchronous setup evaluation. */
94
+ export function evaluateAgentSetup(setup, input) {
95
+ const frame = {
96
+ ...input,
97
+ instructions: [],
98
+ tools: orderedNames(input.defaultTools),
99
+ skills: orderedNames(input.defaultSkills),
100
+ connections: orderedNames(input.defaultConnections),
101
+ subagents: orderedNames(input.defaultSubagents),
102
+ events: []
103
+ };
104
+ dispatcherStack.push(frame);
105
+ try {
106
+ const result = setup();
107
+ if (isPromiseLike(result)) {
108
+ throw new Error("agent.setup() must be synchronous and must not return a promise.");
109
+ }
110
+ }
111
+ finally {
112
+ const popped = dispatcherStack.pop();
113
+ if (popped !== frame) {
114
+ dispatcherStack.length = 0;
115
+ throw new Error("Agent hook dispatcher stack became unbalanced.");
116
+ }
117
+ }
118
+ if (!frame.model)
119
+ throw new Error("agent.setup() must select exactly one model with useModel().");
120
+ const declaration = {
121
+ model: frame.model,
122
+ instructions: frame.instructions,
123
+ tools: frame.tools.values,
124
+ skills: frame.skills.values,
125
+ connections: frame.connections.values,
126
+ subagents: frame.subagents.values,
127
+ events: frame.events
128
+ };
129
+ if (frame.reasoning !== undefined)
130
+ declaration.reasoning = frame.reasoning;
131
+ if (frame.sandbox !== undefined)
132
+ declaration.sandbox = frame.sandbox;
133
+ if (frame.outputSchema !== undefined)
134
+ declaration.outputSchema = frame.outputSchema;
135
+ return declaration;
136
+ }
137
+ function currentFrame(hook) {
138
+ const frame = dispatcherStack.at(-1);
139
+ if (!frame) {
140
+ throw new Error(`${hook}() may only be called synchronously inside agent.setup() or a function called by setup().`);
141
+ }
142
+ return frame;
143
+ }
144
+ function orderedNames(initial = []) {
145
+ const target = { values: [], seen: new Set() };
146
+ for (const name of initial)
147
+ addName(target, "tool", name);
148
+ return target;
149
+ }
150
+ function addName(target, kind, name) {
151
+ assertName(kind, name);
152
+ if (target.seen.has(name))
153
+ return;
154
+ target.seen.add(name);
155
+ target.values.push(name);
156
+ }
157
+ function assertName(kind, value) {
158
+ if (typeof value !== "string" || !value.trim())
159
+ throw new Error(`use${capitalize(kind)}() requires a non-empty name.`);
160
+ }
161
+ function assertStateKey(key) {
162
+ if (typeof key !== "string" || !key.trim())
163
+ throw new Error("usePersistentState() requires a non-empty explicit key.");
164
+ if (key.length > 200)
165
+ throw new Error("Hook-state keys may not exceed 200 characters.");
166
+ }
167
+ function assertJsonValue(value, label) {
168
+ let serialized;
169
+ try {
170
+ serialized = JSON.stringify(value);
171
+ }
172
+ catch {
173
+ throw new Error(`${label} must be JSON serializable.`);
174
+ }
175
+ if (serialized === undefined)
176
+ throw new Error(`${label} must be JSON serializable.`);
177
+ if (serialized.length > 16_384)
178
+ throw new Error(`${label} exceeds the 16384-character hook-state limit.`);
179
+ }
180
+ function stableJson(value) {
181
+ if (Array.isArray(value))
182
+ return `[${value.map(stableJson).join(",")}]`;
183
+ if (value && typeof value === "object") {
184
+ return `{${Object.entries(value)
185
+ .sort(([left], [right]) => left.localeCompare(right))
186
+ .map(([key, child]) => `${JSON.stringify(key)}:${stableJson(child)}`)
187
+ .join(",")}}`;
188
+ }
189
+ return JSON.stringify(value);
190
+ }
191
+ function isPromiseLike(value) {
192
+ return Boolean(value) && (typeof value === "object" || typeof value === "function") &&
193
+ typeof value.then === "function";
194
+ }
195
+ function capitalize(value) {
196
+ return `${value.slice(0, 1).toUpperCase()}${value.slice(1)}`;
197
+ }
198
+ //# sourceMappingURL=agent-hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-hooks.js","sourceRoot":"","sources":["../src/agent-hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { JsonValue } from "./index.js";
2
+ export type AgentStateUpdater<T extends JsonValue> = T | ((current: T) => T);
3
+ /** Conversation-scoped durable control-plane state exposed to tools and hooks. */
4
+ export interface AgentStateHandle {
5
+ readonly revision: number;
6
+ get<T extends JsonValue>(key: string): Promise<T | undefined>;
7
+ set<T extends JsonValue>(key: string, value: T, options?: {
8
+ expectedRevision?: number;
9
+ }): Promise<number>;
10
+ update<T extends JsonValue>(key: string, update: (current: T | undefined) => T, options?: {
11
+ expectedRevision?: number;
12
+ }): Promise<number>;
13
+ delete(key: string, options?: {
14
+ expectedRevision?: number;
15
+ }): Promise<number>;
16
+ }
17
+ export type PersistentStateSetter<T extends JsonValue> = (value: AgentStateUpdater<T>) => Promise<number>;
18
+ //# sourceMappingURL=agent-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-state.d.ts","sourceRoot":"","sources":["../src/agent-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAE7E,kFAAkF;AAClF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC9D,GAAG,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1G,MAAM,CAAC,CAAC,SAAS,SAAS,EACxB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,EACrC,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/E;AAED,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,SAAS,IAAI,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-state.js","sourceRoot":"","sources":["../src/agent-state.ts"],"names":[],"mappings":""}
@@ -1,10 +1,4 @@
1
- /**
2
- * Generated-artifact directory naming. The live name is `.assembly-line`;
3
- * the legacy `.openeve` spelling is recognized ONLY so ignore/clean tooling
4
- * (compiler manifest walk, `clean:artifacts`, .gitignore) keeps skipping and
5
- * deleting stale legacy build output. Nothing reads or writes `.openeve`
6
- * artifacts anymore.
7
- */
1
+ /** Generated-artifact directory naming. */
8
2
  export declare const KNOWN_ARTIFACT_DIR_NAMES: readonly string[];
9
3
  export declare function isKnownArtifactDirName(name: string): boolean;
10
4
  //# sourceMappingURL=artifact-dir.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-dir.d.ts","sourceRoot":"","sources":["../src/artifact-dir.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAGrD,CAAC;AAEF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
1
+ {"version":3,"file":"artifact-dir.d.ts","sourceRoot":"","sources":["../src/artifact-dir.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAE3C,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAAwB,CAAC;AAE/E,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D"}
@@ -1,15 +1,6 @@
1
- import { ARTIFACT_DIR_NAME, LEGACY_ARTIFACT_DIR_NAME } from "./brand.js";
2
- /**
3
- * Generated-artifact directory naming. The live name is `.assembly-line`;
4
- * the legacy `.openeve` spelling is recognized ONLY so ignore/clean tooling
5
- * (compiler manifest walk, `clean:artifacts`, .gitignore) keeps skipping and
6
- * deleting stale legacy build output. Nothing reads or writes `.openeve`
7
- * artifacts anymore.
8
- */
9
- export const KNOWN_ARTIFACT_DIR_NAMES = [
10
- ARTIFACT_DIR_NAME,
11
- LEGACY_ARTIFACT_DIR_NAME,
12
- ];
1
+ import { ARTIFACT_DIR_NAME } from "./brand.js";
2
+ /** Generated-artifact directory naming. */
3
+ export const KNOWN_ARTIFACT_DIR_NAMES = [ARTIFACT_DIR_NAME];
13
4
  export function isKnownArtifactDirName(name) {
14
5
  return KNOWN_ARTIFACT_DIR_NAMES.includes(name);
15
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-dir.js","sourceRoot":"","sources":["../src/artifact-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEzE;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,wBAAwB,GAAsB;IACzD,iBAAiB;IACjB,wBAAwB;CACzB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"artifact-dir.js","sourceRoot":"","sources":["../src/artifact-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,2CAA2C;AAE3C,MAAM,CAAC,MAAM,wBAAwB,GAAsB,CAAC,iBAAiB,CAAC,CAAC;AAE/E,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,OAAO,wBAAwB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { AgentPrincipal } from "./connection-types.js";
2
+ /**
3
+ * The trust boundary allowed to learn from, act on, and receive one run's
4
+ * result. Two states: a private surface (a trusted direct run, or a channel
5
+ * surface belonging to one authenticated person, such as a DM) and a shared
6
+ * surface (everything else). Personal context — user-subject connections and
7
+ * principal-scoped memory — is available only on private surfaces.
8
+ */
9
+ export type AgentAudience = {
10
+ private: boolean;
11
+ /** The authenticated person a private channel surface belongs to. Absent for shared surfaces and trusted direct runs. */
12
+ principal?: AgentPrincipal;
13
+ /** The originating channel conversation. Absent for direct runs. */
14
+ conversationId?: string;
15
+ };
16
+ //# sourceMappingURL=audience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.d.ts","sourceRoot":"","sources":["../src/audience.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,yHAAyH;IACzH,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.js","sourceRoot":"","sources":["../src/audience.ts"],"names":[],"mappings":""}
package/dist/brand.d.ts CHANGED
@@ -1,27 +1,12 @@
1
1
  /**
2
- * Central brand/name constants for Assembly Line (formerly OpenEve).
2
+ * Central brand/name constants for Assembly Line.
3
3
  *
4
4
  * Every module that needs a brand-derived identifier imports it from here
5
- * instead of spelling a literal. The pre-launch alias cleanup removed all
6
- * transitional legacy spellings except two deliberate survivors:
7
- *
8
- * - `LEGACY_ENV_PREFIX`: the `OPENEVE_*` <-> `ASSEMBLY_LINE_*` env mirror
9
- * (`applyEnvAliases`) is PERMANENT — production hosts keep `OPENEVE_*`
10
- * spellings and both prefixes are always accepted.
11
- * - `LEGACY_ARTIFACT_DIR_NAME`: kept only so ignore/clean tooling keeps
12
- * recognizing (and deleting) stale legacy build output.
13
- *
14
- * Identifiers that must never change (crypto contexts, migration IDs,
15
- * physical database names) are documented in docs/rename/manifest.md and
16
- * deliberately absent from this module.
5
+ * instead of spelling a literal.
17
6
  */
18
7
  export declare const PRODUCT_NAME = "Assembly Line";
19
8
  export declare const ENV_PREFIX = "ASSEMBLY_LINE_";
20
- /** Permanent: the env-alias mirror accepts this prefix forever. */
21
- export declare const LEGACY_ENV_PREFIX = "OPENEVE_";
22
9
  export declare const ARTIFACT_DIR_NAME = ".assembly-line";
23
- /** Recognized only by ignore/clean tooling; never read or written as a build dir. */
24
- export declare const LEGACY_ARTIFACT_DIR_NAME = ".openeve";
25
10
  export declare const HOSTS_FILE_NAME = "assembly-line.hosts.json";
26
11
  export declare const INTERNAL_ROUTE_PREFIX = "/assembly-line";
27
12
  export declare const SCHEDULER_SECRET_HEADER = "x-assembly-line-scheduler-secret";
@@ -1 +1 @@
1
- {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAC3C,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAE5C,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,qFAAqF;AACrF,eAAO,MAAM,wBAAwB,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,eAAO,MAAM,uBAAuB,qCAAqC,CAAC;AAE1E,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,eAAO,MAAM,SAAS,yBAAyB,CAAC"}
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAE5C,eAAO,MAAM,UAAU,mBAAmB,CAAC;AAE3C,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAE1D,eAAO,MAAM,qBAAqB,mBAAmB,CAAC;AAEtD,eAAO,MAAM,uBAAuB,qCAAqC,CAAC;AAE1E,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,eAAO,MAAM,oBAAoB,yBAAyB,CAAC;AAE3D,eAAO,MAAM,SAAS,yBAAyB,CAAC"}
package/dist/brand.js CHANGED
@@ -1,27 +1,12 @@
1
1
  /**
2
- * Central brand/name constants for Assembly Line (formerly OpenEve).
2
+ * Central brand/name constants for Assembly Line.
3
3
  *
4
4
  * Every module that needs a brand-derived identifier imports it from here
5
- * instead of spelling a literal. The pre-launch alias cleanup removed all
6
- * transitional legacy spellings except two deliberate survivors:
7
- *
8
- * - `LEGACY_ENV_PREFIX`: the `OPENEVE_*` <-> `ASSEMBLY_LINE_*` env mirror
9
- * (`applyEnvAliases`) is PERMANENT — production hosts keep `OPENEVE_*`
10
- * spellings and both prefixes are always accepted.
11
- * - `LEGACY_ARTIFACT_DIR_NAME`: kept only so ignore/clean tooling keeps
12
- * recognizing (and deleting) stale legacy build output.
13
- *
14
- * Identifiers that must never change (crypto contexts, migration IDs,
15
- * physical database names) are documented in docs/rename/manifest.md and
16
- * deliberately absent from this module.
5
+ * instead of spelling a literal.
17
6
  */
18
7
  export const PRODUCT_NAME = "Assembly Line";
19
8
  export const ENV_PREFIX = "ASSEMBLY_LINE_";
20
- /** Permanent: the env-alias mirror accepts this prefix forever. */
21
- export const LEGACY_ENV_PREFIX = "OPENEVE_";
22
9
  export const ARTIFACT_DIR_NAME = ".assembly-line";
23
- /** Recognized only by ignore/clean tooling; never read or written as a build dir. */
24
- export const LEGACY_ARTIFACT_DIR_NAME = ".openeve";
25
10
  export const HOSTS_FILE_NAME = "assembly-line.hosts.json";
26
11
  export const INTERNAL_ROUTE_PREFIX = "/assembly-line";
27
12
  export const SCHEDULER_SECRET_HEADER = "x-assembly-line-scheduler-secret";
package/dist/brand.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAC3C,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAClD,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG,UAAU,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,sBAAsB,CAAC"}
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../src/brand.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAE5C,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAC;AAE1D,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,kCAAkC,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,sBAAsB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"connection-auth.d.ts","sourceRoot":"","sources":["../src/connection-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;gBAE1C,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,gCAAgC,CAAA;KAAO;CAOtI;AAED,qBAAa,kCAAmC,SAAQ,KAAK;IAC3D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;CAO7G;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oCAAoC,CAEpH;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kCAAkC,CAEhH;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,wBAAwB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBjH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKjG;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,0BAA0B,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAa7G"}
1
+ {"version":3,"file":"connection-auth.d.ts","sourceRoot":"","sources":["../src/connection-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACxB,gCAAgC,EAChC,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,qBAAa,oCAAqC,SAAQ,KAAK;IAC7D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,gCAAgC,CAAC;gBAE1C,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,gCAAgC,CAAA;KAAO;CAOtI;AAED,qBAAa,kCAAmC,SAAQ,KAAK;IAC3D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;gBAEhB,cAAc,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO;CAO7G;AAED,wBAAgB,sCAAsC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oCAAoC,CAEpH;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kCAAkC,CAEhH;AAED,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,wBAAwB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAgBjH;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAUjG;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,0BAA0B,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAqB7G"}
@@ -50,8 +50,15 @@ export function validateConnectionAuthDefinition(auth, prefix) {
50
50
  export function validateToolFilter(filter, prefix) {
51
51
  if (!filter)
52
52
  return;
53
- if ("allow" in filter && "block" in filter) {
54
- throw new Error(`${prefix}: specify only one of allow or block.`);
53
+ const variants = Number("allow" in filter) + Number("block" in filter) + Number("allOf" in filter);
54
+ if (variants !== 1)
55
+ throw new Error(`${prefix}: specify exactly one of allow, block, or allOf.`);
56
+ if ("allOf" in filter) {
57
+ if (!Array.isArray(filter.allOf) || filter.allOf.length === 0) {
58
+ throw new Error(`${prefix}: allOf must contain at least one tool filter.`);
59
+ }
60
+ for (const child of filter.allOf)
61
+ validateToolFilter(child, prefix);
55
62
  }
56
63
  }
57
64
  export function validateConnectionAccess(access, prefix) {
@@ -67,6 +74,14 @@ export function validateConnectionAccess(access, prefix) {
67
74
  if (access.write.approval === undefined) {
68
75
  throw new Error(`${prefix}: access.write.approval is required when writes are enabled.`);
69
76
  }
77
+ for (const override of access.write.approvalOverrides ?? []) {
78
+ if (!Array.isArray(override.tools) || override.tools.length === 0) {
79
+ throw new Error(`${prefix}: access.write.approvalOverrides tools must contain at least one tool pattern.`);
80
+ }
81
+ if (override.approval === undefined) {
82
+ throw new Error(`${prefix}: access.write.approvalOverrides approval is required.`);
83
+ }
84
+ }
70
85
  }
71
86
  }
72
87
  function isNamedConnectionError(error, name) {
@@ -1 +1 @@
1
- {"version":3,"file":"connection-auth.js","sourceRoot":"","sources":["../src/connection-auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-auth.js","sourceRoot":"","sources":["../src/connection-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import type { ConnectionEventCheckResult, ConnectionEventIngressContext, ConnectionEventIngressResult, ConnectionEventLifecycleContext, ConnectionEventReconcileResult, ConnectionEventRequest, ConnectionEventsDefinition, ConnectionEventSelection } from "./connection-types.js";
2
+ import type { ConnectionPluginMetadata } from "./plugin.js";
3
+ export interface ConnectionPluginEventAdapter {
4
+ prepare?(context: ConnectionEventLifecycleContext): Promise<NonNullable<ConnectionEventLifecycleContext["state"]>> | NonNullable<ConnectionEventLifecycleContext["state"]>;
5
+ ingress(request: ConnectionEventRequest, context: ConnectionEventIngressContext): Promise<ConnectionEventIngressResult> | ConnectionEventIngressResult;
6
+ reconcile?(context: ConnectionEventLifecycleContext): Promise<ConnectionEventReconcileResult> | ConnectionEventReconcileResult;
7
+ remove?(context: ConnectionEventLifecycleContext): Promise<void> | void;
8
+ check?(context: ConnectionEventLifecycleContext): Promise<ConnectionEventCheckResult> | ConnectionEventCheckResult;
9
+ }
10
+ /** Attach a provider adapter to the common, validated plugin event selection. */
11
+ export declare function defineConnectionPluginEvents(plugin: ConnectionPluginMetadata, selection: ConnectionEventSelection | undefined, adapter: ConnectionPluginEventAdapter): ConnectionEventsDefinition | undefined;
12
+ export declare function parseConnectionEventJson(body: string): Record<string, unknown>;
13
+ export declare function headerValue(headers: Record<string, string>, name: string): string | undefined;
14
+ export declare function requireEnvironmentValue(env: Record<string, string | undefined>, name: string): string;
15
+ export declare function verifyHmacSha256(input: {
16
+ secret: string;
17
+ body: string;
18
+ signature: string | undefined;
19
+ encoding?: "hex" | "base64";
20
+ prefix?: string;
21
+ }): boolean;
22
+ /** Verify Standard Webhooks/Svix v1 signatures against the exact raw body. */
23
+ export declare function verifySvix(input: {
24
+ secret: string;
25
+ body: string;
26
+ id: string | undefined;
27
+ timestamp: string | undefined;
28
+ signature: string | undefined;
29
+ now?: number;
30
+ toleranceSeconds?: number;
31
+ }): boolean;
32
+ export declare function providerJson(fetchImpl: typeof fetch, url: string, init: RequestInit, accepted?: readonly number[]): Promise<Record<string, unknown>>;
33
+ export declare function stringField(value: Record<string, unknown>, ...names: string[]): string | undefined;
34
+ export declare function recordField(value: Record<string, unknown>, name: string): Record<string, unknown> | undefined;
35
+ //# sourceMappingURL=connection-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-events.d.ts","sourceRoot":"","sources":["../src/connection-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ import { createHmac, timingSafeEqual } from "node:crypto";
2
+ import { resolveConnectionPluginEvents } from "./plugin.js";
3
+ /** Attach a provider adapter to the common, validated plugin event selection. */
4
+ export function defineConnectionPluginEvents(plugin, selection, adapter) {
5
+ const resolved = resolveConnectionPluginEvents(plugin, selection);
6
+ if (!resolved)
7
+ return undefined;
8
+ return {
9
+ enabled: resolved.enabled,
10
+ catalog: resolved.catalog,
11
+ defaultEvents: resolved.defaultEvents,
12
+ selectedEvents: resolved.selectedEvents,
13
+ resources: resolved.resources,
14
+ mode: resolved.mode,
15
+ scope: resolved.scope,
16
+ requiredEnv: resolved.requiredEnv,
17
+ ...(adapter.prepare ? { prepare: adapter.prepare } : {}),
18
+ ingress: adapter.ingress,
19
+ ...(adapter.reconcile ? { reconcile: adapter.reconcile } : {}),
20
+ ...(adapter.remove ? { remove: adapter.remove } : {}),
21
+ ...(adapter.check ? { check: adapter.check } : {})
22
+ };
23
+ }
24
+ export function parseConnectionEventJson(body) {
25
+ let value;
26
+ try {
27
+ value = JSON.parse(body);
28
+ }
29
+ catch {
30
+ throw new Error("Provider event body is not valid JSON.");
31
+ }
32
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
33
+ throw new Error("Provider event body must be a JSON object.");
34
+ }
35
+ return value;
36
+ }
37
+ export function headerValue(headers, name) {
38
+ const lower = name.toLowerCase();
39
+ return Object.entries(headers).find(([key]) => key.toLowerCase() === lower)?.[1];
40
+ }
41
+ export function requireEnvironmentValue(env, name) {
42
+ const value = env[name]?.trim();
43
+ if (!value)
44
+ throw new Error(`${name} is required for connection events.`);
45
+ return value;
46
+ }
47
+ export function verifyHmacSha256(input) {
48
+ if (!input.signature)
49
+ return false;
50
+ const signature = input.prefix && input.signature.startsWith(input.prefix)
51
+ ? input.signature.slice(input.prefix.length)
52
+ : input.signature;
53
+ const encoding = input.encoding ?? "hex";
54
+ let actual;
55
+ try {
56
+ actual = Buffer.from(signature, encoding);
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ const expected = createHmac("sha256", input.secret).update(input.body).digest();
62
+ return actual.length === expected.length && timingSafeEqual(actual, expected);
63
+ }
64
+ /** Verify Standard Webhooks/Svix v1 signatures against the exact raw body. */
65
+ export function verifySvix(input) {
66
+ if (!input.id || !input.timestamp || !input.signature)
67
+ return false;
68
+ const timestamp = Number(input.timestamp);
69
+ if (!Number.isFinite(timestamp))
70
+ return false;
71
+ const now = Math.floor((input.now ?? Date.now()) / 1_000);
72
+ if (Math.abs(now - timestamp) > (input.toleranceSeconds ?? 300))
73
+ return false;
74
+ const key = input.secret.startsWith("whsec_") ? input.secret.slice(6) : input.secret;
75
+ let decoded;
76
+ try {
77
+ decoded = Buffer.from(key, "base64");
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ const expected = createHmac("sha256", decoded)
83
+ .update(`${input.id}.${input.timestamp}.${input.body}`)
84
+ .digest();
85
+ return input.signature.split(/\s+/u).some((candidate) => {
86
+ const encoded = candidate.startsWith("v1,") ? candidate.slice(3) : candidate;
87
+ let actual;
88
+ try {
89
+ actual = Buffer.from(encoded, "base64");
90
+ }
91
+ catch {
92
+ return false;
93
+ }
94
+ return actual.length === expected.length && timingSafeEqual(actual, expected);
95
+ });
96
+ }
97
+ export async function providerJson(fetchImpl, url, init, accepted = [200, 201, 202, 204]) {
98
+ const response = await fetchImpl(url, init);
99
+ const text = await response.text();
100
+ let value = {};
101
+ if (text) {
102
+ try {
103
+ value = JSON.parse(text);
104
+ }
105
+ catch {
106
+ value = text;
107
+ }
108
+ }
109
+ if (!accepted.includes(response.status)) {
110
+ const detail = value && typeof value === "object" && !Array.isArray(value)
111
+ ? JSON.stringify(value)
112
+ : text;
113
+ throw new Error(`Provider event API returned HTTP ${response.status}${detail ? `: ${detail}` : ""}.`);
114
+ }
115
+ return value && typeof value === "object" && !Array.isArray(value)
116
+ ? value
117
+ : {};
118
+ }
119
+ export function stringField(value, ...names) {
120
+ for (const name of names) {
121
+ const item = value[name];
122
+ if (typeof item === "string" && item.length > 0)
123
+ return item;
124
+ }
125
+ return undefined;
126
+ }
127
+ export function recordField(value, name) {
128
+ const item = value[name];
129
+ return item && typeof item === "object" && !Array.isArray(item) ? item : undefined;
130
+ }
131
+ //# sourceMappingURL=connection-events.js.map