kiriminaja 0.1.4 → 0.1.6
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 +207 -35
- package/dist/adapters/h3.d.ts +120 -0
- package/dist/adapters/h3.d.ts.map +1 -0
- package/dist/adapters/h3.js +86 -0
- package/dist/adapters/h3.js.map +1 -0
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -4,31 +4,26 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/kiriminaja)
|
|
5
5
|
[](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
|
|
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
|
-
|
|
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
|
-
##
|
|
24
|
+
## Quick Start
|
|
30
25
|
|
|
31
|
-
|
|
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,233 @@ 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
|
-
|
|
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
|
-
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Services
|
|
67
|
+
|
|
68
|
+
### Address
|
|
52
69
|
|
|
53
70
|
```ts
|
|
54
|
-
|
|
71
|
+
// List all provinces
|
|
72
|
+
await KiriminAja.address.provinces();
|
|
55
73
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
114
|
+
---
|
|
63
115
|
|
|
64
|
-
|
|
116
|
+
### Order — Express
|
|
65
117
|
|
|
66
118
|
```ts
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
### Order — Instant
|
|
72
135
|
|
|
73
136
|
```ts
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
150
|
+
---
|
|
79
151
|
|
|
80
|
-
|
|
152
|
+
### Courier
|
|
81
153
|
|
|
82
|
-
```
|
|
83
|
-
|
|
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
|
-
|
|
168
|
+
---
|
|
87
169
|
|
|
88
|
-
|
|
89
|
-
|
|
170
|
+
### Pickup Schedules
|
|
171
|
+
|
|
172
|
+
```ts
|
|
173
|
+
await KiriminAja.pickup.schedules();
|
|
90
174
|
```
|
|
91
175
|
|
|
92
|
-
|
|
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
|
+
## Per-user / Per-request API Keys
|
|
231
|
+
|
|
232
|
+
If each user has their own KiriminAja API key, pass it directly to `useKiriminAja({ apiKey })`. No wrapper function needed — the key is scoped to that call and its entire async chain via `AsyncLocalStorage` internally, so concurrent requests are fully isolated.
|
|
233
|
+
|
|
234
|
+
```ts
|
|
235
|
+
// server/api/rates.post.ts
|
|
236
|
+
import { useKiriminAja } from "kiriminaja/adapters/h3";
|
|
237
|
+
|
|
238
|
+
export default defineEventHandler(async (event) => {
|
|
239
|
+
const user = await requireAuthUser(event);
|
|
240
|
+
const body = await readBody(event);
|
|
241
|
+
|
|
242
|
+
const { coverageArea } = useKiriminAja({ apiKey: user.kiriminajaApiKey });
|
|
243
|
+
return coverageArea.pricingExpress(body);
|
|
244
|
+
});
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
Works on nested namespaces too:
|
|
248
|
+
|
|
249
|
+
```ts
|
|
250
|
+
const { order } = useKiriminAja({ apiKey: user.kiriminajaApiKey });
|
|
251
|
+
await order.express.track("AWB123");
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Calls made without `{ apiKey }` fall back to the key set in `defineKiriminAjaPlugin`.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Development
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
bun install # install dependencies
|
|
262
|
+
bun test # run tests
|
|
263
|
+
bun run build # compile to dist/
|
|
264
|
+
```
|
|
@@ -0,0 +1,120 @@
|
|
|
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 (shared API key)
|
|
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
|
+
export type UseKiriminAjaOptions = {
|
|
36
|
+
apiKey?: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Returns the KiriminAja service methods for use inside Nitro/h3 event
|
|
40
|
+
* handlers or Nuxt server routes.
|
|
41
|
+
*
|
|
42
|
+
* - **No arguments** — uses the API key configured via `defineKiriminAjaPlugin`.
|
|
43
|
+
* - **`{ apiKey }`** — overrides the Authorization header for every service
|
|
44
|
+
* call made on the returned object. Safe for concurrent requests; each call
|
|
45
|
+
* runs in its own `AsyncLocalStorage` context so keys never bleed across
|
|
46
|
+
* requests.
|
|
47
|
+
*
|
|
48
|
+
* The SDK **must** have been initialized (via `defineKiriminAjaPlugin`) before
|
|
49
|
+
* any service method is called.
|
|
50
|
+
*
|
|
51
|
+
* @example Shared API key (from plugin)
|
|
52
|
+
* ```ts
|
|
53
|
+
* // server/api/rates.post.ts
|
|
54
|
+
* import { useKiriminAja } from 'kiriminaja/adapters/h3'
|
|
55
|
+
*
|
|
56
|
+
* export default defineEventHandler(async (event) => {
|
|
57
|
+
* const { coverageArea } = useKiriminAja()
|
|
58
|
+
* const body = await readBody(event)
|
|
59
|
+
* return coverageArea.pricingExpress(body)
|
|
60
|
+
* })
|
|
61
|
+
* ```
|
|
62
|
+
*
|
|
63
|
+
* @example Per-user API key
|
|
64
|
+
* ```ts
|
|
65
|
+
* // server/api/rates.post.ts
|
|
66
|
+
* import { useKiriminAja } from 'kiriminaja/adapters/h3'
|
|
67
|
+
*
|
|
68
|
+
* export default defineEventHandler(async (event) => {
|
|
69
|
+
* const user = await requireAuthUser(event)
|
|
70
|
+
* const body = await readBody(event)
|
|
71
|
+
* const { coverageArea } = useKiriminAja({ apiKey: user.kiriminajaApiKey })
|
|
72
|
+
* return coverageArea.pricingExpress(body)
|
|
73
|
+
* })
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare const useKiriminAja: (options?: UseKiriminAjaOptions) => {
|
|
77
|
+
address: {
|
|
78
|
+
provinces: () => Promise<import("../types/coverage-area.responses.js").ProvinceListResponse>;
|
|
79
|
+
cities: (provinsiId: number) => Promise<import("../types/coverage-area.responses.js").CityListResponse>;
|
|
80
|
+
districts: (kabupatenId: number) => Promise<import("../types/coverage-area.responses.js").DistrictListResponse>;
|
|
81
|
+
subDistricts: (kecamatanId: number) => Promise<import("../types/coverage-area.responses.js").SubDistrictListResponse>;
|
|
82
|
+
districtsByName: (search: string) => Promise<import("../types/coverage-area.responses.js").DistrictByNameResponse>;
|
|
83
|
+
};
|
|
84
|
+
coverageArea: {
|
|
85
|
+
pricingExpress: <T = unknown>(payload: import("../services/coverage-area/pricing-express.js").PricingExpressPayload) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
|
|
86
|
+
pricingInstant: <T = unknown>(payload: import("../services/coverage-area/pricing-instant.js").PricingInstantPayload) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
|
|
87
|
+
provinces: () => Promise<import("../types/coverage-area.responses.js").ProvinceListResponse>;
|
|
88
|
+
cities: (provinsiId: number) => Promise<import("../types/coverage-area.responses.js").CityListResponse>;
|
|
89
|
+
districts: (kabupatenId: number) => Promise<import("../types/coverage-area.responses.js").DistrictListResponse>;
|
|
90
|
+
subDistricts: (kecamatanId: number) => Promise<import("../types/coverage-area.responses.js").SubDistrictListResponse>;
|
|
91
|
+
districtsByName: (search: string) => Promise<import("../types/coverage-area.responses.js").DistrictByNameResponse>;
|
|
92
|
+
};
|
|
93
|
+
order: {
|
|
94
|
+
express: {
|
|
95
|
+
track: (orderId: string) => Promise<import("../types/order.responses.js").ExpressTrackingResponse>;
|
|
96
|
+
cancel: (awb: string, reason: string) => Promise<import("../types/order.responses.js").CancelExpressOrderResponse>;
|
|
97
|
+
requestPickupV5: (payload: unknown) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
|
|
98
|
+
requestPickupV61: (payload: unknown) => Promise<import("../types/api-response.js").KAResponse<unknown>>;
|
|
99
|
+
};
|
|
100
|
+
instant: {
|
|
101
|
+
create: (payload: unknown) => Promise<unknown>;
|
|
102
|
+
findNewDriver: (orderId: string) => Promise<unknown>;
|
|
103
|
+
cancel: (orderId: string) => Promise<import("../types/order.responses.js").CancelInstantOrderResponse>;
|
|
104
|
+
track: (orderId: string) => Promise<import("../types/order.responses.js").InstantTrackingResponse>;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
pickup: {
|
|
108
|
+
schedules: () => Promise<import("../types/pickup.responses.js").PickupSchedulesResponse>;
|
|
109
|
+
};
|
|
110
|
+
payment: {
|
|
111
|
+
getPayment: (paymentId: string) => Promise<import("../types/payment.responses.js").GetPaymentResponse>;
|
|
112
|
+
};
|
|
113
|
+
courier: {
|
|
114
|
+
list: () => Promise<import("../types/courier.js").CourierListResponse>;
|
|
115
|
+
group: () => Promise<import("../types/courier.js").CourierGroupResponse>;
|
|
116
|
+
detail: (courierCode: string) => Promise<import("../types/courier.js").CourierDetailResponse>;
|
|
117
|
+
setWhitelistServices: (services: string[]) => Promise<import("../types/courier.js").SetCourierPreferenceResponse>;
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
//# 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,EAAmB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAExE,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,MAAM,MAAM,oBAAoB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,aAAa,GAAI,UAAU,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAM3D,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { init, getConfig } 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 (shared API key)
|
|
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
|
+
* - **No arguments** — uses the API key configured via `defineKiriminAjaPlugin`.
|
|
46
|
+
* - **`{ apiKey }`** — overrides the Authorization header for every service
|
|
47
|
+
* call made on the returned object. Safe for concurrent requests; each call
|
|
48
|
+
* runs in its own `AsyncLocalStorage` context so keys never bleed across
|
|
49
|
+
* requests.
|
|
50
|
+
*
|
|
51
|
+
* The SDK **must** have been initialized (via `defineKiriminAjaPlugin`) before
|
|
52
|
+
* any service method is called.
|
|
53
|
+
*
|
|
54
|
+
* @example Shared API key (from plugin)
|
|
55
|
+
* ```ts
|
|
56
|
+
* // server/api/rates.post.ts
|
|
57
|
+
* import { useKiriminAja } from 'kiriminaja/adapters/h3'
|
|
58
|
+
*
|
|
59
|
+
* export default defineEventHandler(async (event) => {
|
|
60
|
+
* const { coverageArea } = useKiriminAja()
|
|
61
|
+
* const body = await readBody(event)
|
|
62
|
+
* return coverageArea.pricingExpress(body)
|
|
63
|
+
* })
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* @example Per-user API key
|
|
67
|
+
* ```ts
|
|
68
|
+
* // server/api/rates.post.ts
|
|
69
|
+
* import { useKiriminAja } from 'kiriminaja/adapters/h3'
|
|
70
|
+
*
|
|
71
|
+
* export default defineEventHandler(async (event) => {
|
|
72
|
+
* const user = await requireAuthUser(event)
|
|
73
|
+
* const body = await readBody(event)
|
|
74
|
+
* const { coverageArea } = useKiriminAja({ apiKey: user.kiriminajaApiKey })
|
|
75
|
+
* return coverageArea.pricingExpress(body)
|
|
76
|
+
* })
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
export const useKiriminAja = (options) => {
|
|
80
|
+
if (options?.apiKey) {
|
|
81
|
+
const current = getConfig();
|
|
82
|
+
init({ ...current, apiKey: options.apiKey });
|
|
83
|
+
}
|
|
84
|
+
return services;
|
|
85
|
+
};
|
|
86
|
+
//# 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,EAAE,SAAS,EAAoB,MAAM,qBAAqB,CAAC;AACxE,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;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAA8B,EAAE,EAAE;IAC5D,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kiriminaja",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
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": [
|
|
@@ -21,6 +25,7 @@
|
|
|
21
25
|
],
|
|
22
26
|
"devDependencies": {
|
|
23
27
|
"@types/bun": "^1.3.11",
|
|
28
|
+
"@types/node": "^25.5.0",
|
|
24
29
|
"changelogen": "^0.6.2",
|
|
25
30
|
"typescript": "^6.0.0"
|
|
26
31
|
},
|