@zapier/zapier-sdk 0.33.0 → 0.33.2

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.
Files changed (128) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/index.cjs +2 -1
  3. package/dist/index.d.mts +9 -1
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.mjs +2 -1
  7. package/dist/plugins/registry/index.d.ts.map +1 -1
  8. package/dist/plugins/registry/index.js +1 -0
  9. package/dist/types/sdk.d.ts +8 -0
  10. package/dist/types/sdk.d.ts.map +1 -1
  11. package/package.json +2 -2
  12. package/dist/api/auth.test.d.ts +0 -2
  13. package/dist/api/auth.test.d.ts.map +0 -1
  14. package/dist/api/auth.test.js +0 -220
  15. package/dist/api/client.test.d.ts +0 -2
  16. package/dist/api/client.test.d.ts.map +0 -1
  17. package/dist/api/client.test.js +0 -611
  18. package/dist/api/debug.test.d.ts +0 -2
  19. package/dist/api/debug.test.d.ts.map +0 -1
  20. package/dist/api/debug.test.js +0 -59
  21. package/dist/api/polling.test.d.ts +0 -2
  22. package/dist/api/polling.test.d.ts.map +0 -1
  23. package/dist/api/polling.test.js +0 -360
  24. package/dist/auth.test.d.ts +0 -2
  25. package/dist/auth.test.d.ts.map +0 -1
  26. package/dist/auth.test.js +0 -480
  27. package/dist/plugins/eventEmission/builders.test.d.ts +0 -2
  28. package/dist/plugins/eventEmission/builders.test.d.ts.map +0 -1
  29. package/dist/plugins/eventEmission/builders.test.js +0 -138
  30. package/dist/plugins/eventEmission/index.test.d.ts +0 -5
  31. package/dist/plugins/eventEmission/index.test.d.ts.map +0 -1
  32. package/dist/plugins/eventEmission/index.test.js +0 -712
  33. package/dist/plugins/eventEmission/transport.test.d.ts +0 -5
  34. package/dist/plugins/eventEmission/transport.test.d.ts.map +0 -1
  35. package/dist/plugins/eventEmission/transport.test.js +0 -164
  36. package/dist/plugins/fetch/index.test.d.ts +0 -2
  37. package/dist/plugins/fetch/index.test.d.ts.map +0 -1
  38. package/dist/plugins/fetch/index.test.js +0 -428
  39. package/dist/plugins/findFirstConnection/index.test.d.ts +0 -2
  40. package/dist/plugins/findFirstConnection/index.test.d.ts.map +0 -1
  41. package/dist/plugins/findFirstConnection/index.test.js +0 -177
  42. package/dist/plugins/findUniqueConnection/index.test.d.ts +0 -2
  43. package/dist/plugins/findUniqueConnection/index.test.d.ts.map +0 -1
  44. package/dist/plugins/findUniqueConnection/index.test.js +0 -159
  45. package/dist/plugins/getAction/index.test.d.ts +0 -2
  46. package/dist/plugins/getAction/index.test.d.ts.map +0 -1
  47. package/dist/plugins/getAction/index.test.js +0 -211
  48. package/dist/plugins/getApp/index.test.d.ts +0 -2
  49. package/dist/plugins/getApp/index.test.d.ts.map +0 -1
  50. package/dist/plugins/getApp/index.test.js +0 -157
  51. package/dist/plugins/getConnection/index.test.d.ts +0 -2
  52. package/dist/plugins/getConnection/index.test.d.ts.map +0 -1
  53. package/dist/plugins/getConnection/index.test.js +0 -124
  54. package/dist/plugins/getInputFieldsSchema/index.test.d.ts +0 -2
  55. package/dist/plugins/getInputFieldsSchema/index.test.d.ts.map +0 -1
  56. package/dist/plugins/getInputFieldsSchema/index.test.js +0 -291
  57. package/dist/plugins/listActions/index.test.d.ts +0 -2
  58. package/dist/plugins/listActions/index.test.d.ts.map +0 -1
  59. package/dist/plugins/listActions/index.test.js +0 -454
  60. package/dist/plugins/listApps/index.test.d.ts +0 -2
  61. package/dist/plugins/listApps/index.test.d.ts.map +0 -1
  62. package/dist/plugins/listApps/index.test.js +0 -124
  63. package/dist/plugins/listConnections/index.test.d.ts +0 -2
  64. package/dist/plugins/listConnections/index.test.d.ts.map +0 -1
  65. package/dist/plugins/listConnections/index.test.js +0 -920
  66. package/dist/plugins/listInputFieldChoices/index.test.d.ts +0 -2
  67. package/dist/plugins/listInputFieldChoices/index.test.d.ts.map +0 -1
  68. package/dist/plugins/listInputFieldChoices/index.test.js +0 -717
  69. package/dist/plugins/listInputFields/index.test.d.ts +0 -2
  70. package/dist/plugins/listInputFields/index.test.d.ts.map +0 -1
  71. package/dist/plugins/listInputFields/index.test.js +0 -359
  72. package/dist/plugins/manifest/index.test.d.ts +0 -2
  73. package/dist/plugins/manifest/index.test.d.ts.map +0 -1
  74. package/dist/plugins/manifest/index.test.js +0 -1179
  75. package/dist/plugins/request/index.test.d.ts +0 -2
  76. package/dist/plugins/request/index.test.d.ts.map +0 -1
  77. package/dist/plugins/request/index.test.js +0 -458
  78. package/dist/plugins/runAction/index.test.d.ts +0 -2
  79. package/dist/plugins/runAction/index.test.d.ts.map +0 -1
  80. package/dist/plugins/runAction/index.test.js +0 -350
  81. package/dist/resolvers/connectionId.test.d.ts +0 -2
  82. package/dist/resolvers/connectionId.test.d.ts.map +0 -1
  83. package/dist/resolvers/connectionId.test.js +0 -61
  84. package/dist/sdk.test.d.ts +0 -2
  85. package/dist/sdk.test.d.ts.map +0 -1
  86. package/dist/sdk.test.js +0 -260
  87. package/dist/types/domain.test.d.ts +0 -2
  88. package/dist/types/domain.test.d.ts.map +0 -1
  89. package/dist/types/domain.test.js +0 -39
  90. package/dist/utils/array-utils.test.d.ts +0 -2
  91. package/dist/utils/array-utils.test.d.ts.map +0 -1
  92. package/dist/utils/array-utils.test.js +0 -107
  93. package/dist/utils/batch-utils.test.d.ts +0 -2
  94. package/dist/utils/batch-utils.test.d.ts.map +0 -1
  95. package/dist/utils/batch-utils.test.js +0 -476
  96. package/dist/utils/domain-utils.test.d.ts +0 -2
  97. package/dist/utils/domain-utils.test.d.ts.map +0 -1
  98. package/dist/utils/domain-utils.test.js +0 -346
  99. package/dist/utils/file-utils.test.d.ts +0 -2
  100. package/dist/utils/file-utils.test.d.ts.map +0 -1
  101. package/dist/utils/file-utils.test.js +0 -51
  102. package/dist/utils/function-utils.test.d.ts +0 -2
  103. package/dist/utils/function-utils.test.d.ts.map +0 -1
  104. package/dist/utils/function-utils.test.js +0 -188
  105. package/dist/utils/id-utils.test.d.ts +0 -2
  106. package/dist/utils/id-utils.test.d.ts.map +0 -1
  107. package/dist/utils/id-utils.test.js +0 -22
  108. package/dist/utils/pagination-utils.test.d.ts +0 -17
  109. package/dist/utils/pagination-utils.test.d.ts.map +0 -1
  110. package/dist/utils/pagination-utils.test.js +0 -461
  111. package/dist/utils/retry-utils.test.d.ts +0 -2
  112. package/dist/utils/retry-utils.test.d.ts.map +0 -1
  113. package/dist/utils/retry-utils.test.js +0 -90
  114. package/dist/utils/string-utils.test.d.ts +0 -2
  115. package/dist/utils/string-utils.test.d.ts.map +0 -1
  116. package/dist/utils/string-utils.test.js +0 -59
  117. package/dist/utils/telemetry-context.test.d.ts +0 -2
  118. package/dist/utils/telemetry-context.test.d.ts.map +0 -1
  119. package/dist/utils/telemetry-context.test.js +0 -154
  120. package/dist/utils/telemetry-utils.test.d.ts +0 -2
  121. package/dist/utils/telemetry-utils.test.d.ts.map +0 -1
  122. package/dist/utils/telemetry-utils.test.js +0 -155
  123. package/dist/utils/url-utils.test.d.ts +0 -2
  124. package/dist/utils/url-utils.test.d.ts.map +0 -1
  125. package/dist/utils/url-utils.test.js +0 -103
  126. package/dist/utils/validation.test.d.ts +0 -2
  127. package/dist/utils/validation.test.d.ts.map +0 -1
  128. package/dist/utils/validation.test.js +0 -44
@@ -1,154 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { isTelemetryNested, runWithTelemetryContext, setMethodMetadata, getMethodMetadata, } from "./telemetry-context";
3
- describe("telemetry-context", () => {
4
- describe("isTelemetryNested", () => {
5
- it("returns false outside any context", () => {
6
- expect(isTelemetryNested()).toBe(false);
7
- });
8
- it("returns false inside top-level runWithTelemetryContext (depth 0)", () => {
9
- runWithTelemetryContext(() => {
10
- expect(isTelemetryNested()).toBe(false);
11
- });
12
- });
13
- it("returns true inside nested runWithTelemetryContext (depth 1)", () => {
14
- runWithTelemetryContext(() => {
15
- runWithTelemetryContext(() => {
16
- expect(isTelemetryNested()).toBe(true);
17
- });
18
- });
19
- });
20
- it("returns true at deeper nesting levels", () => {
21
- runWithTelemetryContext(() => {
22
- runWithTelemetryContext(() => {
23
- runWithTelemetryContext(() => {
24
- expect(isTelemetryNested()).toBe(true);
25
- });
26
- });
27
- });
28
- });
29
- it("restores context after exiting nested scope", () => {
30
- runWithTelemetryContext(() => {
31
- expect(isTelemetryNested()).toBe(false);
32
- runWithTelemetryContext(() => {
33
- expect(isTelemetryNested()).toBe(true);
34
- });
35
- expect(isTelemetryNested()).toBe(false);
36
- });
37
- expect(isTelemetryNested()).toBe(false);
38
- });
39
- });
40
- describe("async boundaries", () => {
41
- it("works correctly across async/await boundaries", async () => {
42
- await runWithTelemetryContext(async () => {
43
- expect(isTelemetryNested()).toBe(false);
44
- await new Promise((resolve) => setTimeout(resolve, 1));
45
- expect(isTelemetryNested()).toBe(false);
46
- await runWithTelemetryContext(async () => {
47
- expect(isTelemetryNested()).toBe(true);
48
- await new Promise((resolve) => setTimeout(resolve, 1));
49
- expect(isTelemetryNested()).toBe(true);
50
- });
51
- });
52
- });
53
- it("isolates parallel async calls from each other", async () => {
54
- const results = [];
55
- await runWithTelemetryContext(async () => {
56
- const task1 = runWithTelemetryContext(async () => {
57
- await new Promise((resolve) => setTimeout(resolve, 5));
58
- results.push({ id: "task1-inner", nested: isTelemetryNested() });
59
- });
60
- const task2 = (async () => {
61
- await new Promise((resolve) => setTimeout(resolve, 1));
62
- results.push({ id: "task2-top", nested: isTelemetryNested() });
63
- })();
64
- await Promise.all([task1, task2]);
65
- });
66
- const task1Result = results.find((r) => r.id === "task1-inner");
67
- const task2Result = results.find((r) => r.id === "task2-top");
68
- expect(task1Result?.nested).toBe(true);
69
- expect(task2Result?.nested).toBe(false);
70
- });
71
- });
72
- describe("setMethodMetadata / getMethodMetadata", () => {
73
- it("round-trips metadata within ALS context", () => {
74
- runWithTelemetryContext(() => {
75
- setMethodMetadata({
76
- selectedApi: "SlackCLIAPI@1.0.0",
77
- operationType: "write",
78
- operationKey: "send_message",
79
- });
80
- const metadata = getMethodMetadata();
81
- expect(metadata).toEqual({
82
- selectedApi: "SlackCLIAPI@1.0.0",
83
- operationType: "write",
84
- operationKey: "send_message",
85
- });
86
- });
87
- });
88
- it("returns undefined outside any ALS context", () => {
89
- expect(getMethodMetadata()).toBeUndefined();
90
- });
91
- it("is isolated between different runWithTelemetryContext scopes", () => {
92
- runWithTelemetryContext(() => {
93
- setMethodMetadata({ selectedApi: "parent" });
94
- runWithTelemetryContext(() => {
95
- setMethodMetadata({ selectedApi: "child" });
96
- expect(getMethodMetadata()?.selectedApi).toBe("child");
97
- });
98
- expect(getMethodMetadata()?.selectedApi).toBe("parent");
99
- });
100
- });
101
- it("merges partial metadata updates", () => {
102
- runWithTelemetryContext(() => {
103
- setMethodMetadata({ selectedApi: "SlackCLIAPI@1.0.0" });
104
- setMethodMetadata({ operationType: "write" });
105
- const metadata = getMethodMetadata();
106
- expect(metadata).toEqual({
107
- selectedApi: "SlackCLIAPI@1.0.0",
108
- operationType: "write",
109
- });
110
- });
111
- });
112
- it("is readable in .then() handler within same ALS scope (paginated pattern)", async () => {
113
- await runWithTelemetryContext(async () => {
114
- setMethodMetadata({
115
- selectedApi: "SlackCLIAPI@1.0.0",
116
- operationType: "write",
117
- operationKey: "send_message",
118
- });
119
- const result = await Promise.resolve("done").then(() => {
120
- return getMethodMetadata();
121
- });
122
- expect(result).toEqual({
123
- selectedApi: "SlackCLIAPI@1.0.0",
124
- operationType: "write",
125
- operationKey: "send_message",
126
- });
127
- });
128
- });
129
- it("is a no-op outside ALS context", () => {
130
- setMethodMetadata({ selectedApi: "test" });
131
- expect(getMethodMetadata()).toBeUndefined();
132
- });
133
- });
134
- describe("runWithTelemetryContext", () => {
135
- it("returns the value from the wrapped function", () => {
136
- const result = runWithTelemetryContext(() => 42);
137
- expect(result).toBe(42);
138
- });
139
- it("returns async values from the wrapped function", async () => {
140
- const result = await runWithTelemetryContext(async () => "hello");
141
- expect(result).toBe("hello");
142
- });
143
- it("propagates errors from the wrapped function", () => {
144
- expect(() => runWithTelemetryContext(() => {
145
- throw new Error("test error");
146
- })).toThrow("test error");
147
- });
148
- it("propagates async errors from the wrapped function", async () => {
149
- await expect(runWithTelemetryContext(async () => {
150
- throw new Error("async test error");
151
- })).rejects.toThrow("async test error");
152
- });
153
- });
154
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=telemetry-utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry-utils.test.d.ts","sourceRoot":"","sources":["../../src/utils/telemetry-utils.test.ts"],"names":[],"mappings":""}
@@ -1,155 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- import { createTelemetryCallback } from "./telemetry-utils";
3
- import { runWithTelemetryContext, setMethodMetadata, } from "./telemetry-context";
4
- describe("createTelemetryCallback", () => {
5
- it("should create callback that emits telemetry with explicit method name", () => {
6
- const mockEmit = vi.fn();
7
- const callback = createTelemetryCallback(mockEmit, "testMethod");
8
- callback.onMethodCalled({
9
- methodName: "ignoredName",
10
- durationMs: 123,
11
- success: true,
12
- argumentCount: 2,
13
- isPaginated: false,
14
- });
15
- expect(mockEmit).toHaveBeenCalledWith({
16
- method_name: "testMethod",
17
- execution_duration_ms: 123,
18
- success_flag: true,
19
- error_message: null,
20
- error_type: null,
21
- argument_count: 2,
22
- is_paginated: false,
23
- selected_api: null,
24
- operation_type: null,
25
- operation_key: null,
26
- });
27
- });
28
- it("should include error details when method fails", () => {
29
- const mockEmit = vi.fn();
30
- const callback = createTelemetryCallback(mockEmit, "failingMethod");
31
- const testError = new Error("Test failure");
32
- callback.onMethodCalled({
33
- methodName: "ignoredName",
34
- durationMs: 50,
35
- success: false,
36
- error: testError,
37
- argumentCount: 1,
38
- isPaginated: false,
39
- });
40
- expect(mockEmit).toHaveBeenCalledWith({
41
- method_name: "failingMethod",
42
- execution_duration_ms: 50,
43
- success_flag: false,
44
- error_message: "Test failure",
45
- error_type: "Error",
46
- argument_count: 1,
47
- is_paginated: false,
48
- selected_api: null,
49
- operation_type: null,
50
- operation_key: null,
51
- });
52
- });
53
- it("should handle paginated method calls", () => {
54
- const mockEmit = vi.fn();
55
- const callback = createTelemetryCallback(mockEmit, "listItems");
56
- callback.onMethodCalled({
57
- methodName: "ignoredName",
58
- durationMs: 200,
59
- success: true,
60
- argumentCount: 1,
61
- isPaginated: true,
62
- });
63
- expect(mockEmit).toHaveBeenCalledWith({
64
- method_name: "listItems",
65
- execution_duration_ms: 200,
66
- success_flag: true,
67
- error_message: null,
68
- error_type: null,
69
- argument_count: 1,
70
- is_paginated: true,
71
- selected_api: null,
72
- operation_type: null,
73
- operation_key: null,
74
- });
75
- });
76
- it("should handle custom error types", () => {
77
- const mockEmit = vi.fn();
78
- const callback = createTelemetryCallback(mockEmit, "customFailMethod");
79
- class CustomError extends Error {
80
- constructor(message) {
81
- super(message);
82
- this.name = "CustomError";
83
- }
84
- }
85
- const customError = new CustomError("Custom failure");
86
- callback.onMethodCalled({
87
- methodName: "ignoredName",
88
- durationMs: 75,
89
- success: false,
90
- error: customError,
91
- argumentCount: 3,
92
- isPaginated: false,
93
- });
94
- expect(mockEmit).toHaveBeenCalledWith({
95
- method_name: "customFailMethod",
96
- execution_duration_ms: 75,
97
- success_flag: false,
98
- error_message: "Custom failure",
99
- error_type: "CustomError",
100
- argument_count: 3,
101
- is_paginated: false,
102
- selected_api: null,
103
- operation_type: null,
104
- operation_key: null,
105
- });
106
- });
107
- it("should include ALS metadata when set", () => {
108
- const mockEmit = vi.fn();
109
- const callback = createTelemetryCallback(mockEmit, "runAction");
110
- runWithTelemetryContext(() => {
111
- setMethodMetadata({
112
- selectedApi: "SlackCLIAPI@1.0.0",
113
- operationType: "write",
114
- operationKey: "send_message",
115
- });
116
- callback.onMethodCalled({
117
- methodName: "ignoredName",
118
- durationMs: 100,
119
- success: true,
120
- argumentCount: 1,
121
- isPaginated: false,
122
- });
123
- });
124
- expect(mockEmit).toHaveBeenCalledWith({
125
- method_name: "runAction",
126
- execution_duration_ms: 100,
127
- success_flag: true,
128
- error_message: null,
129
- error_type: null,
130
- argument_count: 1,
131
- is_paginated: false,
132
- selected_api: "SlackCLIAPI@1.0.0",
133
- operation_type: "write",
134
- operation_key: "send_message",
135
- });
136
- });
137
- it("should default metadata fields to null when no ALS metadata is set", () => {
138
- const mockEmit = vi.fn();
139
- const callback = createTelemetryCallback(mockEmit, "listApps");
140
- runWithTelemetryContext(() => {
141
- callback.onMethodCalled({
142
- methodName: "ignoredName",
143
- durationMs: 50,
144
- success: true,
145
- argumentCount: 0,
146
- isPaginated: false,
147
- });
148
- });
149
- expect(mockEmit).toHaveBeenCalledWith(expect.objectContaining({
150
- selected_api: null,
151
- operation_type: null,
152
- operation_key: null,
153
- }));
154
- });
155
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=url-utils.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"url-utils.test.d.ts","sourceRoot":"","sources":["../../src/utils/url-utils.test.ts"],"names":[],"mappings":""}
@@ -1,103 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
- import { getZapierBaseUrl, getTrackingBaseUrl } from "./url-utils";
3
- describe("getZapierBaseUrl", () => {
4
- describe("with valid Zapier domains", () => {
5
- it("should return root domain for zapier.* patterns", () => {
6
- expect(getZapierBaseUrl("https://zapier.com")).toBe("https://zapier.com");
7
- expect(getZapierBaseUrl("https://api.zapier.com")).toBe("https://zapier.com");
8
- expect(getZapierBaseUrl("https://staging.zapier.com")).toBe("https://zapier.com");
9
- expect(getZapierBaseUrl("https://custom.zapier.dev:8080")).toBe("https://zapier.dev");
10
- });
11
- it("should return root domain for zapier-*.* patterns", () => {
12
- expect(getZapierBaseUrl("https://zapier-staging.dev")).toBe("https://zapier-staging.dev");
13
- expect(getZapierBaseUrl("https://zapier-production.example.com")).toBe("https://example.com");
14
- expect(getZapierBaseUrl("http://zapier-custom.local")).toBe("http://zapier-custom.local");
15
- });
16
- });
17
- describe("with non-Zapier domains", () => {
18
- it("should return undefined for non-Zapier domains", () => {
19
- expect(getZapierBaseUrl("https://example.com")).toBe(undefined);
20
- expect(getZapierBaseUrl("https://api.example.com")).toBe(undefined);
21
- expect(getZapierBaseUrl("http://localhost")).toBe(undefined);
22
- expect(getZapierBaseUrl("http://127.0.0.1")).toBe(undefined);
23
- expect(getZapierBaseUrl("https://my-zapier.com")).toBe(undefined);
24
- });
25
- });
26
- describe("with invalid inputs", () => {
27
- it("should return undefined for invalid or missing URLs", () => {
28
- expect(getZapierBaseUrl()).toBe(undefined);
29
- expect(getZapierBaseUrl(undefined)).toBe(undefined);
30
- expect(getZapierBaseUrl("")).toBe(undefined);
31
- expect(getZapierBaseUrl("invalid-url")).toBe(undefined);
32
- });
33
- });
34
- });
35
- describe("getTrackingBaseUrl", () => {
36
- let originalEnv;
37
- beforeEach(() => {
38
- originalEnv = {
39
- ZAPIER_TRACKING_BASE_URL: process.env.ZAPIER_TRACKING_BASE_URL,
40
- ZAPIER_BASE_URL: process.env.ZAPIER_BASE_URL,
41
- };
42
- });
43
- afterEach(() => {
44
- if (originalEnv.ZAPIER_TRACKING_BASE_URL !== undefined) {
45
- process.env.ZAPIER_TRACKING_BASE_URL =
46
- originalEnv.ZAPIER_TRACKING_BASE_URL;
47
- }
48
- else {
49
- delete process.env.ZAPIER_TRACKING_BASE_URL;
50
- }
51
- if (originalEnv.ZAPIER_BASE_URL !== undefined) {
52
- process.env.ZAPIER_BASE_URL = originalEnv.ZAPIER_BASE_URL;
53
- }
54
- else {
55
- delete process.env.ZAPIER_BASE_URL;
56
- }
57
- });
58
- describe("precedence rules", () => {
59
- it("should prioritize trackingBaseUrl parameter", () => {
60
- process.env.ZAPIER_TRACKING_BASE_URL = "https://env-tracking.zapier.com";
61
- expect(getTrackingBaseUrl({
62
- trackingBaseUrl: "https://param-tracking.zapier.com",
63
- baseUrl: "https://api.example.com",
64
- })).toBe("https://param-tracking.zapier.com");
65
- });
66
- it("should use ZAPIER_TRACKING_BASE_URL environment variable", () => {
67
- process.env.ZAPIER_TRACKING_BASE_URL = "https://env-tracking.zapier.com";
68
- expect(getTrackingBaseUrl({
69
- baseUrl: "https://api.example.com",
70
- })).toBe("https://env-tracking.zapier.com");
71
- });
72
- it("should derive from baseUrl if it's a Zapier domain", () => {
73
- delete process.env.ZAPIER_TRACKING_BASE_URL;
74
- expect(getTrackingBaseUrl({
75
- baseUrl: "https://api.zapier.com",
76
- })).toBe("https://zapier.com");
77
- expect(getTrackingBaseUrl({
78
- baseUrl: "https://custom.zapier.dev:8080",
79
- })).toBe("https://zapier.dev");
80
- });
81
- it("should use baseUrl directly for non-Zapier domains", () => {
82
- delete process.env.ZAPIER_TRACKING_BASE_URL;
83
- expect(getTrackingBaseUrl({
84
- baseUrl: "https://api.example.com",
85
- })).toBe("https://api.example.com");
86
- expect(getTrackingBaseUrl({
87
- baseUrl: "http://localhost:3000",
88
- })).toBe("http://localhost:3000");
89
- });
90
- it("should fallback to ZAPIER_BASE_URL constant", async () => {
91
- delete process.env.ZAPIER_TRACKING_BASE_URL;
92
- process.env.ZAPIER_BASE_URL = "https://custom.zapier.com";
93
- // Clear module cache and re-import to get fresh constants
94
- vi.resetModules();
95
- const { getTrackingBaseUrl: freshGetTrackingBaseUrl } = await import("./url-utils");
96
- expect(freshGetTrackingBaseUrl({})).toBe("https://custom.zapier.com");
97
- delete process.env.ZAPIER_BASE_URL;
98
- vi.resetModules();
99
- const { getTrackingBaseUrl: defaultGetTrackingBaseUrl } = await import("./url-utils");
100
- expect(defaultGetTrackingBaseUrl({})).toBe("https://zapier.com");
101
- });
102
- });
103
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=validation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validation.test.d.ts","sourceRoot":"","sources":["../../src/utils/validation.test.ts"],"names":[],"mappings":""}
@@ -1,44 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { z } from "zod";
3
- import { createValidator } from "./validation";
4
- import { ZapierValidationError } from "../types/errors";
5
- describe("validation utilities", () => {
6
- describe("createValidator", () => {
7
- it("should validate valid input", () => {
8
- const schema = z.object({
9
- name: z.string(),
10
- age: z.number(),
11
- });
12
- const validator = createValidator(schema);
13
- const result = validator({ name: "John", age: 30 });
14
- expect(result).toEqual({ name: "John", age: 30 });
15
- });
16
- it("should throw ZapierValidationError for invalid input", () => {
17
- const schema = z.object({
18
- name: z.string(),
19
- age: z.number(),
20
- });
21
- const validator = createValidator(schema);
22
- expect(() => {
23
- validator({ name: "John", age: "not-a-number" });
24
- }).toThrow(ZapierValidationError);
25
- });
26
- it("should include helpful error messages", () => {
27
- const schema = z.object({
28
- name: z.string(),
29
- age: z.number().min(0),
30
- });
31
- const validator = createValidator(schema);
32
- try {
33
- validator({ name: 123, age: -5 });
34
- }
35
- catch (error) {
36
- expect(error).toBeInstanceOf(ZapierValidationError);
37
- expect(error.message).toContain("name:");
38
- expect(error.message).toContain("age:");
39
- expect(error.details
40
- ?.zodErrors).toBeDefined();
41
- }
42
- });
43
- });
44
- });