deepline 0.1.204 → 0.1.205

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.
@@ -106,10 +106,10 @@ export const SDK_RELEASE = {
106
106
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
107
107
  // fields shipped in 0.1.153.
108
108
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
109
- version: '0.1.204',
109
+ version: '0.1.205',
110
110
  apiContract: '2026-06-dataset-handle-results-hard-cutover',
111
111
  supportPolicy: {
112
- latest: '0.1.204',
112
+ latest: '0.1.205',
113
113
  minimumSupported: '0.1.53',
114
114
  deprecatedBelow: '0.1.53',
115
115
  commandMinimumSupported: [
@@ -82,7 +82,8 @@ export function validateDaytonaExecutionContext(
82
82
  * CUSTOMER code in PRODUCTION never runs with unrestricted egress — the
83
83
  * production worker must provision `DEEPLINE_DAYTONA_NETWORK_ALLOW_LIST`
84
84
  * (comma-separated CIDRs, per the Daytona `networkAllowList` contract) and
85
- * every prod sandbox is created `networkBlockAll: true` + that allow-list.
85
+ * every prod sandbox is created with that allow-list, which Daytona treats as
86
+ * "block all egress except these CIDRs".
86
87
  *
87
88
  * "Production" here is the RUN'S topology, not the build flag: a run whose
88
89
  * scheduler schema is isolated (per-PR preview CI, per-worktree dev — see
@@ -97,12 +98,43 @@ export function validateDaytonaExecutionContext(
97
98
  * An explicitly provisioned allow-list is always honored (preview included),
98
99
  * so a future preview fleet with enumerable egress can opt in to full parity.
99
100
  */
101
+ /**
102
+ * Keep only IPv4 CIDR entries from a comma-separated allow-list. Daytona's
103
+ * `networkAllowList` is IPv4-only; an IPv6 entry fails every sandbox create.
104
+ * Returns null when nothing valid remains so the production guard below still
105
+ * fires loudly rather than sending an empty list.
106
+ */
107
+ export function filterIpv4CidrAllowList(raw: string | null): string | null {
108
+ if (!raw) return raw;
109
+ const entries = raw
110
+ .split(',')
111
+ .map((entry) => entry.trim())
112
+ .filter(Boolean);
113
+ const ipv4 = entries.filter((entry) => !entry.includes(':'));
114
+ const dropped = entries.filter((entry) => entry.includes(':'));
115
+ if (dropped.length > 0) {
116
+ console.warn(
117
+ `[daytona] dropping ${dropped.length} non-IPv4 CIDR(s) from ` +
118
+ `${DAYTONA_NETWORK_ALLOW_LIST_ENV} (Daytona networkAllowList is ` +
119
+ `IPv4-only): ${dropped.join(', ')}`,
120
+ );
121
+ }
122
+ return ipv4.length > 0 ? ipv4.join(',') : null;
123
+ }
124
+
100
125
  export function resolveDaytonaSandboxNetworkPolicy(input: {
101
126
  runtimeSchedulerSchema: string | null | undefined;
102
127
  env?: NodeJS.ProcessEnv;
103
128
  }): { networkAllowList: string | null } {
104
129
  const env = input.env ?? process.env;
105
- const networkAllowList = env[DAYTONA_NETWORK_ALLOW_LIST_ENV]?.trim() || null;
130
+ // Daytona's `networkAllowList` accepts IPv4 CIDRs only — it rejects sandbox
131
+ // create outright if any entry is IPv6 ("Invalid IP address ... Must be a
132
+ // valid IPv4 address"). An operator-provisioned list can pick up AAAA-resolved
133
+ // hosts, so drop IPv6 (colon-bearing) entries and keep the IPv4 CIDRs that
134
+ // actually constrain egress. Warn loudly so a dropped entry is visible.
135
+ const networkAllowList = filterIpv4CidrAllowList(
136
+ env[DAYTONA_NETWORK_ALLOW_LIST_ENV]?.trim() || null,
137
+ );
106
138
  if (
107
139
  !networkAllowList &&
108
140
  env.NODE_ENV === 'production' &&
@@ -153,12 +185,13 @@ async function createOneShotDaytonaSandbox(input: {
153
185
  ephemeral: true,
154
186
  autoStopInterval: DAYTONA_AUTO_STOP_INTERVAL_MINUTES,
155
187
  autoArchiveInterval: DAYTONA_AUTO_ARCHIVE_INTERVAL_MINUTES,
156
- ...(networkAllowList
157
- ? {
158
- networkBlockAll: true,
159
- networkAllowList,
160
- }
161
- : {}),
188
+ // A non-empty `networkAllowList` IS the "block all egress except these
189
+ // CIDRs" control; Daytona rejects create when `networkBlockAll: true` is
190
+ // combined with a non-empty allow-list ("networkBlockAll: true cannot be
191
+ // combined with a non-empty networkAllowList or domainAllowList"). Pass
192
+ // the allow-list alone so the egress restriction holds without the
193
+ // contradictory flag.
194
+ ...(networkAllowList ? { networkAllowList } : {}),
162
195
  },
163
196
  { timeout: DAYTONA_CREATE_TIMEOUT_SECONDS },
164
197
  );
package/dist/cli/index.js CHANGED
@@ -623,10 +623,10 @@ var SDK_RELEASE = {
623
623
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
624
624
  // fields shipped in 0.1.153.
625
625
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
626
- version: "0.1.204",
626
+ version: "0.1.205",
627
627
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
628
628
  supportPolicy: {
629
- latest: "0.1.204",
629
+ latest: "0.1.205",
630
630
  minimumSupported: "0.1.53",
631
631
  deprecatedBelow: "0.1.53",
632
632
  commandMinimumSupported: [
@@ -608,10 +608,10 @@ var SDK_RELEASE = {
608
608
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
609
609
  // fields shipped in 0.1.153.
610
610
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
611
- version: "0.1.204",
611
+ version: "0.1.205",
612
612
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
613
613
  supportPolicy: {
614
- latest: "0.1.204",
614
+ latest: "0.1.205",
615
615
  minimumSupported: "0.1.53",
616
616
  deprecatedBelow: "0.1.53",
617
617
  commandMinimumSupported: [
package/dist/index.js CHANGED
@@ -422,10 +422,10 @@ var SDK_RELEASE = {
422
422
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
423
423
  // fields shipped in 0.1.153.
424
424
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
425
- version: "0.1.204",
425
+ version: "0.1.205",
426
426
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
427
427
  supportPolicy: {
428
- latest: "0.1.204",
428
+ latest: "0.1.205",
429
429
  minimumSupported: "0.1.53",
430
430
  deprecatedBelow: "0.1.53",
431
431
  commandMinimumSupported: [
package/dist/index.mjs CHANGED
@@ -352,10 +352,10 @@ var SDK_RELEASE = {
352
352
  // 0.1.154 removes the short-lived generated enrich StepOptions recompute
353
353
  // fields shipped in 0.1.153.
354
354
  // 0.1.175 ships loud `deepline enrich` empty-waterfall reporting.
355
- version: "0.1.204",
355
+ version: "0.1.205",
356
356
  apiContract: "2026-06-dataset-handle-results-hard-cutover",
357
357
  supportPolicy: {
358
- latest: "0.1.204",
358
+ latest: "0.1.205",
359
359
  minimumSupported: "0.1.53",
360
360
  deprecatedBelow: "0.1.53",
361
361
  commandMinimumSupported: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.1.204",
3
+ "version": "0.1.205",
4
4
  "description": "Deepline SDK + CLI — B2B data enrichment powered by durable cloud execution",
5
5
  "license": "MIT",
6
6
  "repository": {