deliveryapi 0.2.2 → 1.0.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/dist/index.js CHANGED
@@ -1,310 +1,388 @@
1
1
  // src/http.ts
2
+ var BASE_URL = "https://api.deliveryapi.co.kr";
2
3
  var ApiError = class extends Error {
3
- constructor(statusCode, errorCode, message) {
4
+ constructor(code, message, status) {
4
5
  super(message);
5
- this.statusCode = statusCode;
6
- this.errorCode = errorCode;
7
6
  this.name = "ApiError";
7
+ this.code = code;
8
+ this.status = status;
8
9
  }
9
10
  };
10
- async function request(baseUrl, path, options = {}) {
11
- const { token, ...fetchOptions } = options;
12
- const headers = {
13
- "Content-Type": "application/json",
14
- ...fetchOptions.headers
15
- };
16
- if (token) {
17
- headers["Authorization"] = `Bearer ${token}`;
18
- }
19
- const res = await fetch(`${baseUrl}${path}`, {
20
- ...fetchOptions,
21
- headers
11
+ async function request(path, options, auth) {
12
+ let url = `${BASE_URL}${path}`;
13
+ if (options.params) {
14
+ const qs = Object.entries(options.params).filter(([, v]) => v !== void 0).map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`).join("&");
15
+ if (qs) url += `?${qs}`;
16
+ }
17
+ const res = await fetch(url, {
18
+ method: options.method ?? "GET",
19
+ headers: {
20
+ "Content-Type": "application/json",
21
+ Authorization: `Bearer ${auth.apiKey}:${auth.secretKey}`
22
+ },
23
+ body: options.body !== void 0 ? JSON.stringify(options.body) : void 0
22
24
  });
23
- const body = await res.json();
24
- if (!res.ok || !body.isSuccess) {
25
+ const json = await res.json();
26
+ if (!json.isSuccess) {
25
27
  throw new ApiError(
26
- res.status,
27
- body.errorCode,
28
- body.error ?? `Request failed with status ${res.status}`
28
+ json.errorCode ?? "INTERNAL_ERROR",
29
+ json.error ?? json.message ?? `HTTP ${res.status}`,
30
+ json.statusCode ?? res.status
29
31
  );
30
32
  }
31
- return body.data;
33
+ return json.data;
32
34
  }
33
35
 
34
- // src/resources/auth.ts
35
- var AuthResource = class {
36
- constructor(baseUrl, getToken) {
37
- this.baseUrl = baseUrl;
38
- this.getToken = getToken;
39
- }
40
- /** Step 1: 이메일 인증 코드 요청 */
41
- async requestVerification(params) {
42
- await request(this.baseUrl, "/v1/homepage/register/request", {
43
- method: "POST",
44
- body: JSON.stringify(params)
45
- });
46
- }
47
- /** Step 2: 인증 코드 검증 + Firebase 계정 생성 → customToken 반환 */
48
- async verifyAndRegister(params) {
49
- return request(this.baseUrl, "/v1/homepage/register/verify", {
50
- method: "POST",
51
- body: JSON.stringify(params)
52
- });
53
- }
54
- /** Google 로그인 후 HP 사용자 문서 확인/생성 */
55
- async ensureUser() {
56
- const token = await this.getToken();
57
- return request(this.baseUrl, "/v1/homepage/ensure-user", {
58
- method: "POST",
59
- body: JSON.stringify({}),
60
- token
61
- });
62
- }
63
- };
64
-
65
- // src/resources/dashboard.ts
66
- var DashboardResource = class {
67
- constructor(baseUrl, getToken) {
68
- this.baseUrl = baseUrl;
69
- this.getToken = getToken;
70
- }
71
- /** 대시보드 데이터 조회 (API 키 목록, 사용량, 플랜 정보) */
72
- async get() {
73
- const token = await this.getToken();
74
- return request(this.baseUrl, "/v1/homepage/dashboard", { token });
75
- }
76
- /** API 키 발급 */
77
- async issueKey() {
78
- const token = await this.getToken();
79
- return request(this.baseUrl, "/v1/homepage/dashboard/issue-key", {
80
- method: "POST",
81
- body: JSON.stringify({}),
82
- token
83
- });
84
- }
85
- };
86
-
87
- // src/resources/qna.ts
88
- var QnaResource = class {
89
- constructor(baseUrl, getToken) {
90
- this.baseUrl = baseUrl;
91
- this.getToken = getToken;
92
- }
93
- /** 게시글 목록 조회 (비회원도 공개글 열람 가능) */
94
- async listPosts(params = {}) {
95
- const token = await this.getToken();
96
- const qs = new URLSearchParams();
97
- if (params.cursor) qs.set("cursor", params.cursor);
98
- if (params.pageSize) qs.set("pageSize", String(params.pageSize));
99
- const query = qs.toString() ? `?${qs.toString()}` : "";
100
- return request(this.baseUrl, `/v1/homepage/posts${query}`, { token });
101
- }
102
- /** 게시글 상세 조회 */
103
- async getPost(postId) {
104
- const token = await this.getToken();
105
- return request(this.baseUrl, `/v1/homepage/posts/${postId}`, { token });
106
- }
107
- /** 게시글 작성 (로그인 필요) */
108
- async createPost(params) {
109
- const token = await this.getToken();
110
- return request(this.baseUrl, "/v1/homepage/posts", {
111
- method: "POST",
112
- body: JSON.stringify(params),
113
- token
114
- });
115
- }
116
- /** 게시글 수정 (작성자/관리자만) */
117
- async updatePost(postId, params) {
118
- const token = await this.getToken();
119
- return request(this.baseUrl, `/v1/homepage/posts/${postId}`, {
120
- method: "PUT",
121
- body: JSON.stringify(params),
122
- token
123
- });
124
- }
125
- /** 게시글 삭제 (작성자/관리자만) */
126
- async deletePost(postId) {
127
- const token = await this.getToken();
128
- await request(this.baseUrl, `/v1/homepage/posts/${postId}`, {
129
- method: "DELETE",
130
- token
131
- });
132
- }
133
- /** 댓글 목록 조회 */
134
- async listComments(postId) {
135
- const token = await this.getToken();
136
- return request(this.baseUrl, `/v1/homepage/posts/${postId}/comments`, { token });
137
- }
138
- /** 댓글 작성 (로그인 필요) */
139
- async createComment(postId, params) {
140
- const token = await this.getToken();
141
- return request(this.baseUrl, `/v1/homepage/posts/${postId}/comments`, {
142
- method: "POST",
143
- body: JSON.stringify(params),
144
- token
145
- });
36
+ // src/resources/tracking.ts
37
+ var TrackingResource = class {
38
+ constructor(auth) {
39
+ this.auth = auth;
40
+ }
41
+ /**
42
+ * 지원 택배사 목록을 조회합니다.
43
+ *
44
+ * 택배사 코드(`trackingApiCode`)는 `trace()`의 `courierCode` 파라미터에 사용합니다.
45
+ *
46
+ * @returns 지원 택배사 목록 및 총 수
47
+ *
48
+ * @example
49
+ * const { couriers } = await client.tracking.getCouriers()
50
+ * // couriers: [{ trackingApiCode: 'cj', displayName: 'CJ대한통운' }, ...]
51
+ */
52
+ async getCouriers() {
53
+ return request(
54
+ "/v1/tracking/couriers",
55
+ {},
56
+ this.auth
57
+ );
146
58
  }
147
- /** 댓글 삭제 (작성자/관리자만) */
148
- async deleteComment(commentId) {
149
- const token = await this.getToken();
150
- await request(this.baseUrl, `/v1/homepage/comments/${commentId}`, {
151
- method: "DELETE",
152
- token
153
- });
59
+ /**
60
+ * 송장번호로 배송 정보를 조회합니다.
61
+ *
62
+ * - 요청당 여러 건을 배열로 전달할 수 있습니다.
63
+ * - 결과는 요청 순서와 동일한 인덱스로 반환됩니다.
64
+ * - 일부 아이템이 실패해도 전체 요청이 실패하지 않습니다. `results[].success`로 건별 확인하세요.
65
+ *
66
+ * **과금 안내**: `NOT_FOUND` 에러는 과금됩니다. `results[].error.billable`로 확인하세요.
67
+ *
68
+ * @param params 조회 파라미터
69
+ * @returns 아이템별 조회 결과 및 집계 요약
70
+ *
71
+ * @throws {ApiError} API 인증 실패, 요청 한도 초과 등 전체 요청 실패 시
72
+ *
73
+ * @example
74
+ * const { results, summary } = await client.tracking.trace({
75
+ * items: [
76
+ * { courierCode: 'cj', trackingNumber: '1234567890', clientId: 'order_001' },
77
+ * { courierCode: 'lotte', trackingNumber: '9876543210', clientId: 'order_002' },
78
+ * ],
79
+ * includeProgresses: true,
80
+ * })
81
+ *
82
+ * for (const result of results) {
83
+ * if (result.success) {
84
+ * console.log(result.data?.deliveryStatus) // 'DELIVERED'
85
+ * } else {
86
+ * console.warn(result.error?.code) // 'NOT_FOUND'
87
+ * }
88
+ * }
89
+ *
90
+ * console.log(`성공: ${summary.successful} / 전체: ${summary.total}`)
91
+ */
92
+ async trace(params) {
93
+ return request(
94
+ "/v1/tracking/trace",
95
+ { method: "POST", body: params },
96
+ this.auth
97
+ );
154
98
  }
155
99
  };
156
100
 
157
- // src/resources/admin.ts
158
- var AdminResource = class {
159
- constructor(baseUrl, getToken) {
160
- this.baseUrl = baseUrl;
161
- this.getToken = getToken;
162
- }
163
- async token() {
164
- return this.getToken();
165
- }
166
- /** 전체 통계 조회 */
167
- async getStats() {
168
- return request(this.baseUrl, "/v1/homepage/admin/stats", {
169
- token: await this.token()
170
- });
171
- }
172
- /** 최근 14일 일별 가입자 수 */
173
- async getDailySignups() {
174
- return request(this.baseUrl, "/v1/homepage/admin/daily-signups", {
175
- token: await this.token()
176
- });
177
- }
178
- /** 사용자 목록 조회 */
179
- async listUsers() {
180
- return request(this.baseUrl, "/v1/homepage/admin/users", {
181
- token: await this.token()
182
- });
183
- }
184
- /** 사용자 정보 수정 */
185
- async updateUser(uid, params) {
186
- await request(this.baseUrl, `/v1/homepage/admin/users/${uid}`, {
187
- method: "PATCH",
188
- body: JSON.stringify(params),
189
- token: await this.token()
190
- });
191
- }
192
- /** 사용자 상세 조회 (API 키 + 사용량 포함) */
193
- async getUserDetail(uid) {
194
- return request(this.baseUrl, `/v1/homepage/admin/users/${uid}/detail`, {
195
- token: await this.token()
196
- });
197
- }
198
- /** customers 목록 조회 */
199
- async listCustomers() {
200
- return request(this.baseUrl, "/v1/homepage/admin/customers", {
201
- token: await this.token()
202
- });
203
- }
204
- /** API 키 목록 조회 */
205
- async listKeys() {
206
- return request(this.baseUrl, "/v1/homepage/admin/keys", {
207
- token: await this.token()
208
- });
209
- }
210
- /** API 키 플랜 변경 */
211
- async updateKeyPlan(apiKeyHash, params) {
212
- await request(this.baseUrl, `/v1/homepage/admin/keys/${apiKeyHash}/plan`, {
213
- method: "PATCH",
214
- body: JSON.stringify(params),
215
- token: await this.token()
216
- });
217
- }
218
- /** API 키 플랜 일괄 변경 */
219
- async bulkUpdateKeyPlan(params) {
220
- await request(this.baseUrl, "/v1/homepage/admin/keys/bulk/plan", {
221
- method: "PATCH",
222
- body: JSON.stringify(params),
223
- token: await this.token()
224
- });
225
- }
226
- /** Secret Key limits 수정 */
227
- async updateKeyLimits(apiKeyHash, params) {
228
- await request(this.baseUrl, `/v1/homepage/admin/keys/${apiKeyHash}/limits`, {
229
- method: "PATCH",
230
- body: JSON.stringify(params),
231
- token: await this.token()
232
- });
101
+ // src/resources/webhooks.ts
102
+ var WebhooksResource = class {
103
+ constructor(auth) {
104
+ this.auth = auth;
105
+ }
106
+ // ─────────────────────── 엔드포인트 관리 ────────────────────────────────
107
+ /**
108
+ * 웹훅 엔드포인트를 등록합니다.
109
+ *
110
+ * 등록 서버에서 해당 URL로 테스트 POST 요청을 전송하여 연결 가능 여부를 검증합니다.
111
+ * 응답의 `webhookSecret`은 **이 응답에서만 평문으로 반환**됩니다.
112
+ * 분실 시 `rotateSecret()`으로 재발급해야 합니다.
113
+ *
114
+ * @param params 엔드포인트 등록 파라미터
115
+ * @returns 생성된 엔드포인트 정보 (webhookSecret 포함)
116
+ *
117
+ * @throws {ApiError} `WEBHOOK_ENDPOINT_LIMIT` — 엔드포인트 등록 한도 초과
118
+ *
119
+ * @example
120
+ * const endpoint = await client.webhooks.createEndpoint({
121
+ * url: 'https://my-server.com/webhook',
122
+ * name: '운영 서버',
123
+ * })
124
+ * console.log(endpoint.endpointId) // 'ep_xxxx'
125
+ * console.log(endpoint.webhookSecret) // 반드시 저장하세요!
126
+ */
127
+ async createEndpoint(params) {
128
+ return request(
129
+ "/v1/webhooks/endpoints",
130
+ { method: "POST", body: params },
131
+ this.auth
132
+ );
233
133
  }
234
- /** 데모 키 생성 */
235
- async createDemoKey(params = {}) {
236
- return request(this.baseUrl, "/v1/homepage/admin/demo-keys", {
237
- method: "POST",
238
- body: JSON.stringify(params),
239
- token: await this.token()
240
- });
134
+ /**
135
+ * 등록된 웹훅 엔드포인트 목록을 조회합니다.
136
+ *
137
+ * @returns 엔드포인트 목록 및 총 수
138
+ *
139
+ * @example
140
+ * const { endpoints } = await client.webhooks.listEndpoints()
141
+ * const active = endpoints.filter(ep => ep.status === 'active')
142
+ */
143
+ async listEndpoints() {
144
+ return request(
145
+ "/v1/webhooks/endpoints",
146
+ {},
147
+ this.auth
148
+ );
241
149
  }
242
- /** 데모 키 목록 조회 */
243
- async listDemoKeys() {
244
- return request(this.baseUrl, "/v1/homepage/admin/demo-keys", {
245
- token: await this.token()
246
- });
150
+ /**
151
+ * 웹훅 엔드포인트 이름을 수정합니다.
152
+ *
153
+ * URL은 변경할 수 없습니다. URL을 변경해야 한다면 엔드포인트를 삭제 후 재등록하세요.
154
+ *
155
+ * @param endpointId 수정할 엔드포인트 ID
156
+ * @param params 수정 내용
157
+ *
158
+ * @throws {ApiError} `NOT_FOUND` — 존재하지 않는 엔드포인트
159
+ *
160
+ * @example
161
+ * await client.webhooks.updateEndpoint('ep_xxxx', { name: '스테이징 서버' })
162
+ */
163
+ async updateEndpoint(endpointId, params) {
164
+ await request(
165
+ `/v1/webhooks/endpoints/${endpointId}`,
166
+ { method: "PUT", body: params },
167
+ this.auth
168
+ );
247
169
  }
248
- /** 데모 키 비활성화 */
249
- async deactivateDemoKey(apiKeyHash) {
250
- await request(this.baseUrl, `/v1/homepage/admin/demo-keys/${apiKeyHash}/deactivate`, {
251
- method: "PATCH",
252
- body: JSON.stringify({}),
253
- token: await this.token()
254
- });
170
+ /**
171
+ * 웹훅 엔드포인트를 삭제합니다.
172
+ *
173
+ * 해당 엔드포인트에 연결된 구독도 함께 삭제됩니다 (cascade).
174
+ *
175
+ * @param endpointId 삭제할 엔드포인트 ID
176
+ *
177
+ * @throws {ApiError} `NOT_FOUND` — 존재하지 않는 엔드포인트
178
+ *
179
+ * @example
180
+ * await client.webhooks.deleteEndpoint('ep_xxxx')
181
+ */
182
+ async deleteEndpoint(endpointId) {
183
+ await request(
184
+ `/v1/webhooks/endpoints/${endpointId}`,
185
+ { method: "DELETE" },
186
+ this.auth
187
+ );
255
188
  }
256
- /** 데모 키 활성화 */
257
- async activateDemoKey(apiKeyHash) {
258
- await request(this.baseUrl, `/v1/homepage/admin/demo-keys/${apiKeyHash}/activate`, {
259
- method: "PATCH",
260
- body: JSON.stringify({}),
261
- token: await this.token()
262
- });
189
+ /**
190
+ * 웹훅 서명 시크릿을 재발급합니다.
191
+ *
192
+ * 기존 시크릿은 즉시 무효화됩니다.
193
+ * 새 시크릿은 **이 응답에서만 평문으로 반환**됩니다.
194
+ *
195
+ * @param endpointId 대상 엔드포인트 ID
196
+ * @param params 새 시크릿 (선택, 미제공 시 서버 생성)
197
+ * @returns 새 웹훅 시크릿
198
+ *
199
+ * @throws {ApiError} `NOT_FOUND` — 존재하지 않는 엔드포인트
200
+ *
201
+ * @example
202
+ * const { webhookSecret } = await client.webhooks.rotateSecret('ep_xxxx')
203
+ * console.log(webhookSecret) // 새 시크릿 — 반드시 저장하세요!
204
+ */
205
+ async rotateSecret(endpointId, params) {
206
+ return request(
207
+ `/v1/webhooks/endpoints/${endpointId}/rotate`,
208
+ { method: "POST", body: params ?? {} },
209
+ this.auth
210
+ );
263
211
  }
264
- /** 조회 로그 목록 */
265
- async listTrackingLogs(page = 1) {
212
+ // ─────────────────────── 구독 관리 ──────────────────────────────────────
213
+ /**
214
+ * 택배 추적 구독을 등록합니다.
215
+ *
216
+ * **구독형** (`recurring: true`): 배송 완료 또는 최대 14일까지 주기적으로 폴링하여
217
+ * 상태 변경 시 `endpointId`로 웹훅을 발송합니다.
218
+ *
219
+ * **일회성** (`recurring: false`): 등록 즉시 1회 크롤 후 종료합니다.
220
+ * `endpointId` 없이 사용하면 결과를 `getSubscription(requestId)`으로 직접 조회할 수 있습니다.
221
+ *
222
+ * @param params 구독 등록 파라미터
223
+ * @returns 구독 ID (`requestId`) 및 기본 정보
224
+ *
225
+ * @example
226
+ * // 구독형 — 상태 변경 시 웹훅 수신
227
+ * const sub = await client.webhooks.register({
228
+ * endpointId: 'ep_xxxx',
229
+ * items: [
230
+ * { courierCode: 'cj', trackingNumber: '1234567890', clientId: 'order_001' },
231
+ * ],
232
+ * recurring: true,
233
+ * })
234
+ *
235
+ * @example
236
+ * // 일회성 즉시 조회 — 웹훅 없이 결과를 직접 폴링
237
+ * const req = await client.webhooks.register({
238
+ * items: [{ courierCode: 'lotte', trackingNumber: '9876543210' }],
239
+ * recurring: false,
240
+ * })
241
+ * const detail = await client.webhooks.getSubscription(req.requestId)
242
+ */
243
+ async register(params) {
266
244
  return request(
267
- this.baseUrl,
268
- `/v1/homepage/admin/tracking-logs?page=${page}`,
269
- { token: await this.token() }
245
+ "/v1/webhooks/register",
246
+ { method: "POST", body: params },
247
+ this.auth
270
248
  );
271
249
  }
272
- };
273
-
274
- // src/resources/public.ts
275
- var PublicResource = class {
276
- constructor(baseUrl) {
277
- this.baseUrl = baseUrl;
250
+ /**
251
+ * 구독 목록을 조회합니다.
252
+ *
253
+ * 커서 기반 페이지네이션을 지원합니다.
254
+ * 다음 페이지가 있으면 응답의 `nextCursor`를 다음 호출의 `cursor` 파라미터로 전달하세요.
255
+ *
256
+ * @param params 페이지네이션 파라미터 (선택)
257
+ * @returns 구독 목록 및 다음 페이지 커서
258
+ *
259
+ * @example
260
+ * // 전체 구독 목록 순회
261
+ * let cursor: string | undefined
262
+ * do {
263
+ * const page = await client.webhooks.listSubscriptions({ cursor, limit: 50 })
264
+ * for (const sub of page.subscriptions) {
265
+ * console.log(sub.requestId, sub.isActive)
266
+ * }
267
+ * cursor = page.nextCursor
268
+ * } while (cursor)
269
+ */
270
+ async listSubscriptions(params) {
271
+ return request(
272
+ "/v1/webhooks/subscriptions",
273
+ {
274
+ params: {
275
+ cursor: params?.cursor,
276
+ limit: params?.limit
277
+ }
278
+ },
279
+ this.auth
280
+ );
278
281
  }
279
- /** 요금제 목록 조회 */
280
- async getPlans() {
281
- return request(this.baseUrl, "/v1/homepage/plans");
282
+ /**
283
+ * 구독 상세 정보를 조회합니다.
284
+ *
285
+ * 각 택배별 현재 상태 및 최신 배송 데이터를 포함합니다.
286
+ *
287
+ * @param requestId `register()` 응답의 `requestId`
288
+ * @returns 구독 상세 (아이템별 상태 포함)
289
+ *
290
+ * @throws {ApiError} `NOT_FOUND` — 존재하지 않는 구독
291
+ *
292
+ * @example
293
+ * const detail = await client.webhooks.getSubscription('req_xxxx')
294
+ *
295
+ * for (const item of detail.items) {
296
+ * console.log(item.trackingNumber, item.currentStatus)
297
+ * }
298
+ */
299
+ async getSubscription(requestId) {
300
+ return request(
301
+ `/v1/webhooks/subscriptions/${requestId}`,
302
+ {},
303
+ this.auth
304
+ );
282
305
  }
283
- /** Secret Key 프리셋 목록 조회 */
284
- async getSecretPresets() {
285
- return request(this.baseUrl, "/v1/homepage/secret-presets");
306
+ /**
307
+ * 구독을 취소합니다.
308
+ *
309
+ * 취소된 구독은 더 이상 폴링되지 않으며 웹훅도 발송되지 않습니다.
310
+ *
311
+ * @param requestId 취소할 구독 ID
312
+ *
313
+ * @throws {ApiError} `NOT_FOUND` — 존재하지 않는 구독
314
+ *
315
+ * @example
316
+ * await client.webhooks.cancelSubscription('req_xxxx')
317
+ */
318
+ async cancelSubscription(requestId) {
319
+ await request(
320
+ `/v1/webhooks/subscriptions/${requestId}`,
321
+ { method: "DELETE" },
322
+ this.auth
323
+ );
286
324
  }
287
- /** 개발 의뢰 문의 전송 */
288
- async sendContactInquiry(params) {
289
- await request(this.baseUrl, "/v1/homepage/contact/inquiry", {
290
- method: "POST",
291
- body: JSON.stringify(params)
292
- });
325
+ /**
326
+ * 여러 송장번호의 최신 배송 정보를 한 번에 조회합니다.
327
+ *
328
+ * 구독 ID 없이 택배사 코드 + 송장번호로 검색합니다.
329
+ * 해당 계정에 등록된 구독 중 일치하는 아이템을 반환합니다.
330
+ *
331
+ * @param params 조회할 아이템 목록
332
+ * @returns 아이템별 최신 배송 정보
333
+ *
334
+ * @example
335
+ * const { results } = await client.webhooks.batchResults({
336
+ * items: [
337
+ * { courierCode: 'cj', trackingNumber: '1111111111' },
338
+ * { courierCode: 'lotte', trackingNumber: '2222222222' },
339
+ * ],
340
+ * })
341
+ *
342
+ * for (const r of results) {
343
+ * console.log(r.currentStatus, r.isDelivered)
344
+ * }
345
+ */
346
+ async batchResults(params) {
347
+ return request(
348
+ "/v1/webhooks/results",
349
+ { method: "POST", body: params },
350
+ this.auth
351
+ );
293
352
  }
294
353
  };
295
354
 
296
355
  // src/client.ts
297
- var BASE_URL = "https://api.deliveryapi.co.kr";
298
- var noToken = async () => null;
299
- var HomepageClient = class {
300
- constructor(options = {}) {
301
- const { getToken = noToken } = options;
302
- this.auth = new AuthResource(BASE_URL, getToken);
303
- this.dashboard = new DashboardResource(BASE_URL, getToken);
304
- this.qna = new QnaResource(BASE_URL, getToken);
305
- this.admin = new AdminResource(BASE_URL, getToken);
306
- this.public = new PublicResource(BASE_URL);
356
+ var BASE_URL2 = "https://api.deliveryapi.co.kr";
357
+ var DeliveryAPIClient = class {
358
+ constructor(options) {
359
+ /** API Base URL (`https://api.deliveryapi.co.kr`) */
360
+ this.baseUrl = BASE_URL2;
361
+ const auth = { apiKey: options.apiKey, secretKey: options.secretKey };
362
+ this.tracking = new TrackingResource(auth);
363
+ this.webhooks = new WebhooksResource(auth);
307
364
  }
308
365
  };
309
366
 
310
- export { ApiError, HomepageClient };
367
+ // src/types.ts
368
+ var CourierDeliveryStatus = /* @__PURE__ */ ((CourierDeliveryStatus2) => {
369
+ CourierDeliveryStatus2["PENDING"] = "PENDING";
370
+ CourierDeliveryStatus2["REGISTERED"] = "REGISTERED";
371
+ CourierDeliveryStatus2["PICKUP_READY"] = "PICKUP_READY";
372
+ CourierDeliveryStatus2["PICKED_UP"] = "PICKED_UP";
373
+ CourierDeliveryStatus2["IN_TRANSIT"] = "IN_TRANSIT";
374
+ CourierDeliveryStatus2["OUT_FOR_DELIVERY"] = "OUT_FOR_DELIVERY";
375
+ CourierDeliveryStatus2["DELIVERED"] = "DELIVERED";
376
+ CourierDeliveryStatus2["FAILED"] = "FAILED";
377
+ CourierDeliveryStatus2["RETURNED"] = "RETURNED";
378
+ CourierDeliveryStatus2["CANCELLED"] = "CANCELLED";
379
+ CourierDeliveryStatus2["HOLD"] = "HOLD";
380
+ CourierDeliveryStatus2["UNKNOWN"] = "UNKNOWN";
381
+ return CourierDeliveryStatus2;
382
+ })(CourierDeliveryStatus || {});
383
+ export {
384
+ ApiError,
385
+ CourierDeliveryStatus,
386
+ DeliveryAPIClient
387
+ };
388
+ //# sourceMappingURL=index.js.map