@kirimdev/sdk 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,97 +1,98 @@
1
- # @kirimdev/sdk
2
-
3
- Official TypeScript SDK for the [Kirim](https://kirim.chat) Public API.
4
-
5
- ## Install
6
-
7
- ```bash
8
- npm install @kirimdev/sdk
9
- # or
10
- bun add @kirimdev/sdk
11
- ```
12
-
13
- ## Quickstart
14
-
15
- ```ts
16
- import { Kirim } from '@kirimdev/sdk'
17
-
18
- const kirim = new Kirim({ apiKey: process.env.KIRIM_API_KEY! })
19
-
20
- // Scope to a WhatsApp phone number (Meta `business_phone_number_id`).
21
- // Look it up via `kirim.accounts.list()` if you don't have it handy.
22
- const phone = kirim.phoneNumbers('106540352242922')
23
-
24
- // Send a message
25
- const msg = await phone.messages.send({
26
- to: '628123456789',
27
- type: 'text',
28
- text: { body: 'Halo dari SDK!' },
29
- })
30
-
31
- // Paginate
32
- for await (const m of phone.messages.list({ limit: 50 })) {
33
- console.log(m.id, m.status)
34
- }
35
- ```
36
-
37
- ## Webhook verification
38
-
39
- `verifyWebhookSignature` parses the `X-Kirim-Signature` header (Stripe-style
40
- `t=<unix>,v1=<hex>` format), checks the timestamp against a tolerance window,
41
- verifies the HMAC-SHA256 against one or more active secrets (supports rotation),
42
- and returns the parsed JSON body. It **throws** on every failure mode — never
43
- returns `false`. Uses Web Crypto so it runs unchanged on Node 18+, Bun, Deno,
44
- and edge runtimes.
45
-
46
- ```ts
47
- import { verifyWebhookSignature, InvalidSignatureError } from '@kirimdev/sdk/webhooks'
48
-
49
- export async function POST(req: Request) {
50
- const rawBody = await req.text()
51
- try {
52
- const event = await verifyWebhookSignature({
53
- rawBody,
54
- signatureHeader: req.headers.get('x-kirim-signature'),
55
- secrets: [process.env.KIRIM_WEBHOOK_SECRET!],
56
- })
57
- // event is KirimWebhookEvent — narrow on event.type or event.object
58
- return new Response('ok')
59
- } catch (err) {
60
- if (err instanceof InvalidSignatureError) return new Response('bad sig', { status: 401 })
61
- throw err
62
- }
63
- }
64
- ```
65
-
66
- Errors thrown (all extend `KirimWebhookError`):
67
-
68
- - `InvalidSignatureError` — header missing/malformed, or no `v1=` matched any provided secret
69
- - `SignatureExpiredError` — `|now - t|` exceeds `toleranceSeconds` (default 300s)
70
- - `MalformedPayloadError` — signature matched but body is not valid JSON
71
-
72
- ## Features
73
-
74
- - Full coverage of the Kirim `/v1` API (~35 endpoints)
75
- - Type-safe generated from the live OpenAPI 3.1 spec
76
- - Automatic retries with exponential backoff (429, 5xx, network errors)
77
- - Automatic `Idempotency-Key` injection for POST requests
78
- - Async iterator pagination (`for await ... of kirim.messages.list(...)`)
79
- - Typed error class hierarchy keyed off stable API error codes
80
- - Webhook HMAC-SHA256 verifier
81
- - Zero Node-specific dependencies — works in Node 18+, Bun, Deno
82
-
83
- ## Configuration
84
-
85
- ```ts
86
- new Kirim({
87
- apiKey: 'kdv_live_...', // required
88
- baseUrl: 'https://api.kirim.chat/v1', // optional
89
- timeout: 30_000, // ms, default 30s
90
- maxRetries: 2, // default 2
91
- fetch: globalThis.fetch, // injectable for testing
92
- })
93
- ```
94
-
95
- ## License
96
-
97
- MIT
1
+ # @kirimdev/sdk
2
+
3
+ Official TypeScript SDK for the [Kirimdev](https://kirimdev.com) Public API.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @kirimdev/sdk
9
+ # or
10
+ bun add @kirimdev/sdk
11
+ ```
12
+
13
+ ## Quickstart
14
+
15
+ ```ts
16
+ import { Kirim } from '@kirimdev/sdk'
17
+
18
+ const kirim = new Kirim({ apiKey: process.env.KIRIM_API_KEY! })
19
+
20
+ // Scope to a WhatsApp phone number (Meta `business_phone_number_id`).
21
+ // Look it up via `kirim.accounts.list()` if you don't have it handy.
22
+ const phone = kirim.phoneNumbers('106540352242922')
23
+
24
+ // Send a message
25
+ const msg = await phone.messages.send({
26
+ messaging_product: 'whatsapp',
27
+ to: '628123456789',
28
+ type: 'text',
29
+ text: { body: 'Halo dari SDK!' },
30
+ })
31
+
32
+ // Paginate
33
+ for await (const m of phone.messages.list({ limit: 50 })) {
34
+ console.log(m.id, m.status)
35
+ }
36
+ ```
37
+
38
+ ## Webhook verification
39
+
40
+ `verifyWebhookSignature` parses the `X-Kirim-Signature` header (Stripe-style
41
+ `t=<unix>,v1=<hex>` format), checks the timestamp against a tolerance window,
42
+ verifies the HMAC-SHA256 against one or more active secrets (supports rotation),
43
+ and returns the parsed JSON body. It **throws** on every failure mode never
44
+ returns `false`. Uses Web Crypto so it runs unchanged on Node 18+, Bun, Deno,
45
+ and edge runtimes.
46
+
47
+ ```ts
48
+ import { verifyWebhookSignature, InvalidSignatureError } from '@kirimdev/sdk/webhooks'
49
+
50
+ export async function POST(req: Request) {
51
+ const rawBody = await req.text()
52
+ try {
53
+ const event = await verifyWebhookSignature({
54
+ rawBody,
55
+ signatureHeader: req.headers.get('x-kirim-signature'),
56
+ secrets: [process.env.KIRIM_WEBHOOK_SECRET!],
57
+ })
58
+ // event is KirimWebhookEvent — narrow on event.type or event.object
59
+ return new Response('ok')
60
+ } catch (err) {
61
+ if (err instanceof InvalidSignatureError) return new Response('bad sig', { status: 401 })
62
+ throw err
63
+ }
64
+ }
65
+ ```
66
+
67
+ Errors thrown (all extend `KirimWebhookError`):
68
+
69
+ - `InvalidSignatureError` — header missing/malformed, or no `v1=` matched any provided secret
70
+ - `SignatureExpiredError` — `|now - t|` exceeds `toleranceSeconds` (default 300s)
71
+ - `MalformedPayloadError` — signature matched but body is not valid JSON
72
+
73
+ ## Features
74
+
75
+ - Full coverage of the Kirimdev `/v1` API (~35 endpoints)
76
+ - Type-safe generated from the live OpenAPI 3.1 spec
77
+ - Automatic retries with exponential backoff (429, 5xx, network errors)
78
+ - Automatic `Idempotency-Key` injection for POST requests
79
+ - Async iterator pagination (`for await ... of kirim.messages.list(...)`)
80
+ - Typed error class hierarchy keyed off stable API error codes
81
+ - Webhook HMAC-SHA256 verifier
82
+ - Zero Node-specific dependencies — works in Node 18+, Bun, Deno
83
+
84
+ ## Configuration
85
+
86
+ ```ts
87
+ new Kirim({
88
+ apiKey: 'kdv_live_...', // required
89
+ baseUrl: 'https://api.kirimdev.com/v1', // optional
90
+ timeout: 30_000, // ms, default 30s
91
+ maxRetries: 2, // default 2
92
+ fetch: globalThis.fetch, // injectable for testing
93
+ })
94
+ ```
95
+
96
+ ## License
97
+
98
+ MIT
package/dist/client.js CHANGED
@@ -24,7 +24,7 @@ import { PhoneNumberClient } from './resources/phone-number.js';
24
24
  import { WebhookDeliveriesResource } from './resources/webhook-deliveries.js';
25
25
  import { WebhookSubscriptionsResource } from './resources/webhook-subscriptions.js';
26
26
  export const SDK_VERSION = '2.0.0';
27
- const DEFAULT_BASE_URL = 'https://api.kirim.chat/v1';
27
+ const DEFAULT_BASE_URL = 'https://api.kirimdev.com/v1';
28
28
  const DEFAULT_TIMEOUT_MS = 30_000;
29
29
  const DEFAULT_MAX_RETRIES = 2;
30
30
  export class Kirim {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}