@xyne/workflow-sdk 3.2.28 → 3.2.31
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/dist/agents/agent-step.d.ts +9 -3
- package/dist/agents/agent-step.d.ts.map +1 -1
- package/dist/agents/agent-step.js +11 -9
- package/dist/agents/agent-step.js.map +1 -1
- package/dist/agents/citation-resolve.d.ts.map +1 -1
- package/dist/agents/citation-resolve.js +2 -2
- package/dist/agents/citation-resolve.js.map +1 -1
- package/dist/common/citation-ref.d.ts +32 -21
- package/dist/common/citation-ref.d.ts.map +1 -1
- package/dist/common/citation-ref.js +40 -27
- package/dist/common/citation-ref.js.map +1 -1
- package/dist/common/expression-eval.d.ts +35 -0
- package/dist/common/expression-eval.d.ts.map +1 -0
- package/dist/common/expression-eval.js +214 -0
- package/dist/common/expression-eval.js.map +1 -0
- package/dist/common/principal.d.ts +45 -0
- package/dist/common/principal.d.ts.map +1 -0
- package/dist/common/principal.js +9 -0
- package/dist/common/principal.js.map +1 -0
- package/dist/steps/builtin/transform.step.d.ts +247 -0
- package/dist/steps/builtin/transform.step.d.ts.map +1 -0
- package/dist/steps/builtin/transform.step.js +135 -0
- package/dist/steps/builtin/transform.step.js.map +1 -0
- package/dist/types/attachment.d.ts +23 -0
- package/dist/types/attachment.d.ts.map +1 -0
- package/dist/types/attachment.js +2 -0
- package/dist/types/attachment.js.map +1 -0
- package/dist/types/resume-payload.d.ts +34 -0
- package/dist/types/resume-payload.d.ts.map +1 -0
- package/dist/types/resume-payload.js +12 -0
- package/dist/types/resume-payload.js.map +1 -0
- package/dist/types/workflow-config.d.ts +21 -0
- package/dist/types/workflow-config.d.ts.map +1 -1
- package/dist/types/workflow-config.js.map +1 -1
- package/dist/util/executable-check.d.ts +42 -0
- package/dist/util/executable-check.d.ts.map +1 -0
- package/dist/util/executable-check.js +115 -0
- package/dist/util/executable-check.js.map +1 -0
- package/package.json +1 -1
- package/dist/authz/principal-field.d.ts +0 -23
- package/dist/authz/principal-field.d.ts.map +0 -1
- package/dist/authz/principal-field.js +0 -34
- package/dist/authz/principal-field.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.step.js","sourceRoot":"","sources":["../../../src/steps/builtin/transform.step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attachment — opaque reference to a file managed by the host's StorageAdapter.
|
|
3
|
+
*
|
|
4
|
+
* Used everywhere the framework carries a file:
|
|
5
|
+
* - Trigger inputs (uploaded via `POST /uploads`, attached to `context.trigger.attachments`)
|
|
6
|
+
* - Resume payloads (uploaded with feedback in a review-gate retry)
|
|
7
|
+
* - Step inputs (rerunFromStep with attachments in configOverrides)
|
|
8
|
+
*
|
|
9
|
+
* The framework never opens `data` — it's a host-defined reference (URL,
|
|
10
|
+
* blob ID, signed token, `mem://uuid`). Steps that need the bytes call
|
|
11
|
+
* `StorageAdapter.read()` via a service the host registers.
|
|
12
|
+
*/
|
|
13
|
+
export interface Attachment {
|
|
14
|
+
/** Original filename — e.g. "contract.pdf". */
|
|
15
|
+
name: string;
|
|
16
|
+
/** MIME type — e.g. "application/pdf", "image/png". */
|
|
17
|
+
mimeType: string;
|
|
18
|
+
/** Opaque host reference. Framework treats this as a string. */
|
|
19
|
+
data: string;
|
|
20
|
+
/** Size in bytes — set by storage after upload. Useful for UI display + size budgets. */
|
|
21
|
+
size?: number;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=attachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.d.ts","sourceRoot":"","sources":["../../src/types/attachment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment.js","sourceRoot":"","sources":["../../src/types/attachment.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResumePayload — the unified shape for resuming a paused execution.
|
|
3
|
+
*
|
|
4
|
+
* One contract for every pause type:
|
|
5
|
+
* - Mid-execution agent pauses (tool approval, input required, user interrupted)
|
|
6
|
+
* - Review gates (`onComplete: 'review'`)
|
|
7
|
+
*
|
|
8
|
+
* The router validates incoming bodies into this shape; persistence stores it
|
|
9
|
+
* verbatim; the executor and step `onResume` handlers consume it.
|
|
10
|
+
*/
|
|
11
|
+
import type { Attachment } from './attachment.js';
|
|
12
|
+
/**
|
|
13
|
+
* Alias for {@link Attachment} kept for clarity at call sites that historically
|
|
14
|
+
* said "resume attachment". The shape is shared across the framework.
|
|
15
|
+
*/
|
|
16
|
+
export type ResumeAttachment = Attachment;
|
|
17
|
+
/**
|
|
18
|
+
* What the user decided.
|
|
19
|
+
* - `approve`: continue from a mid-pause OR advance past a review gate
|
|
20
|
+
* - `retry`: re-execute the current step with `priorState` + `feedback` (review gate)
|
|
21
|
+
* - `abort`: cancel the execution
|
|
22
|
+
*/
|
|
23
|
+
export type ResumeAction = 'approve' | 'retry' | 'abort';
|
|
24
|
+
/** Payload from the host when resuming a paused execution. */
|
|
25
|
+
export interface ResumePayload {
|
|
26
|
+
action: ResumeAction;
|
|
27
|
+
/** User-provided text input (form feedback, instruction, additional context). */
|
|
28
|
+
feedback?: string;
|
|
29
|
+
/** Files uploaded alongside the feedback. Opaque references — host resolves. */
|
|
30
|
+
attachments?: ResumeAttachment[];
|
|
31
|
+
/** Step-specific extras from custom form fields. Opaque to the framework. */
|
|
32
|
+
data?: Record<string, unknown>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=resume-payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-payload.d.ts","sourceRoot":"","sources":["../../src/types/resume-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAEzD,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,YAAY,CAAC;IACrB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResumePayload — the unified shape for resuming a paused execution.
|
|
3
|
+
*
|
|
4
|
+
* One contract for every pause type:
|
|
5
|
+
* - Mid-execution agent pauses (tool approval, input required, user interrupted)
|
|
6
|
+
* - Review gates (`onComplete: 'review'`)
|
|
7
|
+
*
|
|
8
|
+
* The router validates incoming bodies into this shape; persistence stores it
|
|
9
|
+
* verbatim; the executor and step `onResume` handlers consume it.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=resume-payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-payload.js","sourceRoot":"","sources":["../../src/types/resume-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -121,6 +121,25 @@ export interface StepGroup {
|
|
|
121
121
|
id: string;
|
|
122
122
|
title: string;
|
|
123
123
|
description?: string;
|
|
124
|
+
/**
|
|
125
|
+
* Hoist this group to the Run (top) level of the execution sidebar. Under the
|
|
126
|
+
* default display it merely lifts the group to the top while every other step
|
|
127
|
+
* still renders in place; under {@link WorkflowDisplay.onlyPinned} it doubles as
|
|
128
|
+
* the visibility whitelist — only pinned groups are shown.
|
|
129
|
+
*/
|
|
130
|
+
pinned?: boolean;
|
|
131
|
+
}
|
|
132
|
+
/** Author-time display preferences for the execution viewer. Purely presentational —
|
|
133
|
+
* has no effect on execution. */
|
|
134
|
+
export interface WorkflowDisplay {
|
|
135
|
+
/**
|
|
136
|
+
* Whitelist mode for the execution sidebar: when `true`, ONLY steps belonging to a
|
|
137
|
+
* pinned group are shown; every non-pinned group and ungrouped step is dropped.
|
|
138
|
+
* Default `false` — all steps show and pinned groups are merely hoisted to the top.
|
|
139
|
+
* Use this to present a curated run (e.g. a single cumulative report node) while the
|
|
140
|
+
* intermediate plumbing stays reachable only via the node search palette.
|
|
141
|
+
*/
|
|
142
|
+
onlyPinned?: boolean;
|
|
124
143
|
}
|
|
125
144
|
export declare const WorkflowSettingsSchema: z.ZodObject<{
|
|
126
145
|
onError: z.ZodDefault<z.ZodEnum<["stop", "continue"]>>;
|
|
@@ -164,6 +183,8 @@ export interface WorkflowConfig {
|
|
|
164
183
|
settings?: WorkflowSettings;
|
|
165
184
|
/** Optional documentation groups referenced by step `groupId`. */
|
|
166
185
|
groups?: StepGroup[];
|
|
186
|
+
/** Optional presentational preferences for the execution viewer (no effect on execution). */
|
|
187
|
+
display?: WorkflowDisplay;
|
|
167
188
|
/**
|
|
168
189
|
* Author-time variables — fixed values (scalars, JSON, uploaded documents)
|
|
169
190
|
* defined once here and referenced by steps as `{{vars.<key>}}`. The same for
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-config.d.ts","sourceRoot":"","sources":["../../src/types/workflow-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"workflow-config.d.ts","sourceRoot":"","sources":["../../src/types/workflow-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-config.js","sourceRoot":"","sources":["../../src/types/workflow-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EACL,kBAAkB,EAClB,+BAA+B,GAChC,MAAM,yBAAyB,CAAC;AAGjC,qCAAqC;AAErC,MAAM,uBAAuB,GAAG,CAAC;KAC9B,MAAM,EAAE;KACR,KAAK,CAAC,kBAAkB,EAAE,wCAAwC,CAAC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,KAAQ;IAER,OAAO,CAAC;SACL,KAAK,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;SACvC,QAAQ,CACP,GAAG,+BAA+B,GAAG,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAChD,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CACvC,MAAoB;IAEpB,IACE,MAAM,YAAY,CAAC,CAAC,QAAQ;QAC5B,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;QACtC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,+BAA+B,CAAC,EAC9D,CAAC;QACD,MAAM,OAAO,GAAI,MAAmD,CAAC,IAAI;aACtE,OAAO,CAAC;QACX,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAeD,MAAM,CAAC,MAAM,mBAAmB,GAA6B,CAAC,CAAC,MAAM,CAAC;IACpE,QAAQ,EAAE,uBAAuB;IACjC,QAAQ,EAAE,uBAAuB;IACjC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAyB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAC/D,CAAC,CAAC,KAAK,CAAC;IACN,mBAAmB;IACnB,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;CAC5C,CAAC,CACH,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-config.js","sourceRoot":"","sources":["../../src/types/workflow-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executable upload safety check.
|
|
3
|
+
*
|
|
4
|
+
* Allow-by-default with a deny-list of known dangerous types — covers the
|
|
5
|
+
* common attack surface (native binaries, scripts that auto-run, installers,
|
|
6
|
+
* macro-enabled Office docs) without forcing workflow authors to enumerate
|
|
7
|
+
* every safe MIME type.
|
|
8
|
+
*
|
|
9
|
+
* Two checks run in parallel so spoofed MIME types alone can't bypass:
|
|
10
|
+
* 1. MIME type matches the deny-list
|
|
11
|
+
* 2. Filename extension matches the deny-list
|
|
12
|
+
*
|
|
13
|
+
* Either match blocks the upload. To accept executables (e.g. a security-
|
|
14
|
+
* analysis workflow that intentionally examines binaries), the host opts
|
|
15
|
+
* in via `RuntimeOptions.allowExecutableUploads = true`.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* MIME types treated as executable / unsafe (lowercase — input is also
|
|
19
|
+
* lowercased before comparison).
|
|
20
|
+
*/
|
|
21
|
+
export declare const BLOCKED_EXECUTABLE_MIME_TYPES: ReadonlySet<string>;
|
|
22
|
+
/**
|
|
23
|
+
* File extensions treated as executable / unsafe (case-insensitive, no dot).
|
|
24
|
+
* The check uses the LAST extension so `report.exe.txt` is treated as text
|
|
25
|
+
* (Windows shows the trailing extension, which is what the user actually sees).
|
|
26
|
+
*/
|
|
27
|
+
export declare const BLOCKED_EXECUTABLE_EXTENSIONS: ReadonlySet<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Extract the lowercase extension (no dot) from a filename, or '' if none.
|
|
30
|
+
* A leading dot doesn't count — `.bashrc` has no extension, not "bashrc".
|
|
31
|
+
*/
|
|
32
|
+
export declare function extensionOf(name: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Returns a human-readable reason if the file should be blocked as
|
|
35
|
+
* executable, or `null` if it's safe.
|
|
36
|
+
*
|
|
37
|
+
* Always check both the MIME type and the filename — clients can spoof one
|
|
38
|
+
* but rarely both. This is defense-in-depth, not authoritative malware
|
|
39
|
+
* detection (run real AV at the storage layer for that).
|
|
40
|
+
*/
|
|
41
|
+
export declare function isExecutable(mimeType: string, name: string): string | null;
|
|
42
|
+
//# sourceMappingURL=executable-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executable-check.d.ts","sourceRoot":"","sources":["../../src/util/executable-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AACH,eAAO,MAAM,6BAA6B,EAAE,WAAW,CAAC,MAAM,CAwC5D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,EAAE,WAAW,CAAC,MAAM,CAmB5D,CAAC;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS1E"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Executable upload safety check.
|
|
3
|
+
*
|
|
4
|
+
* Allow-by-default with a deny-list of known dangerous types — covers the
|
|
5
|
+
* common attack surface (native binaries, scripts that auto-run, installers,
|
|
6
|
+
* macro-enabled Office docs) without forcing workflow authors to enumerate
|
|
7
|
+
* every safe MIME type.
|
|
8
|
+
*
|
|
9
|
+
* Two checks run in parallel so spoofed MIME types alone can't bypass:
|
|
10
|
+
* 1. MIME type matches the deny-list
|
|
11
|
+
* 2. Filename extension matches the deny-list
|
|
12
|
+
*
|
|
13
|
+
* Either match blocks the upload. To accept executables (e.g. a security-
|
|
14
|
+
* analysis workflow that intentionally examines binaries), the host opts
|
|
15
|
+
* in via `RuntimeOptions.allowExecutableUploads = true`.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* MIME types treated as executable / unsafe (lowercase — input is also
|
|
19
|
+
* lowercased before comparison).
|
|
20
|
+
*/
|
|
21
|
+
export const BLOCKED_EXECUTABLE_MIME_TYPES = new Set([
|
|
22
|
+
// Native binaries
|
|
23
|
+
'application/x-msdownload',
|
|
24
|
+
'application/x-msdos-program',
|
|
25
|
+
'application/x-executable',
|
|
26
|
+
'application/x-mach-binary',
|
|
27
|
+
'application/vnd.microsoft.portable-executable',
|
|
28
|
+
'application/x-msi',
|
|
29
|
+
'application/x-ms-installer',
|
|
30
|
+
// Shell + Windows scripts
|
|
31
|
+
'application/x-sh',
|
|
32
|
+
'application/x-shellscript',
|
|
33
|
+
'application/x-bat',
|
|
34
|
+
'application/x-csh',
|
|
35
|
+
'application/x-cmd',
|
|
36
|
+
'application/x-msmetafile',
|
|
37
|
+
// JavaScript / ECMAScript
|
|
38
|
+
'text/javascript',
|
|
39
|
+
'application/javascript',
|
|
40
|
+
'application/ecmascript',
|
|
41
|
+
'application/x-javascript',
|
|
42
|
+
// Java / Flash
|
|
43
|
+
'application/java-archive',
|
|
44
|
+
'application/x-java-archive',
|
|
45
|
+
'application/x-java-jnlp-file',
|
|
46
|
+
'application/x-shockwave-flash',
|
|
47
|
+
// Installer / package formats that bundle executables
|
|
48
|
+
'application/vnd.android.package-archive',
|
|
49
|
+
'application/x-debian-package',
|
|
50
|
+
'application/x-rpm',
|
|
51
|
+
// Macro-enabled Office documents (lowercased — IANA tokens are case-insensitive)
|
|
52
|
+
'application/vnd.ms-word.document.macroenabled.12',
|
|
53
|
+
'application/vnd.ms-word.template.macroenabled.12',
|
|
54
|
+
'application/vnd.ms-excel.sheet.macroenabled.12',
|
|
55
|
+
'application/vnd.ms-excel.template.macroenabled.12',
|
|
56
|
+
'application/vnd.ms-excel.addin.macroenabled.12',
|
|
57
|
+
'application/vnd.ms-excel.sheet.binary.macroenabled.12',
|
|
58
|
+
'application/vnd.ms-powerpoint.presentation.macroenabled.12',
|
|
59
|
+
'application/vnd.ms-powerpoint.template.macroenabled.12',
|
|
60
|
+
'application/vnd.ms-powerpoint.addin.macroenabled.12',
|
|
61
|
+
]);
|
|
62
|
+
/**
|
|
63
|
+
* File extensions treated as executable / unsafe (case-insensitive, no dot).
|
|
64
|
+
* The check uses the LAST extension so `report.exe.txt` is treated as text
|
|
65
|
+
* (Windows shows the trailing extension, which is what the user actually sees).
|
|
66
|
+
*/
|
|
67
|
+
export const BLOCKED_EXECUTABLE_EXTENSIONS = new Set([
|
|
68
|
+
// Windows
|
|
69
|
+
'exe', 'msi', 'com', 'scr', 'cmd', 'bat', 'ps1', 'psm1',
|
|
70
|
+
'vbs', 'vbe', 'wsf', 'wsh', 'hta', 'cpl', 'lnk',
|
|
71
|
+
'dll', 'sys', 'drv', 'ocx',
|
|
72
|
+
// macOS / Unix
|
|
73
|
+
'app', 'dmg', 'pkg',
|
|
74
|
+
'sh', 'bash', 'zsh', 'fish', 'csh', 'ksh', 'command', 'tool',
|
|
75
|
+
// Java / Flash
|
|
76
|
+
'jar', 'war', 'jnlp', 'swf',
|
|
77
|
+
// Mobile installers
|
|
78
|
+
'apk', 'ipa', 'xap',
|
|
79
|
+
// Linux installers
|
|
80
|
+
'deb', 'rpm', 'run', 'bin',
|
|
81
|
+
// JavaScript (auto-executes in browser / Node contexts)
|
|
82
|
+
'js', 'mjs', 'cjs',
|
|
83
|
+
// Macro-enabled Office
|
|
84
|
+
'docm', 'dotm', 'xlsm', 'xltm', 'xlam', 'xlsb',
|
|
85
|
+
'pptm', 'potm', 'ppam', 'ppsm', 'sldm',
|
|
86
|
+
]);
|
|
87
|
+
/**
|
|
88
|
+
* Extract the lowercase extension (no dot) from a filename, or '' if none.
|
|
89
|
+
* A leading dot doesn't count — `.bashrc` has no extension, not "bashrc".
|
|
90
|
+
*/
|
|
91
|
+
export function extensionOf(name) {
|
|
92
|
+
const dot = name.lastIndexOf('.');
|
|
93
|
+
if (dot <= 0 || dot === name.length - 1)
|
|
94
|
+
return '';
|
|
95
|
+
return name.slice(dot + 1).toLowerCase();
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Returns a human-readable reason if the file should be blocked as
|
|
99
|
+
* executable, or `null` if it's safe.
|
|
100
|
+
*
|
|
101
|
+
* Always check both the MIME type and the filename — clients can spoof one
|
|
102
|
+
* but rarely both. This is defense-in-depth, not authoritative malware
|
|
103
|
+
* detection (run real AV at the storage layer for that).
|
|
104
|
+
*/
|
|
105
|
+
export function isExecutable(mimeType, name) {
|
|
106
|
+
if (BLOCKED_EXECUTABLE_MIME_TYPES.has(mimeType.toLowerCase())) {
|
|
107
|
+
return `Executable MIME type "${mimeType}" is not allowed.`;
|
|
108
|
+
}
|
|
109
|
+
const ext = extensionOf(name);
|
|
110
|
+
if (ext && BLOCKED_EXECUTABLE_EXTENSIONS.has(ext)) {
|
|
111
|
+
return `Files with .${ext} extension are not allowed.`;
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=executable-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executable-check.js","sourceRoot":"","sources":["../../src/util/executable-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAwB,IAAI,GAAG,CAAC;IACxE,kBAAkB;IAClB,0BAA0B;IAC1B,6BAA6B;IAC7B,0BAA0B;IAC1B,2BAA2B;IAC3B,+CAA+C;IAC/C,mBAAmB;IACnB,4BAA4B;IAC5B,0BAA0B;IAC1B,kBAAkB;IAClB,2BAA2B;IAC3B,mBAAmB;IACnB,mBAAmB;IACnB,mBAAmB;IACnB,0BAA0B;IAC1B,0BAA0B;IAC1B,iBAAiB;IACjB,wBAAwB;IACxB,wBAAwB;IACxB,0BAA0B;IAC1B,eAAe;IACf,0BAA0B;IAC1B,4BAA4B;IAC5B,8BAA8B;IAC9B,+BAA+B;IAC/B,sDAAsD;IACtD,yCAAyC;IACzC,8BAA8B;IAC9B,mBAAmB;IACnB,iFAAiF;IACjF,kDAAkD;IAClD,kDAAkD;IAClD,gDAAgD;IAChD,mDAAmD;IACnD,gDAAgD;IAChD,uDAAuD;IACvD,4DAA4D;IAC5D,wDAAwD;IACxD,qDAAqD;CACtD,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAwB,IAAI,GAAG,CAAC;IACxE,UAAU;IACV,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;IACvD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC/C,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC1B,eAAe;IACf,KAAK,EAAE,KAAK,EAAE,KAAK;IACnB,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM;IAC5D,eAAe;IACf,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK;IAC3B,oBAAoB;IACpB,KAAK,EAAE,KAAK,EAAE,KAAK;IACnB,mBAAmB;IACnB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IAC1B,wDAAwD;IACxD,IAAI,EAAE,KAAK,EAAE,KAAK;IAClB,uBAAuB;IACvB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CACvC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAC3C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,IAAY;IACzD,IAAI,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC9D,OAAO,yBAAyB,QAAQ,mBAAmB,CAAC;IAC9D,CAAC;IACD,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,GAAG,IAAI,6BAA6B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,eAAe,GAAG,6BAA6B,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Schema-authoring helpers for principal-reference fields (approval `assignee`,
|
|
3
|
-
* access grants). A field marked with one of these formats is rendered by the
|
|
4
|
-
* UI's host-supplied `PrincipalPicker` slot; the stored value is an opaque
|
|
5
|
-
* `{ kind, id }` reference the authorizer resolves. The SDK never interprets it.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* JSON Schema `format` marker for a principal reference. Whether the field holds
|
|
9
|
-
* one principal or a list is the field's own `type` (`object` vs `array`) — the
|
|
10
|
-
* builder derives multi-select from that, so a single format marker suffices.
|
|
11
|
-
*/
|
|
12
|
-
export declare const PRINCIPAL_FORMAT = "principal";
|
|
13
|
-
/**
|
|
14
|
-
* Stamp `format: 'principal'` onto the named properties of a config JSON Schema,
|
|
15
|
-
* so the builder renders the host's `PrincipalPicker` for them. Works for both
|
|
16
|
-
* single (`type: 'object'`) and list (`type: 'array'`) fields — the author
|
|
17
|
-
* declares the type; this only adds the marker.
|
|
18
|
-
*
|
|
19
|
-
* Mirrors {@link markAttachmentFields}. Use it in a step's
|
|
20
|
-
* `decorateConfigSchema` for its `assignee`-style fields.
|
|
21
|
-
*/
|
|
22
|
-
export declare function markPrincipalFields(jsonSchema: Record<string, unknown>, fields: readonly string[]): Record<string, unknown>;
|
|
23
|
-
//# sourceMappingURL=principal-field.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"principal-field.d.ts","sourceRoot":"","sources":["../../src/authz/principal-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,cAAc,CAAC;AAE5C;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Schema-authoring helpers for principal-reference fields (approval `assignee`,
|
|
3
|
-
* access grants). A field marked with one of these formats is rendered by the
|
|
4
|
-
* UI's host-supplied `PrincipalPicker` slot; the stored value is an opaque
|
|
5
|
-
* `{ kind, id }` reference the authorizer resolves. The SDK never interprets it.
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* JSON Schema `format` marker for a principal reference. Whether the field holds
|
|
9
|
-
* one principal or a list is the field's own `type` (`object` vs `array`) — the
|
|
10
|
-
* builder derives multi-select from that, so a single format marker suffices.
|
|
11
|
-
*/
|
|
12
|
-
export const PRINCIPAL_FORMAT = 'principal';
|
|
13
|
-
/**
|
|
14
|
-
* Stamp `format: 'principal'` onto the named properties of a config JSON Schema,
|
|
15
|
-
* so the builder renders the host's `PrincipalPicker` for them. Works for both
|
|
16
|
-
* single (`type: 'object'`) and list (`type: 'array'`) fields — the author
|
|
17
|
-
* declares the type; this only adds the marker.
|
|
18
|
-
*
|
|
19
|
-
* Mirrors {@link markAttachmentFields}. Use it in a step's
|
|
20
|
-
* `decorateConfigSchema` for its `assignee`-style fields.
|
|
21
|
-
*/
|
|
22
|
-
export function markPrincipalFields(jsonSchema, fields) {
|
|
23
|
-
const props = jsonSchema['properties'];
|
|
24
|
-
if (!props)
|
|
25
|
-
return jsonSchema;
|
|
26
|
-
for (const field of fields) {
|
|
27
|
-
const prop = props[field];
|
|
28
|
-
if (!prop)
|
|
29
|
-
continue;
|
|
30
|
-
props[field] = { ...prop, format: PRINCIPAL_FORMAT };
|
|
31
|
-
}
|
|
32
|
-
return jsonSchema;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=principal-field.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"principal-field.js","sourceRoot":"","sources":["../../src/authz/principal-field.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC;AAE5C;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAmC,EACnC,MAAyB;IAEzB,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAExB,CAAC;IACd,IAAI,CAAC,KAAK;QAAE,OAAO,UAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACvD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|