@akai-workflow-builder/cli-sdk 0.1.6 → 0.1.7
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/CHANGELOG.md +10 -1
- package/dist/ctx/build-ctx.js +1 -1
- package/dist/define-cli.d.ts.map +1 -1
- package/dist/define-cli.js +36 -16
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/manifest/json-schema.d.ts +3 -4
- package/dist/manifest/json-schema.d.ts.map +1 -1
- package/dist/manifest/json-schema.js +41 -21
- package/dist/manifest/types.d.ts +2 -2
- package/dist/manifest/types.d.ts.map +1 -1
- package/dist/tool.d.ts +5 -1
- package/dist/tool.d.ts.map +1 -1
- package/dist/tool.js +19 -13
- package/dist/types.d.ts +15 -9
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,15 @@ All notable changes to `@akai-workflow-builder/cli-sdk` are documented here.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
|
|
7
|
+
## [0.1.7] - unreleased
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Freeze the nested `ctx.oauth` object so a handler cannot mutate
|
|
12
|
+
`ctx.oauth.accessToken`, matching the immutability of `ctx.secrets` /
|
|
13
|
+
`ctx.properties`. (0.1.5 documented this but the object was not actually
|
|
14
|
+
frozen.)
|
|
15
|
+
|
|
7
16
|
## [0.1.6]
|
|
8
17
|
|
|
9
18
|
### Added
|
|
@@ -21,7 +30,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
21
30
|
|
|
22
31
|
- `ctx.oauth.accessToken` — host-injected, per-session OAuth access token exposed
|
|
23
32
|
on `ToolCtx` for connection tools. `buildCtx` accepts an `oauthAccessToken` param
|
|
24
|
-
and
|
|
33
|
+
and sets `ctx.oauth = { accessToken }` when provided. Additive and optional —
|
|
25
34
|
tools that do not read it are unaffected, and the field is absent when the host
|
|
26
35
|
supplies no token.
|
|
27
36
|
|
package/dist/ctx/build-ctx.js
CHANGED
package/dist/define-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-cli.d.ts","sourceRoot":"","sources":["../src/define-cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,MAAM,EAAE,OAAO,EAA4B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"define-cli.d.ts","sourceRoot":"","sources":["../src/define-cli.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,MAAM,EAAE,OAAO,EAA4B,MAAM,YAAY,CAAC;AA+MxF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAmD/C"}
|
package/dist/define-cli.js
CHANGED
|
@@ -142,26 +142,46 @@ const CLISpecShape = z
|
|
|
142
142
|
});
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
|
-
// Dynamic egress: `{ from: 'property:KEY' }`
|
|
146
|
-
//
|
|
147
|
-
//
|
|
145
|
+
// Dynamic egress: `{ from: 'property:KEY' }` or `{ from: 'secret:KEY' }`.
|
|
146
|
+
// Property refs require KEY be declared in `properties[]` + tool's `propertyKeys`.
|
|
147
|
+
// Secret refs require KEY be declared in `secrets[]` + tool's `secretKeys`.
|
|
148
|
+
// Native tools have no network — skip.
|
|
148
149
|
const egress = t.options.network?.egress;
|
|
149
150
|
if (egress !== undefined && egress !== null && typeof egress === 'object' && !Array.isArray(egress) && 'from' in egress) {
|
|
150
151
|
const ref = egress.from;
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
152
|
+
if (ref.startsWith('property:')) {
|
|
153
|
+
const key = ref.slice('property:'.length);
|
|
154
|
+
if (!declaredProperties.has(key)) {
|
|
155
|
+
ctx.addIssue({
|
|
156
|
+
code: 'custom',
|
|
157
|
+
path: ['tools', name, 'options', 'network', 'egress'],
|
|
158
|
+
message: `tool '${name}' uses dynamic egress 'property:${key}' but '${key}' is not declared in defineCLI({ properties })`,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
if (!t.options.propertyKeys.includes(key)) {
|
|
162
|
+
ctx.addIssue({
|
|
163
|
+
code: 'custom',
|
|
164
|
+
path: ['tools', name, 'options', 'network', 'egress'],
|
|
165
|
+
message: `tool '${name}' uses dynamic egress 'property:${key}' but '${key}' is not in the tool's propertyKeys (the runtime needs it on ctx.properties to resolve)`,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
158
168
|
}
|
|
159
|
-
if (
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
169
|
+
else if (ref.startsWith('secret:')) {
|
|
170
|
+
const key = ref.slice('secret:'.length);
|
|
171
|
+
if (!declaredSecrets.has(key)) {
|
|
172
|
+
ctx.addIssue({
|
|
173
|
+
code: 'custom',
|
|
174
|
+
path: ['tools', name, 'options', 'network', 'egress'],
|
|
175
|
+
message: `tool '${name}' uses dynamic egress 'secret:${key}' but '${key}' is not declared in defineCLI({ secrets })`,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
if (!t.options.secretKeys.includes(key)) {
|
|
179
|
+
ctx.addIssue({
|
|
180
|
+
code: 'custom',
|
|
181
|
+
path: ['tools', name, 'options', 'network', 'egress'],
|
|
182
|
+
message: `tool '${name}' uses dynamic egress 'secret:${key}' but '${key}' is not in the tool's secretKeys`,
|
|
183
|
+
});
|
|
184
|
+
}
|
|
165
185
|
}
|
|
166
186
|
}
|
|
167
187
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { tool, isAkaiTool, DYNAMIC_EGRESS_PREFIX } from './tool.js';
|
|
1
|
+
export { tool, isAkaiTool, DYNAMIC_EGRESS_PREFIX, DYNAMIC_EGRESS_PREFIXES, isDynamicEgressRef } from './tool.js';
|
|
2
2
|
export { defineCLI } from './define-cli.js';
|
|
3
3
|
export { filePath, FILE_INPUT_META_KEY } from './file-input.js';
|
|
4
4
|
export { defineConnection, isAkaiConnection } from './define-connection.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EACV,UAAU,EACV,MAAM,EACN,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,OAAO,EACP,cAAc,EACd,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,UAAU,EACV,SAAS,EACT,uBAAuB,EACvB,OAAO,EACP,OAAO,EACP,UAAU,EACV,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,SAAS,EACT,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { tool, isAkaiTool, DYNAMIC_EGRESS_PREFIX } from './tool.js';
|
|
1
|
+
export { tool, isAkaiTool, DYNAMIC_EGRESS_PREFIX, DYNAMIC_EGRESS_PREFIXES, isDynamicEgressRef } from './tool.js';
|
|
2
2
|
export { defineCLI } from './define-cli.js';
|
|
3
3
|
export { filePath, FILE_INPUT_META_KEY } from './file-input.js';
|
|
4
4
|
export { defineConnection, isAkaiConnection } from './define-connection.js';
|
|
@@ -2,10 +2,9 @@ import { z } from 'zod';
|
|
|
2
2
|
import type { ConnectionManifest } from './types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Cross-check for dynamic-egress references. Mirrors the invariant
|
|
5
|
-
* `defineCLI()` enforces at spec time:
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* resolve the egress host from the resolved property value).
|
|
5
|
+
* `defineCLI()` enforces at spec time:
|
|
6
|
+
* - `{ from: 'property:KEY' }` requires KEY in `properties[]` + tool's `propertyKeys`.
|
|
7
|
+
* - `{ from: 'secret:KEY' }` requires KEY in `secrets[]` + tool's `secretKeys`.
|
|
9
8
|
*
|
|
10
9
|
* Validating this at the manifest layer matters for untrusted inputs
|
|
11
10
|
* (S3-fetched manifests, hand-crafted payloads) where the invariant
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/manifest/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAqGrD
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/manifest/json-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAqGrD;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA2CnC,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAsD,CAAC;AAExF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAE/D"}
|
|
@@ -47,10 +47,10 @@ const ToolManifestBaseShape = {
|
|
|
47
47
|
outputSchema: JsonSchemaField,
|
|
48
48
|
};
|
|
49
49
|
// Dynamic-egress reference. Same shape the SDK accepts at spec time and
|
|
50
|
-
// emits on the wire. Format: `property:<UPPER_SNAKE_KEY>`.
|
|
50
|
+
// emits on the wire. Format: `property:<UPPER_SNAKE_KEY>` or `secret:<UPPER_SNAKE_KEY>`.
|
|
51
51
|
const DynamicEgressSchema = z.object({
|
|
52
|
-
from: z.string().regex(/^property:[A-Z][A-Z0-9_]*$/, {
|
|
53
|
-
error: 'egress.from must match "property:<KEY>" with KEY in upper-snake-case',
|
|
52
|
+
from: z.string().regex(/^(?:property|secret):[A-Z][A-Z0-9_]*$/, {
|
|
53
|
+
error: 'egress.from must match "property:<KEY>" or "secret:<KEY>" with KEY in upper-snake-case',
|
|
54
54
|
}),
|
|
55
55
|
});
|
|
56
56
|
const HttpToolManifestSchema = z.object({
|
|
@@ -91,17 +91,17 @@ const ConnectionManifestBaseSchema = z.object({
|
|
|
91
91
|
});
|
|
92
92
|
/**
|
|
93
93
|
* Cross-check for dynamic-egress references. Mirrors the invariant
|
|
94
|
-
* `defineCLI()` enforces at spec time:
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
* resolve the egress host from the resolved property value).
|
|
94
|
+
* `defineCLI()` enforces at spec time:
|
|
95
|
+
* - `{ from: 'property:KEY' }` requires KEY in `properties[]` + tool's `propertyKeys`.
|
|
96
|
+
* - `{ from: 'secret:KEY' }` requires KEY in `secrets[]` + tool's `secretKeys`.
|
|
98
97
|
*
|
|
99
98
|
* Validating this at the manifest layer matters for untrusted inputs
|
|
100
99
|
* (S3-fetched manifests, hand-crafted payloads) where the invariant
|
|
101
100
|
* may have been broken between emission and consumption.
|
|
102
101
|
*/
|
|
103
102
|
export const ConnectionManifestSchema = ConnectionManifestBaseSchema.superRefine((m, ctx) => {
|
|
104
|
-
const
|
|
103
|
+
const declaredProperties = new Set(m.properties.map((p) => p.key));
|
|
104
|
+
const declaredSecrets = new Set(m.secrets.map((s) => s.key));
|
|
105
105
|
for (let i = 0; i < m.tools.length; i++) {
|
|
106
106
|
const t = m.tools[i];
|
|
107
107
|
if (t.transport !== 'http')
|
|
@@ -109,20 +109,40 @@ export const ConnectionManifestSchema = ConnectionManifestBaseSchema.superRefine
|
|
|
109
109
|
const egress = t.egress;
|
|
110
110
|
if (Array.isArray(egress) || egress === null)
|
|
111
111
|
continue;
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
112
|
+
const ref = egress.from;
|
|
113
|
+
if (ref.startsWith('property:')) {
|
|
114
|
+
const key = ref.slice('property:'.length);
|
|
115
|
+
if (!declaredProperties.has(key)) {
|
|
116
|
+
ctx.addIssue({
|
|
117
|
+
code: 'custom',
|
|
118
|
+
path: ['tools', i, 'egress'],
|
|
119
|
+
message: `dynamic egress 'property:${key}' but '${key}' is not declared in manifest.properties[]`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (!t.propertyKeys.includes(key)) {
|
|
123
|
+
ctx.addIssue({
|
|
124
|
+
code: 'custom',
|
|
125
|
+
path: ['tools', i, 'egress'],
|
|
126
|
+
message: `dynamic egress 'property:${key}' but '${key}' is not in tools[${i}].propertyKeys`,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
119
129
|
}
|
|
120
|
-
if (
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
130
|
+
else if (ref.startsWith('secret:')) {
|
|
131
|
+
const key = ref.slice('secret:'.length);
|
|
132
|
+
if (!declaredSecrets.has(key)) {
|
|
133
|
+
ctx.addIssue({
|
|
134
|
+
code: 'custom',
|
|
135
|
+
path: ['tools', i, 'egress'],
|
|
136
|
+
message: `dynamic egress 'secret:${key}' but '${key}' is not declared in manifest.secrets[]`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (!t.secretKeys.includes(key)) {
|
|
140
|
+
ctx.addIssue({
|
|
141
|
+
code: 'custom',
|
|
142
|
+
path: ['tools', i, 'egress'],
|
|
143
|
+
message: `dynamic egress 'secret:${key}' but '${key}' is not in tools[${i}].secretKeys`,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
126
146
|
}
|
|
127
147
|
}
|
|
128
148
|
});
|
package/dist/manifest/types.d.ts
CHANGED
|
@@ -60,7 +60,7 @@ interface BaseToolManifest {
|
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
62
|
* Dynamic egress reference (mirrors {@link DynamicEgress} from the SDK types).
|
|
63
|
-
* The host runtime resolves the named property at invocation time.
|
|
63
|
+
* The host runtime resolves the named property or secret at invocation time.
|
|
64
64
|
*
|
|
65
65
|
* Kept as a separate manifest type (vs reusing `DynamicEgress` from the
|
|
66
66
|
* SDK) so the manifest layer's contract is self-contained — consumers
|
|
@@ -68,7 +68,7 @@ interface BaseToolManifest {
|
|
|
68
68
|
* understand the wire shape.
|
|
69
69
|
*/
|
|
70
70
|
export interface DynamicEgressManifest {
|
|
71
|
-
readonly from: `property:${string}`;
|
|
71
|
+
readonly from: `property:${string}` | `secret:${string}`;
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* HTTP-transport tool. The only variant `cli.toSchema()` emits today —
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/manifest/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAE3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;GAKG;AACH,UAAU,gBAAgB;IACxB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iDAAiD;IACjD,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAC/D,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;CACjE;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,YAAY,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/manifest/types.ts"],"names":[],"mappings":"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"}
|
package/dist/tool.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { z, type ZodType, type infer as ZInfer } from 'zod';
|
|
2
2
|
import type { AnyToolDef, ToolDef, ToolSpec } from './types.js';
|
|
3
|
-
/**
|
|
3
|
+
/** @deprecated Use {@link DYNAMIC_EGRESS_PREFIXES} or {@link isDynamicEgressRef}. Kept for backwards compatibility. */
|
|
4
4
|
export declare const DYNAMIC_EGRESS_PREFIX: "property:";
|
|
5
|
+
/** All recognised dynamic-egress ref prefixes. */
|
|
6
|
+
export declare const DYNAMIC_EGRESS_PREFIXES: readonly ["property:", "secret:"];
|
|
7
|
+
/** Returns true when `s` starts with a recognised dynamic-egress prefix. */
|
|
8
|
+
export declare function isDynamicEgressRef(s: string): boolean;
|
|
5
9
|
/**
|
|
6
10
|
* Type guard for tools produced by {@link tool}. Uses an internal `WeakSet`
|
|
7
11
|
* so a hand-crafted `{ __akaiTool: true, ... }` value does not qualify —
|
package/dist/tool.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAiB,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAG1F,
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAiB,OAAO,EAAE,QAAQ,EAAa,MAAM,YAAY,CAAC;AAG1F,uHAAuH;AACvH,eAAO,MAAM,qBAAqB,EAAG,WAAoB,CAAC;AAE1D,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,mCAAoC,CAAC;AAEzE,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAErD;AAcD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAEtD;AA2HD,QAAA,MAAM,WAAW,gCAAe,CAAC;AAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAgB,IAAI,CAClB,CAAC,SAAS,OAAO,GAAG,OAAO,WAAW,EACtC,CAAC,SAAS,OAAO,GAAG,SAAS,GAAG,SAAS,EACzC,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,EAC9B,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,EAE9B,IAAI,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAkD3E"}
|
package/dist/tool.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { AkaiSpecError } from './errors.js';
|
|
3
|
-
/**
|
|
3
|
+
/** @deprecated Use {@link DYNAMIC_EGRESS_PREFIXES} or {@link isDynamicEgressRef}. Kept for backwards compatibility. */
|
|
4
4
|
export const DYNAMIC_EGRESS_PREFIX = 'property:';
|
|
5
|
+
/** All recognised dynamic-egress ref prefixes. */
|
|
6
|
+
export const DYNAMIC_EGRESS_PREFIXES = ['property:', 'secret:'];
|
|
7
|
+
/** Returns true when `s` starts with a recognised dynamic-egress prefix. */
|
|
8
|
+
export function isDynamicEgressRef(s) {
|
|
9
|
+
return DYNAMIC_EGRESS_PREFIXES.some((p) => s.startsWith(p));
|
|
10
|
+
}
|
|
5
11
|
// Multi-label DNS hostname: alphanumeric labels + hyphens (not leading/trailing),
|
|
6
12
|
// at least one dot, last label must start with a letter (rejects IPv4 literals
|
|
7
13
|
// like 127.0.0.1). Doesn't cover IPv6 / IDN — good enough for spec-time guidance.
|
|
@@ -32,23 +38,23 @@ const ZodSchemaShape = z.custom((val) => typeof val === 'object' &&
|
|
|
32
38
|
const Hostname = z
|
|
33
39
|
.string({ error: 'invalid egress host' })
|
|
34
40
|
.regex(HOSTNAME_RE, { error: (issue) => `invalid egress host: ${JSON.stringify(issue.input)}` });
|
|
35
|
-
// Dynamic egress: `{ from: 'property:KEY' }
|
|
36
|
-
// property declarations happen in
|
|
37
|
-
//
|
|
38
|
-
//
|
|
39
|
-
const
|
|
41
|
+
// Dynamic egress: `{ from: 'property:KEY' }` or `{ from: 'secret:KEY' }`.
|
|
42
|
+
// Cross-checks against the CLI's property/secret declarations happen in
|
|
43
|
+
// `defineCLI()`; here we only validate shape. Keys are upper-snake-case
|
|
44
|
+
// (e.g. `JIRA_BASE_URL`, `ZENDESK_SUBDOMAIN`, `SUPPORT_APP_URL`).
|
|
45
|
+
const EGRESS_REF_RE = /^(?:property|secret):[A-Z][A-Z0-9_]*$/;
|
|
40
46
|
const DynamicEgressShape = z.object({
|
|
41
47
|
from: z
|
|
42
|
-
.string({ error: 'egress.from must be a string like "property:<KEY>"' })
|
|
43
|
-
.regex(
|
|
44
|
-
error: (issue) => `invalid dynamic egress reference ${JSON.stringify(issue.input)}: expected 'property:<KEY>' where KEY is upper-snake-case`,
|
|
48
|
+
.string({ error: 'egress.from must be a string like "property:<KEY>" or "secret:<KEY>"' })
|
|
49
|
+
.regex(EGRESS_REF_RE, {
|
|
50
|
+
error: (issue) => `invalid dynamic egress reference ${JSON.stringify(issue.input)}: expected 'property:<KEY>' or 'secret:<KEY>' where KEY is upper-snake-case`,
|
|
45
51
|
}),
|
|
46
|
-
}, { error: 'must be { from: "property:<KEY>" }' });
|
|
52
|
+
}, { error: 'must be { from: "property:<KEY>" } or { from: "secret:<KEY>" }' });
|
|
47
53
|
const Egress = z.union([
|
|
48
54
|
Hostname,
|
|
49
55
|
z.array(Hostname).min(1, { error: 'must declare at least one host' }),
|
|
50
56
|
DynamicEgressShape,
|
|
51
|
-
], { error: 'must be a hostname, array of hostnames, or { from: "property:<KEY>" }' });
|
|
57
|
+
], { error: 'must be a hostname, array of hostnames, or { from: "property:<KEY>" } / { from: "secret:<KEY>" }' });
|
|
52
58
|
const SecretKey = z.string({ error: 'invalid secret key' }).min(1, { error: 'invalid secret key' });
|
|
53
59
|
const PropertyKey = z.string({ error: 'invalid property key' }).min(1, { error: 'invalid property key' });
|
|
54
60
|
const NetworkOptionsShape = z.object({ egress: Egress });
|
|
@@ -192,8 +198,8 @@ export function tool(spec) {
|
|
|
192
198
|
network: {
|
|
193
199
|
egress: normalizeEgress(
|
|
194
200
|
// Zod's inferred type widens `from` to `string`; the spec is
|
|
195
|
-
// validated by `
|
|
196
|
-
// the `property:${string}` template-literal contract.
|
|
201
|
+
// validated by `EGRESS_REF_RE` so the runtime value matches
|
|
202
|
+
// the `property:${string} | secret:${string}` template-literal contract.
|
|
197
203
|
network.egress),
|
|
198
204
|
},
|
|
199
205
|
}
|
package/dist/types.d.ts
CHANGED
|
@@ -25,15 +25,20 @@ export interface PropertyDecl {
|
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
27
|
* Dynamic egress reference — resolved at runtime by the host (DT service)
|
|
28
|
-
* from the named property. Used for multi-tenant connectors (Jira,
|
|
29
|
-
* Looker self-hosted, GHES, Salesforce) where the host varies per tenant.
|
|
28
|
+
* from the named property or secret. Used for multi-tenant connectors (Jira,
|
|
29
|
+
* Zendesk, Looker self-hosted, GHES, Salesforce) where the host varies per tenant.
|
|
30
30
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
31
|
+
* Two forms are accepted:
|
|
32
|
+
* - `property:<KEY>` — KEY matches an entry in the CLI's `properties[].key`;
|
|
33
|
+
* `defineCLI()` cross-checks KEY is declared in `properties[]` and the
|
|
34
|
+
* tool lists it in `options.propertyKeys`.
|
|
35
|
+
* - `secret:<KEY>` — KEY matches an entry in the CLI's `secrets[].key`;
|
|
36
|
+
* `defineCLI()` cross-checks KEY is declared in `secrets[]` and the tool
|
|
37
|
+
* lists it in `options.secretKeys`. Prefer this for per-tenant host URLs
|
|
38
|
+
* that are forwarded through the worker `/tools/execute` envelope as secrets.
|
|
34
39
|
*/
|
|
35
40
|
export interface DynamicEgress {
|
|
36
|
-
readonly from: `property:${string}`;
|
|
41
|
+
readonly from: `property:${string}` | `secret:${string}`;
|
|
37
42
|
}
|
|
38
43
|
/**
|
|
39
44
|
* Network-egress allowlist for a tool. Either a static list of hostnames
|
|
@@ -198,9 +203,10 @@ export interface CLIDef {
|
|
|
198
203
|
* runtime, so authors must explicitly decide. Mark `true` for reads, `false`
|
|
199
204
|
* for writes (writes pause for user approval).
|
|
200
205
|
* - `egress` accepts a single host string, array shorthand, or a
|
|
201
|
-
* {@link DynamicEgress} reference (`{ from: 'property:KEY' }`
|
|
202
|
-
*
|
|
203
|
-
* the
|
|
206
|
+
* {@link DynamicEgress} reference (`{ from: 'property:KEY' }` or
|
|
207
|
+
* `{ from: 'secret:KEY' }`) for tenant-URL connectors. Dynamic egress
|
|
208
|
+
* requires the referenced key be declared in the CLI's `properties[]` /
|
|
209
|
+
* `secrets[]` AND included in this tool's `propertyKeys` / `secretKeys`.
|
|
204
210
|
* - `transport` defaults to `'http'`. Set to `'native'` for in-process
|
|
205
211
|
* handlers (no network); then `options.network` becomes optional and
|
|
206
212
|
* `ctx.fetch` throws if called.
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC;AACpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|