zerodrop-client 0.1.6 → 0.1.9
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/README.md +179 -163
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +56 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,163 +1,179 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
//
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
- `
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
##
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
1
|
+
# zerodrop-client
|
|
2
|
+
|
|
3
|
+
Instant temporary email inboxes for testing auth flows, CI pipelines, and QA automation.
|
|
4
|
+
|
|
5
|
+
No signup. No configuration. Works in 4 lines.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install zerodrop-client
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Test Isolation
|
|
14
|
+
|
|
15
|
+
Every inbox is isolated by default. `generateInbox()` returns a unique address on every call — no shared state, no pools, no configuration needed.
|
|
16
|
+
|
|
17
|
+
Zero cross-test contamination. Every test run gets a cryptographically isolated inbox that expires automatically after 30 minutes.
|
|
18
|
+
|
|
19
|
+
This means parallel CI builds work out of the box — 10 workers, 10 inboxes, zero race conditions.
|
|
20
|
+
|
|
21
|
+
## Zero-Auth Mode (Local Development)
|
|
22
|
+
|
|
23
|
+
```javascript
|
|
24
|
+
import { ZeroDrop } from 'zerodrop-client';
|
|
25
|
+
|
|
26
|
+
const mail = new ZeroDrop();
|
|
27
|
+
const inbox = mail.generateInbox();
|
|
28
|
+
// → "swift-x7k29@zerodrop-sandbox.online"
|
|
29
|
+
|
|
30
|
+
const email = await mail.waitForLatest(inbox, { timeout: 10000 });
|
|
31
|
+
console.log(email.subject); // "Reset your password"
|
|
32
|
+
console.log(email.otp); // "123456" — auto-extracted, no regex needed
|
|
33
|
+
console.log(email.magicLink); // "https://..." — auto-extracted verification link
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## CI Pipeline Mode (Playwright / Cypress)
|
|
37
|
+
|
|
38
|
+
```javascript
|
|
39
|
+
import { ZeroDrop } from 'zerodrop-client';
|
|
40
|
+
|
|
41
|
+
const mail = new ZeroDrop(process.env.ZERODROP_API_KEY);
|
|
42
|
+
|
|
43
|
+
test('password reset flow', async ({ page }) => {
|
|
44
|
+
const inbox = mail.generateInbox();
|
|
45
|
+
|
|
46
|
+
await page.goto('/forgot-password');
|
|
47
|
+
await page.fill('[name="email"]', inbox);
|
|
48
|
+
await page.click('[type="submit"]');
|
|
49
|
+
|
|
50
|
+
const email = await mail.waitForLatest(inbox, { timeout: 15000 });
|
|
51
|
+
expect(email.subject).toContain('Reset your password');
|
|
52
|
+
|
|
53
|
+
// No regex — magicLink is auto-extracted at the edge
|
|
54
|
+
await page.goto(email.magicLink);
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## OTP Auto-Extraction
|
|
59
|
+
|
|
60
|
+
ZeroDrop extracts OTP codes and magic links at the edge before emails reach your test suite. No regex required.
|
|
61
|
+
|
|
62
|
+
```javascript
|
|
63
|
+
const email = await mail.waitForLatest(inbox);
|
|
64
|
+
|
|
65
|
+
// Auto-extracted fields
|
|
66
|
+
email.otp // "123456" — 4-8 digit verification code
|
|
67
|
+
email.magicLink // "https://app.com/verify?token=abc" — verification/reset link
|
|
68
|
+
|
|
69
|
+
// Raw body still available if you need it
|
|
70
|
+
email.body // Full plain-text body
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Both fields are `null` if not detected in the email.
|
|
74
|
+
|
|
75
|
+
## Parallel CI Runs
|
|
76
|
+
|
|
77
|
+
Inbox generation is client-side — no API call, no throttling.
|
|
78
|
+
50 parallel tests generate 50 inboxes instantly.
|
|
79
|
+
|
|
80
|
+
```javascript
|
|
81
|
+
// Safe to run in parallel — generateInbox() is local
|
|
82
|
+
const inboxes = Array.from({ length: 50 }, () => mail.generateInbox());
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The rate limit applies to the polling endpoint — 20 requests
|
|
86
|
+
per 10 seconds per IP on the free tier. For heavy parallel
|
|
87
|
+
usage, stagger `waitForLatest()` calls slightly:
|
|
88
|
+
|
|
89
|
+
```javascript
|
|
90
|
+
// Stagger polls to avoid burst on shared IP
|
|
91
|
+
const results = await Promise.all(
|
|
92
|
+
inboxes.map((inbox, i) =>
|
|
93
|
+
new Promise(resolve => setTimeout(resolve, i * 100))
|
|
94
|
+
.then(() => mail.waitForLatest(inbox, { timeout: 15000 }))
|
|
95
|
+
)
|
|
96
|
+
);
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
For CI pipelines with 20+ parallel tests, use a Workspace
|
|
100
|
+
API key — dedicated rate limit bucket, not shared with
|
|
101
|
+
the public pool.
|
|
102
|
+
|
|
103
|
+
## Webhook Mode (Staging Servers)
|
|
104
|
+
|
|
105
|
+
```javascript
|
|
106
|
+
const mail = new ZeroDrop(process.env.ZERODROP_API_KEY);
|
|
107
|
+
|
|
108
|
+
await mail.onReceived('qa-test@yourcompany.com', 'https://your-server.com/webhook');
|
|
109
|
+
// ZeroDrop POSTs the email JSON to your URL when it arrives
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## API
|
|
113
|
+
|
|
114
|
+
### `new ZeroDrop(apiKey?, options?)`
|
|
115
|
+
- `apiKey` — optional. Omit for free sandbox mode.
|
|
116
|
+
- `options.baseUrl` — override the API base URL.
|
|
117
|
+
|
|
118
|
+
### `mail.generateInbox(): string`
|
|
119
|
+
Returns a ready-to-use email address instantly. No network request.
|
|
120
|
+
|
|
121
|
+
### `mail.fetchLatest(inbox): Promise<ZeroDropEmail | null>`
|
|
122
|
+
Returns the latest email or null if inbox is empty.
|
|
123
|
+
|
|
124
|
+
### `mail.waitForLatest(inbox, options?): Promise<ZeroDropEmail>`
|
|
125
|
+
Polls until an email arrives. Throws `ZeroDropTimeoutError` on timeout.
|
|
126
|
+
- `options.timeout` — ms to wait (default: 10000)
|
|
127
|
+
- `options.pollInterval` — ms between polls (default: 2000)
|
|
128
|
+
|
|
129
|
+
### `mail.onReceived(inbox, webhookUrl): Promise<{ registered: boolean }>`
|
|
130
|
+
Registers a webhook. Requires API key (Workspace tier).
|
|
131
|
+
|
|
132
|
+
## Types
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
interface ZeroDropEmail {
|
|
136
|
+
id: string;
|
|
137
|
+
from: string;
|
|
138
|
+
to: string;
|
|
139
|
+
subject: string;
|
|
140
|
+
body: string;
|
|
141
|
+
rawBody: string;
|
|
142
|
+
receivedAt: Date;
|
|
143
|
+
otp: string | null; // Auto-extracted OTP code (4-8 digits)
|
|
144
|
+
magicLink: string | null; // Auto-extracted verification/reset link
|
|
145
|
+
}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Error Handling
|
|
149
|
+
|
|
150
|
+
```javascript
|
|
151
|
+
import { ZeroDrop, ZeroDropTimeoutError } from 'zerodrop-client';
|
|
152
|
+
|
|
153
|
+
try {
|
|
154
|
+
const email = await mail.waitForLatest(inbox, { timeout: 10000 });
|
|
155
|
+
} catch (err) {
|
|
156
|
+
if (err instanceof ZeroDropTimeoutError) {
|
|
157
|
+
console.error('No email received — check your app is sending correctly');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Free vs Workspace
|
|
163
|
+
|
|
164
|
+
| | Free | Workspace |
|
|
165
|
+
|---|---|---|
|
|
166
|
+
| Inbox generation | ✓ | ✓ |
|
|
167
|
+
| OTP auto-extraction | ✓ | ✓ |
|
|
168
|
+
| Magic link extraction | ✓ | ✓ |
|
|
169
|
+
| Email retention | 30 min | 7 days |
|
|
170
|
+
| Custom domains | ✗ | ✓ |
|
|
171
|
+
| API key | ✗ | ✓ |
|
|
172
|
+
| Webhooks | ✗ | ✓ |
|
|
173
|
+
| AI spam filter | On | Off |
|
|
174
|
+
|
|
175
|
+
Get a Workspace at [zerodrop.dev](https://zerodrop.dev)
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
MIT
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,9 @@ export declare class ZeroDropTimeoutError extends Error {
|
|
|
22
22
|
export declare class ZeroDropAuthError extends Error {
|
|
23
23
|
constructor();
|
|
24
24
|
}
|
|
25
|
+
export declare class ZeroDropNetworkError extends Error {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
25
28
|
export declare class ZeroDrop {
|
|
26
29
|
private apiKey;
|
|
27
30
|
private baseUrl;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAO7C;AAED,qBAAa,iBAAkB,SAAQ,KAAK;;CAK3C;AAuCD,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAmB1D,aAAa,IAAI,MAAM;IAYjB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,IAAI,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAO7C;AAED,qBAAa,iBAAkB,SAAQ,KAAK;;CAK3C;AAED,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,OAAO,EAAE,MAAM;CAO5B;AAuCD,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB;IAmB1D,aAAa,IAAI,MAAM;IAYjB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAyEzD,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC;IA4BnB,UAAU,CACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAkCnC,OAAO,CAAC,KAAK;CAGd;AAMD,eAAe,QAAQ,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// Instant temporary email inboxes for CI/CD
|
|
5
5
|
// ============================================
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ZeroDrop = exports.ZeroDropAuthError = exports.ZeroDropTimeoutError = void 0;
|
|
7
|
+
exports.ZeroDrop = exports.ZeroDropNetworkError = exports.ZeroDropAuthError = exports.ZeroDropTimeoutError = void 0;
|
|
8
8
|
const BASE_URL = "https://zerodrop.dev";
|
|
9
9
|
const FREE_DOMAIN = "zerodrop-sandbox.online";
|
|
10
10
|
const POLL_INTERVAL = 2000;
|
|
@@ -26,6 +26,14 @@ class ZeroDropAuthError extends Error {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
exports.ZeroDropAuthError = ZeroDropAuthError;
|
|
29
|
+
class ZeroDropNetworkError extends Error {
|
|
30
|
+
constructor(message) {
|
|
31
|
+
super(`ZeroDrop: Network error — ${message}. ` +
|
|
32
|
+
`Check https://status.zerodrop.dev for service status.`);
|
|
33
|
+
this.name = "ZeroDropNetworkError";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ZeroDropNetworkError = ZeroDropNetworkError;
|
|
29
37
|
// ============================================
|
|
30
38
|
// Email body extractor
|
|
31
39
|
// ============================================
|
|
@@ -65,7 +73,7 @@ class ZeroDrop {
|
|
|
65
73
|
if (!apiKey) {
|
|
66
74
|
console.warn("[ZeroDrop] No API key provided. Running in public sandbox mode.\n" +
|
|
67
75
|
"[ZeroDrop] Emails are AI-filtered and inboxes expire in 30 minutes.\n" +
|
|
68
|
-
"[ZeroDrop]
|
|
76
|
+
"[ZeroDrop] Free tier uses a shared domain — for production CI use Workspaces: https://zerodrop.dev");
|
|
69
77
|
}
|
|
70
78
|
}
|
|
71
79
|
// ============================================
|
|
@@ -92,13 +100,26 @@ class ZeroDrop {
|
|
|
92
100
|
if (this.apiKey) {
|
|
93
101
|
headers["Authorization"] = `Bearer ${this.apiKey}`;
|
|
94
102
|
}
|
|
95
|
-
|
|
103
|
+
let res;
|
|
104
|
+
try {
|
|
105
|
+
res = await fetch(`${this.baseUrl}/api/inbox/${inboxName}?source=sdk`, { headers });
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
const message = err instanceof Error ? err.message : "fetch failed";
|
|
109
|
+
throw new ZeroDropNetworkError(message);
|
|
110
|
+
}
|
|
96
111
|
if (res.status === 401)
|
|
97
112
|
throw new ZeroDropAuthError();
|
|
98
113
|
if (!res.ok) {
|
|
99
|
-
throw new
|
|
114
|
+
throw new ZeroDropNetworkError(`API returned ${res.status}`);
|
|
115
|
+
}
|
|
116
|
+
let data;
|
|
117
|
+
try {
|
|
118
|
+
data = await res.json();
|
|
119
|
+
}
|
|
120
|
+
catch (_c) {
|
|
121
|
+
throw new ZeroDropNetworkError("Failed to parse API response");
|
|
100
122
|
}
|
|
101
|
-
const data = await res.json();
|
|
102
123
|
if (!data.emails || data.emails.length === 0)
|
|
103
124
|
return null;
|
|
104
125
|
const latest = data.emails[0];
|
|
@@ -117,6 +138,7 @@ class ZeroDrop {
|
|
|
117
138
|
// ============================================
|
|
118
139
|
// waitForLatest()
|
|
119
140
|
// Polls until an email arrives or timeout
|
|
141
|
+
// Network errors are retried until timeout
|
|
120
142
|
// Throws ZeroDropTimeoutError on timeout
|
|
121
143
|
// ============================================
|
|
122
144
|
async waitForLatest(inbox, options = {}) {
|
|
@@ -125,9 +147,19 @@ class ZeroDrop {
|
|
|
125
147
|
const pollInterval = (_b = options.pollInterval) !== null && _b !== void 0 ? _b : POLL_INTERVAL;
|
|
126
148
|
const startTime = Date.now();
|
|
127
149
|
while (Date.now() - startTime < timeout) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
150
|
+
try {
|
|
151
|
+
const email = await this.fetchLatest(inbox);
|
|
152
|
+
if (email)
|
|
153
|
+
return email;
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
// Retry network errors until timeout
|
|
157
|
+
// Auth errors are re-thrown immediately
|
|
158
|
+
if (err instanceof ZeroDropAuthError)
|
|
159
|
+
throw err;
|
|
160
|
+
// Log network errors but keep polling
|
|
161
|
+
console.warn(`[ZeroDrop] Poll error (retrying): ${err.message}`);
|
|
162
|
+
}
|
|
131
163
|
await this.sleep(pollInterval);
|
|
132
164
|
}
|
|
133
165
|
throw new ZeroDropTimeoutError(inbox, timeout);
|
|
@@ -141,18 +173,25 @@ class ZeroDrop {
|
|
|
141
173
|
if (!this.apiKey) {
|
|
142
174
|
throw new ZeroDropAuthError();
|
|
143
175
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
176
|
+
let res;
|
|
177
|
+
try {
|
|
178
|
+
res = await fetch(`${this.baseUrl}/api/webhooks/register`, {
|
|
179
|
+
method: "POST",
|
|
180
|
+
headers: {
|
|
181
|
+
"Content-Type": "application/json",
|
|
182
|
+
"Authorization": `Bearer ${this.apiKey}`,
|
|
183
|
+
},
|
|
184
|
+
body: JSON.stringify({ inbox, webhookUrl }),
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
catch (err) {
|
|
188
|
+
const message = err instanceof Error ? err.message : "fetch failed";
|
|
189
|
+
throw new ZeroDropNetworkError(message);
|
|
190
|
+
}
|
|
152
191
|
if (res.status === 401)
|
|
153
192
|
throw new ZeroDropAuthError();
|
|
154
193
|
if (!res.ok) {
|
|
155
|
-
throw new
|
|
194
|
+
throw new ZeroDropNetworkError(`Webhook registration failed: ${res.status}`);
|
|
156
195
|
}
|
|
157
196
|
return { registered: true };
|
|
158
197
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,+CAA+C;AAC/C,mBAAmB;AACnB,4CAA4C;AAC5C,+CAA+C;;;AAE/C,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AACxC,MAAM,WAAW,GAAG,yBAAyB,CAAC;AAC9C,MAAM,aAAa,GAAG,IAAI,CAAC;AA2B3B,+CAA+C;AAC/C,gBAAgB;AAChB,+CAA+C;AAE/C,MAAa,oBAAqB,SAAQ,KAAK;IAC7C,YAAY,KAAa,EAAE,SAAiB;QAC1C,KAAK,CACH,mCAAmC,KAAK,YAAY,SAAS,MAAM;YACnE,wDAAwD,CACzD,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;IACrC,CAAC;CACF;AARD,oDAQC;AAED,MAAa,iBAAkB,SAAQ,KAAK;IAC1C;QACE,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AALD,8CAKC;AAED,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAC1B,0EAA0E,CAC3E,CAAC;IACF,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,OAAO,KAAK;SACT,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;SACpB,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE;SACN,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,+CAA+C;AAC/C,qCAAqC;AACrC,+CAA+C;AAE/C,SAAS,uBAAuB;IAC9B,MAAM,UAAU,GAAG;QACjB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;QACvC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;KACtC,CAAC;IACF,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC;AACxB,CAAC;AAED,+CAA+C;AAC/C,uBAAuB;AACvB,+CAA+C;AAE/C,MAAa,QAAQ;IAInB,YAAY,MAAe,EAAE,UAA2B,EAAE;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC;QAE3C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CACV,mEAAmE;gBACnE,uEAAuE;gBACvE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|