@zapier/zapier-sdk 0.54.0 โ†’ 0.54.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @zapier/zapier-sdk
2
2
 
3
+ ## 0.54.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 22a1727: Add optional `name` parameter to `createTriggerInbox` method
8
+
3
9
  ## 0.54.0
4
10
 
5
11
  ### Minor Changes
package/README.md CHANGED
@@ -1835,18 +1835,19 @@ const result = await zapier.ackTriggerInboxMessages({
1835
1835
 
1836
1836
  #### `createTriggerInbox` ๐Ÿงช _experimental_
1837
1837
 
1838
- Create a new trigger inbox subscription with an auto-generated name. Always creates; use ensureTriggerInbox for get-or-create on a stable name.
1838
+ Create a new trigger inbox subscription. Always creates a new inbox; use ensureTriggerInbox for get-or-create on a stable name.
1839
1839
 
1840
1840
  **Parameters:**
1841
1841
 
1842
- | Name | Type | Required | Default | Possible Values | Description |
1843
- | --------------------- | ---------------- | -------- | ------- | --------------- | ------------------------------------------------------------------------------------------------------------ |
1844
- | `options` | `object` | โœ… | โ€” | โ€” | |
1845
- | โ€‹ย โ†ณย `app` | `string` | โœ… | โ€” | โ€” | App slug (e.g., 'github'), implementation name (e.g., 'SlackCLIAPI'), or versioned ID (e.g., 'github@1.2.3') |
1846
- | โ€‹ย โ†ณย `action` | `string` | โœ… | โ€” | โ€” | Action key (e.g., 'send_message' or 'find_row') |
1847
- | โ€‹ย โ†ณย `connection` | `string, number` | โŒ | โ€” | โ€” | Connection alias or connection ID. Optional for triggers that don't require auth. |
1848
- | โ€‹ย โ†ณย `inputs` | `object` | โŒ | โ€” | โ€” | Input parameters for the trigger subscription |
1849
- | โ€‹ย โ†ณย `notificationUrl` | `string` | โŒ | โ€” | โ€” | Webhook URL to POST to when new messages arrive |
1842
+ | Name | Type | Required | Default | Possible Values | Description |
1843
+ | --------------------- | ---------------- | -------- | ------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------- |
1844
+ | `options` | `object` | โœ… | โ€” | โ€” | |
1845
+ | โ€‹ย โ†ณย `name` | `string` | โŒ | โ€” | โ€” | Optional inbox name. Auto-generated when omitted. Throws a conflict error if the name is already in use by another subscription. |
1846
+ | โ€‹ย โ†ณย `app` | `string` | โœ… | โ€” | โ€” | App slug (e.g., 'github'), implementation name (e.g., 'SlackCLIAPI'), or versioned ID (e.g., 'github@1.2.3') |
1847
+ | โ€‹ย โ†ณย `action` | `string` | โœ… | โ€” | โ€” | Action key (e.g., 'send_message' or 'find_row') |
1848
+ | โ€‹ย โ†ณย `connection` | `string, number` | โŒ | โ€” | โ€” | Connection alias or connection ID. Optional for triggers that don't require auth. |
1849
+ | โ€‹ย โ†ณย `inputs` | `object` | โŒ | โ€” | โ€” | Input parameters for the trigger subscription |
1850
+ | โ€‹ย โ†ณย `notificationUrl` | `string` | โŒ | โ€” | โ€” | Webhook URL to POST to when new messages arrive |
1850
1851
 
1851
1852
  **Returns:** `Promise<TriggerInboxItem>`
1852
1853
 
@@ -2881,7 +2881,7 @@ async function invalidateCredentialsToken(options) {
2881
2881
  }
2882
2882
 
2883
2883
  // src/sdk-version.ts
2884
- var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.0" : void 0) || "unknown";
2884
+ var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.1" : void 0) || "unknown";
2885
2885
 
2886
2886
  // src/utils/open-url.ts
2887
2887
  var nodePrefix = "node:";
@@ -8999,8 +8999,11 @@ var TriggerInboxItemSchema = withFormatter(
8999
8999
  );
9000
9000
 
9001
9001
  // src/plugins/triggers/createTriggerInbox/schemas.ts
9002
- var CreateTriggerInboxDescription = "Create a new trigger inbox subscription with an auto-generated name. Always creates; use ensureTriggerInbox for get-or-create on a stable name.";
9002
+ var CreateTriggerInboxDescription = "Create a new trigger inbox subscription. Always creates a new inbox; use ensureTriggerInbox for get-or-create on a stable name.";
9003
9003
  var CreateTriggerInboxSchema = zod.z.object({
9004
+ name: TriggerInboxNamePropertySchema.optional().describe(
9005
+ "Optional inbox name. Auto-generated when omitted. Throws a conflict error if the name is already in use by another subscription."
9006
+ ),
9004
9007
  app: AppPropertySchema,
9005
9008
  action: ActionPropertySchema,
9006
9009
  connection: ConnectionPropertySchema.nullable().optional().describe(
@@ -9018,6 +9021,39 @@ var triggersDefaults = {
9018
9021
  experimental: true
9019
9022
  };
9020
9023
 
9024
+ // src/plugins/triggers/utils.ts
9025
+ var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
9026
+ async function resolveTriggerInboxId({
9027
+ api,
9028
+ inbox
9029
+ }) {
9030
+ if (UUID_REGEX.test(inbox)) {
9031
+ return inbox;
9032
+ }
9033
+ const rawResponse = await api.get("/trigger-inbox/api/v1/inboxes", {
9034
+ searchParams: { name: inbox, limit: "1" },
9035
+ authRequired: true
9036
+ });
9037
+ const response = rawResponse;
9038
+ const id = response.results?.[0]?.id;
9039
+ if (!id) {
9040
+ throw new ZapierResourceNotFoundError(
9041
+ `No trigger inbox named "${inbox}" found.`,
9042
+ { resourceType: "trigger_inbox", resourceId: inbox }
9043
+ );
9044
+ }
9045
+ return id;
9046
+ }
9047
+ function extractErrorDetail(data) {
9048
+ if (typeof data !== "object" || data === null) return void 0;
9049
+ const errors = data.errors;
9050
+ if (!Array.isArray(errors) || errors.length === 0) return void 0;
9051
+ const first = errors[0];
9052
+ if (typeof first !== "object" || first === null) return void 0;
9053
+ const detail = first.detail;
9054
+ return typeof detail === "string" ? detail : void 0;
9055
+ }
9056
+
9021
9057
  // src/plugins/triggers/createTriggerInbox/index.ts
9022
9058
  var createTriggerInboxPlugin = definePlugin(
9023
9059
  (sdk) => createPluginMethod(sdk, {
@@ -9032,6 +9068,7 @@ var createTriggerInboxPlugin = definePlugin(
9032
9068
  // seeded into resolvedParams without polluting the user-facing schema
9033
9069
  // (where it would leak into the SDK method signature and CLI flags).
9034
9070
  resolvers: {
9071
+ name: { type: "static", inputType: "text" },
9035
9072
  app: appKeyResolver,
9036
9073
  action: actionKeyResolver,
9037
9074
  connection: connectionIdResolver,
@@ -9041,6 +9078,7 @@ var createTriggerInboxPlugin = definePlugin(
9041
9078
  handler: async ({ sdk: sdk2, options }) => {
9042
9079
  const { api } = sdk2.context;
9043
9080
  const {
9081
+ name,
9044
9082
  app: appKey,
9045
9083
  action: actionKey,
9046
9084
  connection,
@@ -9066,13 +9104,28 @@ var createTriggerInboxPlugin = definePlugin(
9066
9104
  connection_id: resolvedConnectionId ?? null
9067
9105
  }
9068
9106
  };
9107
+ if (name !== void 0) {
9108
+ requestBody.name = name;
9109
+ }
9069
9110
  if (notificationUrl !== void 0) {
9070
9111
  requestBody.notification_url = notificationUrl;
9071
9112
  }
9072
9113
  const rawResponse = await api.post(
9073
9114
  "/trigger-inbox/api/v1/inboxes",
9074
9115
  requestBody,
9075
- { authRequired: true }
9116
+ {
9117
+ authRequired: true,
9118
+ customErrorHandler: ({ status, data }) => {
9119
+ if (status === 409) {
9120
+ const detail = extractErrorDetail(data);
9121
+ return new ZapierConflictError(
9122
+ detail ?? `An inbox named "${name}" already exists with a different subscription.`,
9123
+ { statusCode: status, resourceType: "trigger_inbox" }
9124
+ );
9125
+ }
9126
+ return void 0;
9127
+ }
9128
+ }
9076
9129
  );
9077
9130
  return { data: TriggerInboxItemSchema.parse(rawResponse) };
9078
9131
  }
@@ -9095,15 +9148,6 @@ var EnsureTriggerInboxSchema = zod.z.object({
9095
9148
  }).describe(EnsureTriggerInboxDescription);
9096
9149
 
9097
9150
  // src/plugins/triggers/ensureTriggerInbox/index.ts
9098
- function extractErrorDetail(data) {
9099
- if (typeof data !== "object" || data === null) return void 0;
9100
- const errors = data.errors;
9101
- if (!Array.isArray(errors) || errors.length === 0) return void 0;
9102
- const first = errors[0];
9103
- if (typeof first !== "object" || first === null) return void 0;
9104
- const detail = first.detail;
9105
- return typeof detail === "string" ? detail : void 0;
9106
- }
9107
9151
  var ensureTriggerInboxPlugin = definePlugin(
9108
9152
  (sdk) => createPluginMethod(sdk, {
9109
9153
  ...triggersDefaults,
@@ -9247,30 +9291,6 @@ var GetTriggerInboxSchema = zod.z.object({
9247
9291
  inbox: TriggerInboxPropertySchema
9248
9292
  }).describe("Get details of a trigger inbox by ID");
9249
9293
 
9250
- // src/plugins/triggers/utils.ts
9251
- var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
9252
- async function resolveTriggerInboxId({
9253
- api,
9254
- inbox
9255
- }) {
9256
- if (UUID_REGEX.test(inbox)) {
9257
- return inbox;
9258
- }
9259
- const rawResponse = await api.get("/trigger-inbox/api/v1/inboxes", {
9260
- searchParams: { name: inbox, limit: "1" },
9261
- authRequired: true
9262
- });
9263
- const response = rawResponse;
9264
- const id = response.results?.[0]?.id;
9265
- if (!id) {
9266
- throw new ZapierResourceNotFoundError(
9267
- `No trigger inbox named "${inbox}" found.`,
9268
- { resourceType: "trigger_inbox", resourceId: inbox }
9269
- );
9270
- }
9271
- return id;
9272
- }
9273
-
9274
9294
  // src/plugins/triggers/getTriggerInbox/index.ts
9275
9295
  var getTriggerInboxPlugin = definePlugin(
9276
9296
  (sdk) => createPluginMethod(sdk, {
@@ -1432,6 +1432,7 @@ declare function createZapierSdk(options?: ZapierSdkOptions): WithAddPlugin<{
1432
1432
  createTriggerInbox: (options?: {
1433
1433
  app: string;
1434
1434
  action: string;
1435
+ name?: string | undefined;
1435
1436
  connection?: string | number | null | undefined;
1436
1437
  inputs?: Record<string, unknown> | undefined;
1437
1438
  notificationUrl?: string | undefined;
@@ -1447,6 +1447,7 @@ export declare function createZapierSdk(options?: ZapierSdkOptions): import("./i
1447
1447
  createTriggerInbox: (options?: {
1448
1448
  app: string;
1449
1449
  action: string;
1450
+ name?: string | undefined;
1450
1451
  connection?: string | number | null | undefined;
1451
1452
  inputs?: Record<string, unknown> | undefined;
1452
1453
  notificationUrl?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../src/experimental.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAwEjD,cAAc,SAAS,CAAC;AAExB,MAAM,WAAW,gBAAiB,SAAQ,cAAc;CAAG;AAE3D,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA+Fq9K,CAAC;;;;sBAAiX,CAAC;qBAAyB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAT/5L;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAM3D,YAAY,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../src/experimental.ts"],"names":[],"mappings":"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"}
@@ -2879,7 +2879,7 @@ async function invalidateCredentialsToken(options) {
2879
2879
  }
2880
2880
 
2881
2881
  // src/sdk-version.ts
2882
- var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.0" : void 0) || "unknown";
2882
+ var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.1" : void 0) || "unknown";
2883
2883
 
2884
2884
  // src/utils/open-url.ts
2885
2885
  var nodePrefix = "node:";
@@ -8997,8 +8997,11 @@ var TriggerInboxItemSchema = withFormatter(
8997
8997
  );
8998
8998
 
8999
8999
  // src/plugins/triggers/createTriggerInbox/schemas.ts
9000
- var CreateTriggerInboxDescription = "Create a new trigger inbox subscription with an auto-generated name. Always creates; use ensureTriggerInbox for get-or-create on a stable name.";
9000
+ var CreateTriggerInboxDescription = "Create a new trigger inbox subscription. Always creates a new inbox; use ensureTriggerInbox for get-or-create on a stable name.";
9001
9001
  var CreateTriggerInboxSchema = z.object({
9002
+ name: TriggerInboxNamePropertySchema.optional().describe(
9003
+ "Optional inbox name. Auto-generated when omitted. Throws a conflict error if the name is already in use by another subscription."
9004
+ ),
9002
9005
  app: AppPropertySchema,
9003
9006
  action: ActionPropertySchema,
9004
9007
  connection: ConnectionPropertySchema.nullable().optional().describe(
@@ -9016,6 +9019,39 @@ var triggersDefaults = {
9016
9019
  experimental: true
9017
9020
  };
9018
9021
 
9022
+ // src/plugins/triggers/utils.ts
9023
+ var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
9024
+ async function resolveTriggerInboxId({
9025
+ api,
9026
+ inbox
9027
+ }) {
9028
+ if (UUID_REGEX.test(inbox)) {
9029
+ return inbox;
9030
+ }
9031
+ const rawResponse = await api.get("/trigger-inbox/api/v1/inboxes", {
9032
+ searchParams: { name: inbox, limit: "1" },
9033
+ authRequired: true
9034
+ });
9035
+ const response = rawResponse;
9036
+ const id = response.results?.[0]?.id;
9037
+ if (!id) {
9038
+ throw new ZapierResourceNotFoundError(
9039
+ `No trigger inbox named "${inbox}" found.`,
9040
+ { resourceType: "trigger_inbox", resourceId: inbox }
9041
+ );
9042
+ }
9043
+ return id;
9044
+ }
9045
+ function extractErrorDetail(data) {
9046
+ if (typeof data !== "object" || data === null) return void 0;
9047
+ const errors = data.errors;
9048
+ if (!Array.isArray(errors) || errors.length === 0) return void 0;
9049
+ const first = errors[0];
9050
+ if (typeof first !== "object" || first === null) return void 0;
9051
+ const detail = first.detail;
9052
+ return typeof detail === "string" ? detail : void 0;
9053
+ }
9054
+
9019
9055
  // src/plugins/triggers/createTriggerInbox/index.ts
9020
9056
  var createTriggerInboxPlugin = definePlugin(
9021
9057
  (sdk) => createPluginMethod(sdk, {
@@ -9030,6 +9066,7 @@ var createTriggerInboxPlugin = definePlugin(
9030
9066
  // seeded into resolvedParams without polluting the user-facing schema
9031
9067
  // (where it would leak into the SDK method signature and CLI flags).
9032
9068
  resolvers: {
9069
+ name: { type: "static", inputType: "text" },
9033
9070
  app: appKeyResolver,
9034
9071
  action: actionKeyResolver,
9035
9072
  connection: connectionIdResolver,
@@ -9039,6 +9076,7 @@ var createTriggerInboxPlugin = definePlugin(
9039
9076
  handler: async ({ sdk: sdk2, options }) => {
9040
9077
  const { api } = sdk2.context;
9041
9078
  const {
9079
+ name,
9042
9080
  app: appKey,
9043
9081
  action: actionKey,
9044
9082
  connection,
@@ -9064,13 +9102,28 @@ var createTriggerInboxPlugin = definePlugin(
9064
9102
  connection_id: resolvedConnectionId ?? null
9065
9103
  }
9066
9104
  };
9105
+ if (name !== void 0) {
9106
+ requestBody.name = name;
9107
+ }
9067
9108
  if (notificationUrl !== void 0) {
9068
9109
  requestBody.notification_url = notificationUrl;
9069
9110
  }
9070
9111
  const rawResponse = await api.post(
9071
9112
  "/trigger-inbox/api/v1/inboxes",
9072
9113
  requestBody,
9073
- { authRequired: true }
9114
+ {
9115
+ authRequired: true,
9116
+ customErrorHandler: ({ status, data }) => {
9117
+ if (status === 409) {
9118
+ const detail = extractErrorDetail(data);
9119
+ return new ZapierConflictError(
9120
+ detail ?? `An inbox named "${name}" already exists with a different subscription.`,
9121
+ { statusCode: status, resourceType: "trigger_inbox" }
9122
+ );
9123
+ }
9124
+ return void 0;
9125
+ }
9126
+ }
9074
9127
  );
9075
9128
  return { data: TriggerInboxItemSchema.parse(rawResponse) };
9076
9129
  }
@@ -9093,15 +9146,6 @@ var EnsureTriggerInboxSchema = z.object({
9093
9146
  }).describe(EnsureTriggerInboxDescription);
9094
9147
 
9095
9148
  // src/plugins/triggers/ensureTriggerInbox/index.ts
9096
- function extractErrorDetail(data) {
9097
- if (typeof data !== "object" || data === null) return void 0;
9098
- const errors = data.errors;
9099
- if (!Array.isArray(errors) || errors.length === 0) return void 0;
9100
- const first = errors[0];
9101
- if (typeof first !== "object" || first === null) return void 0;
9102
- const detail = first.detail;
9103
- return typeof detail === "string" ? detail : void 0;
9104
- }
9105
9149
  var ensureTriggerInboxPlugin = definePlugin(
9106
9150
  (sdk) => createPluginMethod(sdk, {
9107
9151
  ...triggersDefaults,
@@ -9245,30 +9289,6 @@ var GetTriggerInboxSchema = z.object({
9245
9289
  inbox: TriggerInboxPropertySchema
9246
9290
  }).describe("Get details of a trigger inbox by ID");
9247
9291
 
9248
- // src/plugins/triggers/utils.ts
9249
- var UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
9250
- async function resolveTriggerInboxId({
9251
- api,
9252
- inbox
9253
- }) {
9254
- if (UUID_REGEX.test(inbox)) {
9255
- return inbox;
9256
- }
9257
- const rawResponse = await api.get("/trigger-inbox/api/v1/inboxes", {
9258
- searchParams: { name: inbox, limit: "1" },
9259
- authRequired: true
9260
- });
9261
- const response = rawResponse;
9262
- const id = response.results?.[0]?.id;
9263
- if (!id) {
9264
- throw new ZapierResourceNotFoundError(
9265
- `No trigger inbox named "${inbox}" found.`,
9266
- { resourceType: "trigger_inbox", resourceId: inbox }
9267
- );
9268
- }
9269
- return id;
9270
- }
9271
-
9272
9292
  // src/plugins/triggers/getTriggerInbox/index.ts
9273
9293
  var getTriggerInboxPlugin = definePlugin(
9274
9294
  (sdk) => createPluginMethod(sdk, {
package/dist/index.cjs CHANGED
@@ -6309,7 +6309,7 @@ async function invalidateCredentialsToken(options) {
6309
6309
  }
6310
6310
 
6311
6311
  // src/sdk-version.ts
6312
- var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.0" : void 0) || "unknown";
6312
+ var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.1" : void 0) || "unknown";
6313
6313
 
6314
6314
  // src/utils/open-url.ts
6315
6315
  var nodePrefix = "node:";
package/dist/index.mjs CHANGED
@@ -6307,7 +6307,7 @@ async function invalidateCredentialsToken(options) {
6307
6307
  }
6308
6308
 
6309
6309
  // src/sdk-version.ts
6310
- var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.0" : void 0) || "unknown";
6310
+ var SDK_VERSION = (typeof process !== "undefined" && process.env ? "0.54.1" : void 0) || "unknown";
6311
6311
 
6312
6312
  // src/utils/open-url.ts
6313
6313
  var nodePrefix = "node:";
@@ -31,6 +31,7 @@ export declare const createTriggerInboxPlugin: (sdk: {
31
31
  createTriggerInbox: (options?: {
32
32
  app: string;
33
33
  action: string;
34
+ name?: string | undefined;
34
35
  connection?: string | number | null | undefined;
35
36
  inputs?: Record<string, unknown> | undefined;
36
37
  notificationUrl?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/triggers/createTriggerInbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA0B,MAAM,WAAW,CAAC;AAU7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAInE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;aAIpB;QACP,4BAA4B,EAAE,4BAA4B,CAAC;KAC5D,GAAG,yBAAyB,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2E/C,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,UAAU,CACvD,OAAO,wBAAwB,CAChC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/triggers/createTriggerInbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA0B,MAAM,WAAW,CAAC;AAa7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAKnE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;aAIpB;QACP,4BAA4B,EAAE,4BAA4B,CAAC;KAC5D,GAAG,yBAAyB,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+F/C,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,UAAU,CACvD,OAAO,wBAAwB,CAChC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { definePlugin, createPluginMethod } from "../../../utils/plugin-utils";
2
2
  import { CreateTriggerInboxSchema, TriggerInboxItemSchema } from "./schemas";
3
- import { ZapierConfigurationError } from "../../../types/errors";
3
+ import { ZapierConfigurationError, ZapierConflictError, } from "../../../types/errors";
4
4
  import { appKeyResolver, actionKeyResolver, connectionIdResolver, inputsResolver, } from "../../../resolvers";
5
5
  import { resolveConnectionId } from "../../../utils/domain-utils";
6
6
  import { triggersDefaults } from "../shared";
7
+ import { extractErrorDetail } from "../utils";
7
8
  export const createTriggerInboxPlugin = definePlugin((sdk) => createPluginMethod(sdk, {
8
9
  ...triggersDefaults,
9
10
  name: "createTriggerInbox",
@@ -16,6 +17,7 @@ export const createTriggerInboxPlugin = definePlugin((sdk) => createPluginMethod
16
17
  // seeded into resolvedParams without polluting the user-facing schema
17
18
  // (where it would leak into the SDK method signature and CLI flags).
18
19
  resolvers: {
20
+ name: { type: "static", inputType: "text" },
19
21
  app: appKeyResolver,
20
22
  action: actionKeyResolver,
21
23
  connection: connectionIdResolver,
@@ -24,7 +26,7 @@ export const createTriggerInboxPlugin = definePlugin((sdk) => createPluginMethod
24
26
  },
25
27
  handler: async ({ sdk, options }) => {
26
28
  const { api } = sdk.context;
27
- const { app: appKey, action: actionKey, connection, inputs = {}, notificationUrl, } = options;
29
+ const { name, app: appKey, action: actionKey, connection, inputs = {}, notificationUrl, } = options;
28
30
  const resolvedConnectionId = await resolveConnectionId({
29
31
  connection,
30
32
  resolveConnection: sdk.context.resolveConnection,
@@ -41,10 +43,23 @@ export const createTriggerInboxPlugin = definePlugin((sdk) => createPluginMethod
41
43
  connection_id: resolvedConnectionId ?? null,
42
44
  },
43
45
  };
46
+ if (name !== undefined) {
47
+ requestBody.name = name;
48
+ }
44
49
  if (notificationUrl !== undefined) {
45
50
  requestBody.notification_url = notificationUrl;
46
51
  }
47
- const rawResponse = await api.post("/trigger-inbox/api/v1/inboxes", requestBody, { authRequired: true });
52
+ const rawResponse = await api.post("/trigger-inbox/api/v1/inboxes", requestBody, {
53
+ authRequired: true,
54
+ customErrorHandler: ({ status, data }) => {
55
+ if (status === 409) {
56
+ const detail = extractErrorDetail(data);
57
+ return new ZapierConflictError(detail ??
58
+ `An inbox named "${name}" already exists with a different subscription.`, { statusCode: status, resourceType: "trigger_inbox" });
59
+ }
60
+ return undefined;
61
+ },
62
+ });
48
63
  return { data: TriggerInboxItemSchema.parse(rawResponse) };
49
64
  },
50
65
  }));
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import type { FunctionOptions } from "../../../types/functions";
3
3
  import { TriggerInboxItemSchema, type TriggerInboxItem } from "../../../schemas/TriggerInbox";
4
4
  export declare const CreateTriggerInboxSchema: z.ZodObject<{
5
+ name: z.ZodOptional<z.ZodString>;
5
6
  app: z.ZodString & {
6
7
  _def: z.core.$ZodStringDef & import("../../..").PositionalMetadata;
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/plugins/triggers/createTriggerInbox/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAKvC,eAAO,MAAM,wBAAwB;;;;;;;;;;iBAkBK,CAAC;AAE3C,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,wBAAwB,CAChC,GACC,eAAe,CAAC;AAElB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../../src/plugins/triggers/createTriggerInbox/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAQhE,OAAO,EACL,sBAAsB,EACtB,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AAKvC,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAqBK,CAAC;AAE3C,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,wBAAwB,CAChC,GACC,eAAe,CAAC;AAElB,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;CACxB;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { z } from "zod";
2
- import { AppPropertySchema, ActionPropertySchema, ConnectionPropertySchema, InputsPropertySchema, } from "../../../types/properties";
2
+ import { AppPropertySchema, ActionPropertySchema, ConnectionPropertySchema, InputsPropertySchema, TriggerInboxNamePropertySchema, } from "../../../types/properties";
3
3
  import { TriggerInboxItemSchema, } from "../../../schemas/TriggerInbox";
4
- const CreateTriggerInboxDescription = "Create a new trigger inbox subscription with an auto-generated name. Always creates; use ensureTriggerInbox for get-or-create on a stable name.";
4
+ const CreateTriggerInboxDescription = "Create a new trigger inbox subscription. Always creates a new inbox; use ensureTriggerInbox for get-or-create on a stable name.";
5
5
  export const CreateTriggerInboxSchema = z
6
6
  .object({
7
+ name: TriggerInboxNamePropertySchema.optional().describe("Optional inbox name. Auto-generated when omitted. Throws a conflict error if the name is already in use by another subscription."),
7
8
  app: AppPropertySchema,
8
9
  action: ActionPropertySchema,
9
10
  connection: ConnectionPropertySchema.nullable()
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/triggers/ensureTriggerInbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA0B,MAAM,WAAW,CAAC;AAa7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAcnE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;aAIpB;QACP,4BAA4B,EAAE,4BAA4B,CAAC;KAC5D,GAAG,yBAAyB,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2F/C,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,UAAU,CACvD,OAAO,wBAAwB,CAChC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/triggers/ensureTriggerInbox/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA0B,MAAM,WAAW,CAAC;AAa7E,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAKnE,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;aAIpB;QACP,4BAA4B,EAAE,4BAA4B,CAAC;KAC5D,GAAG,yBAAyB,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2F/C,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG,UAAU,CACvD,OAAO,wBAAwB,CAChC,CAAC;AAEF,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
@@ -4,18 +4,7 @@ import { ZapierConfigurationError, ZapierConflictError, } from "../../../types/e
4
4
  import { appKeyResolver, actionKeyResolver, connectionIdResolver, inputsResolver, } from "../../../resolvers";
5
5
  import { resolveConnectionId } from "../../../utils/domain-utils";
6
6
  import { triggersDefaults } from "../shared";
7
- function extractErrorDetail(data) {
8
- if (typeof data !== "object" || data === null)
9
- return undefined;
10
- const errors = data.errors;
11
- if (!Array.isArray(errors) || errors.length === 0)
12
- return undefined;
13
- const first = errors[0];
14
- if (typeof first !== "object" || first === null)
15
- return undefined;
16
- const detail = first.detail;
17
- return typeof detail === "string" ? detail : undefined;
18
- }
7
+ import { extractErrorDetail } from "../utils";
19
8
  export const ensureTriggerInboxPlugin = definePlugin((sdk) => createPluginMethod(sdk, {
20
9
  ...triggersDefaults,
21
10
  name: "ensureTriggerInbox",
@@ -14,4 +14,10 @@ export declare function resolveTriggerInboxId({ api, inbox, }: {
14
14
  api: ApiClient;
15
15
  inbox: string;
16
16
  }): Promise<string>;
17
+ /**
18
+ * Pulls `errors[0].detail` off a JSON:API-style error response body.
19
+ * Returns `undefined` for any shape that doesn't match, so callers can
20
+ * fall back to a default message.
21
+ */
22
+ export declare function extractErrorDetail(data: unknown): string | undefined;
17
23
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/triggers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAM3C;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,GAAG,EACH,KAAK,GACN,EAAE;IACD,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/plugins/triggers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAM3C;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,EAC1C,GAAG,EACH,KAAK,GACN,EAAE;IACD,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBlB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAQpE"}
@@ -26,3 +26,20 @@ export async function resolveTriggerInboxId({ api, inbox, }) {
26
26
  }
27
27
  return id;
28
28
  }
29
+ /**
30
+ * Pulls `errors[0].detail` off a JSON:API-style error response body.
31
+ * Returns `undefined` for any shape that doesn't match, so callers can
32
+ * fall back to a default message.
33
+ */
34
+ export function extractErrorDetail(data) {
35
+ if (typeof data !== "object" || data === null)
36
+ return undefined;
37
+ const errors = data.errors;
38
+ if (!Array.isArray(errors) || errors.length === 0)
39
+ return undefined;
40
+ const first = errors[0];
41
+ if (typeof first !== "object" || first === null)
42
+ return undefined;
43
+ const detail = first.detail;
44
+ return typeof detail === "string" ? detail : undefined;
45
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zapier/zapier-sdk",
3
- "version": "0.54.0",
3
+ "version": "0.54.1",
4
4
  "description": "Complete Zapier SDK - combines all Zapier SDK packages",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.mjs",