@inboxical/playwright 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ozer SUBASI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,98 @@
1
+ # @inboxical/playwright
2
+
3
+ [Inboxical](https://inboxical.com) helper for [Playwright](https://playwright.dev/) — test email flows in your E2E tests.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @inboxical/playwright @inboxical/sdk
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```ts
14
+ import { test, expect } from "@playwright/test";
15
+ import { InboxicalMailbox } from "@inboxical/playwright";
16
+
17
+ test("user can verify email", async ({ page }) => {
18
+ const mailbox = new InboxicalMailbox();
19
+ const { email } = await mailbox.create({ name: "signup-test" });
20
+
21
+ await page.goto("/signup");
22
+ await page.fill("#email", email);
23
+ await page.click("button[type=submit]");
24
+
25
+ const message = await mailbox.waitForMessage({ timeout: 30 });
26
+ expect(message.subject).toContain("Verify");
27
+
28
+ const code = await mailbox.extractCode();
29
+ await page.fill("#verification-code", code);
30
+ await page.click("#verify-button");
31
+
32
+ await expect(page.locator(".success")).toBeVisible();
33
+ await mailbox.cleanup();
34
+ });
35
+ ```
36
+
37
+ ## Playwright Fixture
38
+
39
+ For cleaner test setup, use the built-in fixture helper:
40
+
41
+ ```ts
42
+ // fixtures.ts
43
+ import { test as base } from "@playwright/test";
44
+ import { InboxicalMailbox, createMailboxFixture } from "@inboxical/playwright";
45
+
46
+ export const test = base.extend<{ mailbox: InboxicalMailbox }>({
47
+ mailbox: createMailboxFixture(),
48
+ });
49
+
50
+ // my-test.spec.ts
51
+ import { test } from "./fixtures";
52
+ import { expect } from "@playwright/test";
53
+
54
+ test("email flow", async ({ page, mailbox }) => {
55
+ const { email } = await mailbox.create();
56
+
57
+ await page.goto("/signup");
58
+ await page.fill("#email", email);
59
+ await page.click("button[type=submit]");
60
+
61
+ const message = await mailbox.waitForMessage({ timeout: 30 });
62
+ const code = await mailbox.extractCode();
63
+
64
+ await page.fill("#code", code);
65
+ await page.click("#submit");
66
+ await expect(page.locator(".welcome")).toBeVisible();
67
+ // cleanup is automatic via the fixture
68
+ });
69
+ ```
70
+
71
+ ## API
72
+
73
+ ### `InboxicalMailbox`
74
+
75
+ | Method | Description |
76
+ |--------|-------------|
77
+ | `create(options?)` | Create a new test inbox |
78
+ | `waitForMessage(options?)` | Wait for a message (long-poll) |
79
+ | `getMessages()` | Get all messages |
80
+ | `getLatestMessage()` | Get the latest message |
81
+ | `extractCode(options?)` | Extract OTP/verification code |
82
+ | `cleanup()` | Delete inbox and messages |
83
+ | `getClient()` | Access underlying SDK client |
84
+ | `getInboxId()` | Get current inbox ID |
85
+ | `getEmail()` | Get current inbox email |
86
+
87
+ ### `createMailboxFixture(options?)`
88
+
89
+ Returns a Playwright test fixture that auto-creates and auto-cleans an `InboxicalMailbox`.
90
+
91
+ ## Related
92
+
93
+ - [`@inboxical/sdk`](https://github.com/ozers/inboxical-sdk) — Core Node.js SDK
94
+ - [`@inboxical/cypress`](https://github.com/ozers/inboxical-cypress) — Cypress plugin
95
+
96
+ ## License
97
+
98
+ MIT
@@ -0,0 +1,125 @@
1
+ import { Inboxical } from "@inboxical/sdk";
2
+ import type { Inbox, Message, InboxicalOptions, ExtractCodeOptions } from "@inboxical/sdk";
3
+ export type { Inbox, Message, InboxicalOptions, ExtractCodeOptions };
4
+ export { InboxicalApiError, InboxicalNetworkError } from "@inboxical/sdk";
5
+ export interface InboxicalMailboxOptions {
6
+ /** Inboxical API key. Defaults to INBOXICAL_API_KEY env var. */
7
+ apiKey?: string;
8
+ /** Base URL override. */
9
+ baseUrl?: string;
10
+ }
11
+ /**
12
+ * High-level helper for managing a single test inbox in Playwright tests.
13
+ *
14
+ * Designed to work cleanly with Playwright test fixtures or standalone usage.
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * import { test, expect } from "@playwright/test";
19
+ * import { InboxicalMailbox } from "@inboxical/playwright";
20
+ *
21
+ * test("user can verify email", async ({ page }) => {
22
+ * const mailbox = new InboxicalMailbox();
23
+ * const { email } = await mailbox.create({ name: "signup-test" });
24
+ *
25
+ * await page.goto("/signup");
26
+ * await page.fill("#email", email);
27
+ * await page.click("button[type=submit]");
28
+ *
29
+ * const message = await mailbox.waitForMessage({ timeout: 30 });
30
+ * expect(message.subject).toContain("Verify");
31
+ *
32
+ * const code = await mailbox.extractCode();
33
+ * await page.fill("#verification-code", code);
34
+ * await page.click("#verify-button");
35
+ *
36
+ * await expect(page.locator(".success")).toBeVisible();
37
+ * await mailbox.cleanup();
38
+ * });
39
+ * ```
40
+ */
41
+ export declare class InboxicalMailbox {
42
+ private readonly client;
43
+ private inboxId;
44
+ private inboxEmail;
45
+ private lastMessage;
46
+ constructor(options?: InboxicalMailboxOptions);
47
+ /** Get the underlying Inboxical SDK client for advanced usage. */
48
+ getClient(): Inboxical;
49
+ /** Get the current inbox ID, or null if no inbox has been created. */
50
+ getInboxId(): string | null;
51
+ /** Get the current inbox email address, or null if no inbox has been created. */
52
+ getEmail(): string | null;
53
+ /**
54
+ * Create a new test inbox.
55
+ * If an inbox was previously created, it is deleted first.
56
+ */
57
+ create(options?: {
58
+ name?: string;
59
+ domain?: string;
60
+ }): Promise<{
61
+ id: string;
62
+ email: string;
63
+ }>;
64
+ /**
65
+ * Wait for a message to arrive in the inbox.
66
+ * Uses the API's long-polling endpoint.
67
+ *
68
+ * @returns The received message.
69
+ * @throws If no inbox has been created.
70
+ */
71
+ waitForMessage(options?: {
72
+ timeout?: number;
73
+ since?: string;
74
+ }): Promise<Message>;
75
+ /** Get all messages in the current inbox. */
76
+ getMessages(): Promise<Message[]>;
77
+ /** Get the latest message in the current inbox. */
78
+ getLatestMessage(): Promise<Message>;
79
+ /**
80
+ * Extract an OTP / verification code from the latest message.
81
+ *
82
+ * If no message has been fetched yet, fetches the latest one first.
83
+ *
84
+ * @returns The extracted code string.
85
+ * @throws If no code can be found.
86
+ */
87
+ extractCode(options?: {
88
+ pattern?: RegExp;
89
+ }): Promise<string>;
90
+ /**
91
+ * Delete the current inbox and all its messages.
92
+ * Safe to call multiple times.
93
+ */
94
+ cleanup(): Promise<void>;
95
+ private assertInbox;
96
+ }
97
+ /**
98
+ * Creates a Playwright test fixture for Inboxical mailbox.
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * // fixtures.ts
103
+ * import { test as base } from "@playwright/test";
104
+ * import { createMailboxFixture } from "@inboxical/playwright";
105
+ *
106
+ * export const test = base.extend<{ mailbox: InboxicalMailbox }>({
107
+ * mailbox: createMailboxFixture(),
108
+ * });
109
+ *
110
+ * // my-test.spec.ts
111
+ * import { test } from "./fixtures";
112
+ *
113
+ * test("email flow", async ({ page, mailbox }) => {
114
+ * const { email } = await mailbox.create();
115
+ * // ...
116
+ * });
117
+ * ```
118
+ */
119
+ export declare function createMailboxFixture(options?: InboxicalMailboxOptions): [
120
+ (context: Record<string, unknown>, use: (mailbox: InboxicalMailbox) => Promise<void>) => Promise<void>,
121
+ {
122
+ scope: "test";
123
+ }
124
+ ];
125
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EACV,KAAK,EACL,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE1E,MAAM,WAAW,uBAAuB;IACtC,gEAAgE;IAChE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yBAAyB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,WAAW,CAAwB;gBAE/B,OAAO,CAAC,EAAE,uBAAuB;IAU7C,kEAAkE;IAClE,SAAS,IAAI,SAAS;IAItB,sEAAsE;IACtE,UAAU,IAAI,MAAM,GAAG,IAAI;IAI3B,iFAAiF;IACjF,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;;OAGG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAa1C;;;;;;OAMG;IACG,cAAc,CAAC,OAAO,CAAC,EAAE;QAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,OAAO,CAAC;IAOpB,6CAA6C;IACvC,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAMvC,mDAAmD;IAC7C,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAO1C;;;;;;;OAOG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAelE;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAa9B,OAAO,CAAC,WAAW;CAOpB;AAMD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,CAAC,EAAE,uBAAuB,GAChC;IAED,CACE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,KAC9C,OAAO,CAAC,IAAI,CAAC;IAClB;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;CAClB,CAWA"}
package/dist/index.js ADDED
@@ -0,0 +1,173 @@
1
+ import { Inboxical } from "@inboxical/sdk";
2
+ export { InboxicalApiError, InboxicalNetworkError } from "@inboxical/sdk";
3
+ /**
4
+ * High-level helper for managing a single test inbox in Playwright tests.
5
+ *
6
+ * Designed to work cleanly with Playwright test fixtures or standalone usage.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { test, expect } from "@playwright/test";
11
+ * import { InboxicalMailbox } from "@inboxical/playwright";
12
+ *
13
+ * test("user can verify email", async ({ page }) => {
14
+ * const mailbox = new InboxicalMailbox();
15
+ * const { email } = await mailbox.create({ name: "signup-test" });
16
+ *
17
+ * await page.goto("/signup");
18
+ * await page.fill("#email", email);
19
+ * await page.click("button[type=submit]");
20
+ *
21
+ * const message = await mailbox.waitForMessage({ timeout: 30 });
22
+ * expect(message.subject).toContain("Verify");
23
+ *
24
+ * const code = await mailbox.extractCode();
25
+ * await page.fill("#verification-code", code);
26
+ * await page.click("#verify-button");
27
+ *
28
+ * await expect(page.locator(".success")).toBeVisible();
29
+ * await mailbox.cleanup();
30
+ * });
31
+ * ```
32
+ */
33
+ export class InboxicalMailbox {
34
+ client;
35
+ inboxId = null;
36
+ inboxEmail = null;
37
+ lastMessage = null;
38
+ constructor(options) {
39
+ const apiKey = options?.apiKey || process.env.INBOXICAL_API_KEY;
40
+ if (!apiKey) {
41
+ throw new Error("Inboxical API key is required. Set INBOXICAL_API_KEY env var or pass apiKey in options.");
42
+ }
43
+ this.client = new Inboxical({ apiKey, baseUrl: options?.baseUrl });
44
+ }
45
+ /** Get the underlying Inboxical SDK client for advanced usage. */
46
+ getClient() {
47
+ return this.client;
48
+ }
49
+ /** Get the current inbox ID, or null if no inbox has been created. */
50
+ getInboxId() {
51
+ return this.inboxId;
52
+ }
53
+ /** Get the current inbox email address, or null if no inbox has been created. */
54
+ getEmail() {
55
+ return this.inboxEmail;
56
+ }
57
+ /**
58
+ * Create a new test inbox.
59
+ * If an inbox was previously created, it is deleted first.
60
+ */
61
+ async create(options) {
62
+ if (this.inboxId) {
63
+ await this.cleanup();
64
+ }
65
+ const inbox = await this.client.createInbox(options);
66
+ this.inboxId = inbox.id;
67
+ this.inboxEmail = inbox.email_address;
68
+ this.lastMessage = null;
69
+ return { id: inbox.id, email: inbox.email_address };
70
+ }
71
+ /**
72
+ * Wait for a message to arrive in the inbox.
73
+ * Uses the API's long-polling endpoint.
74
+ *
75
+ * @returns The received message.
76
+ * @throws If no inbox has been created.
77
+ */
78
+ async waitForMessage(options) {
79
+ this.assertInbox();
80
+ const message = await this.client.waitForMessage(this.inboxId, options);
81
+ this.lastMessage = message;
82
+ return message;
83
+ }
84
+ /** Get all messages in the current inbox. */
85
+ async getMessages() {
86
+ this.assertInbox();
87
+ const result = await this.client.getMessages(this.inboxId);
88
+ return result.messages;
89
+ }
90
+ /** Get the latest message in the current inbox. */
91
+ async getLatestMessage() {
92
+ this.assertInbox();
93
+ const message = await this.client.getLatestMessage(this.inboxId);
94
+ this.lastMessage = message;
95
+ return message;
96
+ }
97
+ /**
98
+ * Extract an OTP / verification code from the latest message.
99
+ *
100
+ * If no message has been fetched yet, fetches the latest one first.
101
+ *
102
+ * @returns The extracted code string.
103
+ * @throws If no code can be found.
104
+ */
105
+ async extractCode(options) {
106
+ if (!this.lastMessage) {
107
+ await this.getLatestMessage();
108
+ }
109
+ const code = this.client.extractCode(this.lastMessage, options);
110
+ if (!code) {
111
+ throw new Error("No verification code found in message. " +
112
+ `Subject: "${this.lastMessage.subject}". ` +
113
+ "Try providing a custom pattern via options.pattern.");
114
+ }
115
+ return code;
116
+ }
117
+ /**
118
+ * Delete the current inbox and all its messages.
119
+ * Safe to call multiple times.
120
+ */
121
+ async cleanup() {
122
+ if (this.inboxId) {
123
+ try {
124
+ await this.client.deleteInbox(this.inboxId);
125
+ }
126
+ catch {
127
+ // Ignore errors during cleanup (inbox may already be expired/deleted).
128
+ }
129
+ this.inboxId = null;
130
+ this.inboxEmail = null;
131
+ this.lastMessage = null;
132
+ }
133
+ }
134
+ assertInbox() {
135
+ if (!this.inboxId) {
136
+ throw new Error("No inbox created yet. Call mailbox.create() before this method.");
137
+ }
138
+ }
139
+ }
140
+ // ---------------------------------------------------------------------------
141
+ // Playwright Test Fixture Helper
142
+ // ---------------------------------------------------------------------------
143
+ /**
144
+ * Creates a Playwright test fixture for Inboxical mailbox.
145
+ *
146
+ * @example
147
+ * ```ts
148
+ * // fixtures.ts
149
+ * import { test as base } from "@playwright/test";
150
+ * import { createMailboxFixture } from "@inboxical/playwright";
151
+ *
152
+ * export const test = base.extend<{ mailbox: InboxicalMailbox }>({
153
+ * mailbox: createMailboxFixture(),
154
+ * });
155
+ *
156
+ * // my-test.spec.ts
157
+ * import { test } from "./fixtures";
158
+ *
159
+ * test("email flow", async ({ page, mailbox }) => {
160
+ * const { email } = await mailbox.create();
161
+ * // ...
162
+ * });
163
+ * ```
164
+ */
165
+ export function createMailboxFixture(options) {
166
+ const factory = async (_context, use) => {
167
+ const mailbox = new InboxicalMailbox(options);
168
+ await use(mailbox);
169
+ await mailbox.cleanup();
170
+ };
171
+ return [factory, { scope: "test" }];
172
+ }
173
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@inboxical/playwright",
3
+ "version": "0.1.0",
4
+ "description": "Inboxical Playwright helper — Email testing fixtures for Playwright",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "email",
23
+ "testing",
24
+ "playwright",
25
+ "qa",
26
+ "inbox",
27
+ "inboxical",
28
+ "e2e",
29
+ "otp"
30
+ ],
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/ozers/inboxical-playwright.git"
34
+ },
35
+ "homepage": "https://inboxical.com",
36
+ "bugs": {
37
+ "url": "https://github.com/ozers/inboxical-playwright/issues"
38
+ },
39
+ "author": "Inboxical",
40
+ "license": "MIT",
41
+ "peerDependencies": {
42
+ "@playwright/test": ">=1.30.0"
43
+ },
44
+ "dependencies": {
45
+ "@inboxical/sdk": "^0.1.0"
46
+ },
47
+ "devDependencies": {
48
+ "@playwright/test": "^1.40.0",
49
+ "@types/node": "^25.5.0",
50
+ "typescript": "^5.4.0"
51
+ }
52
+ }