e2e-mail 0.0.3 → 0.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mailtm-api.d.ts","sourceRoot":"","sources":["../../../src/core/api/mailtm-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC;AAOxC;;WAEW;AACX,wBAAsB,UAAU;;;;;;;;;;GAQ/B;AAED;;YAEY;AACZ,wBAAsB,aAAa,CAAC,EAClC,OAAO,EACP,QAAQ,GACT,EAAE,cAAc,CAAC,mBAAmB,CAAC;;;;;;;;;;;;GAYrC;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;GASxC;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;GAc5D;AAED;;UAEU;AACV,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,QAAQ,GACT,EAAE,cAAc,CAAC,kBAAkB,CAAC;;;;;GAYpC;AAED;;aAEa;AACb,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;;;;;;;;GAS9C;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAczD;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;GAc5D;AAED;;WAEW;AACX,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;GAcxD"}
1
+ {"version":3,"file":"mailtm-api.d.ts","sourceRoot":"","sources":["../../../src/core/api/mailtm-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAO9C;;WAEW;AACX,wBAAsB,UAAU;;;;;;;;;;GAQ/B;AAED;;YAEY;AACZ,wBAAsB,aAAa,CAAC,EAClC,OAAO,EACP,QAAQ,GACT,EAAE,cAAc,CAAC,mBAAmB,CAAC;;;;;;;;;;;;GAYrC;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;GASxC;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;GAc5D;AAED;;UAEU;AACV,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,QAAQ,GACT,EAAE,cAAc,CAAC,kBAAkB,CAAC;;;;;GAYpC;AAED;;aAEa;AACb,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;;;;;;;;GAS9C;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAczD;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;GAc5D;AAED;;WAEW;AACX,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;;GAcxD"}
@@ -0,0 +1,14 @@
1
+ import { operations } from './mailtm-api.d';
2
+ export type RequestPayload<T extends keyof operations> = operations[T] extends {
3
+ requestBody: {
4
+ content: {
5
+ "application/json": infer U;
6
+ };
7
+ };
8
+ } ? U : never;
9
+ export type ResponseData<T extends keyof operations, Status extends keyof operations[T]["responses"]> = operations[T]["responses"][Status] extends {
10
+ content: {
11
+ "application/json": infer U;
12
+ };
13
+ } ? U : never;
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/api/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,MAAM,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS;IAC7E,WAAW,EAAE;QAAE,OAAO,EAAE;YAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;SAAE,CAAA;KAAE,CAAC;CAC3D,GACG,CAAC,GACD,KAAK,CAAC;AAEV,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,MAAM,UAAU,EAC1B,MAAM,SAAS,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAC7C,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,SAAS;IAC7C,OAAO,EAAE;QAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;CAC1C,GACG,CAAC,GACD,KAAK,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ResponseData } from '../api';
1
+ import { ResponseData } from '../api/types';
2
2
  import { SearchFilters } from './mailtm.d';
3
3
  /** Determines if passed email domain matches any active domains from mail.tm, fail if not
4
4
  * @remarks This is intentionally bypassed if a token was successfully created for a previously established account whose domain was deactivated
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/mailtm/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAU,SAAS,MAAM,oBAaxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,GAAE,YAAY,CAAC,6BAA6B,EAAE,GAAG,CAAM,EAC/D,OAAO,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;IAqCxB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/core/mailtm/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAU,SAAS,MAAM,oBAaxD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,GAAE,YAAY,CAAC,6BAA6B,EAAE,GAAG,CAAM,EAC/D,OAAO,CAAC,EAAE,aAAa;;;;;;;;;;;;;;;;IAqCxB"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=cypress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cypress.d.ts","sourceRoot":"","sources":["../../src/cypress/cypress.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { PollingOptions, SearchFilters } from '../core/mailtm/mailtm';
2
+ import { components } from '../core/api/mailtm-api.d';
3
+ type Message = components["schemas"]["Message-message.read"];
4
+ declare global {
5
+ namespace Cypress {
6
+ interface Chainable {
7
+ /**
8
+ * Initialize mailbox session
9
+ * @param address Email address
10
+ * @param password Account password
11
+ */
12
+ initializeMailbox(address: string, password: string): void;
13
+ /**
14
+ * Get most recent inbox match for an existing or new mail account
15
+ * @param filters Optional search filters
16
+ * @param options Configuration for message polling
17
+ */
18
+ searchMailbox(filters?: SearchFilters, options?: PollingOptions): Chainable<Message>;
19
+ /**
20
+ * Delete the account mailbox and all its emails from the server
21
+ */
22
+ removeMailbox(): Chainable<void>;
23
+ }
24
+ }
25
+ }
26
+ export {};
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cypress/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,KAAK,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAC7D,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,OAAO,CAAC;QAChB,UAAU,SAAS;YACjB;;;;eAIG;YACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;YAE3D;;;;eAIG;YACH,aAAa,CACX,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,cAAc,GACvB,SAAS,CAAC,OAAO,CAAC,CAAC;YAEtB;;eAEG;YACH,aAAa,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;SAClC;KACF;CACF;AAED,OAAO,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cypress.js","sources":["../src/cypress/index.ts"],"sourcesContent":["import { E2EMailClient } from \"../core/mailtm\";\nimport \"./index.d\";\n\nlet mailClient: E2EMailClient | null = null;\n\nCypress.Commands.add(\"initializeMailbox\", (address, password) => {\n cy.log(`Creating mailbox ${address}`);\n\n return cy.then(async () => {\n mailClient = new E2EMailClient(address, password);\n await mailClient.initialize();\n });\n});\n\nCypress.Commands.add(\"removeMailbox\", () => {\n return cy.then(async () => {\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call cy.initializeMailbox() first.\",\n );\n }\n\n await mailClient.dispose();\n });\n});\n\nCypress.Commands.add(\"searchMailbox\", (filters, options = {}) => {\n const {\n timeout = Cypress.config().defaultCommandTimeout ?? 4000,\n autoDelete,\n } = options;\n\n return cy.then({ timeout: timeout + 1000 }, async () => {\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call cy.initializeMailbox() first.\",\n );\n }\n\n // Get most recent match\n const message = await mailClient.pollMessages(filters, {\n timeout,\n autoDelete,\n });\n const html = Array.isArray(message.html) ? message.html[0] : message.html;\n\n // Write HTML to Cypress DOM\n if (html) {\n cy.document().then((doc) => {\n doc.open();\n doc.write(String(html));\n doc.close();\n });\n }\n\n return message;\n });\n});\n"],"names":["mailClient","address","password","E2EMailClient","filters","options","timeout","autoDelete","message","html","doc"],"mappings":";AAGA,IAAIA,IAAmC;AAEvC,QAAQ,SAAS,IAAI,qBAAqB,CAACC,GAASC,OAClD,GAAG,IAAI,oBAAoBD,CAAO,EAAE,GAE7B,GAAG,KAAK,YAAY;AACzB,EAAAD,IAAa,IAAIG,EAAcF,GAASC,CAAQ,GAChD,MAAMF,EAAW,WAAA;AACnB,CAAC,EACF;AAED,QAAQ,SAAS,IAAI,iBAAiB,MAC7B,GAAG,KAAK,YAAY;AACzB,MAAI,CAACA;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAMA,EAAW,QAAA;AACnB,CAAC,CACF;AAED,QAAQ,SAAS,IAAI,iBAAiB,CAACI,GAASC,IAAU,OAAO;AAC/D,QAAM;AAAA,IACJ,SAAAC,IAAU,QAAQ,OAAA,EAAS,yBAAyB;AAAA,IACpD,YAAAC;AAAA,EAAA,IACEF;AAEJ,SAAO,GAAG,KAAK,EAAE,SAASC,IAAU,IAAA,GAAQ,YAAY;AACtD,QAAI,CAACN;AACH,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAKJ,UAAMQ,IAAU,MAAMR,EAAW,aAAaI,GAAS;AAAA,MACrD,SAAAE;AAAA,MACA,YAAAC;AAAA,IAAA,CACD,GACKE,IAAO,MAAM,QAAQD,EAAQ,IAAI,IAAIA,EAAQ,KAAK,CAAC,IAAIA,EAAQ;AAGrE,WAAIC,KACF,GAAG,SAAA,EAAW,KAAK,CAACC,MAAQ;AAC1B,MAAAA,EAAI,KAAA,GACJA,EAAI,MAAM,OAAOD,CAAI,CAAC,GACtBC,EAAI,MAAA;AAAA,IACN,CAAC,GAGIF;AAAA,EACT,CAAC;AACH,CAAC;"}
1
+ {"version":3,"file":"cypress.js","sources":["../src/cypress/cypress.ts"],"sourcesContent":["import { E2EMailClient } from \"../core/mailtm\";\nimport \"./types\";\n\nlet mailClient: E2EMailClient | null = null;\n\nCypress.Commands.add(\"initializeMailbox\", (address, password) => {\n cy.log(`Creating mailbox ${address}`);\n\n return cy.then(async () => {\n mailClient = new E2EMailClient(address, password);\n await mailClient.initialize();\n });\n});\n\nCypress.Commands.add(\"removeMailbox\", () => {\n return cy.then(async () => {\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call cy.initializeMailbox() first.\",\n );\n }\n\n await mailClient.dispose();\n });\n});\n\nCypress.Commands.add(\"searchMailbox\", (filters, options = {}) => {\n const {\n timeout = Cypress.config().defaultCommandTimeout ?? 4000,\n autoDelete,\n } = options;\n\n return cy.then({ timeout: timeout + 1000 }, async () => {\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call cy.initializeMailbox() first.\",\n );\n }\n\n // Get most recent match\n const message = await mailClient.pollMessages(filters, {\n timeout,\n autoDelete,\n });\n const html = Array.isArray(message.html) ? message.html[0] : message.html;\n\n // Write HTML to Cypress DOM\n if (html) {\n cy.document().then((doc) => {\n doc.open();\n doc.write(String(html));\n doc.close();\n });\n }\n\n return message;\n });\n});\n"],"names":["mailClient","address","password","E2EMailClient","filters","options","timeout","autoDelete","message","html","doc"],"mappings":";AAGA,IAAIA,IAAmC;AAEvC,QAAQ,SAAS,IAAI,qBAAqB,CAACC,GAASC,OAClD,GAAG,IAAI,oBAAoBD,CAAO,EAAE,GAE7B,GAAG,KAAK,YAAY;AACzB,EAAAD,IAAa,IAAIG,EAAcF,GAASC,CAAQ,GAChD,MAAMF,EAAW,WAAA;AACnB,CAAC,EACF;AAED,QAAQ,SAAS,IAAI,iBAAiB,MAC7B,GAAG,KAAK,YAAY;AACzB,MAAI,CAACA;AACH,UAAM,IAAI;AAAA,MACR;AAAA,IAAA;AAIJ,QAAMA,EAAW,QAAA;AACnB,CAAC,CACF;AAED,QAAQ,SAAS,IAAI,iBAAiB,CAACI,GAASC,IAAU,OAAO;AAC/D,QAAM;AAAA,IACJ,SAAAC,IAAU,QAAQ,OAAA,EAAS,yBAAyB;AAAA,IACpD,YAAAC;AAAA,EAAA,IACEF;AAEJ,SAAO,GAAG,KAAK,EAAE,SAASC,IAAU,IAAA,GAAQ,YAAY;AACtD,QAAI,CAACN;AACH,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAKJ,UAAMQ,IAAU,MAAMR,EAAW,aAAaI,GAAS;AAAA,MACrD,SAAAE;AAAA,MACA,YAAAC;AAAA,IAAA,CACD,GACKE,IAAO,MAAM,QAAQD,EAAQ,IAAI,IAAIA,EAAQ,KAAK,CAAC,IAAIA,EAAQ;AAGrE,WAAIC,KACF,GAAG,SAAA,EAAW,KAAK,CAACC,MAAQ;AAC1B,MAAAA,EAAI,KAAA,GACJA,EAAI,MAAM,OAAOD,CAAI,CAAC,GACtBC,EAAI,MAAA;AAAA,IACN,CAAC,GAGIF;AAAA,EACT,CAAC;AACH,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-DalPChOM.js","sources":["../src/core/api/mailtm-api.ts","../src/core/mailtm/utils.ts","../src/core/mailtm/index.ts"],"sourcesContent":["import createClient from \"openapi-fetch\";\nimport type { paths } from \"../api/mailtm-api.d\";\nimport type { RequestPayload } from \".\";\n\n/** OpenAPI client for MailTM */\nconst client = createClient<paths>({\n baseUrl: \"https://api.mail.tm\",\n});\n\n/**********\n * DOMAIN *\n *********/\nexport async function getDomains() {\n const { data = [], error } = await client.GET(\"/domains\", {\n headers: {\n Accept: \"application/json\",\n },\n });\n\n return { data, error };\n}\n\n/***********\n * ACCOUNT *\n **********/\nexport async function createAccount({\n address,\n password,\n}: RequestPayload<\"api_accounts_post\">) {\n const { data, error } = await client.POST(\"/accounts\", {\n headers: {\n Accept: \"application/json\",\n },\n body: {\n address,\n password,\n },\n });\n\n return { data, error };\n}\n\nexport async function getMe(token: string) {\n const { data, error } = await client.GET(\"/me\", {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\nexport async function deleteAccount(token: string, id: string) {\n const { data, error } = await client.DELETE(\"/accounts/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\n/*********\n * TOKEN *\n ********/\nexport async function createToken({\n address,\n password,\n}: RequestPayload<\"login_check_post\">) {\n const { data, error } = await client.POST(\"/token\", {\n headers: {\n Accept: \"application/json\",\n },\n body: {\n address,\n password,\n },\n });\n\n return { data, error };\n}\n\n/************\n * MESSAGES *\n ***********/\nexport async function getMessages(token: string) {\n const { data, error } = await client.GET(\"/messages\", {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\nexport async function getMessage(token: string, id: string) {\n const { data, error } = await client.GET(\"/messages/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\nexport async function deleteMessage(token: string, id: string) {\n const { data, error } = await client.DELETE(\"/messages/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\n/**********\n * SOURCE *\n *********/\nexport async function getSource(token: string, id: string) {\n const { data, error } = await client.GET(\"/sources/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n","import { ResponseData } from \"../api\";\nimport { getDomains } from \"../api/mailtm-api\";\nimport type { SearchFilters } from \"./mailtm.d\";\n\n/** Determines if passed email domain matches any active domains from mail.tm, fail if not\n * @remarks This is intentionally bypassed if a token was successfully created for a previously established account whose domain was deactivated\n * @param address The email address for which to check domain validitity\n */\nexport const validateEmailDomain = async (address: string) => {\n const { data: domains } = await getDomains();\n const domain = address.split(\"@\")[1];\n const activeDomains = domains.filter((d) => d.isActive).map((d) => d.domain);\n const domainMatch = activeDomains.find((d) => d === domain);\n\n if (!domainMatch) {\n throw new Error(\n `E2E Mail - Domain @${domain} cannot be used to initialize mailbox.\\n\\nTry again with one of the following domains: ${activeDomains.join(\", \")}`,\n );\n }\n\n return domainMatch;\n};\n\n/** Search and filter account messages by message metadata or content\n * @param messages The messages returned from the account to filter\n * @param filters The filtering criteria to apply to the messages\n */\nexport function filterMessages(\n messages: ResponseData<\"api_messages_get_collection\", 200> = [],\n filters?: SearchFilters,\n) {\n if (!filters) return messages;\n\n const predicates: Array<\n (message: ResponseData<\"api_messages_id_get\", 200>) => boolean\n > = [];\n\n if (filters.recipient) {\n predicates.push((message) =>\n (message.to as any[])?.some(\n ({ address }) => address === filters.recipient,\n ),\n );\n }\n\n if (filters.sender) {\n predicates.push(\n (message) => (message.from as any)?.address === filters.sender,\n );\n }\n\n if (filters.subject) {\n const regex = new RegExp(filters.subject, \"i\");\n predicates.push((message) => regex.test(message.subject ?? \"\"));\n }\n\n if (filters.createdAfter) {\n const startTime = Date.parse(filters.createdAfter);\n predicates.push(\n (message) => Date.parse(message.createdAt ?? \"\") > startTime,\n );\n }\n\n return messages.filter((message) =>\n predicates.every((predicate) => predicate(message)),\n );\n}\n","import {\n createAccount,\n deleteAccount,\n createToken,\n getMessage,\n getMessages,\n getMe,\n deleteMessage,\n} from \"../api/mailtm-api\";\nimport type { PollingOptions, SearchFilters } from \"./mailtm.d\";\nimport { filterMessages, validateEmailDomain } from \"./utils\";\n\nexport class E2EMailClient {\n private static readonly POLL_INTERVAL = 1000;\n private address: string;\n private password: string;\n private token: string | undefined;\n private accountId: string | undefined;\n\n constructor(address: string, password: string) {\n this.address = address;\n this.password = password;\n }\n\n private async login() {\n const { data: auth } = await createToken({\n address: this.address,\n password: this.password,\n });\n\n if (auth?.token) {\n const { data: account } = await getMe(auth.token);\n\n this.token = auth.token;\n this.accountId = account?.id;\n }\n }\n\n /** Initializes mailbox with existing credentials. If new and available account, it will be created automatically */\n public async initialize() {\n await this.login();\n\n if (!this.token) {\n await validateEmailDomain(this.address);\n const { error: { detail = \"\" } = {} } = await createAccount({\n address: this.address,\n password: this.password,\n });\n\n if (detail)\n throw new Error(`E2E Mail - Failed to create Account.\\n${detail}`);\n\n await this.login();\n }\n }\n\n public async dispose() {\n if (!this.token || !this.accountId)\n throw new Error(\n `E2EMail - Deleting mailbox ${this.address} failed.\\n\\nPassword is incorrect or account doesn't exist.`,\n );\n\n return await deleteAccount(this.token, this.accountId);\n }\n\n /** Fetch and filter emails for the initialized mailbox and return most recent match */\n private async queryMessages(filters?: SearchFilters) {\n if (!this.token)\n throw new Error(\n `E2EMail - Searching mailbox ${this.address} failed.\\n\\nPassword is incorrect.`,\n );\n\n const { data: allMessages } = await getMessages(this.token);\n const [firstMatch] = filterMessages(allMessages, filters);\n\n if (firstMatch) {\n const { data } = await getMessage(this.token, firstMatch?.id || \"\");\n return data;\n }\n\n return;\n }\n\n /** Poll for messages in the initialized mailbox and timeout */\n public async pollMessages(\n filters?: SearchFilters,\n { timeout = 30000, autoDelete = true }: PollingOptions = {},\n ) {\n const start = Date.now();\n\n while (Date.now() - start < timeout) {\n const message = await this.queryMessages(filters);\n\n if (message) {\n if (autoDelete && this.token && message.id) {\n await deleteMessage(this.token, message.id);\n }\n\n return message;\n }\n\n await new Promise((resolve) =>\n setTimeout(resolve, E2EMailClient.POLL_INTERVAL),\n );\n }\n\n throw new Error(\n `E2E Mail - No message matching your criteria found found after ${timeout}ms.`,\n );\n }\n}\n"],"names":["client","createClient","getDomains","data","error","createAccount","address","password","getMe","token","deleteAccount","id","createToken","getMessages","getMessage","deleteMessage","validateEmailDomain","domains","domain","activeDomains","d","domainMatch","filterMessages","messages","filters","predicates","message","_a","regex","startTime","predicate","_E2EMailClient","auth","account","detail","allMessages","firstMatch","timeout","autoDelete","start","resolve","E2EMailClient"],"mappings":"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"}
1
+ {"version":3,"file":"index-DalPChOM.js","sources":["../src/core/api/mailtm-api.ts","../src/core/mailtm/utils.ts","../src/core/mailtm/index.ts"],"sourcesContent":["import createClient from \"openapi-fetch\";\nimport type { paths } from \"../api/mailtm-api.d\";\nimport type { RequestPayload } from \"./types\";\n\n/** OpenAPI client for MailTM */\nconst client = createClient<paths>({\n baseUrl: \"https://api.mail.tm\",\n});\n\n/**********\n * DOMAIN *\n *********/\nexport async function getDomains() {\n const { data = [], error } = await client.GET(\"/domains\", {\n headers: {\n Accept: \"application/json\",\n },\n });\n\n return { data, error };\n}\n\n/***********\n * ACCOUNT *\n **********/\nexport async function createAccount({\n address,\n password,\n}: RequestPayload<\"api_accounts_post\">) {\n const { data, error } = await client.POST(\"/accounts\", {\n headers: {\n Accept: \"application/json\",\n },\n body: {\n address,\n password,\n },\n });\n\n return { data, error };\n}\n\nexport async function getMe(token: string) {\n const { data, error } = await client.GET(\"/me\", {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\nexport async function deleteAccount(token: string, id: string) {\n const { data, error } = await client.DELETE(\"/accounts/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\n/*********\n * TOKEN *\n ********/\nexport async function createToken({\n address,\n password,\n}: RequestPayload<\"login_check_post\">) {\n const { data, error } = await client.POST(\"/token\", {\n headers: {\n Accept: \"application/json\",\n },\n body: {\n address,\n password,\n },\n });\n\n return { data, error };\n}\n\n/************\n * MESSAGES *\n ***********/\nexport async function getMessages(token: string) {\n const { data, error } = await client.GET(\"/messages\", {\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\nexport async function getMessage(token: string, id: string) {\n const { data, error } = await client.GET(\"/messages/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\nexport async function deleteMessage(token: string, id: string) {\n const { data, error } = await client.DELETE(\"/messages/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n\n/**********\n * SOURCE *\n *********/\nexport async function getSource(token: string, id: string) {\n const { data, error } = await client.GET(\"/sources/{id}\", {\n params: {\n path: {\n id,\n },\n },\n headers: {\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n });\n\n return { data, error };\n}\n","import type { ResponseData } from \"../api/types\";\nimport { getDomains } from \"../api/mailtm-api\";\nimport type { SearchFilters } from \"./mailtm.d\";\n\n/** Determines if passed email domain matches any active domains from mail.tm, fail if not\n * @remarks This is intentionally bypassed if a token was successfully created for a previously established account whose domain was deactivated\n * @param address The email address for which to check domain validitity\n */\nexport const validateEmailDomain = async (address: string) => {\n const { data: domains } = await getDomains();\n const domain = address.split(\"@\")[1];\n const activeDomains = domains.filter((d) => d.isActive).map((d) => d.domain);\n const domainMatch = activeDomains.find((d) => d === domain);\n\n if (!domainMatch) {\n throw new Error(\n `E2E Mail - Domain @${domain} cannot be used to initialize mailbox.\\n\\nTry again with one of the following domains: ${activeDomains.join(\", \")}`,\n );\n }\n\n return domainMatch;\n};\n\n/** Search and filter account messages by message metadata or content\n * @param messages The messages returned from the account to filter\n * @param filters The filtering criteria to apply to the messages\n */\nexport function filterMessages(\n messages: ResponseData<\"api_messages_get_collection\", 200> = [],\n filters?: SearchFilters,\n) {\n if (!filters) return messages;\n\n const predicates: Array<\n (message: ResponseData<\"api_messages_id_get\", 200>) => boolean\n > = [];\n\n if (filters.recipient) {\n predicates.push((message) =>\n (message.to as any[])?.some(\n ({ address }) => address === filters.recipient,\n ),\n );\n }\n\n if (filters.sender) {\n predicates.push(\n (message) => (message.from as any)?.address === filters.sender,\n );\n }\n\n if (filters.subject) {\n const regex = new RegExp(filters.subject, \"i\");\n predicates.push((message) => regex.test(message.subject ?? \"\"));\n }\n\n if (filters.createdAfter) {\n const startTime = Date.parse(filters.createdAfter);\n predicates.push(\n (message) => Date.parse(message.createdAt ?? \"\") > startTime,\n );\n }\n\n return messages.filter((message) =>\n predicates.every((predicate) => predicate(message)),\n );\n}\n","import {\n createAccount,\n deleteAccount,\n createToken,\n getMessage,\n getMessages,\n getMe,\n deleteMessage,\n} from \"../api/mailtm-api\";\nimport type { PollingOptions, SearchFilters } from \"./mailtm.d\";\nimport { filterMessages, validateEmailDomain } from \"./utils\";\n\nexport class E2EMailClient {\n private static readonly POLL_INTERVAL = 1000;\n private address: string;\n private password: string;\n private token: string | undefined;\n private accountId: string | undefined;\n\n constructor(address: string, password: string) {\n this.address = address;\n this.password = password;\n }\n\n private async login() {\n const { data: auth } = await createToken({\n address: this.address,\n password: this.password,\n });\n\n if (auth?.token) {\n const { data: account } = await getMe(auth.token);\n\n this.token = auth.token;\n this.accountId = account?.id;\n }\n }\n\n /** Initializes mailbox with existing credentials. If new and available account, it will be created automatically */\n public async initialize() {\n await this.login();\n\n if (!this.token) {\n await validateEmailDomain(this.address);\n const { error: { detail = \"\" } = {} } = await createAccount({\n address: this.address,\n password: this.password,\n });\n\n if (detail)\n throw new Error(`E2E Mail - Failed to create Account.\\n${detail}`);\n\n await this.login();\n }\n }\n\n public async dispose() {\n if (!this.token || !this.accountId)\n throw new Error(\n `E2EMail - Deleting mailbox ${this.address} failed.\\n\\nPassword is incorrect or account doesn't exist.`,\n );\n\n return await deleteAccount(this.token, this.accountId);\n }\n\n /** Fetch and filter emails for the initialized mailbox and return most recent match */\n private async queryMessages(filters?: SearchFilters) {\n if (!this.token)\n throw new Error(\n `E2EMail - Searching mailbox ${this.address} failed.\\n\\nPassword is incorrect.`,\n );\n\n const { data: allMessages } = await getMessages(this.token);\n const [firstMatch] = filterMessages(allMessages, filters);\n\n if (firstMatch) {\n const { data } = await getMessage(this.token, firstMatch?.id || \"\");\n return data;\n }\n\n return;\n }\n\n /** Poll for messages in the initialized mailbox and timeout */\n public async pollMessages(\n filters?: SearchFilters,\n { timeout = 30000, autoDelete = true }: PollingOptions = {},\n ) {\n const start = Date.now();\n\n while (Date.now() - start < timeout) {\n const message = await this.queryMessages(filters);\n\n if (message) {\n if (autoDelete && this.token && message.id) {\n await deleteMessage(this.token, message.id);\n }\n\n return message;\n }\n\n await new Promise((resolve) =>\n setTimeout(resolve, E2EMailClient.POLL_INTERVAL),\n );\n }\n\n throw new Error(\n `E2E Mail - No message matching your criteria found found after ${timeout}ms.`,\n );\n }\n}\n"],"names":["client","createClient","getDomains","data","error","createAccount","address","password","getMe","token","deleteAccount","id","createToken","getMessages","getMessage","deleteMessage","validateEmailDomain","domains","domain","activeDomains","d","domainMatch","filterMessages","messages","filters","predicates","message","_a","regex","startTime","predicate","_E2EMailClient","auth","account","detail","allMessages","firstMatch","timeout","autoDelete","start","resolve","E2EMailClient"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { MailFixtures } from './types';
2
+ export declare const test: import('./test').TestType<import('./test').PlaywrightTestArgs & import('./test').PlaywrightTestOptions & MailFixtures, import('./test').PlaywrightWorkerArgs & import('./test').PlaywrightWorkerOptions>;
3
+ export { expect } from '@playwright/test';
4
+ //# sourceMappingURL=playwright.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright.d.ts","sourceRoot":"","sources":["../../src/playwright/playwright.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAI5C,eAAO,MAAM,IAAI,uPA8Cf,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { PollingOptions, SearchFilters } from '../core/mailtm/mailtm';
2
+ import { components } from '../core/api/mailtm-api.d';
3
+ type Message = components["schemas"]["Message-message.read"];
4
+ export type MailFixtures = {
5
+ /**
6
+ * Initialize mailbox session
7
+ * @param address Email address
8
+ * @param password Account password
9
+ */
10
+ initializeMailbox: (address: string, password: string) => void;
11
+ /**
12
+ * Get most recent inbox match for an existing or new mail account
13
+ * @param filters Optional search filters
14
+ * @param options Configuration for message polling
15
+ */
16
+ searchMailbox: (filters?: SearchFilters, options?: PollingOptions) => Promise<Message>;
17
+ /**
18
+ * Delete the account mailbox and all its emails from the server
19
+ */
20
+ removeMailbox: () => void;
21
+ };
22
+ export {};
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/playwright/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,KAAK,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,sBAAsB,CAAC,CAAC;AAE7D,MAAM,MAAM,YAAY,GAAG;IACzB;;;;OAIG;IACH,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAE/D;;;;OAIG;IACH,aAAa,EAAE,CACb,OAAO,CAAC,EAAE,aAAa,EACvB,OAAO,CAAC,EAAE,cAAc,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IAEtB;;OAEG;IACH,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"playwright.js","sources":["../src/playwright/index.ts"],"sourcesContent":["import { test as base } from \"@playwright/test\";\nimport { E2EMailClient } from \"../core/mailtm\";\nimport type { MailFixtures } from \"./index.d\";\n\nlet mailClient: E2EMailClient | undefined;\n\nexport const test = base.extend<MailFixtures>({\n initializeMailbox: async ({}, use) => {\n await use(async (address, password) => {\n mailClient = new E2EMailClient(address, password);\n await mailClient.initialize();\n });\n },\n\n removeMailbox: async ({}, use) => {\n await use(async () => {\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call initializeMailbox() first.\",\n );\n }\n\n await mailClient.dispose();\n });\n },\n\n searchMailbox: async ({ page }, use) => {\n await use(async (filters, options = {}) => {\n const {\n timeout = test.info().project.use.actionTimeout ?? 4000,\n autoDelete,\n } = options;\n\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call initializeMailbox() first.\",\n );\n }\n\n const message = await mailClient.pollMessages(filters, {\n timeout,\n autoDelete,\n });\n const html = message.html?.[0] ?? message.html ?? \"\";\n\n if (html) {\n await page.setContent(String(html));\n }\n\n return message;\n });\n },\n});\n\nexport { expect } from \"@playwright/test\";\n"],"names":["mailClient","test","base","use","address","password","E2EMailClient","page","filters","options","timeout","autoDelete","message","html","_a"],"mappings":";;;AAIA,IAAIA;AAEG,MAAMC,IAAOC,EAAK,OAAqB;AAAA,EAC5C,mBAAmB,OAAO,CAAA,GAAIC,MAAQ;AACpC,UAAMA,EAAI,OAAOC,GAASC,MAAa;AACrC,MAAAL,IAAa,IAAIM,EAAcF,GAASC,CAAQ,GAChD,MAAML,EAAW,WAAA;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,OAAO,CAAA,GAAIG,MAAQ;AAChC,UAAMA,EAAI,YAAY;AACpB,UAAI,CAACH;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAIJ,YAAMA,EAAW,QAAA;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,OAAO,EAAE,MAAAO,EAAA,GAAQJ,MAAQ;AACtC,UAAMA,EAAI,OAAOK,GAASC,IAAU,CAAA,MAAO;;AACzC,YAAM;AAAA,QACJ,SAAAC,IAAUT,EAAK,KAAA,EAAO,QAAQ,IAAI,iBAAiB;AAAA,QACnD,YAAAU;AAAA,MAAA,IACEF;AAEJ,UAAI,CAACT;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAIJ,YAAMY,IAAU,MAAMZ,EAAW,aAAaQ,GAAS;AAAA,QACrD,SAAAE;AAAA,QACA,YAAAC;AAAA,MAAA,CACD,GACKE,MAAOC,IAAAF,EAAQ,SAAR,gBAAAE,EAAe,OAAMF,EAAQ,QAAQ;AAElD,aAAIC,KACF,MAAMN,EAAK,WAAW,OAAOM,CAAI,CAAC,GAG7BD;AAAA,IACT,CAAC;AAAA,EACH;AACF,CAAC;"}
1
+ {"version":3,"file":"playwright.js","sources":["../src/playwright/playwright.ts"],"sourcesContent":["import { test as base } from \"@playwright/test\";\nimport { E2EMailClient } from \"../core/mailtm\";\nimport type { MailFixtures } from \"./types\";\n\nlet mailClient: E2EMailClient | undefined;\n\nexport const test = base.extend<MailFixtures>({\n initializeMailbox: async ({}, use) => {\n await use(async (address, password) => {\n mailClient = new E2EMailClient(address, password);\n await mailClient.initialize();\n });\n },\n\n removeMailbox: async ({}, use) => {\n await use(async () => {\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call initializeMailbox() first.\",\n );\n }\n\n await mailClient.dispose();\n });\n },\n\n searchMailbox: async ({ page }, use) => {\n await use(async (filters, options = {}) => {\n const {\n timeout = test.info().project.use.actionTimeout ?? 4000,\n autoDelete,\n } = options;\n\n if (!mailClient) {\n throw new Error(\n \"Mailbox client not initialized. Call initializeMailbox() first.\",\n );\n }\n\n const message = await mailClient.pollMessages(filters, {\n timeout,\n autoDelete,\n });\n const html = message.html?.[0] ?? message.html ?? \"\";\n\n if (html) {\n await page.setContent(String(html));\n }\n\n return message;\n });\n },\n});\n\nexport { expect } from \"@playwright/test\";\n"],"names":["mailClient","test","base","use","address","password","E2EMailClient","page","filters","options","timeout","autoDelete","message","html","_a"],"mappings":";;;AAIA,IAAIA;AAEG,MAAMC,IAAOC,EAAK,OAAqB;AAAA,EAC5C,mBAAmB,OAAO,CAAA,GAAIC,MAAQ;AACpC,UAAMA,EAAI,OAAOC,GAASC,MAAa;AACrC,MAAAL,IAAa,IAAIM,EAAcF,GAASC,CAAQ,GAChD,MAAML,EAAW,WAAA;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,OAAO,CAAA,GAAIG,MAAQ;AAChC,UAAMA,EAAI,YAAY;AACpB,UAAI,CAACH;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAIJ,YAAMA,EAAW,QAAA;AAAA,IACnB,CAAC;AAAA,EACH;AAAA,EAEA,eAAe,OAAO,EAAE,MAAAO,EAAA,GAAQJ,MAAQ;AACtC,UAAMA,EAAI,OAAOK,GAASC,IAAU,CAAA,MAAO;;AACzC,YAAM;AAAA,QACJ,SAAAC,IAAUT,EAAK,KAAA,EAAO,QAAQ,IAAI,iBAAiB;AAAA,QACnD,YAAAU;AAAA,MAAA,IACEF;AAEJ,UAAI,CAACT;AACH,cAAM,IAAI;AAAA,UACR;AAAA,QAAA;AAIJ,YAAMY,IAAU,MAAMZ,EAAW,aAAaQ,GAAS;AAAA,QACrD,SAAAE;AAAA,QACA,YAAAC;AAAA,MAAA,CACD,GACKE,MAAOC,IAAAF,EAAQ,SAAR,gBAAAE,EAAe,OAAMF,EAAQ,QAAQ;AAElD,aAAIC,KACF,MAAMN,EAAK,WAAW,OAAOM,CAAI,CAAC,GAG7BD;AAAA,IACT,CAAC;AAAA,EACH;AACF,CAAC;"}
package/package.json CHANGED
@@ -1,20 +1,19 @@
1
1
  {
2
2
  "name": "e2e-mail",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "A zero-config solution for testing email in major testing frameworks.",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
7
7
  "exports": {
8
8
  ".": {
9
- "types": "./dist/index.d.ts",
10
9
  "import": "./dist/index.js"
11
10
  },
12
11
  "./cypress": {
13
- "types": "./dist/cypress/index.d.ts",
12
+ "types": "./dist/cypress/cypress.d.ts",
14
13
  "import": "./dist/cypress.js"
15
14
  },
16
15
  "./playwright": {
17
- "types": "./dist/playwright/index.d.ts",
16
+ "types": "./dist/playwright/playwright.d.ts",
18
17
  "import": "./dist/playwright.js"
19
18
  }
20
19
  },
@@ -42,7 +41,8 @@
42
41
  "devDependencies": {
43
42
  "@playwright/test": "^1.49.0",
44
43
  "@types/node": "^25.9.2",
45
- "e2e-mail": "^0.0.2",
44
+ "cypress": "^15.17.0",
45
+ "e2e-mail": "^0.0.3",
46
46
  "openapi-fetch": "^0.17.0",
47
47
  "openapi-typescript": "^7.13.0",
48
48
  "tsx": "^4.22.4",
@@ -1,32 +0,0 @@
1
- import { PollingOptions, SearchFilters } from '../core/mailtm/mailtm';
2
- import { components } from '../core/api/mailtm-api.d';
3
- type Message = components["schemas"]["Message-message.read"];
4
- declare global {
5
- namespace Cypress {
6
- interface Chainable {
7
- /**
8
- * Initialize mailbox session
9
- * @param address Email address
10
- * @param password Account password
11
- */
12
- initializeMailbox(address: string, password: string): void;
13
-
14
- /**
15
- * Get most recent inbox match for an existing or new mail account
16
- * @param filters Optional search filters
17
- * @param options Configuration for message polling
18
- */
19
- searchMailbox(
20
- filters?: SearchFilters,
21
- options?: PollingOptions,
22
- ): Chainable<Message>;
23
-
24
- /**
25
- * Delete the account mailbox and all its emails from the server
26
- */
27
- removeMailbox(): Chainable<void>;
28
- }
29
- }
30
- }
31
-
32
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cypress/index.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,CAAC"}
@@ -1,27 +0,0 @@
1
- import { PollingOptions, SearchFilters } from '../core/mailtm/mailtm';
2
- import { components } from '../core/api/mailtm-api.d';
3
- type Message = components["schemas"]["Message-message.read"];
4
-
5
- export type MailFixtures = {
6
- /**
7
- * Initialize mailbox session
8
- * @param address Email address
9
- * @param password Account password
10
- */
11
- initializeMailbox: (address: string, password: string) => void;
12
-
13
- /**
14
- * Get most recent inbox match for an existing or new mail account
15
- * @param filters Optional search filters
16
- * @param options Configuration for message polling
17
- */
18
- searchMailbox: (
19
- filters?: SearchFilters,
20
- options?: PollingOptions,
21
- ) => Promise<Message>;
22
-
23
- /**
24
- * Delete the account mailbox and all its emails from the server
25
- */
26
- removeMailbox: () => void;
27
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAI9C,eAAO,MAAM,IAAI,uPA8Cf,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC"}