deepline 0.3.155 → 0.3.157

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.
@@ -207,7 +207,9 @@ export type PlayFetchResponse = PlayAuthoringFetchResponse;
207
207
  * webhook: {
208
208
  * hmac: {
209
209
  * algorithm: 'sha256',
210
- * header: 'X-Hub-Signature-256',
210
+ * header: 'Attio-Signature',
211
+ * // Attio sends a bare lowercase hexadecimal digest.
212
+ * signaturePrefix: '',
211
213
  * secretEnv: 'WEBHOOK_SECRET',
212
214
  * },
213
215
  * },
@@ -200,7 +200,7 @@ export const SDK_RELEASE = {
200
200
  // getters keep their established compatibility behavior.
201
201
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
202
202
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
203
- version: '0.3.155',
203
+ version: '0.3.157',
204
204
  updateSummary:
205
205
  'Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.',
206
206
  packageCapabilities: {
@@ -129,6 +129,9 @@ export function monitorErrorNextAction(payload: MonitorErrorPayload): string {
129
129
  if (code === 'monitor_tool_not_found' || code === 'unknown_monitor_tool') {
130
130
  return 'Run `deepline monitors available --json`, choose a returned tool id, then retry with that exact id.';
131
131
  }
132
+ if (code === 'monitor_provider_not_offered') {
133
+ return 'This provider monitor is retired for new deployments. Run `deepline monitors available --json` to choose a supported Deepline Native radar. Existing retired-provider monitors can still be inspected and deleted.';
134
+ }
132
135
  if (code === 'deployed_monitor_not_found' || code === 'monitor_not_found') {
133
136
  return 'Run `deepline monitors list --status all --json`, choose a returned public monitor key, then retry with that key.';
134
137
  }
@@ -149,6 +149,8 @@ export type PlayDeployTaskParams = {
149
149
  playProjectId: string;
150
150
  deployToken: string;
151
151
  appBaseUrl: string;
152
+ /** Pinned by the first enqueue. Missing means the original Fly executor. */
153
+ buildBackend?: 'fly' | 'vercel';
152
154
  };
153
155
 
154
156
  const deployQueueReadyPromises = new Map<string, Promise<void>>();
@@ -1875,6 +1875,10 @@ export async function ensurePostgresSchedulerOnlineAdditiveExpansion(
1875
1875
  options?: Pick<PostgresSchedulerOptions, 'schema'>,
1876
1876
  ): Promise<void> {
1877
1877
  const schema = schemaName(options);
1878
+ // Historical main v36 predates runtime-owned cron cursors. This is an
1879
+ // additive deployment concern, like the receipt-reference expansion below;
1880
+ // requiring it as a baseline would strand a retained Preview namespace.
1881
+ await ensurePostgresSchedulerCronScheduleSchema(client, options);
1878
1882
  await client.query(`
1879
1883
  ALTER TABLE ${tableName('receipts', options)}
1880
1884
  ADD COLUMN IF NOT EXISTS output_ref jsonb
@@ -13291,14 +13295,26 @@ export async function countPostgresSchedulerReceipts(
13291
13295
  client: PostgresSchedulerQueryClient,
13292
13296
  input: {
13293
13297
  runId: string;
13298
+ orgId?: string;
13294
13299
  status: WorkReceiptStatus;
13295
13300
  keyContains?: string | null;
13296
13301
  outputContains?: string | null;
13302
+ receiptKeySha256?: string;
13297
13303
  },
13298
13304
  options?: Pick<PostgresSchedulerOptions, 'schema'>,
13299
13305
  ): Promise<number> {
13300
13306
  const params: unknown[] = [input.runId, input.status];
13301
13307
  const predicates = ['run_id = $1', 'status = $2'];
13308
+ if (input.orgId) {
13309
+ params.push(input.orgId);
13310
+ predicates.push(`org_id = $${params.length}`);
13311
+ }
13312
+ if (input.receiptKeySha256) {
13313
+ params.push(input.receiptKeySha256);
13314
+ predicates.push(
13315
+ `encode(sha256(convert_to(k, 'UTF8')), 'hex') = $${params.length}`,
13316
+ );
13317
+ }
13302
13318
  const keyContains = input.keyContains?.trim();
13303
13319
  if (keyContains) {
13304
13320
  params.push(keyContains);
@@ -706,6 +706,7 @@ export type PlayAuthoringAstBindings = {
706
706
  hmac?: {
707
707
  algorithm?: 'sha256';
708
708
  header?: string;
709
+ signaturePrefix?: string;
709
710
  secretEnv: string;
710
711
  };
711
712
  auth?: PlayStandardWebhookAuth;
@@ -803,6 +804,7 @@ export type PlayAuthoringBindings<TInput = Record<string, unknown>> = {
803
804
  hmac?: {
804
805
  algorithm?: 'sha256';
805
806
  header?: string;
807
+ signaturePrefix?: string;
806
808
  secretEnv: string;
807
809
  };
808
810
  auth?: PlayStandardWebhookAuth;
@@ -1762,6 +1764,24 @@ export const PLAY_AUTHORING_FIELD_REGISTRY = {
1762
1764
  errorMessage:
1763
1765
  'bindings.webhook.hmac.header must be a non-empty static string.',
1764
1766
  },
1767
+ 'bindings.webhook.hmac.signaturePrefix': {
1768
+ schema: Type.String(),
1769
+ fixtures: {
1770
+ valid: '',
1771
+ invalid: { expression: 'signaturePrefix' },
1772
+ absent: undefined,
1773
+ unresolved: { expression: 'signaturePrefix' },
1774
+ edition1: undefined,
1775
+ },
1776
+ referenceType: 'string',
1777
+ required: false,
1778
+ resolution: 'static-required',
1779
+ issueCode: 'play_authoring_webhook_hmac_invalid',
1780
+ description:
1781
+ 'Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.',
1782
+ errorMessage:
1783
+ 'bindings.webhook.hmac.signaturePrefix must be a static string literal.',
1784
+ },
1765
1785
  'bindings.webhook.auth.type': {
1766
1786
  schema: Type.Literal('standard-webhooks'),
1767
1787
  fixtures: {
@@ -3164,7 +3184,7 @@ export const PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
3164
3184
  ` inline?: ${cloudReferenceType('inline')};`,
3165
3185
  ` billing?: { maxCreditsPerRun?: ${cloudReferenceType('billing.maxCreditsPerRun')} };`,
3166
3186
  ` runtime?: { timeout?: ${cloudReferenceType('runtime.timeout')}; size?: ${cloudReferenceType('runtime.size')} };`,
3167
- ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType('bindings.webhook.hmac.algorithm')}; header?: ${cloudReferenceType('bindings.webhook.hmac.header')}; secretEnv: ${cloudReferenceType('bindings.webhook.hmac.secretEnv')} }; auth?: { type: ${cloudReferenceType('bindings.webhook.auth.type')}; headerFamily: ${cloudReferenceType('bindings.webhook.auth.headerFamily')}; signingSecrets: readonly ${cloudReferenceType('bindings.webhook.auth.signingSecrets[]')}[]; toleranceSeconds?: ${cloudReferenceType('bindings.webhook.auth.toleranceSeconds')} } };`,
3187
+ ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType('bindings.webhook.hmac.algorithm')}; header?: ${cloudReferenceType('bindings.webhook.hmac.header')}; signaturePrefix?: ${cloudReferenceType('bindings.webhook.hmac.signaturePrefix')}; secretEnv: ${cloudReferenceType('bindings.webhook.hmac.secretEnv')} }; auth?: { type: ${cloudReferenceType('bindings.webhook.auth.type')}; headerFamily: ${cloudReferenceType('bindings.webhook.auth.headerFamily')}; signingSecrets: readonly ${cloudReferenceType('bindings.webhook.auth.signingSecrets[]')}[]; toleranceSeconds?: ${cloudReferenceType('bindings.webhook.auth.toleranceSeconds')} } };`,
3168
3188
  ` cron?: { schedule: ${cloudReferenceType('bindings.cron.schedule')}; timezone?: ${cloudReferenceType('bindings.cron.timezone')}; input?: PlayCronInput<TInput> };`,
3169
3189
  ' sqlListeners?: readonly SqlListenerDeclaration[];',
3170
3190
  ` secrets?: readonly ${cloudReferenceType('bindings.secrets[]')}[];`,
@@ -130,7 +130,8 @@ export type PlayBundlingAdapter = {
130
130
  */
131
131
  sourceIdentityRoot?: string;
132
132
  nodeModulesDir: string;
133
- cacheDir?: string;
133
+ /** null disables disk caching (for ephemeral serverless build invocations). */
134
+ cacheDir?: string | null;
134
135
  sdkSourceRoot: string;
135
136
  sdkPackageJson: string;
136
137
  sdkEntryFile: string;
@@ -2159,6 +2160,7 @@ async function readArtifactCache(
2159
2160
  artifactKind: PlayArtifactKind,
2160
2161
  adapter: PlayBundlingAdapter,
2161
2162
  ): Promise<PlayBundleArtifact | null> {
2163
+ if (adapter.cacheDir === null) return null;
2162
2164
  try {
2163
2165
  const serialized = await readFile(
2164
2166
  /* turbopackIgnore: true */ artifactCachePath(
@@ -2178,6 +2180,7 @@ async function writeArtifactCache(
2178
2180
  artifact: PlayBundleArtifact,
2179
2181
  adapter: PlayBundlingAdapter,
2180
2182
  ): Promise<void> {
2183
+ if (adapter.cacheDir === null) return;
2181
2184
  const cacheDir = adapter.cacheDir ?? PLAY_ARTIFACT_CACHE_DIR;
2182
2185
  await mkdir(/* turbopackIgnore: true */ cacheDir, { recursive: true });
2183
2186
  await writeFile(
@@ -1,6 +1,7 @@
1
1
  import type { PlayBundleArtifact } from '../artifact-types';
2
2
  import type { PlayCompilerManifest } from '../compiler-manifest';
3
3
  import type { PlayDeploymentStatus } from '../deployment-status';
4
+ import { TERMINAL_PLAY_DEPLOYMENT_STATUSES } from '../deployment-status';
4
5
  import type {
5
6
  SerializedPlayDeployment,
6
7
  SerializedPlayProject,
@@ -63,6 +64,13 @@ export type RegisteredArtifact = {
63
64
  [key: string]: unknown;
64
65
  };
65
66
 
67
+ /** The queue result never includes source, artifacts, or per-play diagnostics. */
68
+ export type DeploymentBuildResult = {
69
+ deploymentId: string;
70
+ finalStatus: PlayDeploymentStatus;
71
+ plays: number;
72
+ };
73
+
66
74
  export type DeploymentPlayState = {
67
75
  name: string;
68
76
  exists: boolean;
@@ -97,12 +105,15 @@ export class DeployApiClient {
97
105
  method: 'GET' | 'POST';
98
106
  path: string;
99
107
  body?: unknown;
108
+ signal?: AbortSignal;
100
109
  }): Promise<T> {
101
110
  const doFetch = this.config.fetchImpl ?? fetch;
102
111
  const response = await doFetch(
103
112
  `${this.config.appBaseUrl.replace(/\/$/, '')}${input.path}`,
104
113
  {
105
114
  method: input.method,
115
+ signal: input.signal,
116
+ redirect: 'error',
106
117
  headers: {
107
118
  Authorization: `Bearer ${this.config.deployToken}`,
108
119
  ...(input.body !== undefined
@@ -139,6 +150,26 @@ export class DeployApiClient {
139
150
  return `/api/v2/deployments/${this.config.deploymentId}${suffix}`;
140
151
  }
141
152
 
153
+ async build(signal: AbortSignal): Promise<DeploymentBuildResult> {
154
+ const result = await this.request<DeploymentBuildResult>({
155
+ method: 'POST',
156
+ path: this.deploymentPath('/build'),
157
+ signal,
158
+ });
159
+ if (
160
+ !result ||
161
+ result.deploymentId !== this.config.deploymentId ||
162
+ !TERMINAL_PLAY_DEPLOYMENT_STATUSES.has(result.finalStatus) ||
163
+ !Number.isSafeInteger(result.plays) ||
164
+ result.plays < 0
165
+ ) {
166
+ throw new Error(
167
+ 'Deployment build returned an invalid completion result.',
168
+ );
169
+ }
170
+ return result;
171
+ }
172
+
142
173
  getDeployment(): Promise<{
143
174
  deployment: SerializedPlayDeployment;
144
175
  project: SerializedPlayProject;
@@ -1,5 +1,5 @@
1
1
  import { join } from 'node:path';
2
- import { rm } from 'node:fs/promises';
2
+ import { mkdir, mkdtemp, rm } from 'node:fs/promises';
3
3
  import type { PlayCompilerManifest } from '../compiler-manifest';
4
4
  import {
5
5
  DeployApiClient,
@@ -473,7 +473,10 @@ export async function runDeployment(
473
473
  };
474
474
  };
475
475
 
476
- const workDir = join(hooks.workRoot, `deploy-${params.deploymentId}`);
476
+ // Fluid compute can serve overlapping attempts in the same process. A retry
477
+ // must never remove another attempt's checkout during tarball extraction.
478
+ await mkdir(hooks.workRoot, { recursive: true });
479
+ const workDir = await mkdtemp(join(hooks.workRoot, 'deploy-'));
477
480
  // Check writes are customer-visible; give transient host failures bounded
478
481
  // retries before any caller decides to swallow or fail.
479
482
  const postCheck = async (
package/dist/cli/index.js CHANGED
@@ -3051,7 +3051,7 @@ var SDK_RELEASE = {
3051
3051
  // getters keep their established compatibility behavior.
3052
3052
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3053
3053
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3054
- version: "0.3.155",
3054
+ version: "0.3.157",
3055
3055
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
3056
3056
  packageCapabilities: {
3057
3057
  updatePreferences: 1
@@ -17521,6 +17521,22 @@ var PLAY_AUTHORING_FIELD_REGISTRY = {
17521
17521
  description: "HTTP header containing the webhook signature.",
17522
17522
  errorMessage: "bindings.webhook.hmac.header must be a non-empty static string."
17523
17523
  },
17524
+ "bindings.webhook.hmac.signaturePrefix": {
17525
+ schema: import_typebox.Type.String(),
17526
+ fixtures: {
17527
+ valid: "",
17528
+ invalid: { expression: "signaturePrefix" },
17529
+ absent: void 0,
17530
+ unresolved: { expression: "signaturePrefix" },
17531
+ edition1: void 0
17532
+ },
17533
+ referenceType: "string",
17534
+ required: false,
17535
+ resolution: "static-required",
17536
+ issueCode: "play_authoring_webhook_hmac_invalid",
17537
+ description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.",
17538
+ errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal."
17539
+ },
17524
17540
  "bindings.webhook.auth.type": {
17525
17541
  schema: import_typebox.Type.Literal("standard-webhooks"),
17526
17542
  fixtures: {
@@ -18725,7 +18741,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
18725
18741
  ` inline?: ${cloudReferenceType("inline")};`,
18726
18742
  ` billing?: { maxCreditsPerRun?: ${cloudReferenceType("billing.maxCreditsPerRun")} };`,
18727
18743
  ` runtime?: { timeout?: ${cloudReferenceType("runtime.timeout")}; size?: ${cloudReferenceType("runtime.size")} };`,
18728
- ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
18744
+ ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; signaturePrefix?: ${cloudReferenceType("bindings.webhook.hmac.signaturePrefix")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
18729
18745
  ` cron?: { schedule: ${cloudReferenceType("bindings.cron.schedule")}; timezone?: ${cloudReferenceType("bindings.cron.timezone")}; input?: PlayCronInput<TInput> };`,
18730
18746
  " sqlListeners?: readonly SqlListenerDeclaration[];",
18731
18747
  ` secrets?: readonly ${cloudReferenceType("bindings.secrets[]")}[];`,
@@ -20637,6 +20653,16 @@ var import_node_path16 = require("path");
20637
20653
  var import_node_path15 = require("path");
20638
20654
  var import_promises7 = require("fs/promises");
20639
20655
 
20656
+ // ../plays/deployment-status.ts
20657
+ var TERMINAL_PLAY_DEPLOYMENT_STATUSES = /* @__PURE__ */ new Set([
20658
+ "succeeded",
20659
+ "succeeded_with_warnings",
20660
+ "failed",
20661
+ "reconcile_failed",
20662
+ "cancelled",
20663
+ "superseded"
20664
+ ]);
20665
+
20640
20666
  // ../plays/deploy/api-client.ts
20641
20667
  var REGISTER_MAX_BATCH_COUNT = 3;
20642
20668
  var REGISTER_MAX_BATCH_BYTES = 25e5;
@@ -20662,6 +20688,8 @@ var DeployApiClient = class {
20662
20688
  `${this.config.appBaseUrl.replace(/\/$/, "")}${input2.path}`,
20663
20689
  {
20664
20690
  method: input2.method,
20691
+ signal: input2.signal,
20692
+ redirect: "error",
20665
20693
  headers: {
20666
20694
  Authorization: `Bearer ${this.config.deployToken}`,
20667
20695
  ...input2.body !== void 0 ? { "Content-Type": "application/json" } : {}
@@ -20691,6 +20719,19 @@ var DeployApiClient = class {
20691
20719
  deploymentPath(suffix = "") {
20692
20720
  return `/api/v2/deployments/${this.config.deploymentId}${suffix}`;
20693
20721
  }
20722
+ async build(signal) {
20723
+ const result = await this.request({
20724
+ method: "POST",
20725
+ path: this.deploymentPath("/build"),
20726
+ signal
20727
+ });
20728
+ if (!result || result.deploymentId !== this.config.deploymentId || !TERMINAL_PLAY_DEPLOYMENT_STATUSES.has(result.finalStatus) || !Number.isSafeInteger(result.plays) || result.plays < 0) {
20729
+ throw new Error(
20730
+ "Deployment build returned an invalid completion result."
20731
+ );
20732
+ }
20733
+ return result;
20734
+ }
20694
20735
  getDeployment() {
20695
20736
  return this.request({
20696
20737
  method: "GET",
@@ -21143,7 +21184,8 @@ async function runDeployment(params, hooks) {
21143
21184
  checkRunId: checkRun?.checkRunId
21144
21185
  };
21145
21186
  };
21146
- const workDir = (0, import_node_path15.join)(hooks.workRoot, `deploy-${params.deploymentId}`);
21187
+ await (0, import_promises7.mkdir)(hooks.workRoot, { recursive: true });
21188
+ const workDir = await (0, import_promises7.mkdtemp)((0, import_node_path15.join)(hooks.workRoot, "deploy-"));
21147
21189
  const postCheck = async (postCheckOnce, input2) => {
21148
21190
  let lastError;
21149
21191
  for (let attempt = 0; ; attempt += 1) {
@@ -1950,7 +1950,7 @@ function configureProxyFromEnv() {
1950
1950
  configureProxyFromEnv();
1951
1951
 
1952
1952
  // src/cli/index.ts
1953
- import { mkdtemp as mkdtemp3, rm as rm4, writeFile as writeFile6 } from "fs/promises";
1953
+ import { mkdtemp as mkdtemp4, rm as rm4, writeFile as writeFile6 } from "fs/promises";
1954
1954
  import { join as join27 } from "path";
1955
1955
  import { tmpdir as tmpdir7 } from "os";
1956
1956
  import { Command as Command5 } from "commander";
@@ -3046,7 +3046,7 @@ var SDK_RELEASE = {
3046
3046
  // getters keep their established compatibility behavior.
3047
3047
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
3048
3048
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
3049
- version: "0.3.155",
3049
+ version: "0.3.157",
3050
3050
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
3051
3051
  packageCapabilities: {
3052
3052
  updatePreferences: 1
@@ -15539,8 +15539,8 @@ Examples:
15539
15539
  import {
15540
15540
  copyFile,
15541
15541
  lstat as lstat2,
15542
- mkdir as mkdir4,
15543
- mkdtemp as mkdtemp2,
15542
+ mkdir as mkdir5,
15543
+ mkdtemp as mkdtemp3,
15544
15544
  readFile as readFile4,
15545
15545
  realpath as realpath4,
15546
15546
  rename,
@@ -17586,6 +17586,22 @@ var PLAY_AUTHORING_FIELD_REGISTRY = {
17586
17586
  description: "HTTP header containing the webhook signature.",
17587
17587
  errorMessage: "bindings.webhook.hmac.header must be a non-empty static string."
17588
17588
  },
17589
+ "bindings.webhook.hmac.signaturePrefix": {
17590
+ schema: Type.String(),
17591
+ fixtures: {
17592
+ valid: "",
17593
+ invalid: { expression: "signaturePrefix" },
17594
+ absent: void 0,
17595
+ unresolved: { expression: "signaturePrefix" },
17596
+ edition1: void 0
17597
+ },
17598
+ referenceType: "string",
17599
+ required: false,
17600
+ resolution: "static-required",
17601
+ issueCode: "play_authoring_webhook_hmac_invalid",
17602
+ description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.",
17603
+ errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal."
17604
+ },
17589
17605
  "bindings.webhook.auth.type": {
17590
17606
  schema: Type.Literal("standard-webhooks"),
17591
17607
  fixtures: {
@@ -18790,7 +18806,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
18790
18806
  ` inline?: ${cloudReferenceType("inline")};`,
18791
18807
  ` billing?: { maxCreditsPerRun?: ${cloudReferenceType("billing.maxCreditsPerRun")} };`,
18792
18808
  ` runtime?: { timeout?: ${cloudReferenceType("runtime.timeout")}; size?: ${cloudReferenceType("runtime.size")} };`,
18793
- ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
18809
+ ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; signaturePrefix?: ${cloudReferenceType("bindings.webhook.hmac.signaturePrefix")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
18794
18810
  ` cron?: { schedule: ${cloudReferenceType("bindings.cron.schedule")}; timezone?: ${cloudReferenceType("bindings.cron.timezone")}; input?: PlayCronInput<TInput> };`,
18795
18811
  " sqlListeners?: readonly SqlListenerDeclaration[];",
18796
18812
  ` secrets?: readonly ${cloudReferenceType("bindings.secrets[]")}[];`,
@@ -20701,13 +20717,23 @@ function normalizeFixtureScopeValue(value, maxLength) {
20701
20717
 
20702
20718
  // src/cli/commands/plays-deploy.ts
20703
20719
  import { randomUUID as randomUUID3 } from "crypto";
20704
- import { mkdtemp, realpath as realpath3, rm as rm2 } from "fs/promises";
20720
+ import { mkdtemp as mkdtemp2, realpath as realpath3, rm as rm2 } from "fs/promises";
20705
20721
  import { tmpdir as tmpdir4 } from "os";
20706
20722
  import { join as join12, resolve as resolve11 } from "path";
20707
20723
 
20708
20724
  // ../plays/deploy/run-deployment.ts
20709
20725
  import { join as join11 } from "path";
20710
- import { rm } from "fs/promises";
20726
+ import { mkdir as mkdir4, mkdtemp, rm } from "fs/promises";
20727
+
20728
+ // ../plays/deployment-status.ts
20729
+ var TERMINAL_PLAY_DEPLOYMENT_STATUSES = /* @__PURE__ */ new Set([
20730
+ "succeeded",
20731
+ "succeeded_with_warnings",
20732
+ "failed",
20733
+ "reconcile_failed",
20734
+ "cancelled",
20735
+ "superseded"
20736
+ ]);
20711
20737
 
20712
20738
  // ../plays/deploy/api-client.ts
20713
20739
  var REGISTER_MAX_BATCH_COUNT = 3;
@@ -20734,6 +20760,8 @@ var DeployApiClient = class {
20734
20760
  `${this.config.appBaseUrl.replace(/\/$/, "")}${input2.path}`,
20735
20761
  {
20736
20762
  method: input2.method,
20763
+ signal: input2.signal,
20764
+ redirect: "error",
20737
20765
  headers: {
20738
20766
  Authorization: `Bearer ${this.config.deployToken}`,
20739
20767
  ...input2.body !== void 0 ? { "Content-Type": "application/json" } : {}
@@ -20763,6 +20791,19 @@ var DeployApiClient = class {
20763
20791
  deploymentPath(suffix = "") {
20764
20792
  return `/api/v2/deployments/${this.config.deploymentId}${suffix}`;
20765
20793
  }
20794
+ async build(signal) {
20795
+ const result = await this.request({
20796
+ method: "POST",
20797
+ path: this.deploymentPath("/build"),
20798
+ signal
20799
+ });
20800
+ if (!result || result.deploymentId !== this.config.deploymentId || !TERMINAL_PLAY_DEPLOYMENT_STATUSES.has(result.finalStatus) || !Number.isSafeInteger(result.plays) || result.plays < 0) {
20801
+ throw new Error(
20802
+ "Deployment build returned an invalid completion result."
20803
+ );
20804
+ }
20805
+ return result;
20806
+ }
20766
20807
  getDeployment() {
20767
20808
  return this.request({
20768
20809
  method: "GET",
@@ -21215,7 +21256,8 @@ async function runDeployment(params, hooks) {
21215
21256
  checkRunId: checkRun?.checkRunId
21216
21257
  };
21217
21258
  };
21218
- const workDir = join11(hooks.workRoot, `deploy-${params.deploymentId}`);
21259
+ await mkdir4(hooks.workRoot, { recursive: true });
21260
+ const workDir = await mkdtemp(join11(hooks.workRoot, "deploy-"));
21219
21261
  const postCheck = async (postCheckOnce, input2) => {
21220
21262
  let lastError;
21221
21263
  for (let attempt = 0; ; attempt += 1) {
@@ -21840,7 +21882,7 @@ async function handlePlaysDeploy(directory, options) {
21840
21882
  ...options.commit ? { commit: options.commit } : {}
21841
21883
  });
21842
21884
  const { bundleDeployPlayFile } = await loadPlayBundler();
21843
- const workRoot = await mkdtemp(join12(tmpdir4(), "deepline-deploy-"));
21885
+ const workRoot = await mkdtemp2(join12(tmpdir4(), "deepline-deploy-"));
21844
21886
  const consoleInfo = console.info;
21845
21887
  console.info = console.error;
21846
21888
  try {
@@ -35136,7 +35178,7 @@ async function persistEnrichFailureReport(input2) {
35136
35178
  }
35137
35179
  const stateDir = join14(homedir6(), ".local", "deepline", "runtime", "state");
35138
35180
  const reportPrefix = input2.jobs.length > 0 ? "run-block-failures" : "enrich-issues";
35139
- await mkdir4(stateDir, { recursive: true });
35181
+ await mkdir5(stateDir, { recursive: true });
35140
35182
  const reportPath = join14(
35141
35183
  stateDir,
35142
35184
  `${reportPrefix}-${Math.floor(Date.now() / 1e3)}-${process.pid}.json`
@@ -36066,7 +36108,7 @@ function registerEnrichCommand(program) {
36066
36108
  sdkEnrichTelemetryCompleted = true;
36067
36109
  await completeSdkEnrichTelemetry(sdkEnrichTelemetry, input2);
36068
36110
  };
36069
- const tempDir = await mkdtemp2(join14(tmpdir5(), "deepline-enrich-play-"));
36111
+ const tempDir = await mkdtemp3(join14(tmpdir5(), "deepline-enrich-play-"));
36070
36112
  await emitSdkEnrichTelemetry(sdkEnrichTelemetry, "enrich_started");
36071
36113
  const tempPlay = join14(tempDir, "deepline-enrich.play.ts");
36072
36114
  let inPlaceTempDir = null;
@@ -36095,7 +36137,7 @@ function registerEnrichCommand(program) {
36095
36137
  if (inPlaceTempDir) {
36096
36138
  await rm3(inPlaceTempDir, { recursive: true, force: true });
36097
36139
  }
36098
- inPlaceTempDir = await mkdtemp2(
36140
+ inPlaceTempDir = await mkdtemp3(
36099
36141
  join14(
36100
36142
  dirname11(inPlaceCommitOutputPath ?? resolve13(inputCsv)),
36101
36143
  ".deepline-enrich-in-place-"
@@ -50382,7 +50424,7 @@ Examples:
50382
50424
  }
50383
50425
 
50384
50426
  // src/cli/commands/workflow.ts
50385
- import { mkdir as mkdir5, readFile as readFile6, writeFile as writeFile5 } from "fs/promises";
50427
+ import { mkdir as mkdir6, readFile as readFile6, writeFile as writeFile5 } from "fs/promises";
50386
50428
  import { dirname as dirname21, join as join26, resolve as resolve21 } from "path";
50387
50429
 
50388
50430
  // src/cli/workflow-to-play.ts
@@ -50635,7 +50677,7 @@ async function transformOne(api, workflowId, outDir, publish) {
50635
50677
  { workflowName: workflow.name, version: revision.version }
50636
50678
  );
50637
50679
  const file = join26(resolve21(outDir), `${compiled.playName}.play.ts`);
50638
- await mkdir5(dirname21(file), { recursive: true });
50680
+ await mkdir6(dirname21(file), { recursive: true });
50639
50681
  await writeFile5(file, compiled.sourceCode, "utf8");
50640
50682
  let published = false;
50641
50683
  if (publish) {
@@ -51175,7 +51217,7 @@ function topLevelCommandKnown(program, commandName) {
51175
51217
  );
51176
51218
  }
51177
51219
  async function runPlayRunnerHealthCheck() {
51178
- const dir = await mkdtemp3(join27(tmpdir7(), "deepline-health-play-"));
51220
+ const dir = await mkdtemp4(join27(tmpdir7(), "deepline-health-play-"));
51179
51221
  const file = join27(dir, "health-check.play.ts");
51180
51222
  try {
51181
51223
  await writeFile6(
@@ -793,6 +793,7 @@ type PlayAuthoringAstBindings = {
793
793
  hmac?: {
794
794
  algorithm?: 'sha256';
795
795
  header?: string;
796
+ signaturePrefix?: string;
796
797
  secretEnv: string;
797
798
  };
798
799
  auth?: PlayStandardWebhookAuth;
@@ -843,6 +844,7 @@ type PlayAuthoringBindings<TInput = Record<string, unknown>> = {
843
844
  hmac?: {
844
845
  algorithm?: 'sha256';
845
846
  header?: string;
847
+ signaturePrefix?: string;
846
848
  secretEnv: string;
847
849
  };
848
850
  auth?: PlayStandardWebhookAuth;
@@ -1444,6 +1446,26 @@ declare const PLAY_AUTHORING_FIELD_REGISTRY: {
1444
1446
  readonly description: "HTTP header containing the webhook signature.";
1445
1447
  readonly errorMessage: "bindings.webhook.hmac.header must be a non-empty static string.";
1446
1448
  };
1449
+ readonly 'bindings.webhook.hmac.signaturePrefix': {
1450
+ readonly schema: _sinclair_typebox.TString;
1451
+ readonly fixtures: {
1452
+ readonly valid: "";
1453
+ readonly invalid: {
1454
+ readonly expression: "signaturePrefix";
1455
+ };
1456
+ readonly absent: undefined;
1457
+ readonly unresolved: {
1458
+ readonly expression: "signaturePrefix";
1459
+ };
1460
+ readonly edition1: undefined;
1461
+ };
1462
+ readonly referenceType: "string";
1463
+ readonly required: false;
1464
+ readonly resolution: "static-required";
1465
+ readonly issueCode: "play_authoring_webhook_hmac_invalid";
1466
+ readonly description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.";
1467
+ readonly errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal.";
1468
+ };
1447
1469
  readonly 'bindings.webhook.auth.type': {
1448
1470
  readonly schema: _sinclair_typebox.TLiteral<"standard-webhooks">;
1449
1471
  readonly fixtures: {
@@ -793,6 +793,7 @@ type PlayAuthoringAstBindings = {
793
793
  hmac?: {
794
794
  algorithm?: 'sha256';
795
795
  header?: string;
796
+ signaturePrefix?: string;
796
797
  secretEnv: string;
797
798
  };
798
799
  auth?: PlayStandardWebhookAuth;
@@ -843,6 +844,7 @@ type PlayAuthoringBindings<TInput = Record<string, unknown>> = {
843
844
  hmac?: {
844
845
  algorithm?: 'sha256';
845
846
  header?: string;
847
+ signaturePrefix?: string;
846
848
  secretEnv: string;
847
849
  };
848
850
  auth?: PlayStandardWebhookAuth;
@@ -1444,6 +1446,26 @@ declare const PLAY_AUTHORING_FIELD_REGISTRY: {
1444
1446
  readonly description: "HTTP header containing the webhook signature.";
1445
1447
  readonly errorMessage: "bindings.webhook.hmac.header must be a non-empty static string.";
1446
1448
  };
1449
+ readonly 'bindings.webhook.hmac.signaturePrefix': {
1450
+ readonly schema: _sinclair_typebox.TString;
1451
+ readonly fixtures: {
1452
+ readonly valid: "";
1453
+ readonly invalid: {
1454
+ readonly expression: "signaturePrefix";
1455
+ };
1456
+ readonly absent: undefined;
1457
+ readonly unresolved: {
1458
+ readonly expression: "signaturePrefix";
1459
+ };
1460
+ readonly edition1: undefined;
1461
+ };
1462
+ readonly referenceType: "string";
1463
+ readonly required: false;
1464
+ readonly resolution: "static-required";
1465
+ readonly issueCode: "play_authoring_webhook_hmac_invalid";
1466
+ readonly description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.";
1467
+ readonly errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal.";
1468
+ };
1447
1469
  readonly 'bindings.webhook.auth.type': {
1448
1470
  readonly schema: _sinclair_typebox.TLiteral<"standard-webhooks">;
1449
1471
  readonly fixtures: {
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-BJBNPTWt.mjs';
3
- export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-BJBNPTWt.mjs';
2
+ import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-4bYusxBr.mjs';
3
+ export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-4bYusxBr.mjs';
4
4
  import { MonitorFleetDefinition } from './monitor-fleet-contract.mjs';
5
5
  export { AdmittedMonitorFleetAuthoringContract, MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG, MONITOR_FLEET_AUTHORING_CONTRACT_EDITION, MONITOR_FLEET_DOCUMENTATION, MONITOR_FLEET_FRONTIER_MAX_ROWS, MONITOR_FLEET_MAX_MEMBERS, MonitorFleetAuthoringContractEdition, MonitorFleetAuthoringContractResult, MonitorFleetColumn, MonitorFleetContractIssue, MonitorFleetExpression, MonitorFleetTemplate, admitMonitorFleetAuthoringContract, defineMonitorFleet, fleetColumn, fleetKey, lintMonitorFleetInput, validateMonitorFleetDefinition } from './monitor-fleet-contract.mjs';
6
6
  export { BatchMonitorInput, MonitorInputIssue, MonitorSpec as MonitorInputSpec, lintMonitorBatchInput, lintMonitorSpecTemplate, renderMonitorSpecTemplate } from './monitor-input-contract.mjs';
@@ -5678,7 +5678,9 @@ type PlayFetchResponse = PlayAuthoringFetchResponse;
5678
5678
  * webhook: {
5679
5679
  * hmac: {
5680
5680
  * algorithm: 'sha256',
5681
- * header: 'X-Hub-Signature-256',
5681
+ * header: 'Attio-Signature',
5682
+ * // Attio sends a bare lowercase hexadecimal digest.
5683
+ * signaturePrefix: '',
5682
5684
  * secretEnv: 'WEBHOOK_SECRET',
5683
5685
  * },
5684
5686
  * },
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-BJBNPTWt.js';
3
- export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-BJBNPTWt.js';
2
+ import { c as PlayCompilerManifest, T as ToolResultBilling, A as AsyncPlayRunRef$1, i as PlayAuthoringColumnMap, j as PlayAuthoringColumnResolver, k as PlayAuthoringRuntimeContext, l as PlayAuthoringConditionalStepResolver, m as PlayAuthoringCsvInput, n as PlayAuthoringCsvOptions, o as PlayAuthoringDatasetBuilder, p as PlayAuthoringDatasetColumnDefinition, q as PlayAuthoringDatasetColumnRunInput, r as ToolExecuteResult, s as PlayAuthoringReferenceLike, t as PlayReturnObject$1, u as PlayAuthoringDefineConfig, v as PlayAuthoringDefinedPlay, w as PlayAuthoringFetchOptions, x as PlayAuthoringFileInput, y as PlayAuthoringAsyncCallOptions, z as PlayAuthoringBindings, B as PlayAuthoringCallExecution, C as PlayAuthoringCallOptions, D as PlayAuthoringFetchResponse, E as PlayAuthoringInputContract, F as PlayRunId$1, G as PlayAuthoringStepProgramStep, H as PlayAuthoringRuntimeStepOptions, I as PlaySqlListenerDeclaration, J as PlaySqlListenerEvent, K as PlaySqlListenerOperation, L as PlaySqlQuery, M as PlayAuthoringStepOptions, N as PlayAuthoringStepProgram, O as PlayAuthoringStepProgramResolver, Q as PlayAuthoringStepResolver, R as PlayToolExecutionRequest, S as PlayAuthoringStepProgramOptions, U as DeeplineError, V as ToolExecutionError, W as ToolExecutionErrorOptions } from './compiler-manifest-4bYusxBr.js';
3
+ export { X as CtxFetchHttpError, Y as DEEPLINE_EXTRACTOR_TARGETS, Z as DEEPLINE_EXTRACTOR_TARGET_DEFINITIONS, _ as DeeplineEmailStatusGetterValue, $ as DeeplineExtractorTarget, a0 as DeeplineGetterValue, a1 as DeeplineGetterValueMap, a2 as JOB_CHANGE_STATUS_VALUES, a3 as JobChangeStatus, a4 as PHONE_STATUS_VALUES, a5 as PhoneStatus, a6 as PlayDataset, a7 as PlayDatasetInput, a8 as PreviousCell, a9 as ProviderTransientError, aa as ProviderTransientErrorCategory, ab as ProviderUnavailableError, ac as ProviderUnavailableReason, ad as ToolExecutionErrorCategory, ae as ToolExecutionErrorOrigin, af as ToolExecutionFailureV1, ag as ToolExecutionNetworkKind, ah as ToolExecutionNetworkScope, ai as ToolExecutionPublicDetails, aj as getProviderUnavailableReason, ak as isDeeplineExtractorTarget, al as isProviderUnavailable, am as isProviderWaterfallUnavailableError } from './compiler-manifest-4bYusxBr.js';
4
4
  import { MonitorFleetDefinition } from './monitor-fleet-contract.js';
5
5
  export { AdmittedMonitorFleetAuthoringContract, MONITOR_FLEET_AUTHORING_CONTRACT_CHANGELOG, MONITOR_FLEET_AUTHORING_CONTRACT_EDITION, MONITOR_FLEET_DOCUMENTATION, MONITOR_FLEET_FRONTIER_MAX_ROWS, MONITOR_FLEET_MAX_MEMBERS, MonitorFleetAuthoringContractEdition, MonitorFleetAuthoringContractResult, MonitorFleetColumn, MonitorFleetContractIssue, MonitorFleetExpression, MonitorFleetTemplate, admitMonitorFleetAuthoringContract, defineMonitorFleet, fleetColumn, fleetKey, lintMonitorFleetInput, validateMonitorFleetDefinition } from './monitor-fleet-contract.js';
6
6
  export { BatchMonitorInput, MonitorInputIssue, MonitorSpec as MonitorInputSpec, lintMonitorBatchInput, lintMonitorSpecTemplate, renderMonitorSpecTemplate } from './monitor-input-contract.js';
@@ -5678,7 +5678,9 @@ type PlayFetchResponse = PlayAuthoringFetchResponse;
5678
5678
  * webhook: {
5679
5679
  * hmac: {
5680
5680
  * algorithm: 'sha256',
5681
- * header: 'X-Hub-Signature-256',
5681
+ * header: 'Attio-Signature',
5682
+ * // Attio sends a bare lowercase hexadecimal digest.
5683
+ * signaturePrefix: '',
5682
5684
  * secretEnv: 'WEBHOOK_SECRET',
5683
5685
  * },
5684
5686
  * },
package/dist/index.js CHANGED
@@ -864,7 +864,7 @@ var SDK_RELEASE = {
864
864
  // getters keep their established compatibility behavior.
865
865
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
866
866
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
867
- version: "0.3.155",
867
+ version: "0.3.157",
868
868
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
869
869
  packageCapabilities: {
870
870
  updatePreferences: 1
@@ -9979,6 +9979,22 @@ var PLAY_AUTHORING_FIELD_REGISTRY = {
9979
9979
  description: "HTTP header containing the webhook signature.",
9980
9980
  errorMessage: "bindings.webhook.hmac.header must be a non-empty static string."
9981
9981
  },
9982
+ "bindings.webhook.hmac.signaturePrefix": {
9983
+ schema: import_typebox.Type.String(),
9984
+ fixtures: {
9985
+ valid: "",
9986
+ invalid: { expression: "signaturePrefix" },
9987
+ absent: void 0,
9988
+ unresolved: { expression: "signaturePrefix" },
9989
+ edition1: void 0
9990
+ },
9991
+ referenceType: "string",
9992
+ required: false,
9993
+ resolution: "static-required",
9994
+ issueCode: "play_authoring_webhook_hmac_invalid",
9995
+ description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.",
9996
+ errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal."
9997
+ },
9982
9998
  "bindings.webhook.auth.type": {
9983
9999
  schema: import_typebox.Type.Literal("standard-webhooks"),
9984
10000
  fixtures: {
@@ -11183,7 +11199,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
11183
11199
  ` inline?: ${cloudReferenceType("inline")};`,
11184
11200
  ` billing?: { maxCreditsPerRun?: ${cloudReferenceType("billing.maxCreditsPerRun")} };`,
11185
11201
  ` runtime?: { timeout?: ${cloudReferenceType("runtime.timeout")}; size?: ${cloudReferenceType("runtime.size")} };`,
11186
- ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
11202
+ ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; signaturePrefix?: ${cloudReferenceType("bindings.webhook.hmac.signaturePrefix")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
11187
11203
  ` cron?: { schedule: ${cloudReferenceType("bindings.cron.schedule")}; timezone?: ${cloudReferenceType("bindings.cron.timezone")}; input?: PlayCronInput<TInput> };`,
11188
11204
  " sqlListeners?: readonly SqlListenerDeclaration[];",
11189
11205
  ` secrets?: readonly ${cloudReferenceType("bindings.secrets[]")}[];`,
package/dist/index.mjs CHANGED
@@ -768,7 +768,7 @@ var SDK_RELEASE = {
768
768
  // getters keep their established compatibility behavior.
769
769
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
770
770
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
771
- version: "0.3.155",
771
+ version: "0.3.157",
772
772
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
773
773
  packageCapabilities: {
774
774
  updatePreferences: 1
@@ -9883,6 +9883,22 @@ var PLAY_AUTHORING_FIELD_REGISTRY = {
9883
9883
  description: "HTTP header containing the webhook signature.",
9884
9884
  errorMessage: "bindings.webhook.hmac.header must be a non-empty static string."
9885
9885
  },
9886
+ "bindings.webhook.hmac.signaturePrefix": {
9887
+ schema: Type.String(),
9888
+ fixtures: {
9889
+ valid: "",
9890
+ invalid: { expression: "signaturePrefix" },
9891
+ absent: void 0,
9892
+ unresolved: { expression: "signaturePrefix" },
9893
+ edition1: void 0
9894
+ },
9895
+ referenceType: "string",
9896
+ required: false,
9897
+ resolution: "static-required",
9898
+ issueCode: "play_authoring_webhook_hmac_invalid",
9899
+ description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.",
9900
+ errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal."
9901
+ },
9886
9902
  "bindings.webhook.auth.type": {
9887
9903
  schema: Type.Literal("standard-webhooks"),
9888
9904
  fixtures: {
@@ -11087,7 +11103,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
11087
11103
  ` inline?: ${cloudReferenceType("inline")};`,
11088
11104
  ` billing?: { maxCreditsPerRun?: ${cloudReferenceType("billing.maxCreditsPerRun")} };`,
11089
11105
  ` runtime?: { timeout?: ${cloudReferenceType("runtime.timeout")}; size?: ${cloudReferenceType("runtime.size")} };`,
11090
- ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
11106
+ ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; signaturePrefix?: ${cloudReferenceType("bindings.webhook.hmac.signaturePrefix")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
11091
11107
  ` cron?: { schedule: ${cloudReferenceType("bindings.cron.schedule")}; timezone?: ${cloudReferenceType("bindings.cron.timezone")}; input?: PlayCronInput<TInput> };`,
11092
11108
  " sqlListeners?: readonly SqlListenerDeclaration[];",
11093
11109
  ` secrets?: readonly ${cloudReferenceType("bindings.secrets[]")}[];`,
@@ -552,8 +552,8 @@
552
552
  "dist/cli/index.js",
553
553
  "dist/cli/index.mjs",
554
554
  "dist/cli/text-imports.d.ts",
555
- "dist/compiler-manifest-BJBNPTWt.d.mts",
556
- "dist/compiler-manifest-BJBNPTWt.d.ts",
555
+ "dist/compiler-manifest-4bYusxBr.d.mts",
556
+ "dist/compiler-manifest-4bYusxBr.d.ts",
557
557
  "dist/helpers.d.mts",
558
558
  "dist/helpers.d.ts",
559
559
  "dist/helpers.js",
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-BJBNPTWt.mjs';
3
- export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-BJBNPTWt.mjs';
2
+ import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-4bYusxBr.mjs';
3
+ export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-4bYusxBr.mjs';
4
4
  import '@sinclair/typebox';
5
5
 
6
6
  type ImportedPlayDependency = {
@@ -33,7 +33,8 @@ type PlayBundlingAdapter = {
33
33
  */
34
34
  sourceIdentityRoot?: string;
35
35
  nodeModulesDir: string;
36
- cacheDir?: string;
36
+ /** null disables disk caching (for ephemeral serverless build invocations). */
37
+ cacheDir?: string | null;
37
38
  sdkSourceRoot: string;
38
39
  sdkPackageJson: string;
39
40
  sdkEntryFile: string;
@@ -1,6 +1,6 @@
1
1
  /// <reference path="./text-imports.d.ts" />
2
- import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-BJBNPTWt.js';
3
- export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-BJBNPTWt.js';
2
+ import { P as PlayArtifactKind, a as PlayBundleArtifact, b as PlaySandboxRuntimeDeclaration, c as PlayCompilerManifest } from '../compiler-manifest-4bYusxBr.js';
3
+ export { d as PLAY_ARTIFACT_KINDS, e as PlayArtifactCompatibility, f as PlayImportPolicy, g as PlayPackageImport, h as PlayRuntimeFeature } from '../compiler-manifest-4bYusxBr.js';
4
4
  import '@sinclair/typebox';
5
5
 
6
6
  type ImportedPlayDependency = {
@@ -33,7 +33,8 @@ type PlayBundlingAdapter = {
33
33
  */
34
34
  sourceIdentityRoot?: string;
35
35
  nodeModulesDir: string;
36
- cacheDir?: string;
36
+ /** null disables disk caching (for ephemeral serverless build invocations). */
37
+ cacheDir?: string | null;
37
38
  sdkSourceRoot: string;
38
39
  sdkPackageJson: string;
39
40
  sdkEntryFile: string;
@@ -319,6 +319,22 @@ var PLAY_AUTHORING_FIELD_REGISTRY = {
319
319
  description: "HTTP header containing the webhook signature.",
320
320
  errorMessage: "bindings.webhook.hmac.header must be a non-empty static string."
321
321
  },
322
+ "bindings.webhook.hmac.signaturePrefix": {
323
+ schema: Type.String(),
324
+ fixtures: {
325
+ valid: "",
326
+ invalid: { expression: "signaturePrefix" },
327
+ absent: void 0,
328
+ unresolved: { expression: "signaturePrefix" },
329
+ edition1: void 0
330
+ },
331
+ referenceType: "string",
332
+ required: false,
333
+ resolution: "static-required",
334
+ issueCode: "play_authoring_webhook_hmac_invalid",
335
+ description: "Optional literal before the lowercase hexadecimal HMAC. Set to an empty string for providers that send a bare digest; defaults to sha256= when a signature header is configured.",
336
+ errorMessage: "bindings.webhook.hmac.signaturePrefix must be a static string literal."
337
+ },
322
338
  "bindings.webhook.auth.type": {
323
339
  schema: Type.Literal("standard-webhooks"),
324
340
  fixtures: {
@@ -1523,7 +1539,7 @@ var PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
1523
1539
  ` inline?: ${cloudReferenceType("inline")};`,
1524
1540
  ` billing?: { maxCreditsPerRun?: ${cloudReferenceType("billing.maxCreditsPerRun")} };`,
1525
1541
  ` runtime?: { timeout?: ${cloudReferenceType("runtime.timeout")}; size?: ${cloudReferenceType("runtime.size")} };`,
1526
- ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
1542
+ ` webhook?: { hmac?: { algorithm?: ${cloudReferenceType("bindings.webhook.hmac.algorithm")}; header?: ${cloudReferenceType("bindings.webhook.hmac.header")}; signaturePrefix?: ${cloudReferenceType("bindings.webhook.hmac.signaturePrefix")}; secretEnv: ${cloudReferenceType("bindings.webhook.hmac.secretEnv")} }; auth?: { type: ${cloudReferenceType("bindings.webhook.auth.type")}; headerFamily: ${cloudReferenceType("bindings.webhook.auth.headerFamily")}; signingSecrets: readonly ${cloudReferenceType("bindings.webhook.auth.signingSecrets[]")}[]; toleranceSeconds?: ${cloudReferenceType("bindings.webhook.auth.toleranceSeconds")} } };`,
1527
1543
  ` cron?: { schedule: ${cloudReferenceType("bindings.cron.schedule")}; timezone?: ${cloudReferenceType("bindings.cron.timezone")}; input?: PlayCronInput<TInput> };`,
1528
1544
  " sqlListeners?: readonly SqlListenerDeclaration[];",
1529
1545
  ` secrets?: readonly ${cloudReferenceType("bindings.secrets[]")}[];`,
@@ -4202,6 +4218,7 @@ function artifactCachePath(graphHash, artifactKind, adapter) {
4202
4218
  );
4203
4219
  }
4204
4220
  async function readArtifactCache(graphHash, artifactKind, adapter) {
4221
+ if (adapter.cacheDir === null) return null;
4205
4222
  try {
4206
4223
  const serialized = await readFile(
4207
4224
  /* turbopackIgnore: true */
@@ -4218,6 +4235,7 @@ async function readArtifactCache(graphHash, artifactKind, adapter) {
4218
4235
  }
4219
4236
  }
4220
4237
  async function writeArtifactCache(artifact, adapter) {
4238
+ if (adapter.cacheDir === null) return;
4221
4239
  const cacheDir = adapter.cacheDir ?? PLAY_ARTIFACT_CACHE_DIR;
4222
4240
  await mkdir(
4223
4241
  /* turbopackIgnore: true */
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.155";
152
+ readonly version: "0.3.157";
153
153
  readonly updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.d.ts CHANGED
@@ -149,7 +149,7 @@ type SdkRelease = {
149
149
  supportPolicy: SdkSupportPolicy;
150
150
  };
151
151
  declare const SDK_RELEASE: {
152
- readonly version: "0.3.155";
152
+ readonly version: "0.3.157";
153
153
  readonly updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.";
154
154
  readonly packageCapabilities: {
155
155
  readonly updatePreferences: 1;
package/dist/release.js CHANGED
@@ -74,7 +74,7 @@ var SDK_RELEASE = {
74
74
  // getters keep their established compatibility behavior.
75
75
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
76
76
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
77
- version: "0.3.155",
77
+ version: "0.3.157",
78
78
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
79
79
  packageCapabilities: {
80
80
  updatePreferences: 1
package/dist/release.mjs CHANGED
@@ -48,7 +48,7 @@ var SDK_RELEASE = {
48
48
  // getters keep their established compatibility behavior.
49
49
  // 0.3.1 deprecated the legacy `deepline enrich` command in favor of Plays.
50
50
  // 0.3.90 is the first deliberately versioned SDK release for API v3.
51
- version: "0.3.155",
51
+ version: "0.3.157",
52
52
  updateSummary: "Play grep now returns concise results with the matched fields and terms. Automatic CLI updates are enabled by default; use `deepline settings autoupdate off` to opt out, `deepline settings autoupdate on` to re-enable updates, or `deepline settings autoupdate pin <version>` to hold an exact release.",
53
53
  packageCapabilities: {
54
54
  updatePreferences: 1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "deepline",
3
- "version": "0.3.155",
3
+ "version": "0.3.157",
4
4
  "description": "GTM data CLI and TypeScript SDK for coding agents",
5
5
  "license": "MIT",
6
6
  "homepage": "https://code.deepline.com",