kiriminaja 0.1.4 → 0.1.5

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
@@ -4,31 +4,26 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dw/kiriminaja)](https://www.npmjs.com/package/kiriminaja)
5
5
  [![license](https://img.shields.io/github/license/kiriminaja/node)](LICENSE)
6
6
 
7
+ Framework-agnostic JavaScript/TypeScript SDK for the [KiriminAja](https://kiriminaja.com) logistics API. Works with Node.js, Bun, Deno, and any runtime that supports the Fetch API — including Nuxt/Nitro via the included h3 adapter.
8
+
7
9
  ## Requirements
8
10
 
9
- - Node.js 18+ (has built-in `fetch`), or provide `fetch` via `KiriminAja.init({ fetch })`
11
+ - Node.js 18+, Bun, or Deno (built-in `fetch`); or pass a custom `fetch` via `KiriminAja.init({ fetch })`
10
12
 
11
13
  ## Installation
12
14
 
13
15
  ```bash
14
16
  npm install kiriminaja
17
+ # yarn add kiriminaja
18
+ # pnpm add kiriminaja
19
+ # bun add kiriminaja
15
20
  ```
16
21
 
17
- ```bash
18
- yarn add kiriminaja
19
- ```
20
-
21
- ```bash
22
- pnpm add kiriminaja
23
- ```
24
-
25
- ```bash
26
- bun add kiriminaja
27
- ```
22
+ ---
28
23
 
29
- ## Setup
24
+ ## Quick Start
30
25
 
31
- Initialize once, then use any endpoint.
26
+ Call `KiriminAja.init()` once at app startup, then call any service method anywhere.
32
27
 
33
28
  ```ts
34
29
  import KiriminAja, { KAEnv } from "kiriminaja";
@@ -37,56 +32,205 @@ KiriminAja.init({
37
32
  env: KAEnv.SANDBOX, // or KAEnv.PRODUCTION
38
33
  apiKey: process.env.KIRIMINAJA_API_KEY,
39
34
  });
35
+
36
+ // Use any service
37
+ const provinces = await KiriminAja.address.provinces();
40
38
  ```
41
39
 
42
- If you need to override the base URL:
40
+ ---
41
+
42
+ ## Init Options
43
+
44
+ | Option | Type | Default | Description |
45
+ | --------- | ----------- | ------------------ | ------------------------------------- |
46
+ | `env` | `KAEnv` | `KAEnv.SANDBOX` | Target environment |
47
+ | `apiKey` | `string` | — | Your KiriminAja API key |
48
+ | `baseUrl` | `string` | Derived from `env` | Override the base URL |
49
+ | `fetch` | `FetchLike` | `globalThis.fetch` | Custom fetch (polyfill / test mock) |
50
+ | `headers` | `object` | — | Extra headers sent with every request |
43
51
 
44
52
  ```ts
53
+ // Custom base URL
45
54
  KiriminAja.init({
46
55
  baseUrl: "https://tdev.kiriminaja.com",
47
56
  apiKey: process.env.KIRIMINAJA_API_KEY,
48
57
  });
58
+
59
+ // Node.js < 18 — bring your own fetch
60
+ import fetch from "node-fetch";
61
+ KiriminAja.init({ apiKey: "...", fetch });
49
62
  ```
50
63
 
51
- If you are on Node.js < 18, pass a `fetch` implementation:
64
+ ---
65
+
66
+ ## Services
67
+
68
+ ### Address
52
69
 
53
70
  ```ts
54
- import KiriminAja from "kiriminaja";
71
+ // List all provinces
72
+ await KiriminAja.address.provinces();
55
73
 
56
- KiriminAja.init({
57
- apiKey: process.env.KIRIMINAJA_API_KEY,
58
- fetch, // provide your own fetch polyfill
74
+ // Cities in a province (provinsi_id)
75
+ await KiriminAja.address.cities(5);
76
+
77
+ // Districts in a city (kabupaten_id)
78
+ await KiriminAja.address.districts(12);
79
+
80
+ // Sub-districts in a district (kecamatan_id)
81
+ await KiriminAja.address.subDistricts(77);
82
+
83
+ // Search districts by name
84
+ await KiriminAja.address.districtsByName("jakarta");
85
+ ```
86
+
87
+ ---
88
+
89
+ ### Coverage Area & Pricing
90
+
91
+ ```ts
92
+ // Express shipping rates
93
+ await KiriminAja.coverageArea.pricingExpress({
94
+ origin: 1,
95
+ destination: 2,
96
+ weight: 1000, // grams
97
+ item_value: 50000,
98
+ insurance: 0,
99
+ courier: ["jne", "jnt"],
100
+ });
101
+
102
+ // Instant (same-day) rates
103
+ await KiriminAja.coverageArea.pricingInstant({
104
+ service: ["instant"],
105
+ item_price: 10000,
106
+ origin: { lat: -6.2, long: 106.8, address: "Jl. Sudirman No.1" },
107
+ destination: { lat: -6.21, long: 106.81, address: "Jl. Thamrin No.5" },
108
+ weight: 1000,
109
+ vehicle: "bike",
110
+ timezone: "Asia/Jakarta",
59
111
  });
60
112
  ```
61
113
 
62
- ## Usage
114
+ ---
63
115
 
64
- Coverage area:
116
+ ### Order — Express
65
117
 
66
118
  ```ts
67
- const provinces = await KiriminAja.address.provinces();
68
- const cities = await KiriminAja.address.cities(5);
119
+ // Track by AWB
120
+ await KiriminAja.order.express.track("AWB123456");
121
+
122
+ // Cancel
123
+ await KiriminAja.order.express.cancel("AWB123456", "Customer request");
124
+
125
+ // Request pickup (v5)
126
+ await KiriminAja.order.express.requestPickupV5(payload);
127
+
128
+ // Request pickup (v6.1)
129
+ await KiriminAja.order.express.requestPickupV61(payload);
69
130
  ```
70
131
 
71
- Order:
132
+ ---
133
+
134
+ ### Order — Instant
72
135
 
73
136
  ```ts
74
- const tracking = await KiriminAja.order.express.track("ORDER_ID");
75
- const instantTracking = await KiriminAja.order.instant.track("ORDER_ID");
137
+ // Create instant pickup
138
+ await KiriminAja.order.instant.create(payload);
139
+
140
+ // Find a new driver for an existing order
141
+ await KiriminAja.order.instant.findNewDriver(orderId);
142
+
143
+ // Cancel instant order
144
+ await KiriminAja.order.instant.cancel(orderId);
145
+
146
+ // Track instant order
147
+ await KiriminAja.order.instant.track(orderId);
76
148
  ```
77
149
 
78
- ## Development
150
+ ---
79
151
 
80
- To install dependencies:
152
+ ### Courier
81
153
 
82
- ```bash
83
- bun install
154
+ ```ts
155
+ // List available couriers
156
+ await KiriminAja.courier.list();
157
+
158
+ // Courier groups
159
+ await KiriminAja.courier.group();
160
+
161
+ // Courier detail
162
+ await KiriminAja.courier.detail(courierId);
163
+
164
+ // Update whitelist services
165
+ await KiriminAja.courier.setWhitelistServices(payload);
84
166
  ```
85
167
 
86
- To run:
168
+ ---
87
169
 
88
- ```bash
89
- bun run index.ts
170
+ ### Pickup Schedules
171
+
172
+ ```ts
173
+ await KiriminAja.pickup.schedules();
90
174
  ```
91
175
 
92
- This project was created using `bun init` in bun v1.3.3. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
176
+ ---
177
+
178
+ ### Payment
179
+
180
+ ```ts
181
+ await KiriminAja.payment.getPayment(orderId);
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Nuxt / Nitro (h3 Adapter)
187
+
188
+ The `kiriminaja/adapters/h3` sub-package wraps `init()` into a Nitro server plugin and provides a `useKiriminAja()` composable for event handlers — no extra dependencies required.
189
+
190
+ ### 1. Add your API key to runtime config
191
+
192
+ ```ts
193
+ // nuxt.config.ts
194
+ export default defineNuxtConfig({
195
+ runtimeConfig: {
196
+ kiriminajaApiKey: process.env.KIRIMINAJA_API_KEY,
197
+ },
198
+ });
199
+ ```
200
+
201
+ ### 2. Create a server plugin
202
+
203
+ ```ts
204
+ // server/plugins/kiriminaja.ts
205
+ import { defineKiriminAjaPlugin, KAEnv } from "kiriminaja/adapters/h3";
206
+
207
+ export default defineKiriminAjaPlugin(() => ({
208
+ apiKey: useRuntimeConfig().kiriminajaApiKey,
209
+ env: KAEnv.PRODUCTION,
210
+ }));
211
+ ```
212
+
213
+ > Pass a **factory function** (as above) when you need `useRuntimeConfig()` — it is called lazily when the plugin boots, not at import time. A plain options object also works if you read the key from `process.env` directly.
214
+
215
+ ### 3. Use in server routes
216
+
217
+ ```ts
218
+ // server/api/rates.post.ts
219
+ import { useKiriminAja } from "kiriminaja/adapters/h3";
220
+
221
+ export default defineEventHandler(async (event) => {
222
+ const body = await readBody(event);
223
+ const { coverageArea } = useKiriminAja();
224
+ return coverageArea.pricingExpress(body);
225
+ });
226
+ ```
227
+
228
+ ---
229
+
230
+ ## Development
231
+
232
+ ```bash
233
+ bun install # install dependencies
234
+ bun test # run tests
235
+ bun run build # compile to dist/
236
+ ```
@@ -0,0 +1,98 @@
1
+ import { type InitOptions } from "../config/client.js";
2
+ import { KAEnv } from "../config/api.js";
3
+ export { KAEnv };
4
+ /**
5
+ * Creates a Nitro/h3 server plugin that initializes the KiriminAja SDK.
6
+ *
7
+ * Accepts either a plain options object or a factory function — use the
8
+ * factory form when you need to read Nuxt runtime config lazily (i.e. inside
9
+ * the plugin callback where `useRuntimeConfig()` is available).
10
+ *
11
+ * @example Plain options
12
+ * ```ts
13
+ * // server/plugins/kiriminaja.ts
14
+ * import { defineKiriminAjaPlugin, KAEnv } from 'kiriminaja/adapters/h3'
15
+ *
16
+ * export default defineKiriminAjaPlugin({
17
+ * apiKey: process.env.KIRIMINAJA_API_KEY,
18
+ * env: KAEnv.PRODUCTION,
19
+ * })
20
+ * ```
21
+ *
22
+ * @example With Nuxt runtime config
23
+ * ```ts
24
+ * // server/plugins/kiriminaja.ts
25
+ * import { defineKiriminAjaPlugin, KAEnv } from 'kiriminaja/adapters/h3'
26
+ * import { useRuntimeConfig } from '#imports'
27
+ *
28
+ * export default defineKiriminAjaPlugin(() => ({
29
+ * apiKey: useRuntimeConfig().kiriminajaApiKey,
30
+ * env: KAEnv.PRODUCTION,
31
+ * }))
32
+ * ```
33
+ */
34
+ export declare const defineKiriminAjaPlugin: (options: InitOptions | (() => InitOptions)) => () => void;
35
+ /**
36
+ * Returns the KiriminAja service methods for use inside Nitro/h3 event
37
+ * handlers or Nuxt server routes.
38
+ *
39
+ * The SDK **must** have been initialized (via `defineKiriminAjaPlugin`) before
40
+ * any service method is called.
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * // server/api/rates.post.ts
45
+ * import { useKiriminAja } from 'kiriminaja/adapters/h3'
46
+ *
47
+ * export default defineEventHandler(async (event) => {
48
+ * const { coverageArea } = useKiriminAja()
49
+ * const body = await readBody(event)
50
+ * return coverageArea.pricingExpress(body)
51
+ * })
52
+ * ```
53
+ */
54
+ export declare const useKiriminAja: () => {
55
+ address: {
56
+ provinces: () => Promise<import("../types/coverage-area.responses.js").ProvinceListResponse>;
57
+ cities: (provinsiId: number) => Promise<import("../types/coverage-area.responses.js").CityListResponse>;
58
+ districts: (kabupatenId: number) => Promise<import("../types/coverage-area.responses.js").DistrictListResponse>;
59
+ subDistricts: (kecamatanId: number) => Promise<import("../types/coverage-area.responses.js").SubDistrictListResponse>;
60
+ districtsByName: (search: string) => Promise<import("../types/coverage-area.responses.js").DistrictByNameResponse>;
61
+ };
62
+ coverageArea: {
63
+ pricingExpress: <T = unknown>(payload: import("../services/coverage-area/pricing-express.js").PricingExpressPayload) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
64
+ pricingInstant: <T = unknown>(payload: import("../services/coverage-area/pricing-instant.js").PricingInstantPayload) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
65
+ provinces: () => Promise<import("../types/coverage-area.responses.js").ProvinceListResponse>;
66
+ cities: (provinsiId: number) => Promise<import("../types/coverage-area.responses.js").CityListResponse>;
67
+ districts: (kabupatenId: number) => Promise<import("../types/coverage-area.responses.js").DistrictListResponse>;
68
+ subDistricts: (kecamatanId: number) => Promise<import("../types/coverage-area.responses.js").SubDistrictListResponse>;
69
+ districtsByName: (search: string) => Promise<import("../types/coverage-area.responses.js").DistrictByNameResponse>;
70
+ };
71
+ order: {
72
+ express: {
73
+ track: (orderId: string) => Promise<import("../types/order.responses.js").ExpressTrackingResponse>;
74
+ cancel: (awb: string, reason: string) => Promise<import("../types/order.responses.js").CancelExpressOrderResponse>;
75
+ requestPickupV5: (payload: unknown) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
76
+ requestPickupV61: (payload: unknown) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
77
+ };
78
+ instant: {
79
+ create: (payload: unknown) => Promise<unknown>;
80
+ findNewDriver: (orderId: string) => Promise<unknown>;
81
+ cancel: (orderId: string) => Promise<import("../types/order.responses.js").CancelInstantOrderResponse>;
82
+ track: (orderId: string) => Promise<import("../types/order.responses.js").InstantTrackingResponse>;
83
+ };
84
+ };
85
+ pickup: {
86
+ schedules: () => Promise<import("../types/pickup.responses.js").PickupSchedulesResponse>;
87
+ };
88
+ payment: {
89
+ getPayment: (paymentId: string) => Promise<import("../types/payment.responses.js").GetPaymentResponse>;
90
+ };
91
+ courier: {
92
+ list: () => Promise<import("../types/courier.js").CourierListResponse>;
93
+ group: () => Promise<import("../types/courier.js").CourierGroupResponse>;
94
+ detail: (courierCode: string) => Promise<import("../types/courier.js").CourierDetailResponse>;
95
+ setWhitelistServices: (services: string[]) => Promise<import("../types/courier.js").SetCourierPreferenceResponse>;
96
+ };
97
+ };
98
+ //# sourceMappingURL=h3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h3.d.ts","sourceRoot":"","sources":["../../src/adapters/h3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,sBAAsB,GAC/B,SAAS,WAAW,GAAG,CAAC,MAAM,WAAW,CAAC,eAM7C,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAiB,CAAC"}
@@ -0,0 +1,61 @@
1
+ import { init } from "../config/client.js";
2
+ import { services } from "../services/index.js";
3
+ import { KAEnv } from "../config/api.js";
4
+ export { KAEnv };
5
+ /**
6
+ * Creates a Nitro/h3 server plugin that initializes the KiriminAja SDK.
7
+ *
8
+ * Accepts either a plain options object or a factory function — use the
9
+ * factory form when you need to read Nuxt runtime config lazily (i.e. inside
10
+ * the plugin callback where `useRuntimeConfig()` is available).
11
+ *
12
+ * @example Plain options
13
+ * ```ts
14
+ * // server/plugins/kiriminaja.ts
15
+ * import { defineKiriminAjaPlugin, KAEnv } from 'kiriminaja/adapters/h3'
16
+ *
17
+ * export default defineKiriminAjaPlugin({
18
+ * apiKey: process.env.KIRIMINAJA_API_KEY,
19
+ * env: KAEnv.PRODUCTION,
20
+ * })
21
+ * ```
22
+ *
23
+ * @example With Nuxt runtime config
24
+ * ```ts
25
+ * // server/plugins/kiriminaja.ts
26
+ * import { defineKiriminAjaPlugin, KAEnv } from 'kiriminaja/adapters/h3'
27
+ * import { useRuntimeConfig } from '#imports'
28
+ *
29
+ * export default defineKiriminAjaPlugin(() => ({
30
+ * apiKey: useRuntimeConfig().kiriminajaApiKey,
31
+ * env: KAEnv.PRODUCTION,
32
+ * }))
33
+ * ```
34
+ */
35
+ export const defineKiriminAjaPlugin = (options) => {
36
+ return () => {
37
+ const resolved = typeof options === "function" ? options() : options;
38
+ init(resolved);
39
+ };
40
+ };
41
+ /**
42
+ * Returns the KiriminAja service methods for use inside Nitro/h3 event
43
+ * handlers or Nuxt server routes.
44
+ *
45
+ * The SDK **must** have been initialized (via `defineKiriminAjaPlugin`) before
46
+ * any service method is called.
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * // server/api/rates.post.ts
51
+ * import { useKiriminAja } from 'kiriminaja/adapters/h3'
52
+ *
53
+ * export default defineEventHandler(async (event) => {
54
+ * const { coverageArea } = useKiriminAja()
55
+ * const body = await readBody(event)
56
+ * return coverageArea.pricingExpress(body)
57
+ * })
58
+ * ```
59
+ */
60
+ export const useKiriminAja = () => services;
61
+ //# sourceMappingURL=h3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h3.js","sourceRoot":"","sources":["../../src/adapters/h3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,OAA0C,EAC5C,EAAE;IACA,OAAO,GAAG,EAAE;QACR,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC;AACN,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kiriminaja",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "module": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "license": "MIT",
@@ -12,6 +12,10 @@
12
12
  ".": {
13
13
  "types": "./dist/index.d.ts",
14
14
  "import": "./dist/index.js"
15
+ },
16
+ "./adapters/h3": {
17
+ "types": "./dist/adapters/h3.d.ts",
18
+ "import": "./dist/adapters/h3.js"
15
19
  }
16
20
  },
17
21
  "files": [