@stack0/sdk 0.5.18 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/http-client.ts","../../src/mail/audiences.ts","../../src/mail/campaigns.ts","../../src/mail/contacts.ts","../../src/mail/domains.ts","../../src/mail/events.ts","../../src/mail/mailboxes.ts","../../src/mail/sequences.ts","../../src/mail/templates.ts","../../src/mail/client.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * HTTP client for Stack0 API\n * Handles authentication, request/response formatting, and error handling\n */\n\nexport interface HttpClientConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class HttpClient {\n private apiKey: string;\n private baseUrl: string;\n\n constructor(config: HttpClientConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || \"https://api.stack0.dev/v1\";\n }\n\n private getHeaders(includeContentType = true): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n };\n if (includeContentType) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n return headers;\n }\n\n async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const bodyString = body === undefined ? undefined : JSON.stringify(body);\n const hasBody = bodyString !== undefined;\n\n try {\n const response = await fetch(url, {\n method,\n headers: this.getHeaders(hasBody),\n body: hasBody ? bodyString : undefined,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n const data = await response.json();\n return data as T;\n } catch (error) {\n if (error instanceof Error && \"statusCode\" in error) {\n throw error; // Re-throw our custom errors\n }\n throw this.createError(\"Network error\", error);\n }\n }\n\n private async handleErrorResponse(response: Response): Promise<never> {\n let errorBody: { message: string } | undefined;\n try {\n errorBody = (await response.json()) as { message: string };\n } catch {\n errorBody = { message: response.statusText };\n }\n\n const error = new Error(errorBody?.message || `HTTP ${response.status}`) as Error & {\n statusCode: number;\n code: string;\n response: unknown;\n };\n error.statusCode = response.status;\n error.code = (errorBody as unknown as { code: string } | undefined)?.code ?? \"\";\n error.response = errorBody;\n throw error;\n }\n\n private createError(message: string, cause?: unknown): Error {\n const error = new Error(message) as Error & { cause: unknown };\n error.cause = cause;\n return error;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"PUT\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n async deleteWithBody<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"DELETE\", path, body);\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, body);\n }\n}\n","/**\n * Audiences client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n AddContactsToAudienceRequest,\n AddContactsToAudienceResponse,\n Audience,\n AudienceContact,\n CreateAudienceRequest,\n DeleteAudienceResponse,\n ListAudienceContactsRequest,\n ListAudienceContactsResponse,\n ListAudiencesRequest,\n ListAudiencesResponse,\n RemoveContactsFromAudienceRequest,\n RemoveContactsFromAudienceResponse,\n UpdateAudienceRequest,\n} from \"./types\";\n\nexport class Audiences {\n constructor(private http: HttpClient) {}\n\n /**\n * List all audiences\n */\n async list(request: ListAudiencesRequest = {}): Promise<ListAudiencesResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListAudiencesResponse>(`/mail/audiences${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get an audience by ID\n */\n async get(id: string): Promise<Audience> {\n return this.http.get<Audience>(`/mail/audiences/${id}`);\n }\n\n /**\n * Create a new audience\n */\n async create(request: CreateAudienceRequest): Promise<Audience> {\n return this.http.post<Audience>(\"/mail/audiences\", request);\n }\n\n /**\n * Update an audience\n */\n async update(request: UpdateAudienceRequest): Promise<Audience> {\n const { id, ...data } = request;\n return this.http.put<Audience>(`/mail/audiences/${id}`, data);\n }\n\n /**\n * Delete an audience\n */\n async delete(id: string): Promise<DeleteAudienceResponse> {\n return this.http.delete<DeleteAudienceResponse>(`/mail/audiences/${id}`);\n }\n\n /**\n * List contacts in an audience\n */\n async listContacts(request: ListAudienceContactsRequest): Promise<ListAudienceContactsResponse> {\n const { id, ...params } = request;\n const searchParams = new URLSearchParams();\n if (params.environment) searchParams.set(\"environment\", params.environment);\n if (params.limit) searchParams.set(\"limit\", params.limit.toString());\n if (params.offset) searchParams.set(\"offset\", params.offset.toString());\n if (params.search) searchParams.set(\"search\", params.search);\n if (params.status) searchParams.set(\"status\", params.status);\n\n const query = searchParams.toString();\n return this.http.get<ListAudienceContactsResponse>(`/mail/audiences/${id}/contacts${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Add contacts to an audience\n */\n async addContacts(request: AddContactsToAudienceRequest): Promise<AddContactsToAudienceResponse> {\n const { id, contactIds } = request;\n return this.http.post<AddContactsToAudienceResponse>(`/mail/audiences/${id}/contacts`, { contactIds });\n }\n\n /**\n * Remove contacts from an audience\n */\n async removeContacts(request: RemoveContactsFromAudienceRequest): Promise<RemoveContactsFromAudienceResponse> {\n const { id, contactIds } = request;\n return this.http.deleteWithBody<RemoveContactsFromAudienceResponse>(`/mail/audiences/${id}/contacts`, {\n contactIds,\n });\n }\n}\n","/**\n * Campaigns client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n Campaign,\n CampaignStatsResponse,\n CancelCampaignResponse,\n CreateCampaignRequest,\n DeleteCampaignResponse,\n ListCampaignsRequest,\n ListCampaignsResponse,\n PauseCampaignResponse,\n SendCampaignRequest,\n SendCampaignResponse,\n UpdateCampaignRequest,\n} from \"./types\";\n\nexport class Campaigns {\n constructor(private http: HttpClient) {}\n\n /**\n * List all campaigns\n */\n async list(request: ListCampaignsRequest = {}): Promise<ListCampaignsResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n if (request.status) params.set(\"status\", request.status);\n\n const query = params.toString();\n return this.http.get<ListCampaignsResponse>(`/mail/campaigns${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a campaign by ID\n */\n async get(id: string): Promise<Campaign> {\n return this.http.get<Campaign>(`/mail/campaigns/${id}`);\n }\n\n /**\n * Create a new campaign\n */\n async create(request: CreateCampaignRequest): Promise<Campaign> {\n return this.http.post<Campaign>(\"/mail/campaigns\", request);\n }\n\n /**\n * Update a campaign\n */\n async update(request: UpdateCampaignRequest): Promise<Campaign> {\n const { id, ...data } = request;\n return this.http.put<Campaign>(`/mail/campaigns/${id}`, data);\n }\n\n /**\n * Delete a campaign\n */\n async delete(id: string): Promise<DeleteCampaignResponse> {\n return this.http.delete<DeleteCampaignResponse>(`/mail/campaigns/${id}`);\n }\n\n /**\n * Send a campaign\n */\n async send(request: SendCampaignRequest): Promise<SendCampaignResponse> {\n const { id, ...data } = request;\n return this.http.post<SendCampaignResponse>(`/mail/campaigns/${id}/send`, data);\n }\n\n /**\n * Pause a sending campaign\n */\n async pause(id: string): Promise<PauseCampaignResponse> {\n return this.http.post<PauseCampaignResponse>(`/mail/campaigns/${id}/pause`, {});\n }\n\n /**\n * Cancel a campaign\n */\n async cancel(id: string): Promise<CancelCampaignResponse> {\n return this.http.post<CancelCampaignResponse>(`/mail/campaigns/${id}/cancel`, {});\n }\n\n /**\n * Duplicate a campaign\n */\n async duplicate(id: string): Promise<Campaign> {\n return this.http.post<Campaign>(`/mail/campaigns/${id}/duplicate`, {});\n }\n\n /**\n * Get campaign statistics\n */\n async getStats(id: string): Promise<CampaignStatsResponse> {\n return this.http.get<CampaignStatsResponse>(`/mail/campaigns/${id}/stats`);\n }\n}\n","/**\n * Contacts client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n MailContact,\n CreateContactRequest,\n DeleteContactResponse,\n ImportContactsRequest,\n ImportContactsResponse,\n ListContactsRequest,\n ListContactsResponse,\n UpdateContactRequest,\n} from \"./types\";\n\nexport class Contacts {\n constructor(private http: HttpClient) {}\n\n /**\n * List all contacts\n */\n async list(request: ListContactsRequest = {}): Promise<ListContactsResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n if (request.status) params.set(\"status\", request.status);\n\n const query = params.toString();\n return this.http.get<ListContactsResponse>(`/mail/contacts${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a contact by ID\n */\n async get(id: string): Promise<MailContact> {\n return this.http.get<MailContact>(`/mail/contacts/${id}`);\n }\n\n /**\n * Create a new contact\n */\n async create(request: CreateContactRequest): Promise<MailContact> {\n return this.http.post<MailContact>(\"/mail/contacts\", request);\n }\n\n /**\n * Update a contact\n */\n async update(request: UpdateContactRequest): Promise<MailContact> {\n const { id, ...data } = request;\n return this.http.put<MailContact>(`/mail/contacts/${id}`, data);\n }\n\n /**\n * Delete a contact\n */\n async delete(id: string): Promise<DeleteContactResponse> {\n return this.http.delete<DeleteContactResponse>(`/mail/contacts/${id}`);\n }\n\n /**\n * Import contacts in bulk\n */\n async import(request: ImportContactsRequest): Promise<ImportContactsResponse> {\n return this.http.post<ImportContactsResponse>(\"/mail/contacts/import\", request);\n }\n}\n","/**\n * Domains client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n AddDomainRequest,\n AddDomainResponse,\n DeleteDomainResponse,\n Domain,\n GetDnsRecordsResponse,\n ListDomainsRequest,\n ListDomainsResponse,\n SetDefaultDomainResponse,\n VerifyDomainResponse,\n} from \"./types\";\n\nexport class Domains {\n constructor(private http: HttpClient) {}\n\n /**\n * List all domains for the organization\n */\n async list(request: ListDomainsRequest): Promise<ListDomainsResponse> {\n const params = new URLSearchParams();\n params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n\n return this.http.get<ListDomainsResponse>(`/mail/domains?${params.toString()}`);\n }\n\n /**\n * Add a new domain\n */\n async add(request: AddDomainRequest): Promise<AddDomainResponse> {\n return this.http.post<AddDomainResponse>(\"/mail/domains\", request);\n }\n\n /**\n * Get DNS records for a domain\n */\n async getDnsRecords(domainId: string): Promise<GetDnsRecordsResponse> {\n return this.http.get<GetDnsRecordsResponse>(`/mail/domains/${domainId}/dns`);\n }\n\n /**\n * Verify a domain\n */\n async verify(domainId: string): Promise<VerifyDomainResponse> {\n return this.http.post<VerifyDomainResponse>(`/mail/domains/${domainId}/verify`, {});\n }\n\n /**\n * Delete a domain\n */\n async delete(domainId: string): Promise<DeleteDomainResponse> {\n return this.http.delete<DeleteDomainResponse>(`/mail/domains/${domainId}`);\n }\n\n /**\n * Set a domain as the default\n */\n async setDefault(domainId: string): Promise<SetDefaultDomainResponse> {\n return this.http.post<SetDefaultDomainResponse>(`/mail/domains/${domainId}/default`, {});\n }\n}\n","/**\n * Events client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n BatchTrackEventsRequest,\n BatchTrackEventsResponse,\n CreateEventRequest,\n DeleteEventResponse,\n EventAnalyticsResponse,\n ListEventOccurrencesRequest,\n ListEventOccurrencesResponse,\n ListEventsRequest,\n ListEventsResponse,\n MailEvent,\n TrackEventRequest,\n TrackEventResponse,\n UpdateEventRequest,\n} from \"./types\";\n\nexport class Events {\n constructor(private http: HttpClient) {}\n\n // ============================================================================\n // EVENT DEFINITIONS\n // ============================================================================\n\n /**\n * List all event definitions\n */\n async list(request: ListEventsRequest = {}): Promise<ListEventsResponse> {\n const params = new URLSearchParams();\n if (request.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListEventsResponse>(`/mail/events${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get an event definition by ID\n */\n async get(id: string): Promise<MailEvent> {\n return this.http.get<MailEvent>(`/mail/events/${id}`);\n }\n\n /**\n * Create a new event definition\n */\n async create(request: CreateEventRequest): Promise<MailEvent> {\n return this.http.post<MailEvent>(\"/mail/events\", request);\n }\n\n /**\n * Update an event definition\n */\n async update(request: UpdateEventRequest): Promise<MailEvent> {\n const { id, ...data } = request;\n return this.http.put<MailEvent>(`/mail/events/${id}`, data);\n }\n\n /**\n * Delete an event definition\n */\n async delete(id: string): Promise<DeleteEventResponse> {\n return this.http.delete<DeleteEventResponse>(`/mail/events/${id}`);\n }\n\n // ============================================================================\n // EVENT TRACKING\n // ============================================================================\n\n /**\n * Track a single event\n * This can trigger email sequences configured to listen for this event\n */\n async track(request: TrackEventRequest): Promise<TrackEventResponse> {\n return this.http.post<TrackEventResponse>(\"/mail/events/track\", request);\n }\n\n /**\n * Track multiple events in a batch (max 100)\n */\n async trackBatch(request: BatchTrackEventsRequest): Promise<BatchTrackEventsResponse> {\n return this.http.post<BatchTrackEventsResponse>(\"/mail/events/track/batch\", request);\n }\n\n // ============================================================================\n // EVENT OCCURRENCES\n // ============================================================================\n\n /**\n * List event occurrences\n */\n async listOccurrences(request: ListEventOccurrencesRequest = {}): Promise<ListEventOccurrencesResponse> {\n const params = new URLSearchParams();\n if (request.eventId) params.set(\"eventId\", request.eventId);\n if (request.contactId) params.set(\"contactId\", request.contactId);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.startDate) {\n params.set(\"startDate\", request.startDate instanceof Date ? request.startDate.toISOString() : request.startDate);\n }\n if (request.endDate) {\n params.set(\"endDate\", request.endDate instanceof Date ? request.endDate.toISOString() : request.endDate);\n }\n\n const query = params.toString();\n return this.http.get<ListEventOccurrencesResponse>(`/mail/events/occurrences${query ? `?${query}` : \"\"}`);\n }\n\n // ============================================================================\n // ANALYTICS\n // ============================================================================\n\n /**\n * Get analytics for an event\n */\n async getAnalytics(id: string): Promise<EventAnalyticsResponse> {\n return this.http.get<EventAnalyticsResponse>(`/mail/events/analytics/${id}`);\n }\n}\n","/**\n * Mailboxes client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n Mailbox,\n CreateMailboxRequest,\n UpdateMailboxRequest,\n ListMailboxesRequest,\n ListMailboxesResponse,\n InboundMessage,\n ListInboundMessagesRequest,\n ListInboundMessagesResponse,\n} from \"./types\";\n\nexport class Mailboxes {\n constructor(private http: HttpClient) {}\n\n /**\n * Create a new mailbox\n */\n async create(request: CreateMailboxRequest): Promise<Mailbox> {\n return this.http.post<Mailbox>(\"/mail/mailboxes\", request);\n }\n\n /**\n * Get a mailbox by ID\n */\n async get(id: string): Promise<Mailbox> {\n return this.http.get<Mailbox>(`/mail/mailboxes/${id}`);\n }\n\n /**\n * List mailboxes with optional filters\n */\n async list(request?: ListMailboxesRequest): Promise<ListMailboxesResponse> {\n const params = new URLSearchParams();\n if (request?.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request?.environment) params.set(\"environment\", request.environment);\n if (request?.domain) params.set(\"domain\", request.domain);\n if (request?.status) params.set(\"status\", request.status);\n if (request?.limit) params.set(\"limit\", String(request.limit));\n if (request?.cursor) params.set(\"cursor\", request.cursor);\n const qs = params.toString();\n return this.http.get<ListMailboxesResponse>(`/mail/mailboxes${qs ? `?${qs}` : \"\"}`);\n }\n\n /**\n * Update a mailbox\n */\n async update(request: UpdateMailboxRequest): Promise<Mailbox> {\n const { id, ...data } = request;\n return this.http.patch<Mailbox>(`/mail/mailboxes/${id}`, data);\n }\n\n /**\n * Delete a mailbox\n */\n async delete(id: string): Promise<{ success: boolean }> {\n return this.http.delete(`/mail/mailboxes/${id}`);\n }\n\n /**\n * List inbound messages across mailboxes\n */\n async listMessages(request?: ListInboundMessagesRequest): Promise<ListInboundMessagesResponse> {\n const params = new URLSearchParams();\n if (request?.mailboxId) params.set(\"mailboxId\", request.mailboxId);\n if (request?.limit) params.set(\"limit\", String(request.limit));\n if (request?.cursor) params.set(\"cursor\", request.cursor);\n const qs = params.toString();\n return this.http.get<ListInboundMessagesResponse>(`/mail/mailboxes/messages${qs ? `?${qs}` : \"\"}`);\n }\n\n /**\n * Get an inbound message by ID\n */\n async getMessage(id: string): Promise<InboundMessage> {\n return this.http.get<InboundMessage>(`/mail/mailboxes/messages/${id}`);\n }\n}\n","/**\n * Sequences client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n AddContactToSequenceRequest,\n ArchiveSequenceResponse,\n CreateConnectionRequest,\n CreateNodeRequest,\n CreateSequenceRequest,\n DeleteConnectionResponse,\n DeleteNodeResponse,\n DeleteSequenceResponse,\n ListSequenceEntriesRequest,\n ListSequenceEntriesResponse,\n ListSequencesRequest,\n ListSequencesResponse,\n PauseSequenceResponse,\n PublishSequenceResponse,\n RemoveContactFromSequenceRequest,\n RemoveContactFromSequenceResponse,\n ResumeSequenceResponse,\n Sequence,\n SequenceAnalyticsResponse,\n SequenceConnection,\n SequenceEntry,\n SequenceNode,\n SequenceWithNodes,\n SetNodeBranchRequest,\n SetNodeEmailRequest,\n SetNodeExperimentRequest,\n SetNodeFilterRequest,\n SetNodeTimerRequest,\n UpdateNodePositionRequest,\n UpdateNodeRequest,\n UpdateSequenceRequest,\n} from \"./types\";\n\nexport class Sequences {\n constructor(private http: HttpClient) {}\n\n // ============================================================================\n // SEQUENCE CRUD\n // ============================================================================\n\n /**\n * List all sequences\n */\n async list(request: ListSequencesRequest = {}): Promise<ListSequencesResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n if (request.status) params.set(\"status\", request.status);\n if (request.triggerType) params.set(\"triggerType\", request.triggerType);\n\n const query = params.toString();\n return this.http.get<ListSequencesResponse>(`/mail/sequences${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a sequence by ID with all nodes and connections\n */\n async get(id: string): Promise<SequenceWithNodes> {\n return this.http.get<SequenceWithNodes>(`/mail/sequences/${id}`);\n }\n\n /**\n * Create a new sequence\n */\n async create(request: CreateSequenceRequest): Promise<Sequence> {\n return this.http.post<Sequence>(\"/mail/sequences\", request);\n }\n\n /**\n * Update a sequence\n */\n async update(request: UpdateSequenceRequest): Promise<Sequence> {\n const { id, ...data } = request;\n return this.http.put<Sequence>(`/mail/sequences/${id}`, data);\n }\n\n /**\n * Delete a sequence\n */\n async delete(id: string): Promise<DeleteSequenceResponse> {\n return this.http.delete<DeleteSequenceResponse>(`/mail/sequences/${id}`);\n }\n\n // ============================================================================\n // SEQUENCE LIFECYCLE\n // ============================================================================\n\n /**\n * Publish (activate) a sequence\n */\n async publish(id: string): Promise<PublishSequenceResponse> {\n return this.http.post<PublishSequenceResponse>(`/mail/sequences/${id}/publish`, {});\n }\n\n /**\n * Pause an active sequence\n */\n async pause(id: string): Promise<PauseSequenceResponse> {\n return this.http.post<PauseSequenceResponse>(`/mail/sequences/${id}/pause`, {});\n }\n\n /**\n * Resume a paused sequence\n */\n async resume(id: string): Promise<ResumeSequenceResponse> {\n return this.http.post<ResumeSequenceResponse>(`/mail/sequences/${id}/resume`, {});\n }\n\n /**\n * Archive a sequence\n */\n async archive(id: string): Promise<ArchiveSequenceResponse> {\n return this.http.post<ArchiveSequenceResponse>(`/mail/sequences/${id}/archive`, {});\n }\n\n /**\n * Duplicate a sequence\n */\n async duplicate(id: string, name?: string): Promise<Sequence> {\n return this.http.post<Sequence>(`/mail/sequences/${id}/duplicate`, { name });\n }\n\n // ============================================================================\n // NODE MANAGEMENT\n // ============================================================================\n\n /**\n * Create a new node in a sequence\n */\n async createNode(request: CreateNodeRequest): Promise<SequenceNode> {\n const { id, ...data } = request;\n return this.http.post<SequenceNode>(`/mail/sequences/${id}/nodes`, data);\n }\n\n /**\n * Update a node\n */\n async updateNode(request: UpdateNodeRequest): Promise<SequenceNode> {\n const { id, nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${id}/nodes/${nodeId}`, data);\n }\n\n /**\n * Update node position (for visual editor)\n */\n async updateNodePosition(request: UpdateNodePositionRequest): Promise<SequenceNode> {\n const { id, nodeId, positionX, positionY } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${id}/nodes/${nodeId}/position`, { positionX, positionY });\n }\n\n /**\n * Delete a node\n */\n async deleteNode(sequenceId: string, nodeId: string): Promise<DeleteNodeResponse> {\n return this.http.delete<DeleteNodeResponse>(`/mail/sequences/${sequenceId}/nodes/${nodeId}`);\n }\n\n // ============================================================================\n // NODE CONFIGURATIONS\n // ============================================================================\n\n /**\n * Set email node content\n */\n async setNodeEmail(sequenceId: string, request: SetNodeEmailRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/email`, data);\n }\n\n /**\n * Set timer node configuration\n */\n async setNodeTimer(sequenceId: string, request: SetNodeTimerRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/timer`, data);\n }\n\n /**\n * Set filter node configuration\n */\n async setNodeFilter(sequenceId: string, request: SetNodeFilterRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/filter`, data);\n }\n\n /**\n * Set branch node configuration\n */\n async setNodeBranch(sequenceId: string, request: SetNodeBranchRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/branch`, data);\n }\n\n /**\n * Set experiment node configuration\n */\n async setNodeExperiment(sequenceId: string, request: SetNodeExperimentRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/experiment`, data);\n }\n\n // ============================================================================\n // CONNECTIONS\n // ============================================================================\n\n /**\n * Create a connection between nodes\n */\n async createConnection(request: CreateConnectionRequest): Promise<SequenceConnection> {\n const { id, ...data } = request;\n return this.http.post<SequenceConnection>(`/mail/sequences/${id}/connections`, data);\n }\n\n /**\n * Delete a connection\n */\n async deleteConnection(sequenceId: string, connectionId: string): Promise<DeleteConnectionResponse> {\n return this.http.delete<DeleteConnectionResponse>(`/mail/sequences/${sequenceId}/connections/${connectionId}`);\n }\n\n // ============================================================================\n // SEQUENCE ENTRIES (CONTACTS IN SEQUENCE)\n // ============================================================================\n\n /**\n * List contacts in a sequence\n */\n async listEntries(request: ListSequenceEntriesRequest): Promise<ListSequenceEntriesResponse> {\n const { id, ...params } = request;\n const searchParams = new URLSearchParams();\n if (params.limit) searchParams.set(\"limit\", params.limit.toString());\n if (params.offset) searchParams.set(\"offset\", params.offset.toString());\n if (params.status) searchParams.set(\"status\", params.status);\n if (params.search) searchParams.set(\"search\", params.search);\n\n const query = searchParams.toString();\n return this.http.get<ListSequenceEntriesResponse>(`/mail/sequences/${id}/entries${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Add a contact to a sequence\n */\n async addContact(request: AddContactToSequenceRequest): Promise<SequenceEntry> {\n const { id, contactId } = request;\n return this.http.post<SequenceEntry>(`/mail/sequences/${id}/add-contact`, { contactId });\n }\n\n /**\n * Remove a contact from a sequence\n */\n async removeContact(request: RemoveContactFromSequenceRequest): Promise<RemoveContactFromSequenceResponse> {\n const { id, entryId, reason } = request;\n return this.http.post<RemoveContactFromSequenceResponse>(`/mail/sequences/${id}/remove-contact`, {\n entryId,\n reason,\n });\n }\n\n // ============================================================================\n // ANALYTICS\n // ============================================================================\n\n /**\n * Get sequence analytics\n */\n async getAnalytics(id: string): Promise<SequenceAnalyticsResponse> {\n return this.http.get<SequenceAnalyticsResponse>(`/mail/sequences/${id}/analytics`);\n }\n}\n","/**\n * Templates client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n CreateTemplateRequest,\n DeleteTemplateResponse,\n ListTemplatesRequest,\n ListTemplatesResponse,\n PreviewTemplateRequest,\n PreviewTemplateResponse,\n Template,\n UpdateTemplateRequest,\n} from \"./types\";\n\nexport class Templates {\n constructor(private http: HttpClient) {}\n\n /**\n * List all templates\n */\n async list(request: ListTemplatesRequest = {}): Promise<ListTemplatesResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.isActive !== undefined) params.set(\"isActive\", request.isActive.toString());\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListTemplatesResponse>(`/mail/templates${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a template by ID\n */\n async get(id: string): Promise<Template> {\n return this.http.get<Template>(`/mail/templates/${id}`);\n }\n\n /**\n * Get a template by slug\n */\n async getBySlug(slug: string): Promise<Template> {\n return this.http.get<Template>(`/mail/templates/slug/${slug}`);\n }\n\n /**\n * Create a new template\n */\n async create(request: CreateTemplateRequest): Promise<Template> {\n return this.http.post<Template>(\"/mail/templates\", request);\n }\n\n /**\n * Update a template\n */\n async update(request: UpdateTemplateRequest): Promise<Template> {\n const { id, ...data } = request;\n return this.http.put<Template>(`/mail/templates/${id}`, data);\n }\n\n /**\n * Delete a template\n */\n async delete(id: string): Promise<DeleteTemplateResponse> {\n return this.http.delete<DeleteTemplateResponse>(`/mail/templates/${id}`);\n }\n\n /**\n * Preview a template with variables\n */\n async preview(request: PreviewTemplateRequest): Promise<PreviewTemplateResponse> {\n const { id, variables } = request;\n return this.http.post<PreviewTemplateResponse>(`/mail/templates/${id}/preview`, { variables });\n }\n}\n","/**\n * Stack0 Mail Client\n * Complete email API with support for transactional emails, campaigns, sequences, and more\n */\n\nimport { HttpClient, type HttpClientConfig } from \"../lib/http-client\";\nimport { Audiences } from \"./audiences\";\nimport { Campaigns } from \"./campaigns\";\nimport { Contacts } from \"./contacts\";\nimport { Domains } from \"./domains\";\nimport { Events } from \"./events\";\nimport { Mailboxes } from \"./mailboxes\";\nimport { Sequences } from \"./sequences\";\nimport { Templates } from \"./templates\";\nimport type {\n CancelEmailResponse,\n EmailAnalyticsResponse,\n GetEmailResponse,\n HourlyAnalyticsResponse,\n InboundEmailPayload,\n ListEmailsRequest,\n ListEmailsResponse,\n ListSendersRequest,\n ListSendersResponse,\n ReplyBody,\n ResendEmailResponse,\n SendBatchEmailRequest,\n SendBatchEmailResponse,\n SendBroadcastEmailRequest,\n SendBroadcastEmailResponse,\n SendEmailRequest,\n SendEmailResponse,\n TimeSeriesAnalyticsRequest,\n TimeSeriesAnalyticsResponse,\n} from \"./types\";\n\nexport class Mail {\n private http: HttpClient;\n\n /** Manage sending domains */\n readonly domains: Domains;\n\n /** Manage email templates */\n readonly templates: Templates;\n\n /** Manage contact audiences/lists */\n readonly audiences: Audiences;\n\n /** Manage contacts */\n readonly contacts: Contacts;\n\n /** Manage email campaigns */\n readonly campaigns: Campaigns;\n\n /** Manage automated email sequences */\n readonly sequences: Sequences;\n\n /** Track and manage custom events */\n readonly events: Events;\n\n /** Manage agent mailboxes */\n readonly mailboxes: Mailboxes;\n\n constructor(config: HttpClientConfig) {\n this.http = new HttpClient(config);\n\n // Initialize sub-clients\n this.domains = new Domains(this.http);\n this.templates = new Templates(this.http);\n this.audiences = new Audiences(this.http);\n this.contacts = new Contacts(this.http);\n this.campaigns = new Campaigns(this.http);\n this.sequences = new Sequences(this.http);\n this.events = new Events(this.http);\n this.mailboxes = new Mailboxes(this.http);\n }\n\n // ============================================================================\n // TRANSACTIONAL EMAILS\n // ============================================================================\n\n /**\n * Send a single email\n *\n * @example\n * ```typescript\n * const result = await mail.send({\n * from: 'noreply@example.com',\n * to: 'user@example.com',\n * subject: 'Hello World',\n * html: '<p>Welcome!</p>',\n * });\n * ```\n */\n async send(request: SendEmailRequest): Promise<SendEmailResponse> {\n return this.http.post<SendEmailResponse>(\"/mail/send\", request);\n }\n\n /**\n * Reply to an inbound email with correct RFC 5322 threading headers.\n * Automatically derives `from`, `to`, `subject`, `inReplyTo`, and `references`\n * from the inbound webhook payload — pass through any overrides as the second\n * argument.\n *\n * @example\n * ```typescript\n * // In your webhook handler:\n * await mail.reply(inboundEmail, {\n * text: 'Thanks for the note — talk soon.',\n * });\n * ```\n */\n async reply(\n inbound: InboundEmailPayload,\n body: ReplyBody & Partial<SendEmailRequest>,\n ): Promise<SendEmailResponse> {\n const parentId = inbound.messageId;\n const refs = [...(inbound.references ?? []), parentId].filter(Boolean) as string[];\n const subject = body.subject ?? (inbound.subject?.startsWith(\"Re:\") ? inbound.subject : `Re: ${inbound.subject ?? \"\"}`);\n\n const request: SendEmailRequest = {\n from: body.from ?? inbound.mailbox,\n to: body.to ?? inbound.from.email,\n subject,\n text: body.text,\n html: body.html,\n replyTo: body.replyTo,\n cc: body.cc,\n bcc: body.bcc,\n tags: body.tags,\n metadata: body.metadata,\n templateId: body.templateId,\n templateVariables: body.templateVariables,\n environment: body.environment,\n inReplyTo: body.inReplyTo ?? parentId ?? undefined,\n references: body.references ?? (refs.length ? refs.join(\" \") : undefined),\n };\n\n return this.send(request);\n }\n\n /**\n * Send multiple emails in a batch (up to 100)\n * Each email can have different content and recipients\n *\n * @example\n * ```typescript\n * const result = await mail.sendBatch({\n * emails: [\n * { from: 'noreply@example.com', to: 'user1@example.com', subject: 'Hello', html: '<p>Hi User 1</p>' },\n * { from: 'noreply@example.com', to: 'user2@example.com', subject: 'Hello', html: '<p>Hi User 2</p>' },\n * ]\n * });\n * ```\n */\n async sendBatch(request: SendBatchEmailRequest): Promise<SendBatchEmailResponse> {\n return this.http.post<SendBatchEmailResponse>(\"/mail/send/batch\", request);\n }\n\n /**\n * Send a broadcast email (same content to multiple recipients, up to 1000)\n *\n * @example\n * ```typescript\n * const result = await mail.sendBroadcast({\n * from: 'noreply@example.com',\n * to: ['user1@example.com', 'user2@example.com', 'user3@example.com'],\n * subject: 'Newsletter',\n * html: '<p>Our latest updates...</p>',\n * });\n * ```\n */\n async sendBroadcast(request: SendBroadcastEmailRequest): Promise<SendBroadcastEmailResponse> {\n return this.http.post<SendBroadcastEmailResponse>(\"/mail/send/broadcast\", request);\n }\n\n /**\n * Get email details by ID\n *\n * @example\n * ```typescript\n * const email = await mail.get('email-id');\n * console.log(email.status); // 'delivered'\n * ```\n */\n async get(id: string): Promise<GetEmailResponse> {\n return this.http.get<GetEmailResponse>(`/mail/${id}`);\n }\n\n /**\n * List emails with optional filters\n *\n * @example\n * ```typescript\n * const result = await mail.list({\n * status: 'delivered',\n * limit: 50,\n * });\n * ```\n */\n async list(request: ListEmailsRequest = {}): Promise<ListEmailsResponse> {\n const params = new URLSearchParams();\n if (request.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.status) params.set(\"status\", request.status);\n if (request.from) params.set(\"from\", request.from);\n if (request.to) params.set(\"to\", request.to);\n if (request.subject) params.set(\"subject\", request.subject);\n if (request.tag) params.set(\"tag\", request.tag);\n if (request.startDate) {\n params.set(\"startDate\", request.startDate instanceof Date ? request.startDate.toISOString() : request.startDate);\n }\n if (request.endDate) {\n params.set(\"endDate\", request.endDate instanceof Date ? request.endDate.toISOString() : request.endDate);\n }\n if (request.sortBy) params.set(\"sortBy\", request.sortBy);\n if (request.sortOrder) params.set(\"sortOrder\", request.sortOrder);\n\n const query = params.toString();\n return this.http.get<ListEmailsResponse>(`/mail${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Resend a previously sent email\n */\n async resend(id: string): Promise<ResendEmailResponse> {\n return this.http.post<ResendEmailResponse>(`/mail/${id}/resend`, {});\n }\n\n /**\n * Cancel a scheduled email\n */\n async cancel(id: string): Promise<CancelEmailResponse> {\n return this.http.post<CancelEmailResponse>(`/mail/${id}/cancel`, {});\n }\n\n // ============================================================================\n // ANALYTICS\n // ============================================================================\n\n /**\n * Get overall email analytics\n */\n async getAnalytics(): Promise<EmailAnalyticsResponse> {\n return this.http.get<EmailAnalyticsResponse>(\"/mail/analytics\");\n }\n\n /**\n * Get time series analytics (daily breakdown)\n */\n async getTimeSeriesAnalytics(request: TimeSeriesAnalyticsRequest = {}): Promise<TimeSeriesAnalyticsResponse> {\n const params = new URLSearchParams();\n if (request.days) params.set(\"days\", request.days.toString());\n\n const query = params.toString();\n return this.http.get<TimeSeriesAnalyticsResponse>(`/mail/analytics/timeseries${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get hourly analytics\n */\n async getHourlyAnalytics(): Promise<HourlyAnalyticsResponse> {\n return this.http.get<HourlyAnalyticsResponse>(\"/mail/analytics/hourly\");\n }\n\n /**\n * List unique senders with their statistics\n */\n async listSenders(request: ListSendersRequest = {}): Promise<ListSendersResponse> {\n const params = new URLSearchParams();\n if (request.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListSendersResponse>(`/mail/senders${query ? `?${query}` : \"\"}`);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/lib/http-client.ts","../../src/mail/audiences.ts","../../src/mail/campaigns.ts","../../src/mail/contacts.ts","../../src/mail/domains.ts","../../src/mail/events.ts","../../src/mail/mailboxes.ts","../../src/mail/sequences.ts","../../src/mail/templates.ts","../../src/mail/client.ts","../../src/mail/webhooks.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * HTTP client for Stack0 API\n * Handles authentication, request/response formatting, and error handling\n */\n\nexport interface HttpClientConfig {\n apiKey: string;\n baseUrl?: string;\n}\n\nexport class HttpClient {\n private apiKey: string;\n private baseUrl: string;\n\n constructor(config: HttpClientConfig) {\n this.apiKey = config.apiKey;\n this.baseUrl = config.baseUrl || \"https://api.stack0.dev/v1\";\n }\n\n private getHeaders(includeContentType = true): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n };\n if (includeContentType) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n return headers;\n }\n\n async request<T>(method: string, path: string, body?: unknown): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n const bodyString = body === undefined ? undefined : JSON.stringify(body);\n const hasBody = bodyString !== undefined;\n\n try {\n const response = await fetch(url, {\n method,\n headers: this.getHeaders(hasBody),\n body: hasBody ? bodyString : undefined,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n const data = await response.json();\n return data as T;\n } catch (error) {\n if (error instanceof Error && \"statusCode\" in error) {\n throw error; // Re-throw our custom errors\n }\n throw this.createError(\"Network error\", error);\n }\n }\n\n private async handleErrorResponse(response: Response): Promise<never> {\n let errorBody: { message: string } | undefined;\n try {\n errorBody = (await response.json()) as { message: string };\n } catch {\n errorBody = { message: response.statusText };\n }\n\n const error = new Error(errorBody?.message || `HTTP ${response.status}`) as Error & {\n statusCode: number;\n code: string;\n response: unknown;\n };\n error.statusCode = response.status;\n error.code = (errorBody as unknown as { code: string } | undefined)?.code ?? \"\";\n error.response = errorBody;\n throw error;\n }\n\n private createError(message: string, cause?: unknown): Error {\n const error = new Error(message) as Error & { cause: unknown };\n error.cause = cause;\n return error;\n }\n\n async get<T>(path: string): Promise<T> {\n return this.request<T>(\"GET\", path);\n }\n\n async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"POST\", path, body);\n }\n\n async put<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"PUT\", path, body);\n }\n\n async delete<T>(path: string): Promise<T> {\n return this.request<T>(\"DELETE\", path);\n }\n\n async deleteWithBody<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"DELETE\", path, body);\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(\"PATCH\", path, body);\n }\n}\n","/**\n * Audiences client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n AddContactsToAudienceRequest,\n AddContactsToAudienceResponse,\n Audience,\n AudienceContact,\n CreateAudienceRequest,\n DeleteAudienceResponse,\n ListAudienceContactsRequest,\n ListAudienceContactsResponse,\n ListAudiencesRequest,\n ListAudiencesResponse,\n RemoveContactsFromAudienceRequest,\n RemoveContactsFromAudienceResponse,\n UpdateAudienceRequest,\n} from \"./types\";\n\nexport class Audiences {\n constructor(private http: HttpClient) {}\n\n /**\n * List all audiences\n */\n async list(request: ListAudiencesRequest = {}): Promise<ListAudiencesResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListAudiencesResponse>(`/mail/audiences${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get an audience by ID\n */\n async get(id: string): Promise<Audience> {\n return this.http.get<Audience>(`/mail/audiences/${id}`);\n }\n\n /**\n * Create a new audience\n */\n async create(request: CreateAudienceRequest): Promise<Audience> {\n return this.http.post<Audience>(\"/mail/audiences\", request);\n }\n\n /**\n * Update an audience\n */\n async update(request: UpdateAudienceRequest): Promise<Audience> {\n const { id, ...data } = request;\n return this.http.put<Audience>(`/mail/audiences/${id}`, data);\n }\n\n /**\n * Delete an audience\n */\n async delete(id: string): Promise<DeleteAudienceResponse> {\n return this.http.delete<DeleteAudienceResponse>(`/mail/audiences/${id}`);\n }\n\n /**\n * List contacts in an audience\n */\n async listContacts(request: ListAudienceContactsRequest): Promise<ListAudienceContactsResponse> {\n const { id, ...params } = request;\n const searchParams = new URLSearchParams();\n if (params.environment) searchParams.set(\"environment\", params.environment);\n if (params.limit) searchParams.set(\"limit\", params.limit.toString());\n if (params.offset) searchParams.set(\"offset\", params.offset.toString());\n if (params.search) searchParams.set(\"search\", params.search);\n if (params.status) searchParams.set(\"status\", params.status);\n\n const query = searchParams.toString();\n return this.http.get<ListAudienceContactsResponse>(`/mail/audiences/${id}/contacts${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Add contacts to an audience\n */\n async addContacts(request: AddContactsToAudienceRequest): Promise<AddContactsToAudienceResponse> {\n const { id, contactIds } = request;\n return this.http.post<AddContactsToAudienceResponse>(`/mail/audiences/${id}/contacts`, { contactIds });\n }\n\n /**\n * Remove contacts from an audience\n */\n async removeContacts(request: RemoveContactsFromAudienceRequest): Promise<RemoveContactsFromAudienceResponse> {\n const { id, contactIds } = request;\n return this.http.deleteWithBody<RemoveContactsFromAudienceResponse>(`/mail/audiences/${id}/contacts`, {\n contactIds,\n });\n }\n}\n","/**\n * Campaigns client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n Campaign,\n CampaignStatsResponse,\n CancelCampaignResponse,\n CreateCampaignRequest,\n DeleteCampaignResponse,\n ListCampaignsRequest,\n ListCampaignsResponse,\n PauseCampaignResponse,\n SendCampaignRequest,\n SendCampaignResponse,\n UpdateCampaignRequest,\n} from \"./types\";\n\nexport class Campaigns {\n constructor(private http: HttpClient) {}\n\n /**\n * List all campaigns\n */\n async list(request: ListCampaignsRequest = {}): Promise<ListCampaignsResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n if (request.status) params.set(\"status\", request.status);\n\n const query = params.toString();\n return this.http.get<ListCampaignsResponse>(`/mail/campaigns${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a campaign by ID\n */\n async get(id: string): Promise<Campaign> {\n return this.http.get<Campaign>(`/mail/campaigns/${id}`);\n }\n\n /**\n * Create a new campaign\n */\n async create(request: CreateCampaignRequest): Promise<Campaign> {\n return this.http.post<Campaign>(\"/mail/campaigns\", request);\n }\n\n /**\n * Update a campaign\n */\n async update(request: UpdateCampaignRequest): Promise<Campaign> {\n const { id, ...data } = request;\n return this.http.put<Campaign>(`/mail/campaigns/${id}`, data);\n }\n\n /**\n * Delete a campaign\n */\n async delete(id: string): Promise<DeleteCampaignResponse> {\n return this.http.delete<DeleteCampaignResponse>(`/mail/campaigns/${id}`);\n }\n\n /**\n * Send a campaign\n */\n async send(request: SendCampaignRequest): Promise<SendCampaignResponse> {\n const { id, ...data } = request;\n return this.http.post<SendCampaignResponse>(`/mail/campaigns/${id}/send`, data);\n }\n\n /**\n * Pause a sending campaign\n */\n async pause(id: string): Promise<PauseCampaignResponse> {\n return this.http.post<PauseCampaignResponse>(`/mail/campaigns/${id}/pause`, {});\n }\n\n /**\n * Cancel a campaign\n */\n async cancel(id: string): Promise<CancelCampaignResponse> {\n return this.http.post<CancelCampaignResponse>(`/mail/campaigns/${id}/cancel`, {});\n }\n\n /**\n * Duplicate a campaign\n */\n async duplicate(id: string): Promise<Campaign> {\n return this.http.post<Campaign>(`/mail/campaigns/${id}/duplicate`, {});\n }\n\n /**\n * Get campaign statistics\n */\n async getStats(id: string): Promise<CampaignStatsResponse> {\n return this.http.get<CampaignStatsResponse>(`/mail/campaigns/${id}/stats`);\n }\n}\n","/**\n * Contacts client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n MailContact,\n CreateContactRequest,\n DeleteContactResponse,\n ImportContactsRequest,\n ImportContactsResponse,\n ListContactsRequest,\n ListContactsResponse,\n UpdateContactRequest,\n} from \"./types\";\n\nexport class Contacts {\n constructor(private http: HttpClient) {}\n\n /**\n * List all contacts\n */\n async list(request: ListContactsRequest = {}): Promise<ListContactsResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n if (request.status) params.set(\"status\", request.status);\n\n const query = params.toString();\n return this.http.get<ListContactsResponse>(`/mail/contacts${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a contact by ID\n */\n async get(id: string): Promise<MailContact> {\n return this.http.get<MailContact>(`/mail/contacts/${id}`);\n }\n\n /**\n * Create a new contact\n */\n async create(request: CreateContactRequest): Promise<MailContact> {\n return this.http.post<MailContact>(\"/mail/contacts\", request);\n }\n\n /**\n * Update a contact\n */\n async update(request: UpdateContactRequest): Promise<MailContact> {\n const { id, ...data } = request;\n return this.http.put<MailContact>(`/mail/contacts/${id}`, data);\n }\n\n /**\n * Delete a contact\n */\n async delete(id: string): Promise<DeleteContactResponse> {\n return this.http.delete<DeleteContactResponse>(`/mail/contacts/${id}`);\n }\n\n /**\n * Import contacts in bulk\n */\n async import(request: ImportContactsRequest): Promise<ImportContactsResponse> {\n return this.http.post<ImportContactsResponse>(\"/mail/contacts/import\", request);\n }\n}\n","/**\n * Domains client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n AddDomainRequest,\n AddDomainResponse,\n DeleteDomainResponse,\n Domain,\n GetDnsRecordsResponse,\n ListDomainsRequest,\n ListDomainsResponse,\n SetDefaultDomainResponse,\n VerifyDomainResponse,\n} from \"./types\";\n\nexport class Domains {\n constructor(private http: HttpClient) {}\n\n /**\n * List all domains for the organization\n */\n async list(request: ListDomainsRequest): Promise<ListDomainsResponse> {\n const params = new URLSearchParams();\n params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n\n return this.http.get<ListDomainsResponse>(`/mail/domains?${params.toString()}`);\n }\n\n /**\n * Add a new domain\n */\n async add(request: AddDomainRequest): Promise<AddDomainResponse> {\n return this.http.post<AddDomainResponse>(\"/mail/domains\", request);\n }\n\n /**\n * Get DNS records for a domain\n */\n async getDnsRecords(domainId: string): Promise<GetDnsRecordsResponse> {\n return this.http.get<GetDnsRecordsResponse>(`/mail/domains/${domainId}/dns`);\n }\n\n /**\n * Verify a domain\n */\n async verify(domainId: string): Promise<VerifyDomainResponse> {\n return this.http.post<VerifyDomainResponse>(`/mail/domains/${domainId}/verify`, {});\n }\n\n /**\n * Delete a domain\n */\n async delete(domainId: string): Promise<DeleteDomainResponse> {\n return this.http.delete<DeleteDomainResponse>(`/mail/domains/${domainId}`);\n }\n\n /**\n * Set a domain as the default\n */\n async setDefault(domainId: string): Promise<SetDefaultDomainResponse> {\n return this.http.post<SetDefaultDomainResponse>(`/mail/domains/${domainId}/default`, {});\n }\n}\n","/**\n * Events client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n BatchTrackEventsRequest,\n BatchTrackEventsResponse,\n CreateEventRequest,\n DeleteEventResponse,\n EventAnalyticsResponse,\n ListEventOccurrencesRequest,\n ListEventOccurrencesResponse,\n ListEventsRequest,\n ListEventsResponse,\n MailEvent,\n TrackEventRequest,\n TrackEventResponse,\n UpdateEventRequest,\n} from \"./types\";\n\nexport class Events {\n constructor(private http: HttpClient) {}\n\n // ============================================================================\n // EVENT DEFINITIONS\n // ============================================================================\n\n /**\n * List all event definitions\n */\n async list(request: ListEventsRequest = {}): Promise<ListEventsResponse> {\n const params = new URLSearchParams();\n if (request.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListEventsResponse>(`/mail/events${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get an event definition by ID\n */\n async get(id: string): Promise<MailEvent> {\n return this.http.get<MailEvent>(`/mail/events/${id}`);\n }\n\n /**\n * Create a new event definition\n */\n async create(request: CreateEventRequest): Promise<MailEvent> {\n return this.http.post<MailEvent>(\"/mail/events\", request);\n }\n\n /**\n * Update an event definition\n */\n async update(request: UpdateEventRequest): Promise<MailEvent> {\n const { id, ...data } = request;\n return this.http.put<MailEvent>(`/mail/events/${id}`, data);\n }\n\n /**\n * Delete an event definition\n */\n async delete(id: string): Promise<DeleteEventResponse> {\n return this.http.delete<DeleteEventResponse>(`/mail/events/${id}`);\n }\n\n // ============================================================================\n // EVENT TRACKING\n // ============================================================================\n\n /**\n * Track a single event\n * This can trigger email sequences configured to listen for this event\n */\n async track(request: TrackEventRequest): Promise<TrackEventResponse> {\n return this.http.post<TrackEventResponse>(\"/mail/events/track\", request);\n }\n\n /**\n * Track multiple events in a batch (max 100)\n */\n async trackBatch(request: BatchTrackEventsRequest): Promise<BatchTrackEventsResponse> {\n return this.http.post<BatchTrackEventsResponse>(\"/mail/events/track/batch\", request);\n }\n\n // ============================================================================\n // EVENT OCCURRENCES\n // ============================================================================\n\n /**\n * List event occurrences\n */\n async listOccurrences(request: ListEventOccurrencesRequest = {}): Promise<ListEventOccurrencesResponse> {\n const params = new URLSearchParams();\n if (request.eventId) params.set(\"eventId\", request.eventId);\n if (request.contactId) params.set(\"contactId\", request.contactId);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.startDate) {\n params.set(\"startDate\", request.startDate instanceof Date ? request.startDate.toISOString() : request.startDate);\n }\n if (request.endDate) {\n params.set(\"endDate\", request.endDate instanceof Date ? request.endDate.toISOString() : request.endDate);\n }\n\n const query = params.toString();\n return this.http.get<ListEventOccurrencesResponse>(`/mail/events/occurrences${query ? `?${query}` : \"\"}`);\n }\n\n // ============================================================================\n // ANALYTICS\n // ============================================================================\n\n /**\n * Get analytics for an event\n */\n async getAnalytics(id: string): Promise<EventAnalyticsResponse> {\n return this.http.get<EventAnalyticsResponse>(`/mail/events/analytics/${id}`);\n }\n}\n","/**\n * Mailboxes client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n Mailbox,\n MailboxWithSecret,\n RotateMailboxSecretResponse,\n CreateMailboxRequest,\n UpdateMailboxRequest,\n ListMailboxesRequest,\n ListMailboxesResponse,\n InboundMessage,\n ListInboundMessagesRequest,\n ListInboundMessagesResponse,\n} from \"./types\";\n\nexport class Mailboxes {\n constructor(private http: HttpClient) {}\n\n /**\n * Create a new mailbox. The result carries `webhookSecret`, which signs every\n * inbound delivery; store it now (only `create` and `rotateSecret` return it).\n */\n async create(request: CreateMailboxRequest): Promise<MailboxWithSecret> {\n return this.http.post<MailboxWithSecret>(\"/mail/mailboxes\", request);\n }\n\n /**\n * Replace a mailbox's webhook secret and return the new one. Deliveries are\n * signed with the new secret from then on.\n */\n async rotateSecret(id: string): Promise<RotateMailboxSecretResponse> {\n return this.http.post<RotateMailboxSecretResponse>(`/mail/mailboxes/${id}/rotate-secret`, {});\n }\n\n /**\n * Get a mailbox by ID\n */\n async get(id: string): Promise<Mailbox> {\n return this.http.get<Mailbox>(`/mail/mailboxes/${id}`);\n }\n\n /**\n * List mailboxes with optional filters\n */\n async list(request?: ListMailboxesRequest): Promise<ListMailboxesResponse> {\n const params = new URLSearchParams();\n if (request?.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request?.environment) params.set(\"environment\", request.environment);\n if (request?.domain) params.set(\"domain\", request.domain);\n if (request?.status) params.set(\"status\", request.status);\n if (request?.limit) params.set(\"limit\", String(request.limit));\n if (request?.cursor) params.set(\"cursor\", request.cursor);\n const qs = params.toString();\n return this.http.get<ListMailboxesResponse>(`/mail/mailboxes${qs ? `?${qs}` : \"\"}`);\n }\n\n /**\n * Update a mailbox\n */\n async update(request: UpdateMailboxRequest): Promise<Mailbox> {\n const { id, ...data } = request;\n return this.http.patch<Mailbox>(`/mail/mailboxes/${id}`, data);\n }\n\n /**\n * Delete a mailbox\n */\n async delete(id: string): Promise<{ success: boolean }> {\n return this.http.delete(`/mail/mailboxes/${id}`);\n }\n\n /**\n * List inbound messages across mailboxes\n */\n async listMessages(request?: ListInboundMessagesRequest): Promise<ListInboundMessagesResponse> {\n const params = new URLSearchParams();\n if (request?.mailboxId) params.set(\"mailboxId\", request.mailboxId);\n if (request?.limit) params.set(\"limit\", String(request.limit));\n if (request?.cursor) params.set(\"cursor\", request.cursor);\n const qs = params.toString();\n return this.http.get<ListInboundMessagesResponse>(`/mail/mailboxes/messages${qs ? `?${qs}` : \"\"}`);\n }\n\n /**\n * Get an inbound message by ID\n */\n async getMessage(id: string): Promise<InboundMessage> {\n return this.http.get<InboundMessage>(`/mail/mailboxes/messages/${id}`);\n }\n}\n","/**\n * Sequences client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n AddContactToSequenceRequest,\n ArchiveSequenceResponse,\n CreateConnectionRequest,\n CreateNodeRequest,\n CreateSequenceRequest,\n DeleteConnectionResponse,\n DeleteNodeResponse,\n DeleteSequenceResponse,\n ListSequenceEntriesRequest,\n ListSequenceEntriesResponse,\n ListSequencesRequest,\n ListSequencesResponse,\n PauseSequenceResponse,\n PublishSequenceResponse,\n RemoveContactFromSequenceRequest,\n RemoveContactFromSequenceResponse,\n ResumeSequenceResponse,\n Sequence,\n SequenceAnalyticsResponse,\n SequenceConnection,\n SequenceEntry,\n SequenceNode,\n SequenceWithNodes,\n SetNodeBranchRequest,\n SetNodeEmailRequest,\n SetNodeExperimentRequest,\n SetNodeFilterRequest,\n SetNodeTimerRequest,\n UpdateNodePositionRequest,\n UpdateNodeRequest,\n UpdateSequenceRequest,\n} from \"./types\";\n\nexport class Sequences {\n constructor(private http: HttpClient) {}\n\n // ============================================================================\n // SEQUENCE CRUD\n // ============================================================================\n\n /**\n * List all sequences\n */\n async list(request: ListSequencesRequest = {}): Promise<ListSequencesResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.search) params.set(\"search\", request.search);\n if (request.status) params.set(\"status\", request.status);\n if (request.triggerType) params.set(\"triggerType\", request.triggerType);\n\n const query = params.toString();\n return this.http.get<ListSequencesResponse>(`/mail/sequences${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a sequence by ID with all nodes and connections\n */\n async get(id: string): Promise<SequenceWithNodes> {\n return this.http.get<SequenceWithNodes>(`/mail/sequences/${id}`);\n }\n\n /**\n * Create a new sequence\n */\n async create(request: CreateSequenceRequest): Promise<Sequence> {\n return this.http.post<Sequence>(\"/mail/sequences\", request);\n }\n\n /**\n * Update a sequence\n */\n async update(request: UpdateSequenceRequest): Promise<Sequence> {\n const { id, ...data } = request;\n return this.http.put<Sequence>(`/mail/sequences/${id}`, data);\n }\n\n /**\n * Delete a sequence\n */\n async delete(id: string): Promise<DeleteSequenceResponse> {\n return this.http.delete<DeleteSequenceResponse>(`/mail/sequences/${id}`);\n }\n\n // ============================================================================\n // SEQUENCE LIFECYCLE\n // ============================================================================\n\n /**\n * Publish (activate) a sequence\n */\n async publish(id: string): Promise<PublishSequenceResponse> {\n return this.http.post<PublishSequenceResponse>(`/mail/sequences/${id}/publish`, {});\n }\n\n /**\n * Pause an active sequence\n */\n async pause(id: string): Promise<PauseSequenceResponse> {\n return this.http.post<PauseSequenceResponse>(`/mail/sequences/${id}/pause`, {});\n }\n\n /**\n * Resume a paused sequence\n */\n async resume(id: string): Promise<ResumeSequenceResponse> {\n return this.http.post<ResumeSequenceResponse>(`/mail/sequences/${id}/resume`, {});\n }\n\n /**\n * Archive a sequence\n */\n async archive(id: string): Promise<ArchiveSequenceResponse> {\n return this.http.post<ArchiveSequenceResponse>(`/mail/sequences/${id}/archive`, {});\n }\n\n /**\n * Duplicate a sequence\n */\n async duplicate(id: string, name?: string): Promise<Sequence> {\n return this.http.post<Sequence>(`/mail/sequences/${id}/duplicate`, { name });\n }\n\n // ============================================================================\n // NODE MANAGEMENT\n // ============================================================================\n\n /**\n * Create a new node in a sequence\n */\n async createNode(request: CreateNodeRequest): Promise<SequenceNode> {\n const { id, ...data } = request;\n return this.http.post<SequenceNode>(`/mail/sequences/${id}/nodes`, data);\n }\n\n /**\n * Update a node\n */\n async updateNode(request: UpdateNodeRequest): Promise<SequenceNode> {\n const { id, nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${id}/nodes/${nodeId}`, data);\n }\n\n /**\n * Update node position (for visual editor)\n */\n async updateNodePosition(request: UpdateNodePositionRequest): Promise<SequenceNode> {\n const { id, nodeId, positionX, positionY } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${id}/nodes/${nodeId}/position`, { positionX, positionY });\n }\n\n /**\n * Delete a node\n */\n async deleteNode(sequenceId: string, nodeId: string): Promise<DeleteNodeResponse> {\n return this.http.delete<DeleteNodeResponse>(`/mail/sequences/${sequenceId}/nodes/${nodeId}`);\n }\n\n // ============================================================================\n // NODE CONFIGURATIONS\n // ============================================================================\n\n /**\n * Set email node content\n */\n async setNodeEmail(sequenceId: string, request: SetNodeEmailRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/email`, data);\n }\n\n /**\n * Set timer node configuration\n */\n async setNodeTimer(sequenceId: string, request: SetNodeTimerRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/timer`, data);\n }\n\n /**\n * Set filter node configuration\n */\n async setNodeFilter(sequenceId: string, request: SetNodeFilterRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/filter`, data);\n }\n\n /**\n * Set branch node configuration\n */\n async setNodeBranch(sequenceId: string, request: SetNodeBranchRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/branch`, data);\n }\n\n /**\n * Set experiment node configuration\n */\n async setNodeExperiment(sequenceId: string, request: SetNodeExperimentRequest): Promise<SequenceNode> {\n const { nodeId, ...data } = request;\n return this.http.put<SequenceNode>(`/mail/sequences/${sequenceId}/nodes/${nodeId}/experiment`, data);\n }\n\n // ============================================================================\n // CONNECTIONS\n // ============================================================================\n\n /**\n * Create a connection between nodes\n */\n async createConnection(request: CreateConnectionRequest): Promise<SequenceConnection> {\n const { id, ...data } = request;\n return this.http.post<SequenceConnection>(`/mail/sequences/${id}/connections`, data);\n }\n\n /**\n * Delete a connection\n */\n async deleteConnection(sequenceId: string, connectionId: string): Promise<DeleteConnectionResponse> {\n return this.http.delete<DeleteConnectionResponse>(`/mail/sequences/${sequenceId}/connections/${connectionId}`);\n }\n\n // ============================================================================\n // SEQUENCE ENTRIES (CONTACTS IN SEQUENCE)\n // ============================================================================\n\n /**\n * List contacts in a sequence\n */\n async listEntries(request: ListSequenceEntriesRequest): Promise<ListSequenceEntriesResponse> {\n const { id, ...params } = request;\n const searchParams = new URLSearchParams();\n if (params.limit) searchParams.set(\"limit\", params.limit.toString());\n if (params.offset) searchParams.set(\"offset\", params.offset.toString());\n if (params.status) searchParams.set(\"status\", params.status);\n if (params.search) searchParams.set(\"search\", params.search);\n\n const query = searchParams.toString();\n return this.http.get<ListSequenceEntriesResponse>(`/mail/sequences/${id}/entries${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Add a contact to a sequence\n */\n async addContact(request: AddContactToSequenceRequest): Promise<SequenceEntry> {\n const { id, contactId } = request;\n return this.http.post<SequenceEntry>(`/mail/sequences/${id}/add-contact`, { contactId });\n }\n\n /**\n * Remove a contact from a sequence\n */\n async removeContact(request: RemoveContactFromSequenceRequest): Promise<RemoveContactFromSequenceResponse> {\n const { id, entryId, reason } = request;\n return this.http.post<RemoveContactFromSequenceResponse>(`/mail/sequences/${id}/remove-contact`, {\n entryId,\n reason,\n });\n }\n\n // ============================================================================\n // ANALYTICS\n // ============================================================================\n\n /**\n * Get sequence analytics\n */\n async getAnalytics(id: string): Promise<SequenceAnalyticsResponse> {\n return this.http.get<SequenceAnalyticsResponse>(`/mail/sequences/${id}/analytics`);\n }\n}\n","/**\n * Templates client for Stack0 Mail API\n */\n\nimport type { HttpClient } from \"../lib/http-client\";\nimport type {\n CreateTemplateRequest,\n DeleteTemplateResponse,\n ListTemplatesRequest,\n ListTemplatesResponse,\n PreviewTemplateRequest,\n PreviewTemplateResponse,\n Template,\n UpdateTemplateRequest,\n} from \"./types\";\n\nexport class Templates {\n constructor(private http: HttpClient) {}\n\n /**\n * List all templates\n */\n async list(request: ListTemplatesRequest = {}): Promise<ListTemplatesResponse> {\n const params = new URLSearchParams();\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.isActive !== undefined) params.set(\"isActive\", request.isActive.toString());\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListTemplatesResponse>(`/mail/templates${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get a template by ID\n */\n async get(id: string): Promise<Template> {\n return this.http.get<Template>(`/mail/templates/${id}`);\n }\n\n /**\n * Get a template by slug\n */\n async getBySlug(slug: string): Promise<Template> {\n return this.http.get<Template>(`/mail/templates/slug/${slug}`);\n }\n\n /**\n * Create a new template\n */\n async create(request: CreateTemplateRequest): Promise<Template> {\n return this.http.post<Template>(\"/mail/templates\", request);\n }\n\n /**\n * Update a template\n */\n async update(request: UpdateTemplateRequest): Promise<Template> {\n const { id, ...data } = request;\n return this.http.put<Template>(`/mail/templates/${id}`, data);\n }\n\n /**\n * Delete a template\n */\n async delete(id: string): Promise<DeleteTemplateResponse> {\n return this.http.delete<DeleteTemplateResponse>(`/mail/templates/${id}`);\n }\n\n /**\n * Preview a template with variables\n */\n async preview(request: PreviewTemplateRequest): Promise<PreviewTemplateResponse> {\n const { id, variables } = request;\n return this.http.post<PreviewTemplateResponse>(`/mail/templates/${id}/preview`, { variables });\n }\n}\n","/**\n * Stack0 Mail Client\n * Complete email API with support for transactional emails, campaigns, sequences, and more\n */\n\nimport { HttpClient, type HttpClientConfig } from \"../lib/http-client\";\nimport { Audiences } from \"./audiences\";\nimport { Campaigns } from \"./campaigns\";\nimport { Contacts } from \"./contacts\";\nimport { Domains } from \"./domains\";\nimport { Events } from \"./events\";\nimport { Mailboxes } from \"./mailboxes\";\nimport { Sequences } from \"./sequences\";\nimport { Templates } from \"./templates\";\nimport type {\n CancelEmailResponse,\n EmailAnalyticsResponse,\n GetEmailResponse,\n HourlyAnalyticsResponse,\n InboundEmailPayload,\n ListEmailsRequest,\n ListEmailsResponse,\n ListSendersRequest,\n ListSendersResponse,\n ReplyBody,\n ResendEmailResponse,\n SendBatchEmailRequest,\n SendBatchEmailResponse,\n SendBroadcastEmailRequest,\n SendBroadcastEmailResponse,\n SendEmailRequest,\n SendEmailResponse,\n TimeSeriesAnalyticsRequest,\n TimeSeriesAnalyticsResponse,\n} from \"./types\";\n\nexport class Mail {\n private http: HttpClient;\n\n /** Manage sending domains */\n readonly domains: Domains;\n\n /** Manage email templates */\n readonly templates: Templates;\n\n /** Manage contact audiences/lists */\n readonly audiences: Audiences;\n\n /** Manage contacts */\n readonly contacts: Contacts;\n\n /** Manage email campaigns */\n readonly campaigns: Campaigns;\n\n /** Manage automated email sequences */\n readonly sequences: Sequences;\n\n /** Track and manage custom events */\n readonly events: Events;\n\n /** Manage agent mailboxes */\n readonly mailboxes: Mailboxes;\n\n constructor(config: HttpClientConfig) {\n this.http = new HttpClient(config);\n\n // Initialize sub-clients\n this.domains = new Domains(this.http);\n this.templates = new Templates(this.http);\n this.audiences = new Audiences(this.http);\n this.contacts = new Contacts(this.http);\n this.campaigns = new Campaigns(this.http);\n this.sequences = new Sequences(this.http);\n this.events = new Events(this.http);\n this.mailboxes = new Mailboxes(this.http);\n }\n\n // ============================================================================\n // TRANSACTIONAL EMAILS\n // ============================================================================\n\n /**\n * Send a single email\n *\n * @example\n * ```typescript\n * const result = await mail.send({\n * from: 'noreply@example.com',\n * to: 'user@example.com',\n * subject: 'Hello World',\n * html: '<p>Welcome!</p>',\n * });\n * ```\n */\n async send(request: SendEmailRequest): Promise<SendEmailResponse> {\n return this.http.post<SendEmailResponse>(\"/mail/send\", request);\n }\n\n /**\n * Reply to an inbound email with correct RFC 5322 threading headers.\n * Automatically derives `from`, `to`, `subject`, `inReplyTo`, and `references`\n * from the inbound webhook payload — pass through any overrides as the second\n * argument.\n *\n * @example\n * ```typescript\n * // In your webhook handler:\n * await mail.reply(inboundEmail, {\n * text: 'Thanks for the note — talk soon.',\n * });\n * ```\n */\n async reply(\n inbound: InboundEmailPayload,\n body: ReplyBody & Partial<SendEmailRequest>,\n ): Promise<SendEmailResponse> {\n const parentId = inbound.messageId;\n const refs = [...(inbound.references ?? []), parentId].filter(Boolean) as string[];\n const subject = body.subject ?? (inbound.subject?.startsWith(\"Re:\") ? inbound.subject : `Re: ${inbound.subject ?? \"\"}`);\n\n const request: SendEmailRequest = {\n from: body.from ?? inbound.mailbox,\n to: body.to ?? inbound.from.email,\n subject,\n text: body.text,\n html: body.html,\n replyTo: body.replyTo,\n cc: body.cc,\n bcc: body.bcc,\n tags: body.tags,\n metadata: body.metadata,\n templateId: body.templateId,\n templateVariables: body.templateVariables,\n environment: body.environment,\n inReplyTo: body.inReplyTo ?? parentId ?? undefined,\n references: body.references ?? (refs.length ? refs.join(\" \") : undefined),\n };\n\n return this.send(request);\n }\n\n /**\n * Send multiple emails in a batch (up to 100)\n * Each email can have different content and recipients\n *\n * @example\n * ```typescript\n * const result = await mail.sendBatch({\n * emails: [\n * { from: 'noreply@example.com', to: 'user1@example.com', subject: 'Hello', html: '<p>Hi User 1</p>' },\n * { from: 'noreply@example.com', to: 'user2@example.com', subject: 'Hello', html: '<p>Hi User 2</p>' },\n * ]\n * });\n * ```\n */\n async sendBatch(request: SendBatchEmailRequest): Promise<SendBatchEmailResponse> {\n return this.http.post<SendBatchEmailResponse>(\"/mail/send/batch\", request);\n }\n\n /**\n * Send a broadcast email (same content to multiple recipients, up to 1000)\n *\n * @example\n * ```typescript\n * const result = await mail.sendBroadcast({\n * from: 'noreply@example.com',\n * to: ['user1@example.com', 'user2@example.com', 'user3@example.com'],\n * subject: 'Newsletter',\n * html: '<p>Our latest updates...</p>',\n * });\n * ```\n */\n async sendBroadcast(request: SendBroadcastEmailRequest): Promise<SendBroadcastEmailResponse> {\n return this.http.post<SendBroadcastEmailResponse>(\"/mail/send/broadcast\", request);\n }\n\n /**\n * Get email details by ID\n *\n * @example\n * ```typescript\n * const email = await mail.get('email-id');\n * console.log(email.status); // 'delivered'\n * ```\n */\n async get(id: string): Promise<GetEmailResponse> {\n return this.http.get<GetEmailResponse>(`/mail/${id}`);\n }\n\n /**\n * List emails with optional filters\n *\n * @example\n * ```typescript\n * const result = await mail.list({\n * status: 'delivered',\n * limit: 50,\n * });\n * ```\n */\n async list(request: ListEmailsRequest = {}): Promise<ListEmailsResponse> {\n const params = new URLSearchParams();\n if (request.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.limit) params.set(\"limit\", request.limit.toString());\n if (request.offset) params.set(\"offset\", request.offset.toString());\n if (request.status) params.set(\"status\", request.status);\n if (request.from) params.set(\"from\", request.from);\n if (request.to) params.set(\"to\", request.to);\n if (request.subject) params.set(\"subject\", request.subject);\n if (request.tag) params.set(\"tag\", request.tag);\n if (request.startDate) {\n params.set(\"startDate\", request.startDate instanceof Date ? request.startDate.toISOString() : request.startDate);\n }\n if (request.endDate) {\n params.set(\"endDate\", request.endDate instanceof Date ? request.endDate.toISOString() : request.endDate);\n }\n if (request.sortBy) params.set(\"sortBy\", request.sortBy);\n if (request.sortOrder) params.set(\"sortOrder\", request.sortOrder);\n\n const query = params.toString();\n return this.http.get<ListEmailsResponse>(`/mail${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Resend a previously sent email\n */\n async resend(id: string): Promise<ResendEmailResponse> {\n return this.http.post<ResendEmailResponse>(`/mail/${id}/resend`, {});\n }\n\n /**\n * Cancel a scheduled email\n */\n async cancel(id: string): Promise<CancelEmailResponse> {\n return this.http.post<CancelEmailResponse>(`/mail/${id}/cancel`, {});\n }\n\n // ============================================================================\n // ANALYTICS\n // ============================================================================\n\n /**\n * Get overall email analytics\n */\n async getAnalytics(): Promise<EmailAnalyticsResponse> {\n return this.http.get<EmailAnalyticsResponse>(\"/mail/analytics\");\n }\n\n /**\n * Get time series analytics (daily breakdown)\n */\n async getTimeSeriesAnalytics(request: TimeSeriesAnalyticsRequest = {}): Promise<TimeSeriesAnalyticsResponse> {\n const params = new URLSearchParams();\n if (request.days) params.set(\"days\", request.days.toString());\n\n const query = params.toString();\n return this.http.get<TimeSeriesAnalyticsResponse>(`/mail/analytics/timeseries${query ? `?${query}` : \"\"}`);\n }\n\n /**\n * Get hourly analytics\n */\n async getHourlyAnalytics(): Promise<HourlyAnalyticsResponse> {\n return this.http.get<HourlyAnalyticsResponse>(\"/mail/analytics/hourly\");\n }\n\n /**\n * List unique senders with their statistics\n */\n async listSenders(request: ListSendersRequest = {}): Promise<ListSendersResponse> {\n const params = new URLSearchParams();\n if (request.projectSlug) params.set(\"projectSlug\", request.projectSlug);\n if (request.environment) params.set(\"environment\", request.environment);\n if (request.search) params.set(\"search\", request.search);\n\n const query = params.toString();\n return this.http.get<ListSendersResponse>(`/mail/senders${query ? `?${query}` : \"\"}`);\n }\n}\n","/**\n * Verify inbound email webhooks.\n *\n * Stack0 signs each delivery with the Standard Webhooks scheme\n * (https://www.standardwebhooks.com): `webhook-signature` is\n * `v1,<base64 HMAC-SHA256 of \"<webhook-id>.<webhook-timestamp>.<raw body>\">`,\n * keyed by the mailbox secret, base64-decoded. Uses Web Crypto, so it runs in\n * Node 18+, Bun, Deno, and edge runtimes.\n */\n\nimport type { webcrypto } from \"node:crypto\";\nimport type { InboundWebhookPayload } from \"./types\";\n\n// Type-only (erased at build): the Web Crypto types without the DOM lib.\ntype SubtleCrypto = webcrypto.SubtleCrypto;\n\nexport class WebhookVerificationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"WebhookVerificationError\";\n }\n}\n\nexport interface VerifyInboundWebhookOptions {\n /** The raw request body, exactly as received. Do not parse and re-serialize it first. */\n payload: string | Uint8Array | ArrayBuffer;\n /** The request headers: a `Headers` object or a plain record (any case). */\n headers: Headers | Record<string, string | string[] | undefined>;\n /** The mailbox's webhook secret, from `mailboxes.create` or `mailboxes.rotateSecret`. */\n secret: string;\n /** How far the timestamp may be from now, in seconds. Default 300. */\n toleranceSeconds?: number;\n /** The current time, for tests. */\n now?: Date;\n}\n\nfunction header(headers: VerifyInboundWebhookOptions[\"headers\"], name: string): string | undefined {\n if (typeof (headers as Headers).get === \"function\") return (headers as Headers).get(name) ?? undefined;\n const record = headers as Record<string, string | string[] | undefined>;\n for (const key of Object.keys(record)) {\n if (key.toLowerCase() === name) {\n const v = record[key];\n return Array.isArray(v) ? v[0] : v;\n }\n }\n return undefined;\n}\n\nfunction base64ToBytes(b64: string): Uint8Array {\n const bin = atob(b64);\n const out = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);\n return out;\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n let bin = \"\";\n for (const b of bytes) bin += String.fromCharCode(b);\n return btoa(bin);\n}\n\n/**\n * Web Crypto: the global where the runtime has one (Node 19+, Bun, Deno,\n * edge), else Node's `webcrypto` (Node 18 has no global without a flag).\n */\nasync function subtle(): Promise<SubtleCrypto> {\n const global = (globalThis as { crypto?: { subtle?: SubtleCrypto } }).crypto;\n if (global?.subtle) return global.subtle;\n // A variable specifier keeps bundlers from pulling node:crypto into edge and\n // browser builds, which have the global and never reach this line.\n const specifier = \"node:crypto\";\n const nodeCrypto = (await import(/* webpackIgnore: true */ /* @vite-ignore */ specifier)) as typeof import(\"node:crypto\");\n return nodeCrypto.webcrypto.subtle;\n}\n\nfunction timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n}\n\n/**\n * Check an inbound email webhook and return its payload. Throws\n * `WebhookVerificationError` when a header is missing, the timestamp is\n * outside the tolerance (a replay), or no signature matches.\n *\n * ```ts\n * const event = await verifyInboundWebhook({\n * payload: await request.text(),\n * headers: request.headers,\n * secret: process.env.STACK0_MAILBOX_SECRET!,\n * });\n * ```\n */\nexport async function verifyInboundWebhook(options: VerifyInboundWebhookOptions): Promise<InboundWebhookPayload> {\n const id = header(options.headers, \"webhook-id\");\n const timestamp = header(options.headers, \"webhook-timestamp\");\n const signatures = header(options.headers, \"webhook-signature\");\n if (!id || !timestamp || !signatures) {\n throw new WebhookVerificationError(\"missing webhook-id, webhook-timestamp, or webhook-signature header\");\n }\n\n const seconds = Number(timestamp);\n if (!Number.isInteger(seconds)) throw new WebhookVerificationError(\"webhook-timestamp is not a whole number\");\n const now = Math.floor((options.now ?? new Date()).getTime() / 1000);\n const tolerance = options.toleranceSeconds ?? 300;\n if (Math.abs(now - seconds) > tolerance) {\n throw new WebhookVerificationError(`webhook-timestamp is more than ${tolerance} seconds from now`);\n }\n\n const body =\n typeof options.payload === \"string\"\n ? options.payload\n : new TextDecoder().decode(options.payload instanceof ArrayBuffer ? new Uint8Array(options.payload) : options.payload);\n const secret = options.secret.startsWith(\"whsec_\") ? options.secret.slice(6) : options.secret;\n const webcrypto = await subtle();\n const key = await webcrypto.importKey(\n \"raw\",\n base64ToBytes(secret),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const mac = new Uint8Array(\n await webcrypto.sign(\"HMAC\", key, new TextEncoder().encode(`${id}.${seconds}.${body}`)),\n );\n const expected = bytesToBase64(mac);\n\n // The header may carry several space-separated signatures (during a secret rotation).\n const matched = signatures\n .split(\" \")\n .map((s) => s.split(\",\", 2))\n .some(([version, sig]) => version === \"v1\" && sig !== undefined && timingSafeEqual(sig, expected));\n if (!matched) throw new WebhookVerificationError(\"no webhook-signature matches\");\n\n let payload: InboundWebhookPayload;\n try {\n payload = JSON.parse(body) as InboundWebhookPayload;\n } catch {\n throw new WebhookVerificationError(\"the payload is not JSON\");\n }\n if (payload.id !== id) throw new WebhookVerificationError(\"the payload id does not match webhook-id\");\n return payload;\n}\n"]}
@@ -428,11 +428,19 @@ var Mailboxes = class {
428
428
  }
429
429
  http;
430
430
  /**
431
- * Create a new mailbox
431
+ * Create a new mailbox. The result carries `webhookSecret`, which signs every
432
+ * inbound delivery; store it now (only `create` and `rotateSecret` return it).
432
433
  */
433
434
  async create(request) {
434
435
  return this.http.post("/mail/mailboxes", request);
435
436
  }
437
+ /**
438
+ * Replace a mailbox's webhook secret and return the new one. Deliveries are
439
+ * signed with the new secret from then on.
440
+ */
441
+ async rotateSecret(id) {
442
+ return this.http.post(`/mail/mailboxes/${id}/rotate-secret`, {});
443
+ }
436
444
  /**
437
445
  * Get a mailbox by ID
438
446
  */
@@ -966,6 +974,92 @@ var Mail = class {
966
974
  }
967
975
  };
968
976
 
969
- export { Audiences, Campaigns, Contacts, Domains, Events, Mail, Mailboxes, Sequences, Templates };
977
+ // src/mail/webhooks.ts
978
+ var WebhookVerificationError = class extends Error {
979
+ constructor(message) {
980
+ super(message);
981
+ this.name = "WebhookVerificationError";
982
+ }
983
+ };
984
+ function header(headers, name) {
985
+ if (typeof headers.get === "function") return headers.get(name) ?? void 0;
986
+ const record = headers;
987
+ for (const key of Object.keys(record)) {
988
+ if (key.toLowerCase() === name) {
989
+ const v = record[key];
990
+ return Array.isArray(v) ? v[0] : v;
991
+ }
992
+ }
993
+ return void 0;
994
+ }
995
+ function base64ToBytes(b64) {
996
+ const bin = atob(b64);
997
+ const out = new Uint8Array(bin.length);
998
+ for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
999
+ return out;
1000
+ }
1001
+ function bytesToBase64(bytes) {
1002
+ let bin = "";
1003
+ for (const b of bytes) bin += String.fromCharCode(b);
1004
+ return btoa(bin);
1005
+ }
1006
+ async function subtle() {
1007
+ const global = globalThis.crypto;
1008
+ if (global?.subtle) return global.subtle;
1009
+ const specifier = "node:crypto";
1010
+ const nodeCrypto = await import(
1011
+ /* webpackIgnore: true */
1012
+ /* @vite-ignore */
1013
+ specifier
1014
+ );
1015
+ return nodeCrypto.webcrypto.subtle;
1016
+ }
1017
+ function timingSafeEqual(a, b) {
1018
+ if (a.length !== b.length) return false;
1019
+ let diff = 0;
1020
+ for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);
1021
+ return diff === 0;
1022
+ }
1023
+ async function verifyInboundWebhook(options) {
1024
+ const id = header(options.headers, "webhook-id");
1025
+ const timestamp = header(options.headers, "webhook-timestamp");
1026
+ const signatures = header(options.headers, "webhook-signature");
1027
+ if (!id || !timestamp || !signatures) {
1028
+ throw new WebhookVerificationError("missing webhook-id, webhook-timestamp, or webhook-signature header");
1029
+ }
1030
+ const seconds = Number(timestamp);
1031
+ if (!Number.isInteger(seconds)) throw new WebhookVerificationError("webhook-timestamp is not a whole number");
1032
+ const now = Math.floor((options.now ?? /* @__PURE__ */ new Date()).getTime() / 1e3);
1033
+ const tolerance = options.toleranceSeconds ?? 300;
1034
+ if (Math.abs(now - seconds) > tolerance) {
1035
+ throw new WebhookVerificationError(`webhook-timestamp is more than ${tolerance} seconds from now`);
1036
+ }
1037
+ const body = typeof options.payload === "string" ? options.payload : new TextDecoder().decode(options.payload instanceof ArrayBuffer ? new Uint8Array(options.payload) : options.payload);
1038
+ const secret = options.secret.startsWith("whsec_") ? options.secret.slice(6) : options.secret;
1039
+ const webcrypto = await subtle();
1040
+ const key = await webcrypto.importKey(
1041
+ "raw",
1042
+ base64ToBytes(secret),
1043
+ { name: "HMAC", hash: "SHA-256" },
1044
+ false,
1045
+ ["sign"]
1046
+ );
1047
+ const mac = new Uint8Array(
1048
+ await webcrypto.sign("HMAC", key, new TextEncoder().encode(`${id}.${seconds}.${body}`))
1049
+ );
1050
+ const expected = bytesToBase64(mac);
1051
+ const matched = signatures.split(" ").map((s) => s.split(",", 2)).some(([version, sig]) => version === "v1" && sig !== void 0 && timingSafeEqual(sig, expected));
1052
+ if (!matched) throw new WebhookVerificationError("no webhook-signature matches");
1053
+ let payload;
1054
+ try {
1055
+ payload = JSON.parse(body);
1056
+ } catch {
1057
+ throw new WebhookVerificationError("the payload is not JSON");
1058
+ }
1059
+ if (payload.id !== id) throw new WebhookVerificationError("the payload id does not match webhook-id");
1060
+ return payload;
1061
+ }
1062
+
1063
+ export { Audiences, Campaigns, Contacts, Domains, Events, Mail, Mailboxes, Sequences, Templates, WebhookVerificationError, verifyInboundWebhook };
970
1064
  //# sourceMappingURL=index.mjs.map
971
1065
  //# sourceMappingURL=index.mjs.map