@atribu/node 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/README.md +13 -0
- package/dist/admin/index.d.cts +1 -1
- package/dist/admin/index.d.ts +1 -1
- package/dist/{api.d-CRypizsD.d.cts → api.d-K2ywQhc9.d.cts} +2 -0
- package/dist/{api.d-CRypizsD.d.ts → api.d-K2ywQhc9.d.ts} +2 -0
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/test/index.cjs +1 -0
- package/dist/test/index.cjs.map +1 -1
- package/dist/test/index.d.cts +2 -0
- package/dist/test/index.d.ts +2 -0
- package/dist/test/index.js +1 -0
- package/dist/test/index.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.3.0] — 2026-05-16
|
|
11
|
+
|
|
12
|
+
Server-side Meta error classification reaches the SDK. WhatsApp + Instagram failures from the underlying Meta APIs now arrive with the right HTTP status code + `code` field instead of being flattened to `502 provider_error`. **Observable API surface change** — consumers that switched on status `502` for Meta failures should add `401`/`403`/`429` handling. The error shape (`{ code, status, message, request_id }`) is unchanged.
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- **`401 unauthorized`** for token revoked / app uninstalled. The server flips `data_connections.status='error'` when this fires from within `whatsapp/broadcasts/{id}/send` so the next call 409s cleanly until reconnect.
|
|
17
|
+
- **`429 rate_limit_exceeded`** for Meta-side throttle. Response carries a `Retry-After` header (seconds) derived from Meta's `X-Business-Use-Case-Usage` block. The SDK surfaces it as `err.retry.retryAfterMs`.
|
|
18
|
+
- **`403 forbidden`** for permissions pending Meta App Review (code 270 + variants).
|
|
19
|
+
- **`400 invalid_request`** for "request too complex" (caller must split).
|
|
20
|
+
- **`422 invalid_request`** for fatal Meta errors that won't recover on retry (e.g. malformed payload).
|
|
21
|
+
- **`502 provider_error`** stays for transient Meta failures — retry with backoff.
|
|
22
|
+
- **`whatsapp_broadcast_recipients`** gains an `error_reason_code` column (e.g. `"meta_131050"` = recipient stopped marketing on WA). Permanently-failed recipients carry the stable classifier code so consumers can dedupe them on the next broadcast create instead of re-parsing `error_message` strings.
|
|
23
|
+
|
|
24
|
+
### Broadcast send loop hardening
|
|
25
|
+
|
|
26
|
+
- **Rate-limit mid-send**: aborts the loop, resets the broadcast to `draft`, returns `429 + Retry-After`. The next `POST /send` claims where the prior run left off (already-sent recipients stay sent; pending recipients stay pending).
|
|
27
|
+
- **Auth revoked mid-send**: aborts the loop, resets to `draft`, flips the underlying `data_connections.status='error'`, returns `401 unauthorized`. Subsequent `/send` calls 409 cleanly until reconnect.
|
|
28
|
+
- **Per-recipient failure** (opt-out, invalid number, transient): unchanged behavior. Now also stamps `error_reason_code` on the recipient row from `MetaApiError.classification.reasonCode`.
|
|
29
|
+
|
|
30
|
+
### Internal
|
|
31
|
+
|
|
32
|
+
- New shared helper `mapMetaErrorToApiError(err, op)` at `src/lib/api/meta-error.ts` (Atribu server-side; not exported from the SDK package). Every v1 route's Meta-catch block collapses to one line.
|
|
33
|
+
- `ApiError` gains optional `retryAfter` (number, seconds) + `metaRequiresReconnect` (boolean). `apiErrorResponse()` emits `Retry-After` header when `retryAfter` is set. Backwards-compatible.
|
|
34
|
+
- `withApiAuth` forwards `retryAfter` from caught `ApiError`s to the response.
|
|
35
|
+
|
|
36
|
+
### PR A internal (no consumer-facing change)
|
|
37
|
+
|
|
38
|
+
- WhatsApp + Instagram messaging helpers in `src/lib/integrations/{whatsapp,instagram}/client.ts` now route through `metaApiFetch` from `@atribu/analytics-enrichment`. Failures throw `MetaApiError` / `MetaAuthError` / `MetaRateLimitError` / `MetaComplexityError` instead of plain `Error("WhatsApp API error: ...")`.
|
|
39
|
+
- WhatsApp BUC pool + Instagram Page pool observations now land in `meta_rate_limit_state` automatically — same proactive throttle behavior as Marketing API.
|
|
40
|
+
- New shared singleton at `src/lib/integrations/shared/meta-state-store.ts` for the rate-limit state store.
|
|
41
|
+
- WhatsApp `uploadMedia` + `downloadMedia` stay on raw fetch (FormData / binary), but now classify errors via `classifyMetaError` and throw `MetaApiError` for parity.
|
|
42
|
+
|
|
10
43
|
## [0.2.0] — 2026-05-16
|
|
11
44
|
|
|
12
45
|
Phase 1 of the WhatsApp + Instagram surface expansion. Adds 11 new endpoints and 2 new channel-prefixed namespaces. Backwards-compatible — no existing call signatures change.
|
package/README.md
CHANGED
|
@@ -389,6 +389,19 @@ try {
|
|
|
389
389
|
|
|
390
390
|
The server's `X-Request-Id` is surfaced as `err.requestId` so you can grep server logs.
|
|
391
391
|
|
|
392
|
+
### Meta-classified errors (v0.3.0+)
|
|
393
|
+
|
|
394
|
+
WhatsApp + Instagram failures from the underlying Meta APIs now arrive with the right HTTP status + code instead of a flat `502 provider_error`:
|
|
395
|
+
|
|
396
|
+
| Cause | Status + code | Notes |
|
|
397
|
+
| --- | --- | --- |
|
|
398
|
+
| Token revoked / app uninstalled | `401 unauthorized` | The server flips `data_connections.status='error'` automatically when this fires mid-broadcast. User must re-OAuth. |
|
|
399
|
+
| Rate-limited by Meta | `429 rate_limit_exceeded` | `Retry-After` header surfaces as `err.retry.retryAfterMs`. For broadcasts, the broadcast resets to `draft` so retrying `send` after Retry-After picks up where it left off. |
|
|
400
|
+
| Meta App Review pending | `403 forbidden` | The capability needs Meta App Review for non-tester users. No retry. |
|
|
401
|
+
| Permanently rejected (e.g. recipient stopped marketing on WA — code 131050) | Recipient row only — broadcast keeps going. `whatsapp_broadcast_recipients.error_reason_code` carries the stable Meta classifier code (e.g. `"meta_131050"`) so you can dedupe permanently-failed recipients on the next broadcast create. |
|
|
402
|
+
| Request too complex | `400 invalid_request` | Caller must split into smaller batches. |
|
|
403
|
+
| Transient Meta failure | `502 provider_error` | Retry with backoff (`err.retry.action === "retry"`). |
|
|
404
|
+
|
|
392
405
|
## Retries
|
|
393
406
|
|
|
394
407
|
The SDK doesn't retry automatically — hiding retries amplifies load on a failing server and obscures backpressure. Opt in per-client:
|
package/dist/admin/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { H as HttpClientLike, p as paths } from '../api.d-
|
|
1
|
+
import { H as HttpClientLike, p as paths } from '../api.d-K2ywQhc9.cjs';
|
|
2
2
|
|
|
3
3
|
type CreateBody = NonNullable<paths["/api/v1/admin/oauth-apps"]["post"]["requestBody"]>["content"]["application/json"];
|
|
4
4
|
type CreateResponse = paths["/api/v1/admin/oauth-apps"]["post"]["responses"][201]["content"]["application/json"];
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { H as HttpClientLike, p as paths } from '../api.d-
|
|
1
|
+
import { H as HttpClientLike, p as paths } from '../api.d-K2ywQhc9.js';
|
|
2
2
|
|
|
3
3
|
type CreateBody = NonNullable<paths["/api/v1/admin/oauth-apps"]["post"]["requestBody"]>["content"]["application/json"];
|
|
4
4
|
type CreateResponse = paths["/api/v1/admin/oauth-apps"]["post"]["responses"][201]["content"]["application/json"];
|
|
@@ -3037,6 +3037,8 @@ interface paths {
|
|
|
3037
3037
|
status: "pending" | "sent" | "delivered" | "read" | "failed" | "cancelled";
|
|
3038
3038
|
wamid: string | null;
|
|
3039
3039
|
error_message: string | null;
|
|
3040
|
+
/** @description Stable machine-readable reason code from the Meta classifier (e.g. 'meta_131050' = recipient stopped marketing). Useful for de-duping permanently-failed recipients on the next broadcast create. */
|
|
3041
|
+
error_reason_code: string | null;
|
|
3040
3042
|
sent_at: string | null;
|
|
3041
3043
|
}[];
|
|
3042
3044
|
};
|
|
@@ -3037,6 +3037,8 @@ interface paths {
|
|
|
3037
3037
|
status: "pending" | "sent" | "delivered" | "read" | "failed" | "cancelled";
|
|
3038
3038
|
wamid: string | null;
|
|
3039
3039
|
error_message: string | null;
|
|
3040
|
+
/** @description Stable machine-readable reason code from the Meta classifier (e.g. 'meta_131050' = recipient stopped marketing). Useful for de-duping permanently-failed recipients on the next broadcast create. */
|
|
3041
|
+
error_reason_code: string | null;
|
|
3040
3042
|
sent_at: string | null;
|
|
3041
3043
|
}[];
|
|
3042
3044
|
};
|
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { H as HttpClientLike, p as paths, R as RequestOptions } from './api.d-
|
|
1
|
+
import { H as HttpClientLike, p as paths, R as RequestOptions } from './api.d-K2ywQhc9.cjs';
|
|
2
2
|
import { d as AtribuError } from './errors-BLELoojK.cjs';
|
|
3
3
|
export { A as ApiErrorBody, a as ApiErrorCode, b as AtribuApiError, c as AtribuConfigError, e as AtribuOauthError, f as AtribuTransportError, g as AtribuWebhookError, O as OauthErrorCode, R as RetryHint, W as WebhookErrorCode } from './errors-BLELoojK.cjs';
|
|
4
4
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { H as HttpClientLike, p as paths, R as RequestOptions } from './api.d-
|
|
1
|
+
import { H as HttpClientLike, p as paths, R as RequestOptions } from './api.d-K2ywQhc9.js';
|
|
2
2
|
import { d as AtribuError } from './errors-BLELoojK.js';
|
|
3
3
|
export { A as ApiErrorBody, a as ApiErrorCode, b as AtribuApiError, c as AtribuConfigError, e as AtribuOauthError, f as AtribuTransportError, g as AtribuWebhookError, O as OauthErrorCode, R as RetryHint, W as WebhookErrorCode } from './errors-BLELoojK.js';
|
|
4
4
|
|
package/dist/test/index.cjs
CHANGED
package/dist/test/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test/fixtures.ts","../../src/test/handlers.ts"],"names":["HttpResponse","http"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Canned fixtures for testing against the Atribu SDK.\n *\n * Use these to drive your test cases with realistic event shapes, or pass\n * `body` overrides into `atribuMockHandlers({...})` to customize responses.\n */\n\nimport type {\n AtribuWebhookEvent,\n WhatsAppMessageReceivedEvent,\n WhatsAppMessageDeliveryEvent,\n InstagramMessageReceivedEvent,\n InstagramMessageDeliveryEvent,\n} from \"../webhooks/types\";\n\ntype DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\nfunction deepMerge<T>(base: T, override?: DeepPartial<T>): T {\n if (!override || typeof override !== \"object\") return base;\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const [k, v] of Object.entries(override as Record<string, unknown>)) {\n const baseVal = (base as Record<string, unknown>)[k];\n if (v && typeof v === \"object\" && !Array.isArray(v) && baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal)) {\n out[k] = deepMerge(baseVal, v as DeepPartial<typeof baseVal>);\n } else if (v !== undefined) {\n out[k] = v;\n }\n }\n return out as T;\n}\n\nconst SAMPLE_APP_ID = \"00000000-0000-0000-0000-000000000aaa\";\nconst SAMPLE_CONNECTION_ID = \"00000000-0000-0000-0000-000000000bbb\";\nconst SAMPLE_PROFILE_ID = \"00000000-0000-0000-0000-000000000ccc\";\nconst SAMPLE_WORKSPACE_ID = \"00000000-0000-0000-0000-000000000ddd\";\nconst SAMPLE_SUBSCRIPTION_ID = \"00000000-0000-0000-0000-000000000eee\";\n\nexport const sampleIds = {\n appId: SAMPLE_APP_ID,\n connectionId: SAMPLE_CONNECTION_ID,\n profileId: SAMPLE_PROFILE_ID,\n workspaceId: SAMPLE_WORKSPACE_ID,\n subscriptionId: SAMPLE_SUBSCRIPTION_ID,\n} as const;\n\n/** Canned webhook event fixtures — deep-merge any field you care about. */\nexport const eventFixtures = {\n whatsappMessageReceived(\n overrides?: DeepPartial<WhatsAppMessageReceivedEvent>,\n ): WhatsAppMessageReceivedEvent {\n return deepMerge<WhatsAppMessageReceivedEvent>(\n {\n id: \"evt_wa_received_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n from: \"+15551234567\",\n to: \"+15559876543\",\n contact_name: \"Alice\",\n type: \"text\",\n text: \"Hi! Is this still available?\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n whatsappMessageDelivery(\n overrides?: DeepPartial<WhatsAppMessageDeliveryEvent>,\n ): WhatsAppMessageDeliveryEvent {\n return deepMerge<WhatsAppMessageDeliveryEvent>(\n {\n id: \"evt_wa_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n recipient_id: \"15551234567\",\n status: \"delivered\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramFbLoginMessage(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_msg_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mid: \"m_BNvxxxx\",\n text: \"👋\",\n is_echo: false,\n attachments: null,\n referral: null,\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramPostback(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_pb_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n kind: \"postback\",\n title: \"Get Started\",\n payload: \"GET_STARTED\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramIgLoginChange(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_change_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n from_username: \"alice.example\",\n mid: \"m_BNvxxxx\",\n text: \"Hello!\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramMessageDelivery(\n overrides?: DeepPartial<InstagramMessageDeliveryEvent>,\n ): InstagramMessageDeliveryEvent {\n return deepMerge<InstagramMessageDeliveryEvent>(\n {\n id: \"evt_ig_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mids: [\"m_BNvxxxx\"],\n watermark: 1715769600000,\n },\n },\n overrides,\n );\n },\n};\n\n/** Canned API response envelopes (matches what the server returns on 200). */\nexport const responseFixtures = {\n messageSent(overrides?: { provider_message_id?: string; sent_at?: string }) {\n return {\n data: {\n connection_id: SAMPLE_CONNECTION_ID,\n channel: \"whatsapp\" as const,\n to: \"+15551234567\",\n provider_message_id: overrides?.provider_message_id ?? \"wamid.HBgM\",\n sent_at: overrides?.sent_at ?? new Date().toISOString(),\n },\n };\n },\n\n commentReply(overrides?: { provider_message_id?: string }) {\n return {\n data: {\n comment_id: \"ig_comment_01\",\n kind: \"private_reply\" as const,\n connection_id: SAMPLE_CONNECTION_ID,\n provider_message_id: overrides?.provider_message_id ?? \"wamid.reply.x\",\n sent_at: new Date().toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n subscriptionCreated(overrides?: { secret?: string; url?: string }) {\n return {\n data: {\n id: SAMPLE_SUBSCRIPTION_ID,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: overrides?.url ?? \"https://example.com/webhook\",\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n secret: overrides?.secret ?? \"whsec_fixture_test_secret_value\",\n },\n };\n },\n\n subscriptionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}`,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: `https://example.com/webhook/${i}`,\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n rotatedSecret(overrides?: { secret?: string; graceDays?: number }) {\n const graceDays = overrides?.graceDays ?? 7;\n return {\n data: {\n subscription_id: SAMPLE_SUBSCRIPTION_ID,\n secret: overrides?.secret ?? \"whsec_rotated_test_secret\",\n grace_days: graceDays,\n previous_secret_expires_at: new Date(\n Date.now() + graceDays * 86400_000,\n ).toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n oauthTokenResponse(overrides?: { accessToken?: string; scope?: string }) {\n return {\n access_token: overrides?.accessToken ?? \"atb_live_test_fixture_key\",\n token_type: \"bearer\" as const,\n scope: overrides?.scope ?? \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n profile_id: SAMPLE_PROFILE_ID,\n workspace_id: SAMPLE_WORKSPACE_ID,\n };\n },\n\n oauthError(error = \"invalid_grant\", description = \"code expired\") {\n return { error, error_description: description };\n },\n\n apiError(code: string, message: string, status: number) {\n return { error: { code, message, status, request_id: \"req_fixture\" } };\n },\n\n // ----- Connections (Phase 1) -----\n connectionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: i === 0 ? SAMPLE_CONNECTION_ID : `00000000-0000-0000-0000-${String(items + i).padStart(12, \"0\")}`,\n channel: \"whatsapp\" as const,\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n connectionDetail(overrides?: { id?: string; channel?: \"whatsapp\" | \"instagram\" }) {\n return {\n data: {\n id: overrides?.id ?? SAMPLE_CONNECTION_ID,\n channel: overrides?.channel ?? \"whatsapp\",\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n // ----- WhatsApp templates (Phase 1) -----\n whatsappTemplateList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `template_${i}`,\n name: `welcome_message_${i}`,\n language: \"en_US\",\n category: \"MARKETING\",\n status: i === 0 ? \"APPROVED\" : \"PENDING\",\n components: [{ type: \"BODY\", text: \"Hello {{1}}!\" }],\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappTemplateCreated(overrides?: { id?: string; status?: string }) {\n return {\n data: {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n status: overrides?.status ?? \"PENDING\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- WhatsApp broadcasts (Phase 1) -----\n whatsappBroadcast(overrides?: { id?: string; status?: string }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000fff\",\n name: \"Test Broadcast\",\n template_name: \"welcome_message_0\",\n template_language: \"en_US\",\n status: (overrides?.status ?? \"draft\") as \"draft\" | \"sending\" | \"completed\" | \"cancelled\" | \"failed\",\n total_recipients: 3,\n sent_count: 0,\n delivered_count: 0,\n read_count: 0,\n failed_count: 0,\n started_at: null,\n completed_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n whatsappBroadcastList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.whatsappBroadcast({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"f\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastCreated() {\n return {\n data: this.whatsappBroadcast(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastDetail() {\n return {\n data: {\n ...this.whatsappBroadcast(),\n recipients: [\n {\n id: \"00000000-0000-0000-0000-000000000001\",\n phone_number: \"+15551234567\",\n template_params: null,\n status: \"pending\" as const,\n wamid: null,\n error_message: null,\n sent_at: null,\n },\n ],\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastUpdated(overrides?: { status?: string }) {\n return {\n data: this.whatsappBroadcast({ status: overrides?.status ?? \"cancelled\" }),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- Instagram triggers (Phase 1) -----\n instagramTrigger(overrides?: { id?: string; keyword?: string; enabled?: boolean }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n connection_id: SAMPLE_CONNECTION_ID,\n keyword: overrides?.keyword ?? \"PRICE\",\n keyword_match_mode: \"contains\" as const,\n case_sensitive: false,\n post_id_allowlist: null,\n opening_message: \"Here's our pricing — happy to chat!\",\n public_comment_reply: \"Sent you a DM!\",\n agent_context_hint: null,\n enabled: overrides?.enabled ?? true,\n trigger_count: 0,\n last_triggered_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n updated_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n instagramTriggerList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.instagramTrigger({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerCreated() {\n return {\n data: this.instagramTrigger(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerTestDm() {\n return {\n data: { provider_message_id: \"mid.fixture\" },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerResumed() {\n return {\n data: { resumed: true },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n};\n\n/** Combined export so consumers can `import { fixtures } from \"@atribu/node/test\"`. */\nexport const fixtures = {\n ids: sampleIds,\n events: eventFixtures,\n responses: responseFixtures,\n};\n\nexport type FixtureWebhookEvent = AtribuWebhookEvent;\n","/**\n * Drop-in MSW v2 handlers for testing against `@atribu/node`.\n *\n * Consumers add these to their MSW server setup:\n *\n * import { setupServer } from \"msw/node\";\n * import { atribuMockHandlers } from \"@atribu/node/test\";\n *\n * const server = setupServer(...atribuMockHandlers());\n *\n * Per-endpoint defaults reflect the wire shape the real Atribu API returns.\n * Override any response by passing `MockOverrides` — the handler returns\n * the override directly if `body` is provided; otherwise the default\n * envelope from `responseFixtures`.\n *\n * MSW v2 is a peer dependency. Consumers must install it.\n */\n\nimport { http, HttpResponse, type HttpHandler } from \"msw\";\nimport { responseFixtures } from \"./fixtures\";\n\ninterface EndpointOverride {\n status?: number;\n body?: unknown;\n}\n\nexport interface MockOverrides {\n baseUrl?: string;\n messages?: { send?: EndpointOverride };\n comments?: {\n reply?: EndpointOverride;\n privateReply?: EndpointOverride;\n };\n connections?: {\n list?: EndpointOverride;\n get?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n webhooks?: {\n subscriptions?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n rotateSecret?: EndpointOverride;\n test?: EndpointOverride;\n };\n deliveries?: {\n replay?: EndpointOverride;\n };\n };\n whatsapp?: {\n templates?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n delete?: EndpointOverride;\n };\n broadcasts?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n get?: EndpointOverride;\n cancel?: EndpointOverride;\n send?: EndpointOverride;\n };\n };\n instagram?: {\n triggers?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n testDm?: EndpointOverride;\n resume?: EndpointOverride;\n };\n };\n oauth?: {\n token?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n admin?: {\n create?: EndpointOverride;\n update?: EndpointOverride;\n suspend?: EndpointOverride;\n rotateClientSecret?: EndpointOverride;\n rotateJwtSecret?: EndpointOverride;\n };\n}\n\nconst DEFAULT_BASE_URL = \"https://www.atribu.app\";\n\nfunction resolve(\n override: EndpointOverride | undefined,\n fallbackStatus: number,\n fallbackBody: unknown,\n): Response {\n const status = override?.status ?? fallbackStatus;\n const body = override?.body ?? fallbackBody;\n if (status === 204) return new HttpResponse(null, { status: 204 });\n return HttpResponse.json(body as Record<string, unknown> | unknown[] | null, {\n status,\n headers: { \"x-request-id\": \"req_mock\" },\n });\n}\n\nexport function atribuMockHandlers(overrides: MockOverrides = {}): HttpHandler[] {\n const baseUrl = (overrides.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n const u = (p: string): string => `${baseUrl}${p}`;\n\n return [\n // ----- Messaging -----\n http.post(u(\"/api/v1/messages\"), () =>\n resolve(overrides.messages?.send, 200, responseFixtures.messageSent()),\n ),\n\n // ----- IG Comments -----\n http.post(u(\"/api/v1/comments/:commentId/reply\"), () =>\n resolve(overrides.comments?.reply, 200, responseFixtures.commentReply()),\n ),\n http.post(u(\"/api/v1/comments/:commentId/private-reply\"), () =>\n resolve(\n overrides.comments?.privateReply,\n 200,\n responseFixtures.commentReply(),\n ),\n ),\n\n // ----- Webhook subscriptions -----\n http.get(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.list,\n 200,\n responseFixtures.subscriptionList(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.create,\n 201,\n responseFixtures.subscriptionCreated(),\n ),\n ),\n http.patch(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.update,\n 200,\n responseFixtures.subscriptionList({ items: 1 }),\n ),\n ),\n http.delete(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions/:id/rotate-secret\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.rotateSecret,\n 200,\n responseFixtures.rotatedSecret(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/test/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.test, 200, {\n data: {\n enqueued: true,\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Webhook deliveries -----\n http.post(u(\"/api/v1/webhooks/deliveries/:id/replay\"), () =>\n resolve(overrides.webhooks?.deliveries?.replay, 200, {\n data: {\n enqueued: true,\n delivery_id: \"00000000-0000-0000-0000-000000000fff\",\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Connections -----\n http.get(u(\"/api/v1/connections\"), () =>\n resolve(overrides.connections?.list, 200, responseFixtures.connectionList()),\n ),\n http.get(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.get, 200, responseFixtures.connectionDetail()),\n ),\n http.delete(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.revoke, 204, null),\n ),\n\n // ----- WhatsApp templates -----\n http.get(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.list, 200, responseFixtures.whatsappTemplateList()),\n ),\n http.post(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.create, 201, responseFixtures.whatsappTemplateCreated()),\n ),\n http.delete(u(\"/api/v1/whatsapp/templates/:name\"), () =>\n resolve(overrides.whatsapp?.templates?.delete, 204, null),\n ),\n\n // ----- WhatsApp broadcasts -----\n http.get(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.list, 200, responseFixtures.whatsappBroadcastList()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.create, 201, responseFixtures.whatsappBroadcastCreated()),\n ),\n http.get(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.get, 200, responseFixtures.whatsappBroadcastDetail()),\n ),\n http.patch(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.cancel, 200, responseFixtures.whatsappBroadcastUpdated()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts/:id/send\"), () =>\n resolve(\n overrides.whatsapp?.broadcasts?.send,\n 200,\n responseFixtures.whatsappBroadcastUpdated({ status: \"completed\" }),\n ),\n ),\n\n // ----- Instagram triggers -----\n http.get(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.list, 200, responseFixtures.instagramTriggerList()),\n ),\n http.post(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.create, 201, responseFixtures.instagramTriggerCreated()),\n ),\n http.patch(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.update, 200, responseFixtures.instagramTriggerCreated()),\n ),\n http.delete(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/instagram/triggers/:id/test-dm\"), () =>\n resolve(overrides.instagram?.triggers?.testDm, 200, responseFixtures.instagramTriggerTestDm()),\n ),\n http.post(u(\"/api/v1/instagram/triggers/resume\"), () =>\n resolve(overrides.instagram?.triggers?.resume, 200, responseFixtures.instagramTriggerResumed()),\n ),\n\n // ----- OAuth -----\n http.post(u(\"/oauth/token\"), () =>\n resolve(overrides.oauth?.token, 200, responseFixtures.oauthTokenResponse()),\n ),\n http.post(u(\"/oauth/revoke\"), () =>\n overrides.oauth?.revoke\n ? resolve(overrides.oauth.revoke, 200, null)\n : new HttpResponse(null, { status: 200 }),\n ),\n\n // ----- Admin -----\n http.post(u(\"/api/v1/admin/oauth-apps\"), () =>\n resolve(overrides.admin?.create, 201, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Test App\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n client_secret: \"test_client_secret_shown_once\",\n jwt_signing_secret: \"test_jwt_signing_secret_shown_once\",\n },\n }),\n ),\n http.patch(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.update, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Updated Name\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\", \"instagram\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n },\n }),\n ),\n http.delete(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.suspend, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n status: \"suspended\",\n keys_revoked: 0,\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-client-secret\"), () =>\n resolve(overrides.admin?.rotateClientSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n client_secret: \"rotated_client_secret\",\n grace_days: 7,\n previous_client_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-jwt-secret\"), () =>\n resolve(overrides.admin?.rotateJwtSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n jwt_signing_secret: \"rotated_jwt_secret\",\n grace_days: 7,\n previous_jwt_signing_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/test/fixtures.ts","../../src/test/handlers.ts"],"names":["HttpResponse","http"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Canned fixtures for testing against the Atribu SDK.\n *\n * Use these to drive your test cases with realistic event shapes, or pass\n * `body` overrides into `atribuMockHandlers({...})` to customize responses.\n */\n\nimport type {\n AtribuWebhookEvent,\n WhatsAppMessageReceivedEvent,\n WhatsAppMessageDeliveryEvent,\n InstagramMessageReceivedEvent,\n InstagramMessageDeliveryEvent,\n} from \"../webhooks/types\";\n\ntype DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\nfunction deepMerge<T>(base: T, override?: DeepPartial<T>): T {\n if (!override || typeof override !== \"object\") return base;\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const [k, v] of Object.entries(override as Record<string, unknown>)) {\n const baseVal = (base as Record<string, unknown>)[k];\n if (v && typeof v === \"object\" && !Array.isArray(v) && baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal)) {\n out[k] = deepMerge(baseVal, v as DeepPartial<typeof baseVal>);\n } else if (v !== undefined) {\n out[k] = v;\n }\n }\n return out as T;\n}\n\nconst SAMPLE_APP_ID = \"00000000-0000-0000-0000-000000000aaa\";\nconst SAMPLE_CONNECTION_ID = \"00000000-0000-0000-0000-000000000bbb\";\nconst SAMPLE_PROFILE_ID = \"00000000-0000-0000-0000-000000000ccc\";\nconst SAMPLE_WORKSPACE_ID = \"00000000-0000-0000-0000-000000000ddd\";\nconst SAMPLE_SUBSCRIPTION_ID = \"00000000-0000-0000-0000-000000000eee\";\n\nexport const sampleIds = {\n appId: SAMPLE_APP_ID,\n connectionId: SAMPLE_CONNECTION_ID,\n profileId: SAMPLE_PROFILE_ID,\n workspaceId: SAMPLE_WORKSPACE_ID,\n subscriptionId: SAMPLE_SUBSCRIPTION_ID,\n} as const;\n\n/** Canned webhook event fixtures — deep-merge any field you care about. */\nexport const eventFixtures = {\n whatsappMessageReceived(\n overrides?: DeepPartial<WhatsAppMessageReceivedEvent>,\n ): WhatsAppMessageReceivedEvent {\n return deepMerge<WhatsAppMessageReceivedEvent>(\n {\n id: \"evt_wa_received_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n from: \"+15551234567\",\n to: \"+15559876543\",\n contact_name: \"Alice\",\n type: \"text\",\n text: \"Hi! Is this still available?\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n whatsappMessageDelivery(\n overrides?: DeepPartial<WhatsAppMessageDeliveryEvent>,\n ): WhatsAppMessageDeliveryEvent {\n return deepMerge<WhatsAppMessageDeliveryEvent>(\n {\n id: \"evt_wa_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n recipient_id: \"15551234567\",\n status: \"delivered\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramFbLoginMessage(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_msg_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mid: \"m_BNvxxxx\",\n text: \"👋\",\n is_echo: false,\n attachments: null,\n referral: null,\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramPostback(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_pb_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n kind: \"postback\",\n title: \"Get Started\",\n payload: \"GET_STARTED\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramIgLoginChange(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_change_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n from_username: \"alice.example\",\n mid: \"m_BNvxxxx\",\n text: \"Hello!\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramMessageDelivery(\n overrides?: DeepPartial<InstagramMessageDeliveryEvent>,\n ): InstagramMessageDeliveryEvent {\n return deepMerge<InstagramMessageDeliveryEvent>(\n {\n id: \"evt_ig_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mids: [\"m_BNvxxxx\"],\n watermark: 1715769600000,\n },\n },\n overrides,\n );\n },\n};\n\n/** Canned API response envelopes (matches what the server returns on 200). */\nexport const responseFixtures = {\n messageSent(overrides?: { provider_message_id?: string; sent_at?: string }) {\n return {\n data: {\n connection_id: SAMPLE_CONNECTION_ID,\n channel: \"whatsapp\" as const,\n to: \"+15551234567\",\n provider_message_id: overrides?.provider_message_id ?? \"wamid.HBgM\",\n sent_at: overrides?.sent_at ?? new Date().toISOString(),\n },\n };\n },\n\n commentReply(overrides?: { provider_message_id?: string }) {\n return {\n data: {\n comment_id: \"ig_comment_01\",\n kind: \"private_reply\" as const,\n connection_id: SAMPLE_CONNECTION_ID,\n provider_message_id: overrides?.provider_message_id ?? \"wamid.reply.x\",\n sent_at: new Date().toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n subscriptionCreated(overrides?: { secret?: string; url?: string }) {\n return {\n data: {\n id: SAMPLE_SUBSCRIPTION_ID,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: overrides?.url ?? \"https://example.com/webhook\",\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n secret: overrides?.secret ?? \"whsec_fixture_test_secret_value\",\n },\n };\n },\n\n subscriptionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}`,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: `https://example.com/webhook/${i}`,\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n rotatedSecret(overrides?: { secret?: string; graceDays?: number }) {\n const graceDays = overrides?.graceDays ?? 7;\n return {\n data: {\n subscription_id: SAMPLE_SUBSCRIPTION_ID,\n secret: overrides?.secret ?? \"whsec_rotated_test_secret\",\n grace_days: graceDays,\n previous_secret_expires_at: new Date(\n Date.now() + graceDays * 86400_000,\n ).toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n oauthTokenResponse(overrides?: { accessToken?: string; scope?: string }) {\n return {\n access_token: overrides?.accessToken ?? \"atb_live_test_fixture_key\",\n token_type: \"bearer\" as const,\n scope: overrides?.scope ?? \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n profile_id: SAMPLE_PROFILE_ID,\n workspace_id: SAMPLE_WORKSPACE_ID,\n };\n },\n\n oauthError(error = \"invalid_grant\", description = \"code expired\") {\n return { error, error_description: description };\n },\n\n apiError(code: string, message: string, status: number) {\n return { error: { code, message, status, request_id: \"req_fixture\" } };\n },\n\n // ----- Connections (Phase 1) -----\n connectionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: i === 0 ? SAMPLE_CONNECTION_ID : `00000000-0000-0000-0000-${String(items + i).padStart(12, \"0\")}`,\n channel: \"whatsapp\" as const,\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n connectionDetail(overrides?: { id?: string; channel?: \"whatsapp\" | \"instagram\" }) {\n return {\n data: {\n id: overrides?.id ?? SAMPLE_CONNECTION_ID,\n channel: overrides?.channel ?? \"whatsapp\",\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n // ----- WhatsApp templates (Phase 1) -----\n whatsappTemplateList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `template_${i}`,\n name: `welcome_message_${i}`,\n language: \"en_US\",\n category: \"MARKETING\",\n status: i === 0 ? \"APPROVED\" : \"PENDING\",\n components: [{ type: \"BODY\", text: \"Hello {{1}}!\" }],\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappTemplateCreated(overrides?: { id?: string; status?: string }) {\n return {\n data: {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n status: overrides?.status ?? \"PENDING\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- WhatsApp broadcasts (Phase 1) -----\n whatsappBroadcast(overrides?: { id?: string; status?: string }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000fff\",\n name: \"Test Broadcast\",\n template_name: \"welcome_message_0\",\n template_language: \"en_US\",\n status: (overrides?.status ?? \"draft\") as \"draft\" | \"sending\" | \"completed\" | \"cancelled\" | \"failed\",\n total_recipients: 3,\n sent_count: 0,\n delivered_count: 0,\n read_count: 0,\n failed_count: 0,\n started_at: null,\n completed_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n whatsappBroadcastList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.whatsappBroadcast({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"f\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastCreated() {\n return {\n data: this.whatsappBroadcast(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastDetail() {\n return {\n data: {\n ...this.whatsappBroadcast(),\n recipients: [\n {\n id: \"00000000-0000-0000-0000-000000000001\",\n phone_number: \"+15551234567\",\n template_params: null,\n status: \"pending\" as const,\n wamid: null,\n error_message: null,\n error_reason_code: null,\n sent_at: null,\n },\n ],\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastUpdated(overrides?: { status?: string }) {\n return {\n data: this.whatsappBroadcast({ status: overrides?.status ?? \"cancelled\" }),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- Instagram triggers (Phase 1) -----\n instagramTrigger(overrides?: { id?: string; keyword?: string; enabled?: boolean }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n connection_id: SAMPLE_CONNECTION_ID,\n keyword: overrides?.keyword ?? \"PRICE\",\n keyword_match_mode: \"contains\" as const,\n case_sensitive: false,\n post_id_allowlist: null,\n opening_message: \"Here's our pricing — happy to chat!\",\n public_comment_reply: \"Sent you a DM!\",\n agent_context_hint: null,\n enabled: overrides?.enabled ?? true,\n trigger_count: 0,\n last_triggered_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n updated_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n instagramTriggerList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.instagramTrigger({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerCreated() {\n return {\n data: this.instagramTrigger(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerTestDm() {\n return {\n data: { provider_message_id: \"mid.fixture\" },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerResumed() {\n return {\n data: { resumed: true },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n};\n\n/** Combined export so consumers can `import { fixtures } from \"@atribu/node/test\"`. */\nexport const fixtures = {\n ids: sampleIds,\n events: eventFixtures,\n responses: responseFixtures,\n};\n\nexport type FixtureWebhookEvent = AtribuWebhookEvent;\n","/**\n * Drop-in MSW v2 handlers for testing against `@atribu/node`.\n *\n * Consumers add these to their MSW server setup:\n *\n * import { setupServer } from \"msw/node\";\n * import { atribuMockHandlers } from \"@atribu/node/test\";\n *\n * const server = setupServer(...atribuMockHandlers());\n *\n * Per-endpoint defaults reflect the wire shape the real Atribu API returns.\n * Override any response by passing `MockOverrides` — the handler returns\n * the override directly if `body` is provided; otherwise the default\n * envelope from `responseFixtures`.\n *\n * MSW v2 is a peer dependency. Consumers must install it.\n */\n\nimport { http, HttpResponse, type HttpHandler } from \"msw\";\nimport { responseFixtures } from \"./fixtures\";\n\ninterface EndpointOverride {\n status?: number;\n body?: unknown;\n}\n\nexport interface MockOverrides {\n baseUrl?: string;\n messages?: { send?: EndpointOverride };\n comments?: {\n reply?: EndpointOverride;\n privateReply?: EndpointOverride;\n };\n connections?: {\n list?: EndpointOverride;\n get?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n webhooks?: {\n subscriptions?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n rotateSecret?: EndpointOverride;\n test?: EndpointOverride;\n };\n deliveries?: {\n replay?: EndpointOverride;\n };\n };\n whatsapp?: {\n templates?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n delete?: EndpointOverride;\n };\n broadcasts?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n get?: EndpointOverride;\n cancel?: EndpointOverride;\n send?: EndpointOverride;\n };\n };\n instagram?: {\n triggers?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n testDm?: EndpointOverride;\n resume?: EndpointOverride;\n };\n };\n oauth?: {\n token?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n admin?: {\n create?: EndpointOverride;\n update?: EndpointOverride;\n suspend?: EndpointOverride;\n rotateClientSecret?: EndpointOverride;\n rotateJwtSecret?: EndpointOverride;\n };\n}\n\nconst DEFAULT_BASE_URL = \"https://www.atribu.app\";\n\nfunction resolve(\n override: EndpointOverride | undefined,\n fallbackStatus: number,\n fallbackBody: unknown,\n): Response {\n const status = override?.status ?? fallbackStatus;\n const body = override?.body ?? fallbackBody;\n if (status === 204) return new HttpResponse(null, { status: 204 });\n return HttpResponse.json(body as Record<string, unknown> | unknown[] | null, {\n status,\n headers: { \"x-request-id\": \"req_mock\" },\n });\n}\n\nexport function atribuMockHandlers(overrides: MockOverrides = {}): HttpHandler[] {\n const baseUrl = (overrides.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n const u = (p: string): string => `${baseUrl}${p}`;\n\n return [\n // ----- Messaging -----\n http.post(u(\"/api/v1/messages\"), () =>\n resolve(overrides.messages?.send, 200, responseFixtures.messageSent()),\n ),\n\n // ----- IG Comments -----\n http.post(u(\"/api/v1/comments/:commentId/reply\"), () =>\n resolve(overrides.comments?.reply, 200, responseFixtures.commentReply()),\n ),\n http.post(u(\"/api/v1/comments/:commentId/private-reply\"), () =>\n resolve(\n overrides.comments?.privateReply,\n 200,\n responseFixtures.commentReply(),\n ),\n ),\n\n // ----- Webhook subscriptions -----\n http.get(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.list,\n 200,\n responseFixtures.subscriptionList(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.create,\n 201,\n responseFixtures.subscriptionCreated(),\n ),\n ),\n http.patch(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.update,\n 200,\n responseFixtures.subscriptionList({ items: 1 }),\n ),\n ),\n http.delete(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions/:id/rotate-secret\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.rotateSecret,\n 200,\n responseFixtures.rotatedSecret(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/test/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.test, 200, {\n data: {\n enqueued: true,\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Webhook deliveries -----\n http.post(u(\"/api/v1/webhooks/deliveries/:id/replay\"), () =>\n resolve(overrides.webhooks?.deliveries?.replay, 200, {\n data: {\n enqueued: true,\n delivery_id: \"00000000-0000-0000-0000-000000000fff\",\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Connections -----\n http.get(u(\"/api/v1/connections\"), () =>\n resolve(overrides.connections?.list, 200, responseFixtures.connectionList()),\n ),\n http.get(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.get, 200, responseFixtures.connectionDetail()),\n ),\n http.delete(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.revoke, 204, null),\n ),\n\n // ----- WhatsApp templates -----\n http.get(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.list, 200, responseFixtures.whatsappTemplateList()),\n ),\n http.post(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.create, 201, responseFixtures.whatsappTemplateCreated()),\n ),\n http.delete(u(\"/api/v1/whatsapp/templates/:name\"), () =>\n resolve(overrides.whatsapp?.templates?.delete, 204, null),\n ),\n\n // ----- WhatsApp broadcasts -----\n http.get(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.list, 200, responseFixtures.whatsappBroadcastList()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.create, 201, responseFixtures.whatsappBroadcastCreated()),\n ),\n http.get(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.get, 200, responseFixtures.whatsappBroadcastDetail()),\n ),\n http.patch(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.cancel, 200, responseFixtures.whatsappBroadcastUpdated()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts/:id/send\"), () =>\n resolve(\n overrides.whatsapp?.broadcasts?.send,\n 200,\n responseFixtures.whatsappBroadcastUpdated({ status: \"completed\" }),\n ),\n ),\n\n // ----- Instagram triggers -----\n http.get(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.list, 200, responseFixtures.instagramTriggerList()),\n ),\n http.post(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.create, 201, responseFixtures.instagramTriggerCreated()),\n ),\n http.patch(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.update, 200, responseFixtures.instagramTriggerCreated()),\n ),\n http.delete(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/instagram/triggers/:id/test-dm\"), () =>\n resolve(overrides.instagram?.triggers?.testDm, 200, responseFixtures.instagramTriggerTestDm()),\n ),\n http.post(u(\"/api/v1/instagram/triggers/resume\"), () =>\n resolve(overrides.instagram?.triggers?.resume, 200, responseFixtures.instagramTriggerResumed()),\n ),\n\n // ----- OAuth -----\n http.post(u(\"/oauth/token\"), () =>\n resolve(overrides.oauth?.token, 200, responseFixtures.oauthTokenResponse()),\n ),\n http.post(u(\"/oauth/revoke\"), () =>\n overrides.oauth?.revoke\n ? resolve(overrides.oauth.revoke, 200, null)\n : new HttpResponse(null, { status: 200 }),\n ),\n\n // ----- Admin -----\n http.post(u(\"/api/v1/admin/oauth-apps\"), () =>\n resolve(overrides.admin?.create, 201, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Test App\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n client_secret: \"test_client_secret_shown_once\",\n jwt_signing_secret: \"test_jwt_signing_secret_shown_once\",\n },\n }),\n ),\n http.patch(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.update, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Updated Name\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\", \"instagram\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n },\n }),\n ),\n http.delete(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.suspend, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n status: \"suspended\",\n keys_revoked: 0,\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-client-secret\"), () =>\n resolve(overrides.admin?.rotateClientSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n client_secret: \"rotated_client_secret\",\n grace_days: 7,\n previous_client_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-jwt-secret\"), () =>\n resolve(overrides.admin?.rotateJwtSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n jwt_signing_secret: \"rotated_jwt_secret\",\n grace_days: 7,\n previous_jwt_signing_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n ];\n}\n"]}
|
package/dist/test/index.d.cts
CHANGED
|
@@ -358,6 +358,7 @@ declare const responseFixtures: {
|
|
|
358
358
|
status: "pending";
|
|
359
359
|
wamid: null;
|
|
360
360
|
error_message: null;
|
|
361
|
+
error_reason_code: null;
|
|
361
362
|
sent_at: null;
|
|
362
363
|
}[];
|
|
363
364
|
id: string;
|
|
@@ -747,6 +748,7 @@ declare const fixtures: {
|
|
|
747
748
|
status: "pending";
|
|
748
749
|
wamid: null;
|
|
749
750
|
error_message: null;
|
|
751
|
+
error_reason_code: null;
|
|
750
752
|
sent_at: null;
|
|
751
753
|
}[];
|
|
752
754
|
id: string;
|
package/dist/test/index.d.ts
CHANGED
|
@@ -358,6 +358,7 @@ declare const responseFixtures: {
|
|
|
358
358
|
status: "pending";
|
|
359
359
|
wamid: null;
|
|
360
360
|
error_message: null;
|
|
361
|
+
error_reason_code: null;
|
|
361
362
|
sent_at: null;
|
|
362
363
|
}[];
|
|
363
364
|
id: string;
|
|
@@ -747,6 +748,7 @@ declare const fixtures: {
|
|
|
747
748
|
status: "pending";
|
|
748
749
|
wamid: null;
|
|
749
750
|
error_message: null;
|
|
751
|
+
error_reason_code: null;
|
|
750
752
|
sent_at: null;
|
|
751
753
|
}[];
|
|
752
754
|
id: string;
|
package/dist/test/index.js
CHANGED
package/dist/test/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test/fixtures.ts","../../src/test/handlers.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Canned fixtures for testing against the Atribu SDK.\n *\n * Use these to drive your test cases with realistic event shapes, or pass\n * `body` overrides into `atribuMockHandlers({...})` to customize responses.\n */\n\nimport type {\n AtribuWebhookEvent,\n WhatsAppMessageReceivedEvent,\n WhatsAppMessageDeliveryEvent,\n InstagramMessageReceivedEvent,\n InstagramMessageDeliveryEvent,\n} from \"../webhooks/types\";\n\ntype DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\nfunction deepMerge<T>(base: T, override?: DeepPartial<T>): T {\n if (!override || typeof override !== \"object\") return base;\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const [k, v] of Object.entries(override as Record<string, unknown>)) {\n const baseVal = (base as Record<string, unknown>)[k];\n if (v && typeof v === \"object\" && !Array.isArray(v) && baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal)) {\n out[k] = deepMerge(baseVal, v as DeepPartial<typeof baseVal>);\n } else if (v !== undefined) {\n out[k] = v;\n }\n }\n return out as T;\n}\n\nconst SAMPLE_APP_ID = \"00000000-0000-0000-0000-000000000aaa\";\nconst SAMPLE_CONNECTION_ID = \"00000000-0000-0000-0000-000000000bbb\";\nconst SAMPLE_PROFILE_ID = \"00000000-0000-0000-0000-000000000ccc\";\nconst SAMPLE_WORKSPACE_ID = \"00000000-0000-0000-0000-000000000ddd\";\nconst SAMPLE_SUBSCRIPTION_ID = \"00000000-0000-0000-0000-000000000eee\";\n\nexport const sampleIds = {\n appId: SAMPLE_APP_ID,\n connectionId: SAMPLE_CONNECTION_ID,\n profileId: SAMPLE_PROFILE_ID,\n workspaceId: SAMPLE_WORKSPACE_ID,\n subscriptionId: SAMPLE_SUBSCRIPTION_ID,\n} as const;\n\n/** Canned webhook event fixtures — deep-merge any field you care about. */\nexport const eventFixtures = {\n whatsappMessageReceived(\n overrides?: DeepPartial<WhatsAppMessageReceivedEvent>,\n ): WhatsAppMessageReceivedEvent {\n return deepMerge<WhatsAppMessageReceivedEvent>(\n {\n id: \"evt_wa_received_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n from: \"+15551234567\",\n to: \"+15559876543\",\n contact_name: \"Alice\",\n type: \"text\",\n text: \"Hi! Is this still available?\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n whatsappMessageDelivery(\n overrides?: DeepPartial<WhatsAppMessageDeliveryEvent>,\n ): WhatsAppMessageDeliveryEvent {\n return deepMerge<WhatsAppMessageDeliveryEvent>(\n {\n id: \"evt_wa_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n recipient_id: \"15551234567\",\n status: \"delivered\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramFbLoginMessage(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_msg_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mid: \"m_BNvxxxx\",\n text: \"👋\",\n is_echo: false,\n attachments: null,\n referral: null,\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramPostback(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_pb_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n kind: \"postback\",\n title: \"Get Started\",\n payload: \"GET_STARTED\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramIgLoginChange(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_change_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n from_username: \"alice.example\",\n mid: \"m_BNvxxxx\",\n text: \"Hello!\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramMessageDelivery(\n overrides?: DeepPartial<InstagramMessageDeliveryEvent>,\n ): InstagramMessageDeliveryEvent {\n return deepMerge<InstagramMessageDeliveryEvent>(\n {\n id: \"evt_ig_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mids: [\"m_BNvxxxx\"],\n watermark: 1715769600000,\n },\n },\n overrides,\n );\n },\n};\n\n/** Canned API response envelopes (matches what the server returns on 200). */\nexport const responseFixtures = {\n messageSent(overrides?: { provider_message_id?: string; sent_at?: string }) {\n return {\n data: {\n connection_id: SAMPLE_CONNECTION_ID,\n channel: \"whatsapp\" as const,\n to: \"+15551234567\",\n provider_message_id: overrides?.provider_message_id ?? \"wamid.HBgM\",\n sent_at: overrides?.sent_at ?? new Date().toISOString(),\n },\n };\n },\n\n commentReply(overrides?: { provider_message_id?: string }) {\n return {\n data: {\n comment_id: \"ig_comment_01\",\n kind: \"private_reply\" as const,\n connection_id: SAMPLE_CONNECTION_ID,\n provider_message_id: overrides?.provider_message_id ?? \"wamid.reply.x\",\n sent_at: new Date().toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n subscriptionCreated(overrides?: { secret?: string; url?: string }) {\n return {\n data: {\n id: SAMPLE_SUBSCRIPTION_ID,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: overrides?.url ?? \"https://example.com/webhook\",\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n secret: overrides?.secret ?? \"whsec_fixture_test_secret_value\",\n },\n };\n },\n\n subscriptionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}`,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: `https://example.com/webhook/${i}`,\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n rotatedSecret(overrides?: { secret?: string; graceDays?: number }) {\n const graceDays = overrides?.graceDays ?? 7;\n return {\n data: {\n subscription_id: SAMPLE_SUBSCRIPTION_ID,\n secret: overrides?.secret ?? \"whsec_rotated_test_secret\",\n grace_days: graceDays,\n previous_secret_expires_at: new Date(\n Date.now() + graceDays * 86400_000,\n ).toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n oauthTokenResponse(overrides?: { accessToken?: string; scope?: string }) {\n return {\n access_token: overrides?.accessToken ?? \"atb_live_test_fixture_key\",\n token_type: \"bearer\" as const,\n scope: overrides?.scope ?? \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n profile_id: SAMPLE_PROFILE_ID,\n workspace_id: SAMPLE_WORKSPACE_ID,\n };\n },\n\n oauthError(error = \"invalid_grant\", description = \"code expired\") {\n return { error, error_description: description };\n },\n\n apiError(code: string, message: string, status: number) {\n return { error: { code, message, status, request_id: \"req_fixture\" } };\n },\n\n // ----- Connections (Phase 1) -----\n connectionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: i === 0 ? SAMPLE_CONNECTION_ID : `00000000-0000-0000-0000-${String(items + i).padStart(12, \"0\")}`,\n channel: \"whatsapp\" as const,\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n connectionDetail(overrides?: { id?: string; channel?: \"whatsapp\" | \"instagram\" }) {\n return {\n data: {\n id: overrides?.id ?? SAMPLE_CONNECTION_ID,\n channel: overrides?.channel ?? \"whatsapp\",\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n // ----- WhatsApp templates (Phase 1) -----\n whatsappTemplateList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `template_${i}`,\n name: `welcome_message_${i}`,\n language: \"en_US\",\n category: \"MARKETING\",\n status: i === 0 ? \"APPROVED\" : \"PENDING\",\n components: [{ type: \"BODY\", text: \"Hello {{1}}!\" }],\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappTemplateCreated(overrides?: { id?: string; status?: string }) {\n return {\n data: {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n status: overrides?.status ?? \"PENDING\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- WhatsApp broadcasts (Phase 1) -----\n whatsappBroadcast(overrides?: { id?: string; status?: string }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000fff\",\n name: \"Test Broadcast\",\n template_name: \"welcome_message_0\",\n template_language: \"en_US\",\n status: (overrides?.status ?? \"draft\") as \"draft\" | \"sending\" | \"completed\" | \"cancelled\" | \"failed\",\n total_recipients: 3,\n sent_count: 0,\n delivered_count: 0,\n read_count: 0,\n failed_count: 0,\n started_at: null,\n completed_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n whatsappBroadcastList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.whatsappBroadcast({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"f\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastCreated() {\n return {\n data: this.whatsappBroadcast(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastDetail() {\n return {\n data: {\n ...this.whatsappBroadcast(),\n recipients: [\n {\n id: \"00000000-0000-0000-0000-000000000001\",\n phone_number: \"+15551234567\",\n template_params: null,\n status: \"pending\" as const,\n wamid: null,\n error_message: null,\n sent_at: null,\n },\n ],\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastUpdated(overrides?: { status?: string }) {\n return {\n data: this.whatsappBroadcast({ status: overrides?.status ?? \"cancelled\" }),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- Instagram triggers (Phase 1) -----\n instagramTrigger(overrides?: { id?: string; keyword?: string; enabled?: boolean }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n connection_id: SAMPLE_CONNECTION_ID,\n keyword: overrides?.keyword ?? \"PRICE\",\n keyword_match_mode: \"contains\" as const,\n case_sensitive: false,\n post_id_allowlist: null,\n opening_message: \"Here's our pricing — happy to chat!\",\n public_comment_reply: \"Sent you a DM!\",\n agent_context_hint: null,\n enabled: overrides?.enabled ?? true,\n trigger_count: 0,\n last_triggered_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n updated_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n instagramTriggerList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.instagramTrigger({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerCreated() {\n return {\n data: this.instagramTrigger(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerTestDm() {\n return {\n data: { provider_message_id: \"mid.fixture\" },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerResumed() {\n return {\n data: { resumed: true },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n};\n\n/** Combined export so consumers can `import { fixtures } from \"@atribu/node/test\"`. */\nexport const fixtures = {\n ids: sampleIds,\n events: eventFixtures,\n responses: responseFixtures,\n};\n\nexport type FixtureWebhookEvent = AtribuWebhookEvent;\n","/**\n * Drop-in MSW v2 handlers for testing against `@atribu/node`.\n *\n * Consumers add these to their MSW server setup:\n *\n * import { setupServer } from \"msw/node\";\n * import { atribuMockHandlers } from \"@atribu/node/test\";\n *\n * const server = setupServer(...atribuMockHandlers());\n *\n * Per-endpoint defaults reflect the wire shape the real Atribu API returns.\n * Override any response by passing `MockOverrides` — the handler returns\n * the override directly if `body` is provided; otherwise the default\n * envelope from `responseFixtures`.\n *\n * MSW v2 is a peer dependency. Consumers must install it.\n */\n\nimport { http, HttpResponse, type HttpHandler } from \"msw\";\nimport { responseFixtures } from \"./fixtures\";\n\ninterface EndpointOverride {\n status?: number;\n body?: unknown;\n}\n\nexport interface MockOverrides {\n baseUrl?: string;\n messages?: { send?: EndpointOverride };\n comments?: {\n reply?: EndpointOverride;\n privateReply?: EndpointOverride;\n };\n connections?: {\n list?: EndpointOverride;\n get?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n webhooks?: {\n subscriptions?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n rotateSecret?: EndpointOverride;\n test?: EndpointOverride;\n };\n deliveries?: {\n replay?: EndpointOverride;\n };\n };\n whatsapp?: {\n templates?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n delete?: EndpointOverride;\n };\n broadcasts?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n get?: EndpointOverride;\n cancel?: EndpointOverride;\n send?: EndpointOverride;\n };\n };\n instagram?: {\n triggers?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n testDm?: EndpointOverride;\n resume?: EndpointOverride;\n };\n };\n oauth?: {\n token?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n admin?: {\n create?: EndpointOverride;\n update?: EndpointOverride;\n suspend?: EndpointOverride;\n rotateClientSecret?: EndpointOverride;\n rotateJwtSecret?: EndpointOverride;\n };\n}\n\nconst DEFAULT_BASE_URL = \"https://www.atribu.app\";\n\nfunction resolve(\n override: EndpointOverride | undefined,\n fallbackStatus: number,\n fallbackBody: unknown,\n): Response {\n const status = override?.status ?? fallbackStatus;\n const body = override?.body ?? fallbackBody;\n if (status === 204) return new HttpResponse(null, { status: 204 });\n return HttpResponse.json(body as Record<string, unknown> | unknown[] | null, {\n status,\n headers: { \"x-request-id\": \"req_mock\" },\n });\n}\n\nexport function atribuMockHandlers(overrides: MockOverrides = {}): HttpHandler[] {\n const baseUrl = (overrides.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n const u = (p: string): string => `${baseUrl}${p}`;\n\n return [\n // ----- Messaging -----\n http.post(u(\"/api/v1/messages\"), () =>\n resolve(overrides.messages?.send, 200, responseFixtures.messageSent()),\n ),\n\n // ----- IG Comments -----\n http.post(u(\"/api/v1/comments/:commentId/reply\"), () =>\n resolve(overrides.comments?.reply, 200, responseFixtures.commentReply()),\n ),\n http.post(u(\"/api/v1/comments/:commentId/private-reply\"), () =>\n resolve(\n overrides.comments?.privateReply,\n 200,\n responseFixtures.commentReply(),\n ),\n ),\n\n // ----- Webhook subscriptions -----\n http.get(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.list,\n 200,\n responseFixtures.subscriptionList(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.create,\n 201,\n responseFixtures.subscriptionCreated(),\n ),\n ),\n http.patch(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.update,\n 200,\n responseFixtures.subscriptionList({ items: 1 }),\n ),\n ),\n http.delete(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions/:id/rotate-secret\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.rotateSecret,\n 200,\n responseFixtures.rotatedSecret(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/test/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.test, 200, {\n data: {\n enqueued: true,\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Webhook deliveries -----\n http.post(u(\"/api/v1/webhooks/deliveries/:id/replay\"), () =>\n resolve(overrides.webhooks?.deliveries?.replay, 200, {\n data: {\n enqueued: true,\n delivery_id: \"00000000-0000-0000-0000-000000000fff\",\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Connections -----\n http.get(u(\"/api/v1/connections\"), () =>\n resolve(overrides.connections?.list, 200, responseFixtures.connectionList()),\n ),\n http.get(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.get, 200, responseFixtures.connectionDetail()),\n ),\n http.delete(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.revoke, 204, null),\n ),\n\n // ----- WhatsApp templates -----\n http.get(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.list, 200, responseFixtures.whatsappTemplateList()),\n ),\n http.post(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.create, 201, responseFixtures.whatsappTemplateCreated()),\n ),\n http.delete(u(\"/api/v1/whatsapp/templates/:name\"), () =>\n resolve(overrides.whatsapp?.templates?.delete, 204, null),\n ),\n\n // ----- WhatsApp broadcasts -----\n http.get(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.list, 200, responseFixtures.whatsappBroadcastList()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.create, 201, responseFixtures.whatsappBroadcastCreated()),\n ),\n http.get(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.get, 200, responseFixtures.whatsappBroadcastDetail()),\n ),\n http.patch(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.cancel, 200, responseFixtures.whatsappBroadcastUpdated()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts/:id/send\"), () =>\n resolve(\n overrides.whatsapp?.broadcasts?.send,\n 200,\n responseFixtures.whatsappBroadcastUpdated({ status: \"completed\" }),\n ),\n ),\n\n // ----- Instagram triggers -----\n http.get(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.list, 200, responseFixtures.instagramTriggerList()),\n ),\n http.post(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.create, 201, responseFixtures.instagramTriggerCreated()),\n ),\n http.patch(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.update, 200, responseFixtures.instagramTriggerCreated()),\n ),\n http.delete(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/instagram/triggers/:id/test-dm\"), () =>\n resolve(overrides.instagram?.triggers?.testDm, 200, responseFixtures.instagramTriggerTestDm()),\n ),\n http.post(u(\"/api/v1/instagram/triggers/resume\"), () =>\n resolve(overrides.instagram?.triggers?.resume, 200, responseFixtures.instagramTriggerResumed()),\n ),\n\n // ----- OAuth -----\n http.post(u(\"/oauth/token\"), () =>\n resolve(overrides.oauth?.token, 200, responseFixtures.oauthTokenResponse()),\n ),\n http.post(u(\"/oauth/revoke\"), () =>\n overrides.oauth?.revoke\n ? resolve(overrides.oauth.revoke, 200, null)\n : new HttpResponse(null, { status: 200 }),\n ),\n\n // ----- Admin -----\n http.post(u(\"/api/v1/admin/oauth-apps\"), () =>\n resolve(overrides.admin?.create, 201, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Test App\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n client_secret: \"test_client_secret_shown_once\",\n jwt_signing_secret: \"test_jwt_signing_secret_shown_once\",\n },\n }),\n ),\n http.patch(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.update, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Updated Name\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\", \"instagram\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n },\n }),\n ),\n http.delete(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.suspend, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n status: \"suspended\",\n keys_revoked: 0,\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-client-secret\"), () =>\n resolve(overrides.admin?.rotateClientSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n client_secret: \"rotated_client_secret\",\n grace_days: 7,\n previous_client_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-jwt-secret\"), () =>\n resolve(overrides.admin?.rotateJwtSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n jwt_signing_secret: \"rotated_jwt_secret\",\n grace_days: 7,\n previous_jwt_signing_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n ];\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/test/fixtures.ts","../../src/test/handlers.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Canned fixtures for testing against the Atribu SDK.\n *\n * Use these to drive your test cases with realistic event shapes, or pass\n * `body` overrides into `atribuMockHandlers({...})` to customize responses.\n */\n\nimport type {\n AtribuWebhookEvent,\n WhatsAppMessageReceivedEvent,\n WhatsAppMessageDeliveryEvent,\n InstagramMessageReceivedEvent,\n InstagramMessageDeliveryEvent,\n} from \"../webhooks/types\";\n\ntype DeepPartial<T> = T extends object ? { [K in keyof T]?: DeepPartial<T[K]> } : T;\nfunction deepMerge<T>(base: T, override?: DeepPartial<T>): T {\n if (!override || typeof override !== \"object\") return base;\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n for (const [k, v] of Object.entries(override as Record<string, unknown>)) {\n const baseVal = (base as Record<string, unknown>)[k];\n if (v && typeof v === \"object\" && !Array.isArray(v) && baseVal && typeof baseVal === \"object\" && !Array.isArray(baseVal)) {\n out[k] = deepMerge(baseVal, v as DeepPartial<typeof baseVal>);\n } else if (v !== undefined) {\n out[k] = v;\n }\n }\n return out as T;\n}\n\nconst SAMPLE_APP_ID = \"00000000-0000-0000-0000-000000000aaa\";\nconst SAMPLE_CONNECTION_ID = \"00000000-0000-0000-0000-000000000bbb\";\nconst SAMPLE_PROFILE_ID = \"00000000-0000-0000-0000-000000000ccc\";\nconst SAMPLE_WORKSPACE_ID = \"00000000-0000-0000-0000-000000000ddd\";\nconst SAMPLE_SUBSCRIPTION_ID = \"00000000-0000-0000-0000-000000000eee\";\n\nexport const sampleIds = {\n appId: SAMPLE_APP_ID,\n connectionId: SAMPLE_CONNECTION_ID,\n profileId: SAMPLE_PROFILE_ID,\n workspaceId: SAMPLE_WORKSPACE_ID,\n subscriptionId: SAMPLE_SUBSCRIPTION_ID,\n} as const;\n\n/** Canned webhook event fixtures — deep-merge any field you care about. */\nexport const eventFixtures = {\n whatsappMessageReceived(\n overrides?: DeepPartial<WhatsAppMessageReceivedEvent>,\n ): WhatsAppMessageReceivedEvent {\n return deepMerge<WhatsAppMessageReceivedEvent>(\n {\n id: \"evt_wa_received_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n from: \"+15551234567\",\n to: \"+15559876543\",\n contact_name: \"Alice\",\n type: \"text\",\n text: \"Hi! Is this still available?\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n whatsappMessageDelivery(\n overrides?: DeepPartial<WhatsAppMessageDeliveryEvent>,\n ): WhatsAppMessageDeliveryEvent {\n return deepMerge<WhatsAppMessageDeliveryEvent>(\n {\n id: \"evt_wa_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n wa_message_id: \"wamid.HBgM\",\n recipient_id: \"15551234567\",\n status: \"delivered\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramFbLoginMessage(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_msg_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mid: \"m_BNvxxxx\",\n text: \"👋\",\n is_echo: false,\n attachments: null,\n referral: null,\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramPostback(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_pb_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n kind: \"postback\",\n title: \"Get Started\",\n payload: \"GET_STARTED\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramIgLoginChange(\n overrides?: DeepPartial<InstagramMessageReceivedEvent>,\n ): InstagramMessageReceivedEvent {\n return deepMerge<InstagramMessageReceivedEvent>(\n {\n id: \"evt_ig_change_01\",\n type: \"message.received\",\n occurred_at: \"2026-05-15T10:00:00Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n from_username: \"alice.example\",\n mid: \"m_BNvxxxx\",\n text: \"Hello!\",\n raw: {},\n },\n },\n overrides,\n );\n },\n\n instagramMessageDelivery(\n overrides?: DeepPartial<InstagramMessageDeliveryEvent>,\n ): InstagramMessageDeliveryEvent {\n return deepMerge<InstagramMessageDeliveryEvent>(\n {\n id: \"evt_ig_delivery_01\",\n type: \"message.delivery\",\n occurred_at: \"2026-05-15T10:00:01Z\",\n app_id: SAMPLE_APP_ID,\n provider: \"instagram\",\n connection_id: SAMPLE_CONNECTION_ID,\n data: {\n sender_id: \"17841400000000001\",\n recipient_id: \"17841400000000002\",\n mids: [\"m_BNvxxxx\"],\n watermark: 1715769600000,\n },\n },\n overrides,\n );\n },\n};\n\n/** Canned API response envelopes (matches what the server returns on 200). */\nexport const responseFixtures = {\n messageSent(overrides?: { provider_message_id?: string; sent_at?: string }) {\n return {\n data: {\n connection_id: SAMPLE_CONNECTION_ID,\n channel: \"whatsapp\" as const,\n to: \"+15551234567\",\n provider_message_id: overrides?.provider_message_id ?? \"wamid.HBgM\",\n sent_at: overrides?.sent_at ?? new Date().toISOString(),\n },\n };\n },\n\n commentReply(overrides?: { provider_message_id?: string }) {\n return {\n data: {\n comment_id: \"ig_comment_01\",\n kind: \"private_reply\" as const,\n connection_id: SAMPLE_CONNECTION_ID,\n provider_message_id: overrides?.provider_message_id ?? \"wamid.reply.x\",\n sent_at: new Date().toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n subscriptionCreated(overrides?: { secret?: string; url?: string }) {\n return {\n data: {\n id: SAMPLE_SUBSCRIPTION_ID,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: overrides?.url ?? \"https://example.com/webhook\",\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n secret: overrides?.secret ?? \"whsec_fixture_test_secret_value\",\n },\n };\n },\n\n subscriptionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}`,\n app_id: SAMPLE_APP_ID,\n profile_id: SAMPLE_PROFILE_ID,\n url: `https://example.com/webhook/${i}`,\n events: [\"message.received\", \"message.delivery\"],\n providers: [\"whatsapp\", \"instagram\"],\n status: \"active\" as const,\n last_delivery_at: null,\n consecutive_failures: 0,\n previous_secret_expires_at: null,\n created_at: new Date().toISOString(),\n updated_at: new Date().toISOString(),\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n rotatedSecret(overrides?: { secret?: string; graceDays?: number }) {\n const graceDays = overrides?.graceDays ?? 7;\n return {\n data: {\n subscription_id: SAMPLE_SUBSCRIPTION_ID,\n secret: overrides?.secret ?? \"whsec_rotated_test_secret\",\n grace_days: graceDays,\n previous_secret_expires_at: new Date(\n Date.now() + graceDays * 86400_000,\n ).toISOString(),\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n oauthTokenResponse(overrides?: { accessToken?: string; scope?: string }) {\n return {\n access_token: overrides?.accessToken ?? \"atb_live_test_fixture_key\",\n token_type: \"bearer\" as const,\n scope: overrides?.scope ?? \"whatsapp\",\n connection_id: SAMPLE_CONNECTION_ID,\n profile_id: SAMPLE_PROFILE_ID,\n workspace_id: SAMPLE_WORKSPACE_ID,\n };\n },\n\n oauthError(error = \"invalid_grant\", description = \"code expired\") {\n return { error, error_description: description };\n },\n\n apiError(code: string, message: string, status: number) {\n return { error: { code, message, status, request_id: \"req_fixture\" } };\n },\n\n // ----- Connections (Phase 1) -----\n connectionList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: i === 0 ? SAMPLE_CONNECTION_ID : `00000000-0000-0000-0000-${String(items + i).padStart(12, \"0\")}`,\n channel: \"whatsapp\" as const,\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n connectionDetail(overrides?: { id?: string; channel?: \"whatsapp\" | \"instagram\" }) {\n return {\n data: {\n id: overrides?.id ?? SAMPLE_CONNECTION_ID,\n channel: overrides?.channel ?? \"whatsapp\",\n status: \"connected\",\n display_name: \"Atribu Test\",\n external_id: \"12345678901234\",\n provider_subtype: null,\n authorized_at: \"2026-05-15T12:00:00Z\",\n created_at: \"2026-05-15T11:00:00Z\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID },\n };\n },\n\n // ----- WhatsApp templates (Phase 1) -----\n whatsappTemplateList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) => ({\n id: `template_${i}`,\n name: `welcome_message_${i}`,\n language: \"en_US\",\n category: \"MARKETING\",\n status: i === 0 ? \"APPROVED\" : \"PENDING\",\n components: [{ type: \"BODY\", text: \"Hello {{1}}!\" }],\n })),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappTemplateCreated(overrides?: { id?: string; status?: string }) {\n return {\n data: {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n status: overrides?.status ?? \"PENDING\",\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- WhatsApp broadcasts (Phase 1) -----\n whatsappBroadcast(overrides?: { id?: string; status?: string }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000fff\",\n name: \"Test Broadcast\",\n template_name: \"welcome_message_0\",\n template_language: \"en_US\",\n status: (overrides?.status ?? \"draft\") as \"draft\" | \"sending\" | \"completed\" | \"cancelled\" | \"failed\",\n total_recipients: 3,\n sent_count: 0,\n delivered_count: 0,\n read_count: 0,\n failed_count: 0,\n started_at: null,\n completed_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n whatsappBroadcastList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.whatsappBroadcast({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"f\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastCreated() {\n return {\n data: this.whatsappBroadcast(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastDetail() {\n return {\n data: {\n ...this.whatsappBroadcast(),\n recipients: [\n {\n id: \"00000000-0000-0000-0000-000000000001\",\n phone_number: \"+15551234567\",\n template_params: null,\n status: \"pending\" as const,\n wamid: null,\n error_message: null,\n error_reason_code: null,\n sent_at: null,\n },\n ],\n },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n whatsappBroadcastUpdated(overrides?: { status?: string }) {\n return {\n data: this.whatsappBroadcast({ status: overrides?.status ?? \"cancelled\" }),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n // ----- Instagram triggers (Phase 1) -----\n instagramTrigger(overrides?: { id?: string; keyword?: string; enabled?: boolean }) {\n return {\n id: overrides?.id ?? \"00000000-0000-0000-0000-000000000aaa\",\n connection_id: SAMPLE_CONNECTION_ID,\n keyword: overrides?.keyword ?? \"PRICE\",\n keyword_match_mode: \"contains\" as const,\n case_sensitive: false,\n post_id_allowlist: null,\n opening_message: \"Here's our pricing — happy to chat!\",\n public_comment_reply: \"Sent you a DM!\",\n agent_context_hint: null,\n enabled: overrides?.enabled ?? true,\n trigger_count: 0,\n last_triggered_at: null,\n created_at: \"2026-05-16T10:00:00Z\",\n updated_at: \"2026-05-16T10:00:00Z\",\n };\n },\n\n instagramTriggerList(overrides?: { items?: number }) {\n const items = overrides?.items ?? 1;\n return {\n data: Array.from({ length: items }, (_, i) =>\n this.instagramTrigger({ id: `00000000-0000-0000-0000-${String(i).padStart(12, \"0\")}` }),\n ),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerCreated() {\n return {\n data: this.instagramTrigger(),\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerTestDm() {\n return {\n data: { provider_message_id: \"mid.fixture\" },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n\n instagramTriggerResumed() {\n return {\n data: { resumed: true },\n meta: { profile_id: SAMPLE_PROFILE_ID, connection_id: SAMPLE_CONNECTION_ID },\n };\n },\n};\n\n/** Combined export so consumers can `import { fixtures } from \"@atribu/node/test\"`. */\nexport const fixtures = {\n ids: sampleIds,\n events: eventFixtures,\n responses: responseFixtures,\n};\n\nexport type FixtureWebhookEvent = AtribuWebhookEvent;\n","/**\n * Drop-in MSW v2 handlers for testing against `@atribu/node`.\n *\n * Consumers add these to their MSW server setup:\n *\n * import { setupServer } from \"msw/node\";\n * import { atribuMockHandlers } from \"@atribu/node/test\";\n *\n * const server = setupServer(...atribuMockHandlers());\n *\n * Per-endpoint defaults reflect the wire shape the real Atribu API returns.\n * Override any response by passing `MockOverrides` — the handler returns\n * the override directly if `body` is provided; otherwise the default\n * envelope from `responseFixtures`.\n *\n * MSW v2 is a peer dependency. Consumers must install it.\n */\n\nimport { http, HttpResponse, type HttpHandler } from \"msw\";\nimport { responseFixtures } from \"./fixtures\";\n\ninterface EndpointOverride {\n status?: number;\n body?: unknown;\n}\n\nexport interface MockOverrides {\n baseUrl?: string;\n messages?: { send?: EndpointOverride };\n comments?: {\n reply?: EndpointOverride;\n privateReply?: EndpointOverride;\n };\n connections?: {\n list?: EndpointOverride;\n get?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n webhooks?: {\n subscriptions?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n rotateSecret?: EndpointOverride;\n test?: EndpointOverride;\n };\n deliveries?: {\n replay?: EndpointOverride;\n };\n };\n whatsapp?: {\n templates?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n delete?: EndpointOverride;\n };\n broadcasts?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n get?: EndpointOverride;\n cancel?: EndpointOverride;\n send?: EndpointOverride;\n };\n };\n instagram?: {\n triggers?: {\n list?: EndpointOverride;\n create?: EndpointOverride;\n update?: EndpointOverride;\n delete?: EndpointOverride;\n testDm?: EndpointOverride;\n resume?: EndpointOverride;\n };\n };\n oauth?: {\n token?: EndpointOverride;\n revoke?: EndpointOverride;\n };\n admin?: {\n create?: EndpointOverride;\n update?: EndpointOverride;\n suspend?: EndpointOverride;\n rotateClientSecret?: EndpointOverride;\n rotateJwtSecret?: EndpointOverride;\n };\n}\n\nconst DEFAULT_BASE_URL = \"https://www.atribu.app\";\n\nfunction resolve(\n override: EndpointOverride | undefined,\n fallbackStatus: number,\n fallbackBody: unknown,\n): Response {\n const status = override?.status ?? fallbackStatus;\n const body = override?.body ?? fallbackBody;\n if (status === 204) return new HttpResponse(null, { status: 204 });\n return HttpResponse.json(body as Record<string, unknown> | unknown[] | null, {\n status,\n headers: { \"x-request-id\": \"req_mock\" },\n });\n}\n\nexport function atribuMockHandlers(overrides: MockOverrides = {}): HttpHandler[] {\n const baseUrl = (overrides.baseUrl ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\n const u = (p: string): string => `${baseUrl}${p}`;\n\n return [\n // ----- Messaging -----\n http.post(u(\"/api/v1/messages\"), () =>\n resolve(overrides.messages?.send, 200, responseFixtures.messageSent()),\n ),\n\n // ----- IG Comments -----\n http.post(u(\"/api/v1/comments/:commentId/reply\"), () =>\n resolve(overrides.comments?.reply, 200, responseFixtures.commentReply()),\n ),\n http.post(u(\"/api/v1/comments/:commentId/private-reply\"), () =>\n resolve(\n overrides.comments?.privateReply,\n 200,\n responseFixtures.commentReply(),\n ),\n ),\n\n // ----- Webhook subscriptions -----\n http.get(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.list,\n 200,\n responseFixtures.subscriptionList(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.create,\n 201,\n responseFixtures.subscriptionCreated(),\n ),\n ),\n http.patch(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.update,\n 200,\n responseFixtures.subscriptionList({ items: 1 }),\n ),\n ),\n http.delete(u(\"/api/v1/webhooks/subscriptions/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/webhooks/subscriptions/:id/rotate-secret\"), () =>\n resolve(\n overrides.webhooks?.subscriptions?.rotateSecret,\n 200,\n responseFixtures.rotatedSecret(),\n ),\n ),\n http.post(u(\"/api/v1/webhooks/test/:id\"), () =>\n resolve(overrides.webhooks?.subscriptions?.test, 200, {\n data: {\n enqueued: true,\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Webhook deliveries -----\n http.post(u(\"/api/v1/webhooks/deliveries/:id/replay\"), () =>\n resolve(overrides.webhooks?.deliveries?.replay, 200, {\n data: {\n enqueued: true,\n delivery_id: \"00000000-0000-0000-0000-000000000fff\",\n event_id: \"00000000-0000-0000-0000-000000000fff\",\n subscription_id: \"00000000-0000-0000-0000-000000000eee\",\n },\n meta: { profile_id: \"00000000-0000-0000-0000-000000000ccc\" },\n }),\n ),\n\n // ----- Connections -----\n http.get(u(\"/api/v1/connections\"), () =>\n resolve(overrides.connections?.list, 200, responseFixtures.connectionList()),\n ),\n http.get(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.get, 200, responseFixtures.connectionDetail()),\n ),\n http.delete(u(\"/api/v1/connections/:id\"), () =>\n resolve(overrides.connections?.revoke, 204, null),\n ),\n\n // ----- WhatsApp templates -----\n http.get(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.list, 200, responseFixtures.whatsappTemplateList()),\n ),\n http.post(u(\"/api/v1/whatsapp/templates\"), () =>\n resolve(overrides.whatsapp?.templates?.create, 201, responseFixtures.whatsappTemplateCreated()),\n ),\n http.delete(u(\"/api/v1/whatsapp/templates/:name\"), () =>\n resolve(overrides.whatsapp?.templates?.delete, 204, null),\n ),\n\n // ----- WhatsApp broadcasts -----\n http.get(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.list, 200, responseFixtures.whatsappBroadcastList()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.create, 201, responseFixtures.whatsappBroadcastCreated()),\n ),\n http.get(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.get, 200, responseFixtures.whatsappBroadcastDetail()),\n ),\n http.patch(u(\"/api/v1/whatsapp/broadcasts/:id\"), () =>\n resolve(overrides.whatsapp?.broadcasts?.cancel, 200, responseFixtures.whatsappBroadcastUpdated()),\n ),\n http.post(u(\"/api/v1/whatsapp/broadcasts/:id/send\"), () =>\n resolve(\n overrides.whatsapp?.broadcasts?.send,\n 200,\n responseFixtures.whatsappBroadcastUpdated({ status: \"completed\" }),\n ),\n ),\n\n // ----- Instagram triggers -----\n http.get(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.list, 200, responseFixtures.instagramTriggerList()),\n ),\n http.post(u(\"/api/v1/instagram/triggers\"), () =>\n resolve(overrides.instagram?.triggers?.create, 201, responseFixtures.instagramTriggerCreated()),\n ),\n http.patch(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.update, 200, responseFixtures.instagramTriggerCreated()),\n ),\n http.delete(u(\"/api/v1/instagram/triggers/:id\"), () =>\n resolve(overrides.instagram?.triggers?.delete, 204, null),\n ),\n http.post(u(\"/api/v1/instagram/triggers/:id/test-dm\"), () =>\n resolve(overrides.instagram?.triggers?.testDm, 200, responseFixtures.instagramTriggerTestDm()),\n ),\n http.post(u(\"/api/v1/instagram/triggers/resume\"), () =>\n resolve(overrides.instagram?.triggers?.resume, 200, responseFixtures.instagramTriggerResumed()),\n ),\n\n // ----- OAuth -----\n http.post(u(\"/oauth/token\"), () =>\n resolve(overrides.oauth?.token, 200, responseFixtures.oauthTokenResponse()),\n ),\n http.post(u(\"/oauth/revoke\"), () =>\n overrides.oauth?.revoke\n ? resolve(overrides.oauth.revoke, 200, null)\n : new HttpResponse(null, { status: 200 }),\n ),\n\n // ----- Admin -----\n http.post(u(\"/api/v1/admin/oauth-apps\"), () =>\n resolve(overrides.admin?.create, 201, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Test App\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n client_secret: \"test_client_secret_shown_once\",\n jwt_signing_secret: \"test_jwt_signing_secret_shown_once\",\n },\n }),\n ),\n http.patch(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.update, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n client_id: \"test-app\",\n name: \"Updated Name\",\n description: null,\n logo_url: null,\n redirect_uris: [\"https://example.com/cb\"],\n allowed_scopes: [\"whatsapp\", \"instagram\"],\n status: \"active\",\n created_at: new Date().toISOString(),\n },\n }),\n ),\n http.delete(u(\"/api/v1/admin/oauth-apps/:id\"), () =>\n resolve(overrides.admin?.suspend, 200, {\n data: {\n id: \"00000000-0000-0000-0000-000000000aaa\",\n status: \"suspended\",\n keys_revoked: 0,\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-client-secret\"), () =>\n resolve(overrides.admin?.rotateClientSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n client_secret: \"rotated_client_secret\",\n grace_days: 7,\n previous_client_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n http.post(u(\"/api/v1/admin/oauth-apps/:id/rotate-jwt-secret\"), () =>\n resolve(overrides.admin?.rotateJwtSecret, 200, {\n data: {\n oauth_app_id: \"00000000-0000-0000-0000-000000000aaa\",\n jwt_signing_secret: \"rotated_jwt_secret\",\n grace_days: 7,\n previous_jwt_signing_secret_expires_at: new Date(\n Date.now() + 7 * 86400_000,\n ).toISOString(),\n },\n }),\n ),\n ];\n}\n"]}
|
package/package.json
CHANGED