@tangle-network/agent-integrations 0.45.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/catalog.js CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  parseIntegrationToolName,
8
8
  searchIntegrationTools,
9
9
  toMcpTools
10
- } from "./chunk-E6BBOBYT.js";
10
+ } from "./chunk-CPZUNSKB.js";
11
11
  import "./chunk-S2BUASSV.js";
12
12
  import "./chunk-LA76XB7M.js";
13
13
  import "./chunk-H4XYLS7T.js";
@@ -15,7 +15,7 @@ import "./chunk-VLVSP7SP.js";
15
15
  import "./chunk-IA5GCKM6.js";
16
16
  import "./chunk-7P2LN4VT.js";
17
17
  import "./chunk-376UBTNB.js";
18
- import "./chunk-WTMOFI3U.js";
18
+ import "./chunk-F6MF4YNI.js";
19
19
  import "./chunk-2TW2QKGZ.js";
20
20
  import "./chunk-UWF33ESC.js";
21
21
  import "./chunk-PZ5AY32C.js";
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-IA5GCKM6.js";
9
9
  import {
10
10
  adapters_exports
11
- } from "./chunk-WTMOFI3U.js";
11
+ } from "./chunk-F6MF4YNI.js";
12
12
 
13
13
  // src/activepieces-catalog.ts
14
14
  import { readFileSync } from "fs";
@@ -4334,4 +4334,4 @@ export {
4334
4334
  signCapability,
4335
4335
  verifyCapabilityToken
4336
4336
  };
4337
- //# sourceMappingURL=chunk-E6BBOBYT.js.map
4337
+ //# sourceMappingURL=chunk-CPZUNSKB.js.map
@@ -2350,6 +2350,119 @@ async function createSheet(inv, accessToken, timeoutMs) {
2350
2350
  };
2351
2351
  }
2352
2352
 
2353
+ // src/connectors/adapters/aws-sigv4.ts
2354
+ import { createHash as createHash3, createHmac } from "crypto";
2355
+ var ALGORITHM = "AWS4-HMAC-SHA256";
2356
+ function parseAwsCredentialBundle(credentials) {
2357
+ if (credentials.kind !== "api-key") {
2358
+ throw new Error(`AWS SigV4 connectors require api-key credentials, got ${credentials.kind}`);
2359
+ }
2360
+ let raw;
2361
+ try {
2362
+ raw = JSON.parse(credentials.apiKey);
2363
+ } catch {
2364
+ throw new Error(
2365
+ "AWS credential must be a JSON object with accessKeyId, secretAccessKey, and region \u2014 received a non-JSON string"
2366
+ );
2367
+ }
2368
+ if (!raw || typeof raw !== "object") {
2369
+ throw new Error("AWS credential bundle must be a JSON object with accessKeyId, secretAccessKey, and region");
2370
+ }
2371
+ const o = raw;
2372
+ const accessKeyId = pickString(o, ["accessKeyId", "access_key_id", "awsAccessKeyId", "AccessKeyId"]);
2373
+ const secretAccessKey = pickString(o, [
2374
+ "secretAccessKey",
2375
+ "secret_access_key",
2376
+ "awsSecretAccessKey",
2377
+ "SecretAccessKey",
2378
+ "secretKey"
2379
+ ]);
2380
+ const region = pickString(o, ["region", "awsRegion", "Region"]) ?? "";
2381
+ const sessionToken = pickString(o, ["sessionToken", "session_token", "awsSessionToken", "SessionToken"]);
2382
+ const endpoint = pickString(o, ["endpoint", "Endpoint"]);
2383
+ if (!accessKeyId || !secretAccessKey) {
2384
+ throw new Error("AWS credential bundle is missing accessKeyId and/or secretAccessKey");
2385
+ }
2386
+ return { accessKeyId, secretAccessKey, region, sessionToken, endpoint };
2387
+ }
2388
+ function signSigV4(input) {
2389
+ const { method, url, body, service, region, accessKeyId, secretAccessKey, sessionToken, amzDate } = input;
2390
+ const dateStamp = amzDate.slice(0, 8);
2391
+ const payloadHash = hashSha256Hex(body);
2392
+ const headerMap = /* @__PURE__ */ new Map();
2393
+ for (const [key, value] of Object.entries(input.headers)) {
2394
+ const name = key.toLowerCase().trim();
2395
+ if (name === "authorization") continue;
2396
+ headerMap.set(name, collapseWhitespace(value));
2397
+ }
2398
+ headerMap.set("host", url.host);
2399
+ headerMap.set("x-amz-date", amzDate);
2400
+ if (sessionToken) headerMap.set("x-amz-security-token", sessionToken);
2401
+ const sortedNames = [...headerMap.keys()].sort();
2402
+ const canonicalHeaders = sortedNames.map((name) => `${name}:${headerMap.get(name)}
2403
+ `).join("");
2404
+ const signedHeaders = sortedNames.join(";");
2405
+ const canonicalRequest = [
2406
+ method.toUpperCase(),
2407
+ canonicalUri(url.pathname, service),
2408
+ canonicalizeAwsQuery(url.searchParams),
2409
+ canonicalHeaders,
2410
+ signedHeaders,
2411
+ payloadHash
2412
+ ].join("\n");
2413
+ const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;
2414
+ const stringToSign = [ALGORITHM, amzDate, credentialScope, hashSha256Hex(canonicalRequest)].join("\n");
2415
+ const signingKey = deriveSigningKey(secretAccessKey, dateStamp, region, service);
2416
+ const signature = createHmac("sha256", signingKey).update(stringToSign, "utf8").digest("hex");
2417
+ const authorization = `${ALGORITHM} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;
2418
+ return { amzDate, signedHeaders, canonicalRequest, stringToSign, signature, authorization };
2419
+ }
2420
+ function amzDateNow(date = /* @__PURE__ */ new Date()) {
2421
+ return date.toISOString().replace(/[:-]|\.\d{3}/g, "");
2422
+ }
2423
+ function hashSha256Hex(data) {
2424
+ return createHash3("sha256").update(data, "utf8").digest("hex");
2425
+ }
2426
+ function deriveSigningKey(secretAccessKey, dateStamp, region, service) {
2427
+ const kDate = createHmac("sha256", `AWS4${secretAccessKey}`).update(dateStamp, "utf8").digest();
2428
+ const kRegion = createHmac("sha256", kDate).update(region, "utf8").digest();
2429
+ const kService = createHmac("sha256", kRegion).update(service, "utf8").digest();
2430
+ return createHmac("sha256", kService).update("aws4_request", "utf8").digest();
2431
+ }
2432
+ function canonicalUri(pathname, service) {
2433
+ if (!pathname) return "/";
2434
+ if (service === "s3") return pathname;
2435
+ const segments = [];
2436
+ for (const segment of pathname.split("/")) {
2437
+ if (segment.length === 0 || segment === ".") continue;
2438
+ if (segment === "..") segments.pop();
2439
+ else segments.push(segment);
2440
+ }
2441
+ const normalized = `/${segments.join("/")}${segments.length > 0 && pathname.endsWith("/") ? "/" : ""}`;
2442
+ return awsUriEncode(normalized).replace(/%2F/g, "/");
2443
+ }
2444
+ function canonicalizeAwsQuery(params) {
2445
+ const pairs = [];
2446
+ for (const [key, value] of params) {
2447
+ pairs.push([awsUriEncode(key), awsUriEncode(value)]);
2448
+ }
2449
+ pairs.sort((a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0);
2450
+ return pairs.map(([key, value]) => `${key}=${value}`).join("&");
2451
+ }
2452
+ function awsUriEncode(value) {
2453
+ return encodeURIComponent(value).replace(/[!'()*]/g, (ch) => `%${ch.charCodeAt(0).toString(16).toUpperCase()}`);
2454
+ }
2455
+ function collapseWhitespace(value) {
2456
+ return value.trim().replace(/\s+/g, " ");
2457
+ }
2458
+ function pickString(obj, keys) {
2459
+ for (const key of keys) {
2460
+ const value = obj[key];
2461
+ if (typeof value === "string" && value.length > 0) return value;
2462
+ }
2463
+ return void 0;
2464
+ }
2465
+
2353
2466
  // src/connectors/adapters/declarative-rest.ts
2354
2467
  function declarativeRestConnector(spec) {
2355
2468
  const capabilities = spec.capabilities.map(operationToCapability);
@@ -2449,7 +2562,11 @@ function requiredArgsOf(parameters) {
2449
2562
  return Array.isArray(required) ? required.filter((entry) => typeof entry === "string") : void 0;
2450
2563
  }
2451
2564
  async function executeRestRequest(spec, request, inv, requiredArgs) {
2452
- const baseUrl = resolveBaseUrl(spec.baseUrl, inv.source.metadata);
2565
+ const placement = spec.credentialPlacement ?? { kind: "bearer" };
2566
+ const aws = placement.kind === "aws-sigv4" ? parseAwsCredentialBundle(inv.source.credentials) : void 0;
2567
+ const awsRegion = aws ? resolveAwsRegion(aws, inv.source.metadata, placement) : void 0;
2568
+ let baseUrl = resolveBaseUrl(spec.baseUrl, inv.source.metadata);
2569
+ if (aws) baseUrl = applyRegionTemplate(baseUrl, awsRegion, aws.endpoint);
2453
2570
  const renderedPath = interpolate(request.path, inv.args).replace(/^\/+/, "");
2454
2571
  const baseWithSlash = baseUrl.endsWith("/") ? baseUrl : `${baseUrl}/`;
2455
2572
  const url = new URL(renderedPath, baseWithSlash);
@@ -2457,21 +2574,36 @@ async function executeRestRequest(spec, request, inv, requiredArgs) {
2457
2574
  const rendered = renderQueryValue(value, inv.args);
2458
2575
  if (rendered !== void 0 && rendered !== "") url.searchParams.set(key, String(rendered));
2459
2576
  }
2577
+ const requestHeaders = request.headers ?? {};
2578
+ const hostOverride = aws ? Object.entries(requestHeaders).find(([key]) => key.toLowerCase() === "host")?.[1] : void 0;
2579
+ const renderableHeaders = hostOverride ? Object.fromEntries(Object.entries(requestHeaders).filter(([key]) => key.toLowerCase() !== "host")) : requestHeaders;
2460
2580
  const headers = {
2461
2581
  accept: "application/json",
2462
2582
  ...spec.defaultHeaders,
2463
- ...renderHeaders(request.headers ?? {}, inv.args)
2583
+ ...renderHeaders(renderableHeaders, inv.args)
2464
2584
  };
2465
- applyCredentials(headers, url, spec.credentialPlacement ?? { kind: "bearer" }, inv.source.credentials);
2585
+ if (hostOverride) url.host = hostOverride.replace(/\{region\}/g, awsRegion);
2466
2586
  if (inv.expectedEtag) headers["if-match"] = inv.expectedEtag;
2467
2587
  const sendsBody = request.method !== "GET" && (request.method !== "DELETE" || request.body !== void 0);
2468
- if (sendsBody) {
2469
- headers["content-type"] = headers["content-type"] ?? "application/json";
2588
+ if (sendsBody && getHeaderCI(headers, "content-type") === void 0) {
2589
+ headers["content-type"] = "application/json";
2590
+ }
2591
+ const bodyString = sendsBody ? JSON.stringify(resolveBody(request.body, inv.args, requiredArgs)) : void 0;
2592
+ if (placement.kind === "aws-sigv4") {
2593
+ signAwsRequest(headers, url, {
2594
+ method: request.method,
2595
+ body: bodyString ?? "",
2596
+ service: placement.service,
2597
+ region: awsRegion,
2598
+ bundle: aws
2599
+ });
2600
+ } else {
2601
+ applyCredentials(headers, url, placement, inv.source.credentials);
2470
2602
  }
2471
2603
  const res = await fetch(url, {
2472
2604
  method: request.method,
2473
2605
  headers,
2474
- body: sendsBody ? JSON.stringify(resolveBody(request.body, inv.args, requiredArgs)) : void 0,
2606
+ body: bodyString,
2475
2607
  signal: AbortSignal.timeout(2e4)
2476
2608
  });
2477
2609
  if (res.status === 401 || res.status === 403) {
@@ -2530,6 +2662,42 @@ function credentialToken(credentials) {
2530
2662
  if (credentials.kind === "api-key") return credentials.apiKey;
2531
2663
  throw new Error(`declarative REST connectors require oauth2 or api-key credentials, got ${credentials.kind}`);
2532
2664
  }
2665
+ function resolveAwsRegion(bundle, metadata, placement) {
2666
+ if (bundle.region) return bundle.region;
2667
+ if (typeof metadata.region === "string" && metadata.region.trim()) return metadata.region;
2668
+ return placement.defaultRegion ?? "us-east-1";
2669
+ }
2670
+ function applyRegionTemplate(baseUrl, region, endpoint) {
2671
+ if (endpoint) return endpoint;
2672
+ return baseUrl.replace(/\{region\}/g, region);
2673
+ }
2674
+ function getHeaderCI(headers, name) {
2675
+ const lower = name.toLowerCase();
2676
+ for (const [key, value] of Object.entries(headers)) {
2677
+ if (key.toLowerCase() === lower) return value;
2678
+ }
2679
+ return void 0;
2680
+ }
2681
+ function signAwsRequest(headers, url, opts) {
2682
+ const canonicalSearch = canonicalizeAwsQuery(url.searchParams);
2683
+ url.search = canonicalSearch ? `?${canonicalSearch}` : "";
2684
+ headers["x-amz-content-sha256"] = hashSha256Hex(opts.body);
2685
+ if (opts.bundle.sessionToken) headers["x-amz-security-token"] = opts.bundle.sessionToken;
2686
+ const signed = signSigV4({
2687
+ method: opts.method,
2688
+ url,
2689
+ headers,
2690
+ body: opts.body,
2691
+ service: opts.service,
2692
+ region: opts.region,
2693
+ accessKeyId: opts.bundle.accessKeyId,
2694
+ secretAccessKey: opts.bundle.secretAccessKey,
2695
+ sessionToken: opts.bundle.sessionToken,
2696
+ amzDate: amzDateNow()
2697
+ });
2698
+ headers["x-amz-date"] = signed.amzDate;
2699
+ headers.authorization = signed.authorization;
2700
+ }
2533
2701
  function resolveBody(body, args, requiredArgs) {
2534
2702
  if (!body || body === "args") return args;
2535
2703
  if (typeof body === "string") return renderValue(body, args, requiredArgs);
@@ -4728,7 +4896,7 @@ async function uploadFile2(inv, accessToken, timeoutMs) {
4728
4896
  }
4729
4897
 
4730
4898
  // src/connectors/adapters/docuseal.ts
4731
- import { createHmac, timingSafeEqual } from "crypto";
4899
+ import { createHmac as createHmac2, timingSafeEqual } from "crypto";
4732
4900
  var DEFAULT_BASE = "https://api.docuseal.com";
4733
4901
  function readDocuSealCredentials(creds) {
4734
4902
  if (creds.kind === "api-key" && typeof creds.apiKey === "string" && creds.apiKey.length > 0) {
@@ -4853,7 +5021,7 @@ function docuseal(opts = {}) {
4853
5021
  if (!creds?.webhookSecret) return { valid: false, reason: "missing_webhook_secret" };
4854
5022
  const sig = firstHeader(headers, "x-docuseal-signature");
4855
5023
  if (!sig) return { valid: false, reason: "missing_signature_header" };
4856
- const expected = createHmac("sha256", creds.webhookSecret).update(rawBody).digest("hex");
5024
+ const expected = createHmac2("sha256", creds.webhookSecret).update(rawBody).digest("hex");
4857
5025
  const a = Buffer.from(sig.toLowerCase(), "utf-8");
4858
5026
  const b = Buffer.from(expected, "utf-8");
4859
5027
  if (a.length !== b.length) return { valid: false, reason: "invalid_signature" };
@@ -7045,7 +7213,7 @@ function readApiKey(creds) {
7045
7213
  }
7046
7214
 
7047
7215
  // src/connectors/adapters/webhook.ts
7048
- import { createHmac as createHmac2 } from "crypto";
7216
+ import { createHmac as createHmac3 } from "crypto";
7049
7217
  var webhookConnector = {
7050
7218
  manifest: {
7051
7219
  kind: "webhook",
@@ -7159,7 +7327,7 @@ function signHeaders(creds, body, idempotencyKey) {
7159
7327
  "x-phony-idempotency-key": idempotencyKey
7160
7328
  };
7161
7329
  if (creds.kind === "hmac" && typeof creds.secret === "string" && creds.secret.length > 0) {
7162
- const sig = createHmac2("sha256", creds.secret).update(`${ts}.${body}`).digest("hex");
7330
+ const sig = createHmac3("sha256", creds.secret).update(`${ts}.${body}`).digest("hex");
7163
7331
  headers["x-phony-signature"] = `sha256=${sig}`;
7164
7332
  }
7165
7333
  return headers;
@@ -37263,7 +37431,7 @@ var smooveConnector = declarativeRestConnector({
37263
37431
  });
37264
37432
 
37265
37433
  // src/connectors/adapters/hellosign.ts
37266
- import { createHmac as createHmac3, timingSafeEqual as timingSafeEqual2 } from "crypto";
37434
+ import { createHmac as createHmac4, timingSafeEqual as timingSafeEqual2 } from "crypto";
37267
37435
  var SCOPES7 = [
37268
37436
  "basic_account_info",
37269
37437
  "request_signature",
@@ -37486,7 +37654,7 @@ function hellosign(opts) {
37486
37654
  if (!event || typeof event.event_time !== "string" || typeof event.event_type !== "string" || typeof event.event_hash !== "string") {
37487
37655
  return { valid: false, reason: "missing_event_fields" };
37488
37656
  }
37489
- const expected = createHmac3("sha256", source.credentials.accessToken).update(`${event.event_time}${event.event_type}`).digest("hex");
37657
+ const expected = createHmac4("sha256", source.credentials.accessToken).update(`${event.event_time}${event.event_type}`).digest("hex");
37490
37658
  const a = Buffer.from(event.event_hash.toLowerCase(), "utf-8");
37491
37659
  const b = Buffer.from(expected.toLowerCase(), "utf-8");
37492
37660
  if (a.length !== b.length) return { valid: false, reason: "invalid_signature" };
@@ -44857,16 +45025,17 @@ var amazonBedrockConnector = declarativeRestConnector({
44857
45025
  kind: "amazon-bedrock",
44858
45026
  displayName: "Amazon Bedrock",
44859
45027
  description: "Invoke AWS Bedrock foundation models for text generation, image analysis, image generation, and embeddings; list available foundation models.",
44860
- auth: { kind: "api-key", hint: "AWS access key id / secret access key pair (the connection should also carry metadata.region; requests are signed with AWS Signature V4 at the gateway)." },
45028
+ auth: { kind: "api-key", hint: 'AWS credentials as JSON: {"accessKeyId":"AKIA\u2026","secretAccessKey":"\u2026","region":"us-east-1"}. Optional "sessionToken" and "endpoint". Requests are signed with AWS Signature V4; the region selects the bedrock-runtime.<region>.amazonaws.com endpoint.' },
44861
45029
  category: "other",
44862
45030
  // Bedrock model invocations are non-idempotent generative calls; the manifest
44863
45031
  // surfaces are advisory (best-effort), not authoritative state.
44864
45032
  defaultConsistencyModel: "advisory",
44865
45033
  // bedrock-runtime is the workhorse endpoint for invoke/converse. Control-plane
44866
45034
  // listing operations override the host on a per-capability basis below.
44867
- baseUrl: { metadataKey: "runtimeEndpoint", fallback: "https://bedrock-runtime.us-east-1.amazonaws.com" },
45035
+ credentialPlacement: { kind: "aws-sigv4", service: "bedrock" },
45036
+ baseUrl: { metadataKey: "runtimeEndpoint", fallback: "https://bedrock-runtime.{region}.amazonaws.com" },
44868
45037
  defaultHeaders: { "content-type": "application/json", accept: "application/json" },
44869
- test: { method: "GET", path: "/foundation-models", headers: { host: "bedrock.us-east-1.amazonaws.com" } },
45038
+ test: { method: "GET", path: "/foundation-models", headers: { host: "bedrock.{region}.amazonaws.com" } },
44870
45039
  capabilities: [
44871
45040
  {
44872
45041
  name: "models.list",
@@ -44888,9 +45057,10 @@ var amazonBedrockConnector = declarativeRestConnector({
44888
45057
  byOutputModality: "{byOutputModality}",
44889
45058
  byInferenceType: "{byInferenceType}"
44890
45059
  },
44891
- // Control-plane host override; declarative-rest forwards the header to
44892
- // the gateway, which rewrites the upstream Host for SigV4.
44893
- headers: { host: "bedrock.us-east-1.amazonaws.com" }
45060
+ // Control-plane host override: the runtime folds this `host` header into
45061
+ // the request URL (region substituted) so SigV4 signs the bedrock.<region>
45062
+ // control-plane host, not the bedrock-runtime base host.
45063
+ headers: { host: "bedrock.{region}.amazonaws.com" }
44894
45064
  }
44895
45065
  },
44896
45066
  {
@@ -44907,7 +45077,7 @@ var amazonBedrockConnector = declarativeRestConnector({
44907
45077
  request: {
44908
45078
  method: "GET",
44909
45079
  path: "/foundation-models/{modelIdentifier}",
44910
- headers: { host: "bedrock.us-east-1.amazonaws.com" }
45080
+ headers: { host: "bedrock.{region}.amazonaws.com" }
44911
45081
  }
44912
45082
  },
44913
45083
  {
@@ -45020,13 +45190,14 @@ var amazonSecretsManagerConnector = declarativeRestConnector({
45020
45190
  description: "Create, read, update, find, and delete secrets in AWS Secrets Manager, or generate a random password.",
45021
45191
  auth: {
45022
45192
  kind: "api-key",
45023
- hint: "AWS access key id + secret access key + region (api-key field carries the SigV4 credential bundle)."
45193
+ hint: 'AWS credentials as JSON: {"accessKeyId":"AKIA\u2026","secretAccessKey":"\u2026","region":"us-east-1"}. Optional "sessionToken" and "endpoint". Requests are signed with AWS Signature V4; the region selects the secretsmanager.<region>.amazonaws.com endpoint.'
45024
45194
  },
45025
45195
  category: "other",
45026
45196
  defaultConsistencyModel: "authoritative",
45197
+ credentialPlacement: { kind: "aws-sigv4", service: "secretsmanager" },
45027
45198
  baseUrl: {
45028
45199
  metadataKey: "endpoint",
45029
- fallback: "https://secretsmanager.us-east-1.amazonaws.com"
45200
+ fallback: "https://secretsmanager.{region}.amazonaws.com"
45030
45201
  },
45031
45202
  defaultHeaders: {
45032
45203
  "Content-Type": "application/x-amz-json-1.1"
@@ -45924,11 +46095,15 @@ var amazonSesConnector = declarativeRestConnector({
45924
46095
  description: "Send transactional and templated email and manage SES email templates via the Amazon SES v2 REST API.",
45925
46096
  auth: {
45926
46097
  kind: "api-key",
45927
- hint: "AWS access key ID + secret access key with ses:SendEmail / ses:SendTemplatedEmail / template-management permissions. The region selects the SES endpoint (e.g. us-east-1)."
46098
+ hint: 'AWS credentials as JSON: {"accessKeyId":"AKIA\u2026","secretAccessKey":"\u2026","region":"us-east-1"} (the key needs ses:SendEmail / ses:SendTemplatedEmail / template-management permissions). Optional "sessionToken" and "endpoint". Requests are signed with AWS Signature V4; the region selects the email.<region>.amazonaws.com (SES v2) endpoint.'
45928
46099
  },
45929
46100
  category: "comms",
45930
46101
  defaultConsistencyModel: "authoritative",
45931
- baseUrl: { metadataKey: "endpoint" },
46102
+ // SES v2 REST API: the SigV4 signing name is `ses`, but the regional host is
46103
+ // the `email.` subdomain. metadata.endpoint still overrides when a tenant
46104
+ // pins a host.
46105
+ credentialPlacement: { kind: "aws-sigv4", service: "ses" },
46106
+ baseUrl: { metadataKey: "endpoint", fallback: "https://email.{region}.amazonaws.com" },
45932
46107
  test: { method: "GET", path: "/v2/email/identities" },
45933
46108
  capabilities: [
45934
46109
  {
@@ -46191,13 +46366,14 @@ var amazonSnsConnector = declarativeRestConnector({
46191
46366
  description: "Publish messages to Amazon Simple Notification Service topics, manage topics, and manage subscriptions.",
46192
46367
  auth: {
46193
46368
  kind: "api-key",
46194
- hint: "AWS access key id + secret access key + region (api-key field carries the SigV4 credential bundle)."
46369
+ hint: 'AWS credentials as JSON: {"accessKeyId":"AKIA\u2026","secretAccessKey":"\u2026","region":"us-east-1"}. Optional "sessionToken" and "endpoint". Requests are signed with AWS Signature V4; the region selects the sns.<region>.amazonaws.com endpoint.'
46195
46370
  },
46196
46371
  category: "comms",
46197
46372
  defaultConsistencyModel: "authoritative",
46373
+ credentialPlacement: { kind: "aws-sigv4", service: "sns" },
46198
46374
  baseUrl: {
46199
46375
  metadataKey: "endpoint",
46200
- fallback: "https://sns.us-east-1.amazonaws.com"
46376
+ fallback: "https://sns.{region}.amazonaws.com"
46201
46377
  },
46202
46378
  defaultHeaders: {
46203
46379
  "Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
@@ -46466,16 +46642,17 @@ var amazonSqsConnector = declarativeRestConnector({
46466
46642
  description: "Send, receive, and delete messages on AWS SQS queues, and discover queue URLs and attributes.",
46467
46643
  auth: {
46468
46644
  kind: "api-key",
46469
- hint: "AWS access key id + secret access key + region (api-key field carries the SigV4 credential bundle; metadata.endpoint may override the regional host)."
46645
+ hint: 'AWS credentials as JSON: {"accessKeyId":"AKIA\u2026","secretAccessKey":"\u2026","region":"us-east-1"}. Optional "sessionToken" (STS temp creds) and "endpoint" (override host). Requests are signed with AWS Signature V4; the region selects the sqs.<region>.amazonaws.com endpoint.'
46470
46646
  },
46471
46647
  category: "other",
46472
46648
  // SQS is an at-least-once durable queue: sends, deletes, and queue-attribute
46473
46649
  // reads are authoritative against the service. Receive returns a transient
46474
46650
  // visibility-locked view, but the queue state itself is authoritative.
46475
46651
  defaultConsistencyModel: "authoritative",
46652
+ credentialPlacement: { kind: "aws-sigv4", service: "sqs" },
46476
46653
  baseUrl: {
46477
46654
  metadataKey: "endpoint",
46478
- fallback: "https://sqs.us-east-1.amazonaws.com"
46655
+ fallback: "https://sqs.{region}.amazonaws.com"
46479
46656
  },
46480
46657
  defaultHeaders: {
46481
46658
  "Content-Type": "application/x-amz-json-1.0"
@@ -46798,13 +46975,14 @@ var amazonTextractConnector = declarativeRestConnector({
46798
46975
  description: "Extract text, forms, tables, signatures, and structured data (expense, identity) from documents using AWS Textract.",
46799
46976
  auth: {
46800
46977
  kind: "api-key",
46801
- hint: "AWS access key id + secret access key + region (api-key field carries the SigV4 credential bundle; the gateway signs each request)."
46978
+ hint: 'AWS credentials as JSON: {"accessKeyId":"AKIA\u2026","secretAccessKey":"\u2026","region":"us-east-1"}. Optional "sessionToken" and "endpoint". Requests are signed with AWS Signature V4; the region selects the textract.<region>.amazonaws.com endpoint.'
46802
46979
  },
46803
46980
  category: "other",
46804
46981
  defaultConsistencyModel: "authoritative",
46982
+ credentialPlacement: { kind: "aws-sigv4", service: "textract" },
46805
46983
  baseUrl: {
46806
46984
  metadataKey: "endpoint",
46807
- fallback: "https://textract.us-east-1.amazonaws.com"
46985
+ fallback: "https://textract.{region}.amazonaws.com"
46808
46986
  },
46809
46987
  defaultHeaders: {
46810
46988
  "Content-Type": "application/x-amz-json-1.1"
@@ -52257,15 +52435,14 @@ var backblazeConnector = declarativeRestConnector({
52257
52435
  description: "Read and upload objects on a Backblaze B2 bucket via the S3-compatible REST API at s3.{region}.backblazeb2.com.",
52258
52436
  auth: {
52259
52437
  kind: "api-key",
52260
- hint: "Backblaze B2 application key pair (accessKeyId + secretAccessKey) scoped to the target bucket. Region selects the s3.{region}.backblazeb2.com endpoint."
52438
+ hint: 'Backblaze B2 application key pair as JSON: {"accessKeyId":"\u2026","secretAccessKey":"\u2026","region":"us-west-001"} scoped to the target bucket. Optional "endpoint" overrides the host. Requests are signed with AWS Signature V4 (S3-compatible); the region selects the s3.<region>.backblazeb2.com endpoint.'
52261
52439
  },
52262
52440
  category: "storage",
52263
52441
  defaultConsistencyModel: "authoritative",
52264
- // Endpoint is region-derived in the activepieces piece; the runtime
52265
- // resolves {region} from the credential bundle when constructing the
52266
- // request URL. The declarative-REST adapter takes a string baseUrl, so
52267
- // we keep the template here and rely on the runtime's URL resolver to
52268
- // substitute the region placeholder from the credential metadata.
52442
+ // Backblaze B2 speaks the S3 API, so it signs with AWS SigV4 under the `s3`
52443
+ // service. The runtime substitutes {region} from the credential bundle into
52444
+ // the host template below (or honors an explicit bundle `endpoint`).
52445
+ credentialPlacement: { kind: "aws-sigv4", service: "s3" },
52269
52446
  baseUrl: "https://s3.{region}.backblazeb2.com",
52270
52447
  test: { method: "GET", path: "/{bucket}?list-type=2&max-keys=1" },
52271
52448
  capabilities: [
@@ -125313,4 +125490,4 @@ export {
125313
125490
  demandbaseConnector,
125314
125491
  adapters_exports
125315
125492
  };
125316
- //# sourceMappingURL=chunk-WTMOFI3U.js.map
125493
+ //# sourceMappingURL=chunk-F6MF4YNI.js.map