@portone/mcp-server 0.13.0 → 0.14.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/README.md +62 -49
- package/manifest.json +3 -14
- package/package.json +5 -1
- package/server/index.js +1656 -650
package/server/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __export = (target, all) => {
|
|
4
|
-
for (var
|
|
5
|
-
__defProp(target,
|
|
4
|
+
for (var name14 in all)
|
|
5
|
+
__defProp(target, name14, { get: all[name14], enumerable: true });
|
|
6
6
|
};
|
|
7
7
|
|
|
8
8
|
// src/index.ts
|
|
@@ -10,11 +10,12 @@ import { dirname, join as join4 } from "path";
|
|
|
10
10
|
import { fileURLToPath } from "url";
|
|
11
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
12
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
13
|
+
import { GraphQLClient } from "graphql-request";
|
|
13
14
|
|
|
14
15
|
// package.json
|
|
15
16
|
var package_default = {
|
|
16
17
|
name: "@portone/mcp-server",
|
|
17
|
-
version: "0.
|
|
18
|
+
version: "0.14.0",
|
|
18
19
|
description: "\uD3EC\uD2B8\uC6D0 \uC0AC\uC6A9\uC790\uB97C \uC704\uD55C MCP (Model Context Protocol) \uC11C\uBC84\uC785\uB2C8\uB2E4. \uD3EC\uD2B8\uC6D0 \uAC1C\uBC1C\uC790\uC13C\uD130, \uD5EC\uD504\uC13C\uD130 \uB4F1 \uACF5\uC2DD \uBB38\uC11C \uB0B4\uC6A9\uC744 LLM(Large Language Model)\uC5D0 \uC81C\uACF5\uD574 \uC815\uD655\uD55C \uC815\uBCF4\uB97C \uBC14\uD0D5\uC73C\uB85C \uC0AC\uC6A9\uC790\uC758 \uC5F0\uB3D9 \uBC0F \uC9C8\uC758\uB97C \uB3D5\uB3C4\uB85D \uD569\uB2C8\uB2E4.",
|
|
19
20
|
main: "server/index.js",
|
|
20
21
|
type: "module",
|
|
@@ -47,8 +48,12 @@ var package_default = {
|
|
|
47
48
|
"@modelcontextprotocol/sdk": "^1.15.0",
|
|
48
49
|
"@portone/server-sdk": "^0.15.0",
|
|
49
50
|
axios: "^1.7.2",
|
|
51
|
+
graphql: "^16.11.0",
|
|
52
|
+
"graphql-request": "^7.2.0",
|
|
50
53
|
"gray-matter": "^4.0.3",
|
|
54
|
+
h3: "2.0.0-beta.1",
|
|
51
55
|
"js-yaml": "^4.1.0",
|
|
56
|
+
open: "^10.2.0",
|
|
52
57
|
"ts-pattern": "^5.7.1",
|
|
53
58
|
zod: "^3.25.75"
|
|
54
59
|
},
|
|
@@ -198,471 +203,1137 @@ async function loadInstructions(path) {
|
|
|
198
203
|
}
|
|
199
204
|
}
|
|
200
205
|
|
|
201
|
-
// src/tools/
|
|
202
|
-
var
|
|
203
|
-
__export(
|
|
206
|
+
// src/tools/addTestChannel.ts
|
|
207
|
+
var addTestChannel_exports = {};
|
|
208
|
+
__export(addTestChannel_exports, {
|
|
204
209
|
config: () => config,
|
|
205
210
|
init: () => init,
|
|
206
211
|
name: () => name
|
|
207
212
|
});
|
|
208
|
-
import
|
|
213
|
+
import z5 from "zod";
|
|
209
214
|
|
|
210
|
-
// src/tools/
|
|
215
|
+
// src/tools/request/addChannel.ts
|
|
216
|
+
import { match, P } from "ts-pattern";
|
|
211
217
|
import z from "zod";
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
"
|
|
237
|
-
"
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
"cancellations.reason",
|
|
313
|
-
"cancellations.cancelledAt",
|
|
314
|
-
"cancellations.requestedAt",
|
|
315
|
-
"cancellations.trigger",
|
|
316
|
-
"disputes.status",
|
|
317
|
-
"disputes.reason",
|
|
318
|
-
"disputes.createdAt",
|
|
319
|
-
"disputes.resolvedAt",
|
|
320
|
-
"channelGroup.name",
|
|
321
|
-
"channelGroup.isForTest"
|
|
322
|
-
];
|
|
323
|
-
var PaymentField = z.enum(PAYMENT_FIELDS);
|
|
324
|
-
var IDENTITY_VERIFICATION_FIELDS = [
|
|
325
|
-
"status",
|
|
326
|
-
"id",
|
|
327
|
-
"requestedAt",
|
|
328
|
-
"updatedAt",
|
|
329
|
-
"statusChangedAt",
|
|
330
|
-
"failure",
|
|
331
|
-
"version",
|
|
332
|
-
"channel.type",
|
|
333
|
-
"channel.name",
|
|
334
|
-
"channel.pgProvider"
|
|
335
|
-
];
|
|
336
|
-
var IdentityVerificationField = z.enum(IDENTITY_VERIFICATION_FIELDS);
|
|
337
|
-
var JsonLiteral = z.string().or(z.number()).or(z.boolean());
|
|
338
|
-
var JsonValue = z.lazy(
|
|
339
|
-
() => JsonLiteral.or(z.array(JsonValue)).or(z.record(JsonValue))
|
|
340
|
-
);
|
|
341
|
-
function filterFields(fields, data) {
|
|
342
|
-
const withPrefixes = new Set(fields);
|
|
343
|
-
for (const field of fields) {
|
|
344
|
-
let searchPos = 0;
|
|
345
|
-
while (true) {
|
|
346
|
-
const dot = field.indexOf(".", searchPos);
|
|
347
|
-
if (dot === -1) break;
|
|
348
|
-
withPrefixes.add(field.slice(0, dot));
|
|
349
|
-
searchPos = dot + 1;
|
|
218
|
+
|
|
219
|
+
// src/url.ts
|
|
220
|
+
var DEVELOPERS_URL = "https://developers.portone.io";
|
|
221
|
+
var CONSOLE_URL = "https://admin.portone.io";
|
|
222
|
+
var MERCHANT_SERVICE_URL = "https://merchant-service.prod.iamport.co";
|
|
223
|
+
var CHANNEL_SERVICE_URL = "https://channel-service.prod.iamport.co";
|
|
224
|
+
var GRAPHQL_URL = "https://api.portone.io/graphql";
|
|
225
|
+
var HELP_CENTER_URL = "https://help.portone.io";
|
|
226
|
+
|
|
227
|
+
// src/tools/utils/userAgent.ts
|
|
228
|
+
var USER_AGENT = `${package_default.name} ${package_default.version}`;
|
|
229
|
+
|
|
230
|
+
// src/tools/request/addChannel.ts
|
|
231
|
+
var StatusResponse = z.object({
|
|
232
|
+
code: z.unknown(),
|
|
233
|
+
message: z.string(),
|
|
234
|
+
details: z.unknown()
|
|
235
|
+
}).partial();
|
|
236
|
+
var AddChannelResponse = z.object({
|
|
237
|
+
channel: z.object({
|
|
238
|
+
channelKey: z.string()
|
|
239
|
+
})
|
|
240
|
+
});
|
|
241
|
+
var channelTypeMapper = {
|
|
242
|
+
LIVE: "CHANNEL_TYPE_REQUEST_LIVE",
|
|
243
|
+
TEST: "CHANNEL_TYPE_REQUEST_MERCHANT_TEST"
|
|
244
|
+
};
|
|
245
|
+
async function addChannel({
|
|
246
|
+
channelType,
|
|
247
|
+
pgpCredential,
|
|
248
|
+
channelName,
|
|
249
|
+
pgMerchantId,
|
|
250
|
+
storeId,
|
|
251
|
+
taxType,
|
|
252
|
+
manualConfirm,
|
|
253
|
+
isForPayment,
|
|
254
|
+
isForIdentityCertification,
|
|
255
|
+
authorization
|
|
256
|
+
}) {
|
|
257
|
+
const request = {
|
|
258
|
+
channelType: channelTypeMapper[channelType],
|
|
259
|
+
pgpCredential,
|
|
260
|
+
channelName,
|
|
261
|
+
pgMerchantId,
|
|
262
|
+
isForPayment,
|
|
263
|
+
isForIdentityCertification,
|
|
264
|
+
storeId,
|
|
265
|
+
taxType,
|
|
266
|
+
manualConfirm
|
|
267
|
+
};
|
|
268
|
+
try {
|
|
269
|
+
const response = await fetch(new URL("/v2/channels", CHANNEL_SERVICE_URL), {
|
|
270
|
+
method: "POST",
|
|
271
|
+
headers: {
|
|
272
|
+
Authorization: authorization,
|
|
273
|
+
"Content-Type": "application/json",
|
|
274
|
+
"User-Agent": USER_AGENT
|
|
275
|
+
},
|
|
276
|
+
body: JSON.stringify(request)
|
|
277
|
+
});
|
|
278
|
+
const text = await response.text();
|
|
279
|
+
try {
|
|
280
|
+
const parsed = await AddChannelResponse.or(StatusResponse).parseAsync(
|
|
281
|
+
JSON.parse(text)
|
|
282
|
+
);
|
|
283
|
+
return match(parsed).returnType().with({ channel: P.nonNullable }, (success) => ({
|
|
284
|
+
type: "success",
|
|
285
|
+
data: success
|
|
286
|
+
})).otherwise(({ code, message, details }) => ({
|
|
287
|
+
type: "error",
|
|
288
|
+
data: {
|
|
289
|
+
message: message ?? "\uCC44\uB110\uC744 \uC62C\uBC14\uB974\uAC8C \uCD94\uAC00\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",
|
|
290
|
+
code,
|
|
291
|
+
details,
|
|
292
|
+
status: response.status
|
|
293
|
+
}
|
|
294
|
+
}));
|
|
295
|
+
} catch (parseError) {
|
|
296
|
+
return {
|
|
297
|
+
type: "error",
|
|
298
|
+
data: {
|
|
299
|
+
message: "\uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uD615\uC2DD\uC758 \uC11C\uBC84 \uC751\uB2F5",
|
|
300
|
+
cause: parseError
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
} catch (error) {
|
|
305
|
+
if (error instanceof Error) {
|
|
306
|
+
return {
|
|
307
|
+
type: "error",
|
|
308
|
+
data: error
|
|
309
|
+
};
|
|
310
|
+
} else {
|
|
311
|
+
return {
|
|
312
|
+
type: "error",
|
|
313
|
+
data: {
|
|
314
|
+
message: `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.`,
|
|
315
|
+
cause: error
|
|
316
|
+
}
|
|
317
|
+
};
|
|
350
318
|
}
|
|
351
319
|
}
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// src/tools/request/listStores.ts
|
|
323
|
+
import { parse } from "graphql";
|
|
324
|
+
import { gql } from "graphql-request";
|
|
325
|
+
import { match as match2, P as P2 } from "ts-pattern";
|
|
326
|
+
import z2 from "zod";
|
|
327
|
+
var ErrorResponse = z2.object({
|
|
328
|
+
__typename: z2.string(),
|
|
329
|
+
message: z2.string().nullable()
|
|
330
|
+
});
|
|
331
|
+
var StoreResponse = z2.object({
|
|
332
|
+
id: z2.string(),
|
|
333
|
+
plainId: z2.string(),
|
|
334
|
+
name: z2.string(),
|
|
335
|
+
isRepresentative: z2.boolean(),
|
|
336
|
+
v1Info: z2.object({
|
|
337
|
+
v1UserId: z2.number(),
|
|
338
|
+
userCode: z2.string(),
|
|
339
|
+
tierCode: z2.string().nullable()
|
|
340
|
+
}).or(ErrorResponse)
|
|
341
|
+
}).transform(({ v1Info, ...store }) => ({
|
|
342
|
+
...match2(v1Info).with({ __typename: P2.nonNullable }, () => ({})).otherwise(({ v1UserId, tierCode, ...rest }) => ({
|
|
343
|
+
userId: v1UserId,
|
|
344
|
+
tierCode: tierCode ?? void 0,
|
|
345
|
+
...rest
|
|
346
|
+
})),
|
|
347
|
+
...store
|
|
348
|
+
}));
|
|
349
|
+
var MerchantResponse = z2.object({
|
|
350
|
+
stores: z2.object({
|
|
351
|
+
items: z2.array(StoreResponse)
|
|
352
|
+
}).or(ErrorResponse)
|
|
353
|
+
});
|
|
354
|
+
var ListStoresResponse = z2.object({
|
|
355
|
+
merchant: MerchantResponse.transform(({ stores }) => stores).or(
|
|
356
|
+
ErrorResponse
|
|
357
|
+
)
|
|
358
|
+
}).transform(
|
|
359
|
+
({ merchant }) => match2(merchant).with({ __typename: P2.nonNullable }, (error) => error).otherwise(({ items }) => {
|
|
360
|
+
const main = items.find(({ isRepresentative }) => isRepresentative);
|
|
361
|
+
return {
|
|
362
|
+
main,
|
|
363
|
+
items: items.filter(({ isRepresentative }) => !isRepresentative)
|
|
364
|
+
};
|
|
365
|
+
})
|
|
366
|
+
);
|
|
367
|
+
var listStoresQuery = parse(gql`
|
|
368
|
+
query ListStores {
|
|
369
|
+
merchant {
|
|
370
|
+
...ErrorFragment
|
|
371
|
+
... on Merchant {
|
|
372
|
+
stores {
|
|
373
|
+
...ErrorFragment
|
|
374
|
+
... on StoresPayload {
|
|
375
|
+
items {
|
|
376
|
+
... on Store {
|
|
377
|
+
id
|
|
378
|
+
plainId
|
|
379
|
+
name
|
|
380
|
+
isRepresentative
|
|
381
|
+
v1Info {
|
|
382
|
+
...ErrorFragment
|
|
383
|
+
... on StoreV1Info {
|
|
384
|
+
v1UserId
|
|
385
|
+
userCode
|
|
386
|
+
tierCode
|
|
387
|
+
}
|
|
388
|
+
}
|
|
370
389
|
}
|
|
371
|
-
}
|
|
372
|
-
|
|
390
|
+
}
|
|
391
|
+
}
|
|
373
392
|
}
|
|
374
|
-
} else {
|
|
375
|
-
return data2;
|
|
376
393
|
}
|
|
377
394
|
}
|
|
378
395
|
}
|
|
379
396
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
397
|
+
fragment ErrorFragment on Error {
|
|
398
|
+
__typename
|
|
399
|
+
message
|
|
400
|
+
}
|
|
401
|
+
`);
|
|
402
|
+
async function listStores({
|
|
403
|
+
client,
|
|
404
|
+
authorization
|
|
405
|
+
}) {
|
|
406
|
+
try {
|
|
407
|
+
const response = await client.request({
|
|
408
|
+
document: listStoresQuery,
|
|
409
|
+
requestHeaders: {
|
|
410
|
+
authorization
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
const parsed = await ListStoresResponse.parseAsync(response);
|
|
414
|
+
return match2(parsed).returnType().with({ __typename: P2.nonNullable }, ({ __typename, message }) => ({
|
|
415
|
+
type: "error",
|
|
416
|
+
data: {
|
|
417
|
+
message,
|
|
418
|
+
type: __typename
|
|
419
|
+
}
|
|
420
|
+
})).otherwise((stores) => ({
|
|
421
|
+
type: "success",
|
|
422
|
+
data: stores
|
|
423
|
+
}));
|
|
424
|
+
} catch (error) {
|
|
425
|
+
if (error instanceof Error) {
|
|
426
|
+
return {
|
|
427
|
+
type: "error",
|
|
428
|
+
data: {
|
|
429
|
+
...error
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
} else {
|
|
433
|
+
return {
|
|
434
|
+
type: "error",
|
|
435
|
+
data: {
|
|
436
|
+
message: "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.",
|
|
437
|
+
cause: error
|
|
438
|
+
}
|
|
439
|
+
};
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
386
443
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
444
|
+
// src/tools/request/listV2SharedTestChannel.ts
|
|
445
|
+
import { match as match3, P as P3 } from "ts-pattern";
|
|
446
|
+
import z3 from "zod";
|
|
447
|
+
var StatusResponse2 = z3.object({
|
|
448
|
+
code: z3.unknown(),
|
|
449
|
+
message: z3.string(),
|
|
450
|
+
details: z3.unknown()
|
|
451
|
+
}).partial();
|
|
452
|
+
var SharedTestChannelResponse = z3.object({
|
|
453
|
+
pgProvider: z3.string(),
|
|
454
|
+
pgMerchantId: z3.string(),
|
|
455
|
+
pgpCredential: z3.object({}).passthrough(),
|
|
456
|
+
channelName: z3.string(),
|
|
457
|
+
isForPayment: z3.boolean(),
|
|
458
|
+
isForIdentityCertification: z3.boolean()
|
|
459
|
+
});
|
|
460
|
+
var ListV2SharedTestChannelResponse = z3.object({
|
|
461
|
+
channels: z3.array(SharedTestChannelResponse)
|
|
462
|
+
});
|
|
463
|
+
async function listV2SharedTestChannel({
|
|
464
|
+
authorization
|
|
465
|
+
}) {
|
|
466
|
+
try {
|
|
467
|
+
const response = await fetch(
|
|
468
|
+
new URL("/v2/shared-test-channels", CHANNEL_SERVICE_URL),
|
|
469
|
+
{
|
|
470
|
+
method: "GET",
|
|
471
|
+
headers: {
|
|
472
|
+
Authorization: authorization,
|
|
473
|
+
"User-Agent": USER_AGENT
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
);
|
|
477
|
+
const text = await response.text();
|
|
478
|
+
try {
|
|
479
|
+
const parsed = await ListV2SharedTestChannelResponse.or(
|
|
480
|
+
StatusResponse2
|
|
481
|
+
).parseAsync(JSON.parse(text));
|
|
482
|
+
return match3(parsed).returnType().with({ channels: P3.nonNullable }, (success) => ({
|
|
483
|
+
type: "success",
|
|
484
|
+
data: success
|
|
485
|
+
})).otherwise(({ code, message, details }) => ({
|
|
486
|
+
type: "error",
|
|
487
|
+
data: {
|
|
488
|
+
message: message ?? "\uD14C\uC2A4\uD2B8 \uCC44\uB110 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",
|
|
489
|
+
code,
|
|
490
|
+
details,
|
|
491
|
+
status: response.status
|
|
492
|
+
}
|
|
493
|
+
}));
|
|
494
|
+
} catch (parseError) {
|
|
495
|
+
return {
|
|
496
|
+
type: "error",
|
|
497
|
+
data: {
|
|
498
|
+
message: "\uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uD615\uC2DD\uC758 \uC11C\uBC84 \uC751\uB2F5",
|
|
499
|
+
cause: parseError
|
|
500
|
+
}
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
} catch (error) {
|
|
504
|
+
if (error instanceof Error) {
|
|
505
|
+
return {
|
|
506
|
+
type: "error",
|
|
507
|
+
data: error
|
|
508
|
+
};
|
|
509
|
+
} else {
|
|
510
|
+
return {
|
|
511
|
+
type: "error",
|
|
512
|
+
data: {
|
|
513
|
+
message: `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.`,
|
|
514
|
+
cause: error
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
}
|
|
399
518
|
}
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// src/tools/utils/key.ts
|
|
522
|
+
import { getQuery, H3, serve } from "h3";
|
|
523
|
+
import open from "open";
|
|
524
|
+
import { match as match4 } from "ts-pattern";
|
|
525
|
+
import { z as z4 } from "zod";
|
|
526
|
+
var OAUTH_CLIENT_ID = "MCP";
|
|
527
|
+
var OAUTH_TIMEOUT_MILLIS = 5 * 60 * 1e3;
|
|
528
|
+
var OAuthTokenResponse = z4.object({
|
|
529
|
+
access_token: z4.string(),
|
|
530
|
+
token_type: z4.string(),
|
|
531
|
+
expires_in: z4.number(),
|
|
532
|
+
scope: z4.array(z4.string()),
|
|
533
|
+
refresh_token: z4.string()
|
|
534
|
+
});
|
|
535
|
+
var OAuthError = class extends Error {
|
|
400
536
|
};
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
const
|
|
404
|
-
|
|
405
|
-
|
|
537
|
+
var TokenProvider = class {
|
|
538
|
+
app = new H3().get("/oauth/mcp", async (event) => {
|
|
539
|
+
const query = getQuery(event);
|
|
540
|
+
const { code, error, error_description: errorDescription } = query;
|
|
541
|
+
if (code == null) {
|
|
542
|
+
const message = errorDescription == null ? error : errorDescription;
|
|
543
|
+
return `OAuth Error: ${message}`;
|
|
406
544
|
}
|
|
407
|
-
const url = `/identity-verifications/${identityVerificationId}${params.toString() ? `?${params.toString()}` : ""}`;
|
|
408
545
|
try {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
546
|
+
this.token = await this.exchangeAuthorizationCode(code);
|
|
547
|
+
} catch (error2) {
|
|
548
|
+
const message = error2 instanceof Error ? error2.message : "Internal Server Error";
|
|
549
|
+
return new Response(message, {
|
|
550
|
+
status: 500
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
return `<!DOCTYPE html>
|
|
554
|
+
<html lang="en">
|
|
555
|
+
<head><meta charset='utf-8'><script>window.close()</script></head>
|
|
556
|
+
<body>Authorization complete. You may close this window.</body>
|
|
557
|
+
</html>
|
|
558
|
+
`;
|
|
559
|
+
});
|
|
560
|
+
serverController = null;
|
|
561
|
+
token = null;
|
|
562
|
+
codeVerifier = null;
|
|
563
|
+
launchRefresher() {
|
|
564
|
+
setInterval(async () => {
|
|
565
|
+
if (this.token !== null && Date.now() >= this.token.refreshAt) {
|
|
566
|
+
try {
|
|
567
|
+
this.token = await this.refresh(this.token.refresh);
|
|
568
|
+
} catch (e) {
|
|
569
|
+
console.error(e);
|
|
570
|
+
this.token = null;
|
|
571
|
+
}
|
|
421
572
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
573
|
+
}, 10 * 1e3);
|
|
574
|
+
}
|
|
575
|
+
async exchangeAuthorizationCode(code) {
|
|
576
|
+
const res = await fetch(new URL("/oauth/token", MERCHANT_SERVICE_URL), {
|
|
577
|
+
method: "POST",
|
|
578
|
+
headers: {
|
|
579
|
+
"Content-Type": "application/json"
|
|
580
|
+
},
|
|
581
|
+
body: JSON.stringify({
|
|
582
|
+
client_id: OAUTH_CLIENT_ID,
|
|
583
|
+
grant_type: "authorization_code",
|
|
584
|
+
code,
|
|
585
|
+
code_verifier: this.codeVerifier
|
|
586
|
+
})
|
|
587
|
+
});
|
|
588
|
+
if (!res.ok) {
|
|
589
|
+
throw new OAuthError(
|
|
590
|
+
`server returned status: ${res.status} ${await res.text()}`
|
|
591
|
+
);
|
|
592
|
+
}
|
|
593
|
+
try {
|
|
594
|
+
const text = await res.text();
|
|
595
|
+
const response = await OAuthTokenResponse.parseAsync(JSON.parse(text));
|
|
596
|
+
const now = Date.now();
|
|
597
|
+
this.serverController?.abort();
|
|
598
|
+
this.serverController = null;
|
|
599
|
+
return {
|
|
600
|
+
access: response.access_token,
|
|
601
|
+
refresh: response.refresh_token,
|
|
602
|
+
refreshAt: now + 6e4,
|
|
603
|
+
expiresAt: now + response.expires_in * 1e3,
|
|
604
|
+
tokenType: response.token_type
|
|
605
|
+
};
|
|
606
|
+
} catch (error) {
|
|
607
|
+
throw new OAuthError("Invalid server response", { cause: error });
|
|
608
|
+
}
|
|
609
|
+
}
|
|
610
|
+
async refresh(refreshToken) {
|
|
611
|
+
const res = await fetch(new URL("/oauth/token", MERCHANT_SERVICE_URL), {
|
|
612
|
+
method: "POST",
|
|
613
|
+
headers: {
|
|
614
|
+
"Content-Type": "application/json"
|
|
615
|
+
},
|
|
616
|
+
body: JSON.stringify({
|
|
617
|
+
client_id: OAUTH_CLIENT_ID,
|
|
618
|
+
grant_type: "refresh_token",
|
|
619
|
+
refresh_token: refreshToken
|
|
620
|
+
})
|
|
621
|
+
});
|
|
622
|
+
if (!res.ok) {
|
|
623
|
+
throw new OAuthError(`server returned status: ${res.status}`);
|
|
624
|
+
}
|
|
625
|
+
try {
|
|
626
|
+
const text = await res.text();
|
|
627
|
+
const response = await OAuthTokenResponse.parseAsync(JSON.parse(text));
|
|
628
|
+
const now = Date.now();
|
|
629
|
+
return {
|
|
630
|
+
access: response.access_token,
|
|
631
|
+
refresh: response.refresh_token,
|
|
632
|
+
refreshAt: now + 6e4,
|
|
633
|
+
expiresAt: now + response.expires_in * 1e3,
|
|
634
|
+
tokenType: response.token_type
|
|
635
|
+
};
|
|
636
|
+
} catch (error) {
|
|
637
|
+
throw new OAuthError("Invalid server response", { cause: error });
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
async getToken() {
|
|
641
|
+
if (this.token === null || Date.now() >= this.token.expiresAt) {
|
|
642
|
+
this.serverController?.abort();
|
|
643
|
+
this.serverController = new AbortController();
|
|
644
|
+
const serverTimeout = setTimeout(() => {
|
|
645
|
+
this.serverController?.abort();
|
|
646
|
+
this.serverController = null;
|
|
647
|
+
}, OAUTH_TIMEOUT_MILLIS);
|
|
648
|
+
this.serverController.signal.addEventListener("abort", () => {
|
|
649
|
+
clearTimeout(serverTimeout);
|
|
650
|
+
});
|
|
651
|
+
serve(this.app, {
|
|
652
|
+
port: 1270,
|
|
653
|
+
silent: true,
|
|
654
|
+
node: {
|
|
655
|
+
signal: this.serverController.signal
|
|
656
|
+
}
|
|
657
|
+
});
|
|
658
|
+
this.codeVerifier = crypto.getRandomValues(Buffer.alloc(32)).toString("base64url");
|
|
659
|
+
const codeChallenge = Buffer.from(
|
|
660
|
+
await crypto.subtle.digest(
|
|
661
|
+
"SHA-256",
|
|
662
|
+
Buffer.from(this.codeVerifier, "ascii")
|
|
663
|
+
)
|
|
664
|
+
).toString("base64url");
|
|
665
|
+
const url = new URL("/oauth/authorize", CONSOLE_URL);
|
|
666
|
+
url.searchParams.set("client_id", OAUTH_CLIENT_ID);
|
|
667
|
+
url.searchParams.set("redirect_uri", "http://127.0.0.1:1270/oauth/mcp");
|
|
668
|
+
url.searchParams.set("response_type", "code");
|
|
669
|
+
url.searchParams.set(
|
|
670
|
+
"scope",
|
|
671
|
+
[
|
|
672
|
+
"HOME_AND_REPORT",
|
|
673
|
+
"CHANNEL_READ",
|
|
674
|
+
"CHANNEL_UPDATE",
|
|
675
|
+
"STORE_READ",
|
|
676
|
+
"MERCHANT_READ"
|
|
677
|
+
].join(" ")
|
|
678
|
+
);
|
|
679
|
+
url.searchParams.set("code_challenge", codeChallenge);
|
|
680
|
+
url.searchParams.set("code_challenge_method", "S256");
|
|
681
|
+
await open(url.toString());
|
|
682
|
+
return {
|
|
683
|
+
state: "loginRequired",
|
|
684
|
+
url
|
|
426
685
|
};
|
|
686
|
+
} else {
|
|
687
|
+
return {
|
|
688
|
+
state: "authorized",
|
|
689
|
+
authorization: `${this.token.tokenType} ${this.token.access}`
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
}
|
|
693
|
+
};
|
|
694
|
+
async function getToken(tokenProvider) {
|
|
695
|
+
const state = await tokenProvider.getToken();
|
|
696
|
+
return match4(state).returnType().with(
|
|
697
|
+
{
|
|
698
|
+
state: "loginRequired"
|
|
699
|
+
},
|
|
700
|
+
({ url }) => ({
|
|
701
|
+
type: "error",
|
|
702
|
+
data: {
|
|
703
|
+
message: `\uB85C\uADF8\uC778\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. \uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C \uB85C\uADF8\uC778\uC744 \uC9C4\uD589\uD574\uC8FC\uC138\uC694. \uBE0C\uB77C\uC6B0\uC800\uAC00 \uC5F4\uB9AC\uC9C0 \uC54A\uC73C\uBA74 ${url} \uC5D0 \uC9C1\uC811 \uC811\uC18D\uD574\uC11C \uB85C\uADF8\uC778\uC744 \uC9C4\uD589\uD574\uC8FC\uC138\uC694.`
|
|
704
|
+
}
|
|
705
|
+
})
|
|
706
|
+
).with(
|
|
707
|
+
{
|
|
708
|
+
state: "authorized"
|
|
709
|
+
},
|
|
710
|
+
({ authorization }) => ({
|
|
711
|
+
type: "success",
|
|
712
|
+
data: authorization
|
|
713
|
+
})
|
|
714
|
+
).exhaustive();
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// src/tools/utils/result.ts
|
|
718
|
+
function toolErrorResult(error) {
|
|
719
|
+
return {
|
|
720
|
+
content: [
|
|
721
|
+
{
|
|
722
|
+
type: "text",
|
|
723
|
+
text: JSON.stringify(error.data, null, 2)
|
|
724
|
+
}
|
|
725
|
+
],
|
|
726
|
+
isError: true
|
|
727
|
+
};
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
// src/tools/addTestChannel.ts
|
|
731
|
+
var name = "addTestChannel";
|
|
732
|
+
var InputSchema = z5.object({
|
|
733
|
+
mid: z5.string().describe("\uD14C\uC2A4\uD2B8 \uCC44\uB110\uC758 PG\uC0AC MID"),
|
|
734
|
+
manualConfirm: z5.boolean().optional().default(false).describe("\uC218\uB3D9 \uC2B9\uC778 \uC0AC\uC6A9 \uC5EC\uBD80")
|
|
735
|
+
});
|
|
736
|
+
var OutputSchema = z5.object({
|
|
737
|
+
channelKey: z5.string().describe("\uCD94\uAC00\uB41C \uCC44\uB110\uC758 \uCC44\uB110\uD0A4")
|
|
738
|
+
});
|
|
739
|
+
var config = {
|
|
740
|
+
title: "\uD3EC\uD2B8\uC6D0 \uD14C\uC2A4\uD2B8 \uCC44\uB110 \uCD94\uAC00",
|
|
741
|
+
description: `\uACE0\uAC1D\uC0AC\uC758 \uB300\uD45C\uC0C1\uC810\uC5D0 \uACF5\uC6A9 \uD14C\uC2A4\uD2B8 \uCC44\uB110\uC744 \uCD94\uAC00\uD569\uB2C8\uB2E4.
|
|
742
|
+
|
|
743
|
+
NOTE:
|
|
744
|
+
\uBC18\uB4DC\uC2DC listSharedTestChannels\uB97C \uD1B5\uD574 \uC5BB\uC740 MID\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.`,
|
|
745
|
+
inputSchema: InputSchema.shape,
|
|
746
|
+
outputSchema: OutputSchema.shape
|
|
747
|
+
};
|
|
748
|
+
function init(tokenProvider, client) {
|
|
749
|
+
return async ({ mid, manualConfirm }) => {
|
|
750
|
+
const token = await getToken(tokenProvider);
|
|
751
|
+
if (token.type === "error") {
|
|
752
|
+
return toolErrorResult(token);
|
|
753
|
+
}
|
|
754
|
+
const authorization = token.data;
|
|
755
|
+
const stores = await listStores({
|
|
756
|
+
client,
|
|
757
|
+
authorization
|
|
758
|
+
});
|
|
759
|
+
if (stores.type === "error") {
|
|
760
|
+
return toolErrorResult(stores);
|
|
761
|
+
}
|
|
762
|
+
const storeId = stores.data.main?.plainId;
|
|
763
|
+
if (storeId == null) {
|
|
427
764
|
return {
|
|
428
765
|
content: [
|
|
429
766
|
{
|
|
430
767
|
type: "text",
|
|
431
|
-
text:
|
|
768
|
+
text: "\uB300\uD45C\uC0C1\uC810 \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4."
|
|
432
769
|
}
|
|
433
770
|
],
|
|
434
|
-
|
|
771
|
+
isError: true
|
|
435
772
|
};
|
|
436
|
-
}
|
|
773
|
+
}
|
|
774
|
+
const list = await listV2SharedTestChannel({
|
|
775
|
+
authorization
|
|
776
|
+
});
|
|
777
|
+
if (list.type === "error") {
|
|
778
|
+
return toolErrorResult(list);
|
|
779
|
+
}
|
|
780
|
+
const channelToAdd = list.data.channels.find(
|
|
781
|
+
({ pgMerchantId }) => pgMerchantId === mid
|
|
782
|
+
);
|
|
783
|
+
if (channelToAdd == null) {
|
|
437
784
|
return {
|
|
438
785
|
content: [
|
|
439
786
|
{
|
|
440
787
|
type: "text",
|
|
441
|
-
text:
|
|
788
|
+
text: `${mid}\uC5D0 \uD574\uB2F9\uD558\uB294 \uD14C\uC2A4\uD2B8 \uCC44\uB110 \uC815\uBCF4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.`
|
|
442
789
|
}
|
|
443
790
|
],
|
|
444
791
|
isError: true
|
|
445
792
|
};
|
|
446
793
|
}
|
|
794
|
+
const add = await addChannel({
|
|
795
|
+
authorization,
|
|
796
|
+
channelType: "TEST",
|
|
797
|
+
manualConfirm,
|
|
798
|
+
...channelToAdd,
|
|
799
|
+
storeId
|
|
800
|
+
});
|
|
801
|
+
if (add.type === "error") {
|
|
802
|
+
return toolErrorResult(add);
|
|
803
|
+
}
|
|
804
|
+
const structuredContent = add.data.channel;
|
|
805
|
+
return {
|
|
806
|
+
content: [
|
|
807
|
+
{
|
|
808
|
+
type: "text",
|
|
809
|
+
text: JSON.stringify(structuredContent, null, 2)
|
|
810
|
+
}
|
|
811
|
+
],
|
|
812
|
+
structuredContent
|
|
813
|
+
};
|
|
447
814
|
};
|
|
448
815
|
}
|
|
449
816
|
|
|
450
|
-
// src/tools/
|
|
451
|
-
var
|
|
452
|
-
__export(
|
|
817
|
+
// src/tools/getChannelsOfStore.ts
|
|
818
|
+
var getChannelsOfStore_exports = {};
|
|
819
|
+
__export(getChannelsOfStore_exports, {
|
|
453
820
|
config: () => config2,
|
|
454
821
|
init: () => init2,
|
|
455
822
|
name: () => name2
|
|
456
823
|
});
|
|
457
|
-
import
|
|
458
|
-
|
|
459
|
-
// src/tools/utils/mapping.ts
|
|
460
|
-
function filterOutNone(obj) {
|
|
461
|
-
return Object.fromEntries(
|
|
462
|
-
Object.entries(obj).filter(([_, value]) => value !== void 0)
|
|
463
|
-
);
|
|
464
|
-
}
|
|
465
|
-
|
|
466
|
-
// src/tools/getIdentityVerificationsByFilter.ts
|
|
467
|
-
var IdentityVerificationTimeStamp = z3.enum([
|
|
468
|
-
"REQUESTED_AT",
|
|
469
|
-
"VERIFIED_AT",
|
|
470
|
-
"FAILED_AT",
|
|
471
|
-
"STATUS_UPDATED_AT"
|
|
472
|
-
]);
|
|
473
|
-
var IdentityVerificationStatus = z3.enum(["READY", "VERIFIED", "FAILED"]);
|
|
474
|
-
var Carrier = z3.enum(["SKT", "KT", "LGU", "SKT_MVNO", "KT_MVNO", "LGU_MVNO"]);
|
|
475
|
-
var name2 = "getIdentityVerificationsByFilter";
|
|
476
|
-
var config2 = {
|
|
477
|
-
title: "\uD3EC\uD2B8\uC6D0 \uBCF8\uC778\uC778\uC99D \uB0B4\uC5ED \uAC80\uC0C9",
|
|
478
|
-
description: `\uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uC8FC\uC5B4\uC9C4 \uC870\uAC74\uC744 \uBAA8\uB450 \uB9CC\uC871\uD558\uB294 \uBCF8\uC778\uC778\uC99D \uC815\uBCF4\uB97C \uAC80\uC0C9\uD569\uB2C8\uB2E4.
|
|
824
|
+
import z7 from "zod";
|
|
479
825
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
)
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
const searchFilter = filterOutNone({
|
|
531
|
-
from: fromTime,
|
|
532
|
-
until: untilTime,
|
|
533
|
-
timeRangeField: timestampType,
|
|
534
|
-
storeId,
|
|
535
|
-
statuses: status,
|
|
536
|
-
pgProviders: pgProvider,
|
|
537
|
-
version,
|
|
538
|
-
carriers: carrier,
|
|
539
|
-
pgMerchantId,
|
|
540
|
-
isTest,
|
|
541
|
-
customer: filterOutNone({
|
|
542
|
-
name: customerName
|
|
543
|
-
})
|
|
826
|
+
// src/tools/request/listChannels.ts
|
|
827
|
+
import { match as match5, P as P4 } from "ts-pattern";
|
|
828
|
+
import z6 from "zod";
|
|
829
|
+
var StatusResponse3 = z6.object({
|
|
830
|
+
code: z6.unknown(),
|
|
831
|
+
message: z6.string(),
|
|
832
|
+
details: z6.unknown()
|
|
833
|
+
}).partial();
|
|
834
|
+
var ChannelResponse = z6.object({
|
|
835
|
+
channelId: z6.string(),
|
|
836
|
+
pgProvider: z6.string(),
|
|
837
|
+
channelType: z6.string(),
|
|
838
|
+
liveChannel: z6.object({
|
|
839
|
+
merchantId: z6.string(),
|
|
840
|
+
storeIds: z6.array(z6.string())
|
|
841
|
+
}).optional(),
|
|
842
|
+
merchantTestChannel: z6.object({
|
|
843
|
+
merchantId: z6.string()
|
|
844
|
+
}).optional(),
|
|
845
|
+
channelName: z6.string(),
|
|
846
|
+
pgMerchantId: z6.string(),
|
|
847
|
+
isForPayment: z6.boolean(),
|
|
848
|
+
isForIdentityCertification: z6.boolean(),
|
|
849
|
+
isFromV1UserPgs: z6.boolean(),
|
|
850
|
+
isFromV1SbcrUsers: z6.boolean(),
|
|
851
|
+
deleted: z6.boolean(),
|
|
852
|
+
boundAt: z6.string(),
|
|
853
|
+
modifiedAt: z6.string(),
|
|
854
|
+
taxType: z6.string().optional(),
|
|
855
|
+
channelKey: z6.string(),
|
|
856
|
+
pgCompany: z6.string(),
|
|
857
|
+
isSupportingV2: z6.boolean(),
|
|
858
|
+
manualConfirm: z6.boolean()
|
|
859
|
+
});
|
|
860
|
+
var ListChannelsResponse = z6.object({
|
|
861
|
+
channels: z6.array(ChannelResponse)
|
|
862
|
+
});
|
|
863
|
+
async function listChannels({
|
|
864
|
+
storeId,
|
|
865
|
+
authorization
|
|
866
|
+
}) {
|
|
867
|
+
try {
|
|
868
|
+
const url = new URL("/v2/channels", CHANNEL_SERVICE_URL);
|
|
869
|
+
url.searchParams.set("storeId", storeId);
|
|
870
|
+
const response = await fetch(url, {
|
|
871
|
+
method: "GET",
|
|
872
|
+
headers: {
|
|
873
|
+
Authorization: authorization,
|
|
874
|
+
"User-Agent": USER_AGENT
|
|
875
|
+
}
|
|
544
876
|
});
|
|
545
|
-
const
|
|
546
|
-
`/identity-verifications?requestBody=${encodeURIComponent(
|
|
547
|
-
JSON.stringify({
|
|
548
|
-
filter: searchFilter,
|
|
549
|
-
page: {
|
|
550
|
-
number: pageIndex,
|
|
551
|
-
size: pageSize
|
|
552
|
-
}
|
|
553
|
-
})
|
|
554
|
-
)}`
|
|
555
|
-
);
|
|
556
|
-
if (!response.ok) {
|
|
557
|
-
const text = await response.text();
|
|
558
|
-
return { content: [{ type: "text", text }], isError: true };
|
|
559
|
-
}
|
|
877
|
+
const text = await response.text();
|
|
560
878
|
try {
|
|
561
|
-
const
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
879
|
+
const parsed = await ListChannelsResponse.or(StatusResponse3).parseAsync(
|
|
880
|
+
JSON.parse(text)
|
|
881
|
+
);
|
|
882
|
+
return match5(parsed).returnType().with({ channels: P4.nonNullable }, (success) => ({
|
|
883
|
+
type: "success",
|
|
884
|
+
data: success
|
|
885
|
+
})).otherwise(({ code, message, details }) => ({
|
|
886
|
+
type: "error",
|
|
887
|
+
data: {
|
|
888
|
+
message: message ?? "\uC0C1\uC810\uC758 \uCC44\uB110 \uC815\uBCF4\uB97C \uAC00\uC838\uC624\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4.",
|
|
889
|
+
code,
|
|
890
|
+
details,
|
|
891
|
+
status: response.status
|
|
892
|
+
}
|
|
893
|
+
}));
|
|
894
|
+
} catch (parseError) {
|
|
895
|
+
return {
|
|
896
|
+
type: "error",
|
|
897
|
+
data: {
|
|
898
|
+
message: "\uC62C\uBC14\uB974\uC9C0 \uC54A\uC740 \uD615\uC2DD\uC758 \uC11C\uBC84 \uC751\uB2F5",
|
|
899
|
+
cause: parseError
|
|
900
|
+
}
|
|
566
901
|
};
|
|
902
|
+
}
|
|
903
|
+
} catch (error) {
|
|
904
|
+
if (error instanceof Error) {
|
|
567
905
|
return {
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
type: "text",
|
|
571
|
-
text: JSON.stringify(structuredContent, null, 2)
|
|
572
|
-
}
|
|
573
|
-
],
|
|
574
|
-
structuredContent
|
|
906
|
+
type: "error",
|
|
907
|
+
data: error
|
|
575
908
|
};
|
|
576
|
-
}
|
|
909
|
+
} else {
|
|
577
910
|
return {
|
|
578
|
-
|
|
579
|
-
|
|
911
|
+
type: "error",
|
|
912
|
+
data: {
|
|
913
|
+
message: "\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.",
|
|
914
|
+
cause: error
|
|
915
|
+
}
|
|
580
916
|
};
|
|
581
917
|
}
|
|
918
|
+
}
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
// src/tools/utils/filterFields.ts
|
|
922
|
+
function filterFields(fields, data) {
|
|
923
|
+
const withPrefixes = new Set(fields);
|
|
924
|
+
for (const field of fields) {
|
|
925
|
+
let searchPos = 0;
|
|
926
|
+
while (true) {
|
|
927
|
+
const dot = field.indexOf(".", searchPos);
|
|
928
|
+
if (dot === -1) break;
|
|
929
|
+
withPrefixes.add(field.slice(0, dot));
|
|
930
|
+
searchPos = dot + 1;
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
return filterFieldsPath(data, "");
|
|
934
|
+
function filterFieldsPath(data2, currentPath) {
|
|
935
|
+
return Object.fromEntries(
|
|
936
|
+
Object.entries(data2).flatMap(([key, value]) => {
|
|
937
|
+
const childPath = currentPath === "" ? key : `${currentPath}.${key}`;
|
|
938
|
+
if (withPrefixes.has(childPath)) {
|
|
939
|
+
if (Array.isArray(value)) {
|
|
940
|
+
return [
|
|
941
|
+
[
|
|
942
|
+
key,
|
|
943
|
+
value.map(
|
|
944
|
+
(item) => typeof item === "object" ? filterFieldsPath(item, childPath) : item
|
|
945
|
+
)
|
|
946
|
+
]
|
|
947
|
+
];
|
|
948
|
+
} else if (typeof value === "object") {
|
|
949
|
+
return [[key, filterFieldsPath(value, childPath)]];
|
|
950
|
+
} else {
|
|
951
|
+
return [[key, value]];
|
|
952
|
+
}
|
|
953
|
+
} else {
|
|
954
|
+
return [];
|
|
955
|
+
}
|
|
956
|
+
})
|
|
957
|
+
);
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// src/tools/getChannelsOfStore.ts
|
|
962
|
+
var name2 = "getChannelsOfStore";
|
|
963
|
+
var Channel = z7.object({
|
|
964
|
+
id: z7.string().describe(
|
|
965
|
+
"\uCC44\uB110 ID\uB85C \uCC44\uB110 \uC218\uC815 \uC2DC\uB9C8\uB2E4 \uBCC0\uACBD\uB429\uB2C8\uB2E4. \uBAA8\uB4E0 \uACB0\uC81C\uAC74\uC740 \uCC44\uB110 ID\uC640 \uD5A0\uAED8 \uC800\uC7A5\uB418\uC5B4 \uCC44\uB110 \uC218\uC815 \uD6C4\uC5D0\uB3C4 \uC774\uC804 ID\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4."
|
|
966
|
+
),
|
|
967
|
+
pg: z7.string().describe(
|
|
968
|
+
"PG\uC0AC \uACB0\uC81C \uBAA8\uB4C8\uC758 \uC2DD\uBCC4\uC790\uB85C, PG\uC0AC\uBCC4\uB85C \uC5EC\uB7EC \uBAA8\uB4C8\uC774 \uC788\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4."
|
|
969
|
+
),
|
|
970
|
+
mid: z7.string().describe("PG\uC0AC\uC5D0\uC11C \uACE0\uAC1D\uC0AC\uB97C \uAD6C\uBD84\uD558\uAE30 \uC704\uD55C ID"),
|
|
971
|
+
name: z7.string().describe("\uCC44\uB110\uBA85"),
|
|
972
|
+
usage: z7.array(z7.enum(["PAYMENT", "IDENTITY"])).describe("\uCC44\uB110\uC744 \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC6A9\uB3C4"),
|
|
973
|
+
createdAt: z7.string().describe("\uC0DD\uC131 \uC2DC\uAC01"),
|
|
974
|
+
modifiedAt: z7.string().describe("\uB9C8\uC9C0\uB9C9 \uC218\uC815 \uC2DC\uAC01"),
|
|
975
|
+
taxType: z7.string().describe("\uC815\uC0B0 \uC2DC\uC5D0\uB9CC \uCC38\uACE0\uD558\uB294, MID\uC758 \uACFC\uC138 \uC815\uBCF4"),
|
|
976
|
+
key: z7.string().describe("\uCC44\uB110 \uD0A4"),
|
|
977
|
+
canV2: z7.boolean().describe("V2 \uC0AC\uC6A9 \uAC00\uB2A5 \uC5EC\uBD80"),
|
|
978
|
+
manualConfirm: z7.boolean().describe("\uC218\uB3D9 \uC2B9\uC778 (2-transaction) \uC0AC\uC6A9 \uC5EC\uBD80")
|
|
979
|
+
}).partial();
|
|
980
|
+
var InputSchema2 = z7.object({
|
|
981
|
+
store: z7.string().describe("\uCC44\uB110\uC744 \uAC80\uC0C9\uD560 \uC0C1\uC810\uC544\uC774\uB514"),
|
|
982
|
+
fields: Channel.keyof().array().describe("\uACB0\uACFC\uB85C \uBC1B\uC744 \uCC44\uB110 \uC815\uBCF4 \uBAA9\uB85D")
|
|
983
|
+
});
|
|
984
|
+
var OutputSchema2 = z7.object({
|
|
985
|
+
items: Channel.array().describe("\uC870\uD68C\uB41C \uCC44\uB110 \uBAA9\uB85D")
|
|
986
|
+
});
|
|
987
|
+
var config2 = {
|
|
988
|
+
title: "\uD3EC\uD2B8\uC6D0 \uC0C1\uC810 \uB0B4 \uCC44\uB110 \uBAA9\uB85D \uC870\uD68C",
|
|
989
|
+
description: "\uACE0\uAC1D\uC0AC\uC758 \uC0C1\uC810\uC5D0 \uC874\uC7AC\uD558\uB294 \uBAA8\uB4E0 \uCC44\uB110 \uC815\uBCF4\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.",
|
|
990
|
+
inputSchema: InputSchema2.shape,
|
|
991
|
+
outputSchema: OutputSchema2.shape
|
|
992
|
+
};
|
|
993
|
+
function init2(tokenProvider) {
|
|
994
|
+
return async ({ store, fields }) => {
|
|
995
|
+
const token = await getToken(tokenProvider);
|
|
996
|
+
if (token.type === "error") {
|
|
997
|
+
return toolErrorResult(token);
|
|
998
|
+
}
|
|
999
|
+
const list = await listChannels({
|
|
1000
|
+
storeId: store,
|
|
1001
|
+
authorization: token.data
|
|
1002
|
+
});
|
|
1003
|
+
if (list.type === "error") {
|
|
1004
|
+
return toolErrorResult(list);
|
|
1005
|
+
}
|
|
1006
|
+
const channels = list.data.channels.filter(({ deleted }) => !deleted).map(
|
|
1007
|
+
({
|
|
1008
|
+
channelId,
|
|
1009
|
+
pgProvider,
|
|
1010
|
+
pgMerchantId,
|
|
1011
|
+
channelName,
|
|
1012
|
+
isForPayment,
|
|
1013
|
+
isForIdentityCertification,
|
|
1014
|
+
boundAt,
|
|
1015
|
+
modifiedAt,
|
|
1016
|
+
taxType,
|
|
1017
|
+
channelKey,
|
|
1018
|
+
isSupportingV2,
|
|
1019
|
+
manualConfirm
|
|
1020
|
+
}) => {
|
|
1021
|
+
const usage = [];
|
|
1022
|
+
if (isForPayment) usage.push("PAYMENT");
|
|
1023
|
+
if (isForIdentityCertification) usage.push("IDENTITY");
|
|
1024
|
+
return {
|
|
1025
|
+
id: channelId,
|
|
1026
|
+
pg: pgProvider,
|
|
1027
|
+
mid: pgMerchantId,
|
|
1028
|
+
name: channelName,
|
|
1029
|
+
usage,
|
|
1030
|
+
createdAt: boundAt,
|
|
1031
|
+
modifiedAt,
|
|
1032
|
+
taxType,
|
|
1033
|
+
key: channelKey,
|
|
1034
|
+
canV2: isSupportingV2,
|
|
1035
|
+
manualConfirm
|
|
1036
|
+
};
|
|
1037
|
+
}
|
|
1038
|
+
);
|
|
1039
|
+
const structuredContent = {
|
|
1040
|
+
items: channels.map((item) => filterFields(fields, item))
|
|
1041
|
+
};
|
|
1042
|
+
return {
|
|
1043
|
+
content: [
|
|
1044
|
+
{
|
|
1045
|
+
type: "text",
|
|
1046
|
+
text: JSON.stringify(structuredContent, null, 2)
|
|
1047
|
+
}
|
|
1048
|
+
],
|
|
1049
|
+
structuredContent
|
|
1050
|
+
};
|
|
582
1051
|
};
|
|
583
1052
|
}
|
|
584
1053
|
|
|
585
|
-
// src/tools/
|
|
586
|
-
var
|
|
587
|
-
__export(
|
|
1054
|
+
// src/tools/getDocsUrl.ts
|
|
1055
|
+
var getDocsUrl_exports = {};
|
|
1056
|
+
__export(getDocsUrl_exports, {
|
|
588
1057
|
config: () => config3,
|
|
589
1058
|
init: () => init3,
|
|
590
1059
|
name: () => name3
|
|
591
1060
|
});
|
|
592
|
-
import
|
|
593
|
-
|
|
1061
|
+
import z8 from "zod";
|
|
1062
|
+
|
|
1063
|
+
// src/tools/utils/docPathToUrl.ts
|
|
1064
|
+
function docPathToUrl(path) {
|
|
1065
|
+
if (path.startsWith("help/")) {
|
|
1066
|
+
return `${HELP_CENTER_URL}/category/${path.slice(5)}`;
|
|
1067
|
+
}
|
|
1068
|
+
return `${DEVELOPERS_URL}/${path}`;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
// src/tools/getDocsUrl.ts
|
|
1072
|
+
var name3 = "getPortoneDocsUrl";
|
|
1073
|
+
var OutputSchema3 = z8.object({
|
|
1074
|
+
url: z8.string().array().describe(
|
|
1075
|
+
"\uBB38\uC11C\uB97C \uC6F9\uC73C\uB85C \uC811\uADFC \uAC00\uB2A5\uD55C \uB9C1\uD06C\uAC00 \uC785\uB825\uD55C \uBB38\uC11C \uC21C\uC11C\uB300\uB85C \uC8FC\uC5B4\uC9D1\uB2C8\uB2E4."
|
|
1076
|
+
)
|
|
1077
|
+
});
|
|
594
1078
|
var config3 = {
|
|
595
|
-
title: "\uD3EC\uD2B8\uC6D0 \
|
|
596
|
-
description: `\
|
|
1079
|
+
title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uC6F9 \uB9C1\uD06C \uC870\uD68C",
|
|
1080
|
+
description: `\uD3EC\uD2B8\uC6D0 \uAC1C\uBCC4 \uBB38\uC11C\uB4E4\uC758 \uACBD\uB85C\uB97C \uD1B5\uD574 \uD574\uB2F9 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uC6F9\uC73C\uB85C \uC811\uADFC \uAC00\uB2A5\uD55C \uB9C1\uD06C\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
|
|
1081
|
+
|
|
1082
|
+
Note:
|
|
1083
|
+
\uBB38\uC11C\uAC00 1\uAC1C\uBFD0\uC778 \uACBD\uC6B0\uC5D0\uB294 readPortoneDoc\uC744 \uC0AC\uC6A9\uD558\uBA74 \uBB38\uC11C \uB0B4\uC6A9\uACFC \uBA54\uD0C0 \uC815\uBCF4\uB3C4 \uD68D\uB4DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.
|
|
1084
|
+
getPortoneDocsUrl\uC740 \uC5EC\uB7EC \uBB38\uC11C\uC758 \uB9C1\uD06C\uB97C \uAC00\uC838\uC62C \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
597
1085
|
inputSchema: {
|
|
598
|
-
|
|
599
|
-
storeId: z4.string().optional().describe(
|
|
600
|
-
"\uD558\uC704 \uC0C1\uC810\uC744 \uD3EC\uD568\uD55C \uD2B9\uC815 \uC0C1\uC810\uC758 \uACB0\uC81C \uAC74\uB9CC\uC744 \uC870\uD68C\uD560 \uACBD\uC6B0\uC5D0\uB9CC \uC785\uB825\uD569\uB2C8\uB2E4. `store-id-{uuid}` \uD615\uC2DD\uC785\uB2C8\uB2E4."
|
|
601
|
-
)
|
|
1086
|
+
path: z8.string().array().describe("\uC77D\uC744 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uB4E4\uC758 \uACBD\uB85C \uBAA9\uB85D")
|
|
602
1087
|
},
|
|
603
|
-
outputSchema:
|
|
604
|
-
result: z4.object({}).passthrough().describe("\uB9C8\uC2A4\uD0B9\uB41C \uACB0\uC81C \uC815\uBCF4")
|
|
605
|
-
}
|
|
1088
|
+
outputSchema: OutputSchema3.shape
|
|
606
1089
|
};
|
|
607
|
-
function init3(
|
|
608
|
-
return
|
|
609
|
-
const
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
const errorText = await response.text();
|
|
618
|
-
return {
|
|
619
|
-
content: [
|
|
620
|
-
{
|
|
621
|
-
type: "text",
|
|
622
|
-
text: errorText
|
|
623
|
-
}
|
|
624
|
-
],
|
|
625
|
-
isError: true
|
|
626
|
-
};
|
|
1090
|
+
function init3(documents) {
|
|
1091
|
+
return ({ path: paths }) => {
|
|
1092
|
+
const { markdownDocs } = documents;
|
|
1093
|
+
const found = [];
|
|
1094
|
+
const notFound = [];
|
|
1095
|
+
for (const path of paths) {
|
|
1096
|
+
if (path in markdownDocs) {
|
|
1097
|
+
found.push(docPathToUrl(markdownDocs[path].path));
|
|
1098
|
+
} else {
|
|
1099
|
+
notFound.push(path);
|
|
627
1100
|
}
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
const structuredContent = {
|
|
631
|
-
result: maskedData
|
|
632
|
-
};
|
|
633
|
-
return {
|
|
634
|
-
content: [
|
|
635
|
-
{
|
|
636
|
-
type: "text",
|
|
637
|
-
text: JSON.stringify(structuredContent, null, 2)
|
|
638
|
-
}
|
|
639
|
-
],
|
|
640
|
-
structuredContent
|
|
641
|
-
};
|
|
642
|
-
} catch {
|
|
1101
|
+
}
|
|
1102
|
+
if (notFound.length > 0) {
|
|
643
1103
|
return {
|
|
644
1104
|
content: [
|
|
645
1105
|
{
|
|
646
1106
|
type: "text",
|
|
647
|
-
text:
|
|
1107
|
+
text: `Document not found at paths: ${notFound}`
|
|
648
1108
|
}
|
|
649
1109
|
],
|
|
650
1110
|
isError: true
|
|
651
1111
|
};
|
|
652
1112
|
}
|
|
653
|
-
|
|
1113
|
+
const structuredContent = {
|
|
1114
|
+
url: found
|
|
1115
|
+
};
|
|
1116
|
+
return {
|
|
1117
|
+
content: [
|
|
1118
|
+
{
|
|
1119
|
+
type: "text",
|
|
1120
|
+
text: JSON.stringify(structuredContent, null, 2)
|
|
1121
|
+
}
|
|
1122
|
+
],
|
|
1123
|
+
structuredContent
|
|
1124
|
+
};
|
|
1125
|
+
};
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
// src/tools/getPaymentsByFilter.ts
|
|
1129
|
+
var getPaymentsByFilter_exports = {};
|
|
1130
|
+
__export(getPaymentsByFilter_exports, {
|
|
1131
|
+
config: () => config4,
|
|
1132
|
+
init: () => init4,
|
|
1133
|
+
name: () => name4
|
|
1134
|
+
});
|
|
1135
|
+
import z10 from "zod";
|
|
1136
|
+
|
|
1137
|
+
// src/tools/request/getPaymentsByFilter.ts
|
|
1138
|
+
import { parse as parse2 } from "graphql";
|
|
1139
|
+
import { gql as gql2 } from "graphql-request";
|
|
1140
|
+
import { match as match6, P as P5 } from "ts-pattern";
|
|
1141
|
+
import z9 from "zod";
|
|
1142
|
+
|
|
1143
|
+
// src/tools/utils/nullableObject.ts
|
|
1144
|
+
function nullableObject(shape) {
|
|
1145
|
+
return Object.fromEntries(
|
|
1146
|
+
Object.entries(shape).map(([key, value]) => [key, value.nullable()])
|
|
1147
|
+
);
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
// src/tools/request/getPaymentsByFilter.ts
|
|
1151
|
+
var ErrorResponse2 = z9.object({
|
|
1152
|
+
__typename: z9.string(),
|
|
1153
|
+
message: z9.string().nullable()
|
|
1154
|
+
});
|
|
1155
|
+
var PageResponse = z9.object({
|
|
1156
|
+
totalCount: z9.number()
|
|
1157
|
+
});
|
|
1158
|
+
var PaymentResponse = z9.object(
|
|
1159
|
+
nullableObject({
|
|
1160
|
+
amount: z9.object(
|
|
1161
|
+
nullableObject({
|
|
1162
|
+
total: z9.number(),
|
|
1163
|
+
taxFree: z9.number(),
|
|
1164
|
+
vat: z9.number(),
|
|
1165
|
+
supply: z9.number(),
|
|
1166
|
+
discount: z9.number(),
|
|
1167
|
+
paid: z9.number(),
|
|
1168
|
+
cancelled: z9.number(),
|
|
1169
|
+
cancelledTaxFree: z9.number(),
|
|
1170
|
+
cardDiscount: z9.number(),
|
|
1171
|
+
easyPayDiscount: z9.number(),
|
|
1172
|
+
promotionDiscount: z9.number(),
|
|
1173
|
+
currentDiscount: z9.number(),
|
|
1174
|
+
cancellable: z9.number()
|
|
1175
|
+
})
|
|
1176
|
+
),
|
|
1177
|
+
billingKey: z9.string(),
|
|
1178
|
+
channel: z9.object(
|
|
1179
|
+
nullableObject({
|
|
1180
|
+
type: z9.string(),
|
|
1181
|
+
id: z9.string(),
|
|
1182
|
+
key: z9.string(),
|
|
1183
|
+
name: z9.string(),
|
|
1184
|
+
pgProvider: z9.string(),
|
|
1185
|
+
pgMerchantId: z9.string()
|
|
1186
|
+
})
|
|
1187
|
+
),
|
|
1188
|
+
channelGroup: z9.object(
|
|
1189
|
+
nullableObject({
|
|
1190
|
+
plainId: z9.string(),
|
|
1191
|
+
name: z9.string(),
|
|
1192
|
+
isForTest: z9.boolean()
|
|
1193
|
+
})
|
|
1194
|
+
),
|
|
1195
|
+
currency: z9.string(),
|
|
1196
|
+
customer: z9.object(
|
|
1197
|
+
nullableObject({
|
|
1198
|
+
id: z9.string()
|
|
1199
|
+
})
|
|
1200
|
+
),
|
|
1201
|
+
histories: z9.array(
|
|
1202
|
+
z9.object(
|
|
1203
|
+
nullableObject({
|
|
1204
|
+
status: z9.string(),
|
|
1205
|
+
statusChangedAt: z9.string(),
|
|
1206
|
+
paid: z9.number(),
|
|
1207
|
+
cancelled: z9.number(),
|
|
1208
|
+
partialCancelled: z9.number()
|
|
1209
|
+
})
|
|
1210
|
+
)
|
|
1211
|
+
),
|
|
1212
|
+
lastWebhookStatus: z9.string(),
|
|
1213
|
+
orderName: z9.string(),
|
|
1214
|
+
transactionId: z9.string(),
|
|
1215
|
+
scheduleId: z9.string(),
|
|
1216
|
+
requestedAt: z9.string(),
|
|
1217
|
+
plainId: z9.string(),
|
|
1218
|
+
methodTypes: z9.array(z9.string()),
|
|
1219
|
+
storeId: z9.string()
|
|
1220
|
+
})
|
|
1221
|
+
);
|
|
1222
|
+
var PaymentsResponse = z9.object({
|
|
1223
|
+
items: z9.array(PaymentResponse),
|
|
1224
|
+
page: PageResponse
|
|
1225
|
+
}).or(ErrorResponse2);
|
|
1226
|
+
var GetPaymentsByFilterResponse = z9.object({
|
|
1227
|
+
merchant: z9.object({
|
|
1228
|
+
store: z9.object({
|
|
1229
|
+
payments: PaymentsResponse
|
|
1230
|
+
}).or(ErrorResponse2)
|
|
1231
|
+
}).or(
|
|
1232
|
+
z9.object({
|
|
1233
|
+
payments: PaymentsResponse
|
|
1234
|
+
})
|
|
1235
|
+
).or(ErrorResponse2)
|
|
1236
|
+
}).transform(({ merchant }) => {
|
|
1237
|
+
if ("__typename" in merchant) return merchant;
|
|
1238
|
+
if ("store" in merchant) {
|
|
1239
|
+
if ("__typename" in merchant.store) return merchant.store;
|
|
1240
|
+
return merchant.store.payments;
|
|
1241
|
+
} else {
|
|
1242
|
+
return merchant.payments;
|
|
1243
|
+
}
|
|
1244
|
+
});
|
|
1245
|
+
var getPaymentsByFilterQuery = parse2(gql2`
|
|
1246
|
+
query GetPaymentsByFilter(
|
|
1247
|
+
$storeId: ID
|
|
1248
|
+
$page: PageInput
|
|
1249
|
+
$sort: PaymentSortInput
|
|
1250
|
+
$filter: PaymentFilterInputV2Input
|
|
1251
|
+
$includeMerchantPayment: Boolean!
|
|
1252
|
+
$includeStorePayment: Boolean!
|
|
1253
|
+
) {
|
|
1254
|
+
merchant {
|
|
1255
|
+
...ErrorFragment
|
|
1256
|
+
... on Merchant {
|
|
1257
|
+
payments(page: $page, sort: $sort, filter: $filter) @include(if: $includeMerchantPayment) {
|
|
1258
|
+
...ErrorFragment
|
|
1259
|
+
...PaymentFragment
|
|
1260
|
+
}
|
|
1261
|
+
store(id: $storeId) {
|
|
1262
|
+
...ErrorFragment
|
|
1263
|
+
... on Store {
|
|
1264
|
+
payments(page: $page, sort: $sort, filter: $filter) @include(if: $includeStorePayment) {
|
|
1265
|
+
...ErrorFragment
|
|
1266
|
+
...PaymentFragment
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
}
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
fragment ErrorFragment on Error {
|
|
1275
|
+
__typename
|
|
1276
|
+
message
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
fragment PaymentFragment on PaymentsPayload {
|
|
1280
|
+
items {
|
|
1281
|
+
amount {
|
|
1282
|
+
total
|
|
1283
|
+
taxFree
|
|
1284
|
+
vat
|
|
1285
|
+
supply
|
|
1286
|
+
discount
|
|
1287
|
+
paid
|
|
1288
|
+
cancelled
|
|
1289
|
+
cancelledTaxFree
|
|
1290
|
+
cardDiscount
|
|
1291
|
+
easyPayDiscount
|
|
1292
|
+
promotionDiscount
|
|
1293
|
+
currentDiscount
|
|
1294
|
+
cancellable
|
|
1295
|
+
}
|
|
1296
|
+
billingKey
|
|
1297
|
+
channel {
|
|
1298
|
+
type
|
|
1299
|
+
id
|
|
1300
|
+
key
|
|
1301
|
+
name
|
|
1302
|
+
pgProvider
|
|
1303
|
+
pgMerchantId
|
|
1304
|
+
}
|
|
1305
|
+
channelGroup {
|
|
1306
|
+
plainId
|
|
1307
|
+
name
|
|
1308
|
+
isForTest
|
|
1309
|
+
}
|
|
1310
|
+
currency
|
|
1311
|
+
customer {
|
|
1312
|
+
id
|
|
1313
|
+
}
|
|
1314
|
+
histories {
|
|
1315
|
+
status
|
|
1316
|
+
statusChangedAt
|
|
1317
|
+
paid
|
|
1318
|
+
cancelled
|
|
1319
|
+
partialCancelled
|
|
1320
|
+
}
|
|
1321
|
+
lastWebhookStatus
|
|
1322
|
+
orderName
|
|
1323
|
+
transactionId
|
|
1324
|
+
storeId
|
|
1325
|
+
scheduleId
|
|
1326
|
+
requestedAt
|
|
1327
|
+
plainId
|
|
1328
|
+
methodTypes
|
|
1329
|
+
}
|
|
1330
|
+
page {
|
|
1331
|
+
totalCount
|
|
1332
|
+
}
|
|
654
1333
|
}
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
var
|
|
658
|
-
__export(getPaymentsByFilter_exports, {
|
|
659
|
-
config: () => config4,
|
|
660
|
-
init: () => init4,
|
|
661
|
-
name: () => name4
|
|
662
|
-
});
|
|
663
|
-
import z5 from "zod";
|
|
664
|
-
var PaymentTimeRangeField = z5.enum(["CREATED_AT", "STATUS_CHANGED_AT"]);
|
|
665
|
-
var PaymentStatus = z5.enum([
|
|
1334
|
+
`);
|
|
1335
|
+
var PaymentSortBy = z9.enum(["REQUESTED_AT", "STATUS_CHANGED_AT"]);
|
|
1336
|
+
var PaymentStatus = z9.enum([
|
|
666
1337
|
"READY",
|
|
667
1338
|
"PENDING",
|
|
668
1339
|
"VIRTUAL_ACCOUNT_ISSUED",
|
|
@@ -671,117 +1342,365 @@ var PaymentStatus = z5.enum([
|
|
|
671
1342
|
"PARTIAL_CANCELLED",
|
|
672
1343
|
"CANCELLED"
|
|
673
1344
|
]);
|
|
674
|
-
var
|
|
1345
|
+
var PaymentType = z9.enum(["NORMAL", "SCHEDULE"]);
|
|
1346
|
+
var PaymentMethodDetailType = z9.enum([
|
|
675
1347
|
"CARD",
|
|
676
1348
|
"TRANSFER",
|
|
677
1349
|
"VIRTUAL_ACCOUNT",
|
|
678
1350
|
"GIFT_CERTIFICATE",
|
|
679
1351
|
"MOBILE",
|
|
680
1352
|
"EASY_PAY",
|
|
681
|
-
"CONVENIENCE_STORE"
|
|
1353
|
+
"CONVENIENCE_STORE",
|
|
1354
|
+
"POINT"
|
|
1355
|
+
]);
|
|
1356
|
+
var PgProvider = z9.enum([
|
|
1357
|
+
"HTML5_INICIS",
|
|
1358
|
+
"PAYPAL",
|
|
1359
|
+
"PAYPAL_V2",
|
|
1360
|
+
"INICIS",
|
|
1361
|
+
"DANAL",
|
|
1362
|
+
"NICE",
|
|
1363
|
+
"DANAL_TPAY",
|
|
1364
|
+
"JTNET",
|
|
1365
|
+
"UPLUS",
|
|
1366
|
+
"NAVERPAY",
|
|
1367
|
+
"KAKAO",
|
|
1368
|
+
"SETTLE",
|
|
1369
|
+
"KCP",
|
|
1370
|
+
"MOBILIANS",
|
|
1371
|
+
"KAKAOPAY",
|
|
1372
|
+
"NAVERCO",
|
|
1373
|
+
"SYRUP",
|
|
1374
|
+
"KICC",
|
|
1375
|
+
"EXIMBAY",
|
|
1376
|
+
"SMILEPAY",
|
|
1377
|
+
"PAYCO",
|
|
1378
|
+
"KCP_BILLING",
|
|
1379
|
+
"ALIPAY",
|
|
1380
|
+
"PAYPLE",
|
|
1381
|
+
"CHAI",
|
|
1382
|
+
"BLUEWALNUT",
|
|
1383
|
+
"SMARTRO",
|
|
1384
|
+
"SMARTRO_V2",
|
|
1385
|
+
"PAYMENTWALL",
|
|
1386
|
+
"TOSSPAYMENTS",
|
|
1387
|
+
"KCP_QUICK",
|
|
1388
|
+
"DAOU",
|
|
1389
|
+
"GALAXIA",
|
|
1390
|
+
"TOSSPAY",
|
|
1391
|
+
"KCP_DIRECT",
|
|
1392
|
+
"SETTLE_ACC",
|
|
1393
|
+
"SETTLE_FIRM",
|
|
1394
|
+
"INICIS_UNIFIED",
|
|
1395
|
+
"KSNET",
|
|
1396
|
+
"PINPAY",
|
|
1397
|
+
"NICE_V2",
|
|
1398
|
+
"TOSS_BRANDPAY",
|
|
1399
|
+
"WELCOME",
|
|
1400
|
+
"TOSSPAY_V2",
|
|
1401
|
+
"INICIS_V2",
|
|
1402
|
+
"KPN",
|
|
1403
|
+
"KCP_V2",
|
|
1404
|
+
"HYPHEN",
|
|
1405
|
+
"EXIMBAY_V2",
|
|
1406
|
+
"INICIS_JP",
|
|
1407
|
+
"PAYLETTER_GLOBAL"
|
|
682
1408
|
]);
|
|
1409
|
+
var SelectedChannelType = z9.enum(["LIVE", "TEST"]);
|
|
1410
|
+
var PaymentWebhookStatus = z9.enum([
|
|
1411
|
+
"SUCCEEDED",
|
|
1412
|
+
"FAILED_NOT_OK_RESPONSE",
|
|
1413
|
+
"FAILED_UNEXPECTED_ERROR"
|
|
1414
|
+
]);
|
|
1415
|
+
var TimestampType = z9.enum(["CREATED_AT", "STATUS_CHANGED_AT"]);
|
|
1416
|
+
var PaymentFilter = z9.object({
|
|
1417
|
+
timestampType: TimestampType.optional(),
|
|
1418
|
+
from: z9.string(),
|
|
1419
|
+
until: z9.string(),
|
|
1420
|
+
statuses: z9.array(PaymentStatus).optional(),
|
|
1421
|
+
types: z9.array(PaymentType).optional(),
|
|
1422
|
+
methods: z9.array(PaymentMethodDetailType).optional(),
|
|
1423
|
+
pgProviders: z9.array(PgProvider).optional(),
|
|
1424
|
+
channelTypes: z9.array(SelectedChannelType).optional(),
|
|
1425
|
+
currencies: z9.array(z9.string()).optional(),
|
|
1426
|
+
lastWebhookStatuses: z9.array(PaymentWebhookStatus).optional(),
|
|
1427
|
+
textSearch: z9.object({
|
|
1428
|
+
id: z9.string(),
|
|
1429
|
+
orderName: z9.string()
|
|
1430
|
+
}).partial()
|
|
1431
|
+
});
|
|
1432
|
+
async function getPaymentsByFilter({
|
|
1433
|
+
client,
|
|
1434
|
+
authorization,
|
|
1435
|
+
id,
|
|
1436
|
+
page,
|
|
1437
|
+
pageSize,
|
|
1438
|
+
sortBy,
|
|
1439
|
+
isDescending,
|
|
1440
|
+
filter
|
|
1441
|
+
}) {
|
|
1442
|
+
try {
|
|
1443
|
+
const response = await client.request({
|
|
1444
|
+
document: getPaymentsByFilterQuery,
|
|
1445
|
+
requestHeaders: {
|
|
1446
|
+
authorization
|
|
1447
|
+
},
|
|
1448
|
+
variables: {
|
|
1449
|
+
storeId: id,
|
|
1450
|
+
page: {
|
|
1451
|
+
number: page,
|
|
1452
|
+
size: pageSize
|
|
1453
|
+
},
|
|
1454
|
+
sort: {
|
|
1455
|
+
by: sortBy,
|
|
1456
|
+
order: isDescending === true ? "DESC" : "ASC"
|
|
1457
|
+
},
|
|
1458
|
+
filter,
|
|
1459
|
+
includeMerchantPayment: id == null,
|
|
1460
|
+
includeStorePayment: id != null
|
|
1461
|
+
}
|
|
1462
|
+
});
|
|
1463
|
+
const parsed = await GetPaymentsByFilterResponse.parseAsync(response);
|
|
1464
|
+
return match6(parsed).returnType().with({ __typename: P5.nonNullable }, ({ __typename, message }) => ({
|
|
1465
|
+
type: "error",
|
|
1466
|
+
data: {
|
|
1467
|
+
message,
|
|
1468
|
+
type: __typename
|
|
1469
|
+
}
|
|
1470
|
+
})).otherwise((stores) => ({
|
|
1471
|
+
type: "success",
|
|
1472
|
+
data: stores
|
|
1473
|
+
}));
|
|
1474
|
+
} catch (error) {
|
|
1475
|
+
if (error instanceof Error) {
|
|
1476
|
+
return {
|
|
1477
|
+
type: "error",
|
|
1478
|
+
data: error
|
|
1479
|
+
};
|
|
1480
|
+
} else {
|
|
1481
|
+
return {
|
|
1482
|
+
type: "error",
|
|
1483
|
+
data: {
|
|
1484
|
+
message: `\uC54C \uC218 \uC5C6\uB294 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4.`,
|
|
1485
|
+
cause: error
|
|
1486
|
+
}
|
|
1487
|
+
};
|
|
1488
|
+
}
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
// src/tools/getPaymentsByFilter.ts
|
|
683
1493
|
var name4 = "getPaymentsByFilter";
|
|
1494
|
+
var Amount = z10.object({
|
|
1495
|
+
total: z10.number().describe("\uCD1D \uAE08\uC561"),
|
|
1496
|
+
taxFree: z10.number().describe("\uBA74\uC138 \uAE08\uC561"),
|
|
1497
|
+
vat: z10.number().describe("\uBD80\uAC00\uC138"),
|
|
1498
|
+
supply: z10.number().describe("\uACF5\uAE09\uAC00\uC561"),
|
|
1499
|
+
dc: z10.number().describe("\uD560\uC778\uC561"),
|
|
1500
|
+
cancel: z10.number().describe("\uCD1D \uCDE8\uC18C\uC561"),
|
|
1501
|
+
taxFreeCancel: z10.number().describe("\uBA74\uC138 \uCDE8\uC18C\uC561"),
|
|
1502
|
+
cardDc: z10.number().describe("\uCE74\uB4DC\uC0AC \uD560\uC778\uC561"),
|
|
1503
|
+
easyDc: z10.number().describe("\uAC04\uD3B8\uACB0\uC81C \uD560\uC778\uC561"),
|
|
1504
|
+
promotionDc: z10.number().describe("\uD504\uB85C\uBAA8\uC158 \uD560\uC778\uC561"),
|
|
1505
|
+
balance: z10.number().describe("\uCDE8\uC18C \uAC00\uB2A5 \uC794\uC561")
|
|
1506
|
+
}).partial();
|
|
1507
|
+
var AmountFields = Object.keys(Amount.shape);
|
|
1508
|
+
var Channel2 = z10.object({
|
|
1509
|
+
type: z10.string().describe("\uCC44\uB110 \uC2E4\uC5F0\uB3D9 \uC885\uB958"),
|
|
1510
|
+
id: z10.string().describe("\uCC44\uB110 ID. \uCC44\uB110\uC744 \uC218\uC815\uD558\uBA74 \uCC44\uB110 ID\uAC00 \uBCC0\uACBD\uB418\uBA70 \uCC44\uB110\uD0A4\uB294 \uC720\uC9C0\uB428."),
|
|
1511
|
+
key: z10.string().describe("\uCC44\uB110\uD0A4"),
|
|
1512
|
+
name: z10.string().describe("\uCC44\uB110\uBA85"),
|
|
1513
|
+
pg: z10.string().describe("PG\uC0AC \uBAA8\uB4C8"),
|
|
1514
|
+
mid: z10.string().describe("PG\uC0AC MID")
|
|
1515
|
+
}).partial();
|
|
1516
|
+
var ChannelFields = Object.keys(Channel2.shape);
|
|
1517
|
+
var ChannelGroup = z10.object({
|
|
1518
|
+
id: z10.string().describe("\uCC44\uB110 \uADF8\uB8F9 ID"),
|
|
1519
|
+
name: z10.string().describe("\uADF8\uB8F9\uBA85"),
|
|
1520
|
+
test: z10.boolean().describe("\uD14C\uC2A4\uD2B8 \uC5EC\uBD80")
|
|
1521
|
+
}).partial();
|
|
1522
|
+
var ChannelGroupFields = Object.keys(ChannelGroup.shape);
|
|
1523
|
+
var History = z10.object({
|
|
1524
|
+
status: z10.string().describe("\uAC70\uB798 \uC0C1\uD0DC"),
|
|
1525
|
+
changedAt: z10.string().describe("\uC0C1\uD0DC \uBCC0\uACBD \uC2DC\uAC01"),
|
|
1526
|
+
paid: z10.number().describe("\uACB0\uC81C\uC561"),
|
|
1527
|
+
cancel: z10.number().describe("\uCDE8\uC18C\uC561")
|
|
1528
|
+
}).partial();
|
|
1529
|
+
var HistoryFields = Object.keys(History.shape);
|
|
1530
|
+
var Payment = z10.object({
|
|
1531
|
+
amount: Amount.describe("\uAE08\uC561 \uC815\uBCF4"),
|
|
1532
|
+
billKey: z10.string().describe("\uC0AC\uC6A9\uB41C \uBE4C\uB9C1\uD0A4"),
|
|
1533
|
+
channel: Channel2.describe("\uACB0\uC81C \uB2F9\uC2DC \uC120\uD0DD\uB41C \uCC44\uB110 \uC815\uBCF4"),
|
|
1534
|
+
group: ChannelGroup.describe("\uCC44\uB110 \uADF8\uB8F9 \uC815\uBCF4"),
|
|
1535
|
+
currency: z10.string().describe("\uACB0\uC81C \uD1B5\uD654"),
|
|
1536
|
+
customer: z10.string().describe("\uACE0\uAC1D ID"),
|
|
1537
|
+
history: History.array().describe("\uACB0\uC81C \uC0C1\uD0DC \uBCC0\uACBD \uAE30\uB85D"),
|
|
1538
|
+
webhook: z10.string().describe("\uB9C8\uC9C0\uB9C9 \uC6F9\uD6C5 \uC218\uC2E0 \uACB0\uACFC"),
|
|
1539
|
+
order: z10.string().describe("\uC8FC\uBB38\uBA85"),
|
|
1540
|
+
txId: z10.string().describe("\uD3EC\uD2B8\uC6D0 \uAC70\uB798\uBC88\uD638 (V1\uC5D0\uC11C\uB294 imp_uid)"),
|
|
1541
|
+
storeId: z10.string().describe("\uAC70\uB798 \uBC1C\uC0DD \uC0C1\uC810\uC544\uC774\uB514"),
|
|
1542
|
+
schedule: z10.string().describe("\uACB0\uC81C \uC608\uC57D ID"),
|
|
1543
|
+
requestAt: z10.string().describe("\uACB0\uC81C \uC694\uCCAD \uC2DC\uAC01"),
|
|
1544
|
+
paymentId: z10.string().describe("\uACE0\uAC1D\uC0AC \uAC70\uB798\uBC88\uD638 (V1\uC5D0\uC11C\uB294 merchant_uid)"),
|
|
1545
|
+
method: z10.string().array().describe("\uC0AC\uC6A9\uB41C \uACB0\uC81C\uC218\uB2E8 \uBAA9\uB85D")
|
|
1546
|
+
}).partial();
|
|
1547
|
+
var PaymentFields = Object.keys(Payment.shape).concat(AmountFields.map((key) => `amount.${key}`)).concat(ChannelFields.map((key) => `channel.${key}`)).concat(ChannelGroupFields.map((key) => `group.${key}`)).concat(HistoryFields.map((key) => `history.${key}`));
|
|
1548
|
+
var OutputSchema4 = z10.object({
|
|
1549
|
+
items: Payment.array().describe("\uC870\uD68C\uB41C \uACB0\uC81C \uBAA9\uB85D"),
|
|
1550
|
+
count: z10.number().describe("\uD398\uC774\uC9C0\uC640 \uAD00\uACC4\uC5C6\uC774 \uC870\uAC74\uC5D0 \uB9DE\uB294 \uACB0\uC81C \uCD1D \uAC1C\uC218")
|
|
1551
|
+
});
|
|
1552
|
+
var InputSchema3 = z10.object({
|
|
1553
|
+
from: z10.string().datetime({ offset: true }).describe("\uC870\uD68C \uC2DC\uC791 \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
|
|
1554
|
+
to: z10.string().datetime({ offset: true }).describe("\uC870\uD68C \uC885\uB8CC \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
|
|
1555
|
+
timeType: TimestampType.describe("from, to\uB85C \uC81C\uC57D\uD560 \uACB0\uC81C\uAC74\uC758 \uAE30\uC900 \uC2DC\uAC01 \uC870\uAC74"),
|
|
1556
|
+
page: z10.number().min(0).describe("\uAC80\uC0C9\uD560 \uD398\uC774\uC9C0 \uC704\uCE58\uC785\uB2C8\uB2E4. 0\uBD80\uD130 \uC2DC\uC791\uD569\uB2C8\uB2E4."),
|
|
1557
|
+
pageSize: z10.number().min(1).default(10).describe("\uD55C \uD398\uC774\uC9C0\uC5D0 \uBC18\uD658\uD560 \uACB0\uACFC\uC758 \uC218"),
|
|
1558
|
+
status: z10.array(PaymentStatus).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uC0C1\uD0DC \uBAA9\uB85D"),
|
|
1559
|
+
types: PaymentType.array().optional().describe("\uC77C\uBC18 / \uC815\uAE30\uACB0\uC81C \uC5EC\uBD80"),
|
|
1560
|
+
method: PaymentMethodDetailType.array().optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C\uC218\uB2E8 \uBAA9\uB85D"),
|
|
1561
|
+
pg: PgProvider.array().optional().describe("\uD3EC\uD568\uD560 PG\uC0AC \uBAA8\uB4C8 \uBAA9\uB85D"),
|
|
1562
|
+
channel: SelectedChannelType.array().optional().describe("\uC2E4\uC5F0\uB3D9 \uBC0F \uD14C\uC2A4\uD2B8 \uD3EC\uD568 \uBAA9\uB85D"),
|
|
1563
|
+
currency: z10.string().length(3).toUpperCase().array().optional().describe("\uD3EC\uD568\uD560 \uD1B5\uD654 \uBAA9\uB85D, \uC138 \uC790\uB9AC \uD1B5\uD654 \uCF54\uB4DC"),
|
|
1564
|
+
webhook: PaymentWebhookStatus.array().optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C\uAC74\uC758 \uC6F9\uD6C5 \uC0C1\uD0DC \uBAA9\uB85D"),
|
|
1565
|
+
id: z10.string().optional().describe("paymentId / txId / imp_uid / merchant_uid \uAC80\uC0C9 \uD544\uB4DC"),
|
|
1566
|
+
order: z10.string().optional().describe("\uACB0\uC81C\uAC74\uC758 \uC8FC\uBB38\uBA85"),
|
|
1567
|
+
fields: z10.enum(PaymentFields).array().describe("\uAC80\uC0C9 \uACB0\uACFC\uB85C \uBC1B\uC744 \uD544\uB4DC \uBAA9\uB85D\uC785\uB2C8\uB2E4.")
|
|
1568
|
+
});
|
|
684
1569
|
var config4 = {
|
|
685
1570
|
title: "\uD3EC\uD2B8\uC6D0 \uACB0\uC81C \uB0B4\uC5ED \uAC80\uC0C9",
|
|
686
|
-
description: `\uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uC8FC\uC5B4\uC9C4 \uC870\uAC74\uC744 \uBAA8\uB450 \uB9CC\uC871\uD558\uB294 \uACB0\uC81C \uB0B4\uC5ED\uC744 \
|
|
1571
|
+
description: `\uD3EC\uD2B8\uC6D0 \uC11C\uBC84\uC5D0\uC11C \uC8FC\uC5B4\uC9C4 \uC870\uAC74\uC744 \uBAA8\uB450 \uB9CC\uC871\uD558\uB294 \uACB0\uC81C \uB0B4\uC5ED\uC744 \uAC80\uC0C9\uD569\uB2C8\uB2E4.
|
|
687
1572
|
|
|
688
1573
|
Note:
|
|
689
|
-
UNAUTHORIZED \uC5D0\uB7EC\uC758 \uACBD\uC6B0 MCP \uC11C\uBC84\uC758 API_SECRET \uD658\uACBD\uBCC0\uC218 \uC124\uC815\uC774 \uC798\uBABB\uB418\uC5C8\uC744 \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
|
|
690
1574
|
\uC18C\uBB38\uC790 imp_ \uD639\uC740 imps_ \uB85C \uC2DC\uC791\uD558\uB294 \uAC70\uB798\uBC88\uD638\uB294 \uACE0\uAC1D\uC0AC \uAC70\uB798\uBC88\uD638\uAC00 \uC544\uB2CC V1 \uD3EC\uD2B8\uC6D0 \uAC70\uB798\uBC88\uD638(imp_uid)\uC77C \uAC00\uB2A5\uC131\uC774 \uC788\uC2B5\uB2C8\uB2E4.
|
|
691
1575
|
\uB0A0\uC9DC \uBC0F \uC2DC\uAC04 \uC815\uBCF4 \uC785\uCD9C\uB825 \uC2DC\uC5D0\uB294 \uBC18\uB4DC\uC2DC \uD0C0\uC784\uC874\uC744 \uBA85\uC2DC\uD569\uB2C8\uB2E4.`,
|
|
692
|
-
inputSchema:
|
|
693
|
-
|
|
694
|
-
untilTime: z5.string().datetime({ offset: true }).describe("\uC870\uD68C \uC885\uB8CC \uC2DC\uAC04 (ISO 8601 \uD615\uC2DD)"),
|
|
695
|
-
pageIndex: z5.number().min(0).describe("\uAC80\uC0C9\uD560 \uD398\uC774\uC9C0 \uC704\uCE58\uC785\uB2C8\uB2E4. 0\uBD80\uD130 \uC2DC\uC791\uD569\uB2C8\uB2E4."),
|
|
696
|
-
pageSize: z5.number().min(1).default(10).describe("\uD55C \uD398\uC774\uC9C0\uC5D0 \uBC18\uD658\uD560 \uACB0\uACFC\uC758 \uC218\uC785\uB2C8\uB2E4."),
|
|
697
|
-
fields: z5.array(PaymentField).describe("\uAC80\uC0C9 \uACB0\uACFC\uB85C \uBC1B\uC744 \uD544\uB4DC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
|
|
698
|
-
timestampType: PaymentTimeRangeField.optional().default("STATUS_CHANGED_AT").describe(`\uC870\uD68C \uBC94\uC704\uAC00 \uACB0\uC81C\uB97C \uCC98\uC74C \uC2DC\uB3C4\uD55C \uC2DC\uAC01 \uAE30\uC900\uC774\uBA74 "CREATED_AT",
|
|
699
|
-
\uB9C8\uC9C0\uB9C9\uC73C\uB85C \uACB0\uC81C \uC0C1\uD0DC\uAC00 \uBCC0\uACBD\uB41C \uC2DC\uAC01 \uAE30\uC900\uC774\uBA74 "STATUS_CHANGED_AT"\uC785\uB2C8\uB2E4.
|
|
700
|
-
\uBBF8\uC785\uB825 \uC2DC "STATUS_CHANGED_AT"\uC785\uB2C8\uB2E4.`),
|
|
701
|
-
storeId: z5.string().optional().describe(
|
|
702
|
-
"\uD558\uC704 \uC0C1\uC810\uC744 \uD3EC\uD568\uD55C \uD2B9\uC815 \uC0C1\uC810\uC758 \uACB0\uC81C \uAC74\uB9CC\uC744 \uC870\uD68C\uD560 \uACBD\uC6B0\uC5D0\uB9CC \uC785\uB825\uD569\uB2C8\uB2E4. `store-id-{uuid}` \uD615\uC2DD\uC785\uB2C8\uB2E4."
|
|
703
|
-
),
|
|
704
|
-
status: z5.array(PaymentStatus).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uC0C1\uD0DC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
|
|
705
|
-
methods: z5.array(PaymentMethodType).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uC218\uB2E8 \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
|
|
706
|
-
pgProvider: z5.array(PgProviderSchema).optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C\uAC00 \uC77C\uC5B4\uB09C \uACB0\uC81C\uB300\uD589\uC0AC \uBAA9\uB85D\uC785\uB2C8\uB2E4."),
|
|
707
|
-
isTest: z5.boolean().optional().default(true).describe("\uD14C\uC2A4\uD2B8 \uACB0\uC81C\uB97C \uD3EC\uD568\uD560\uC9C0 \uC5EC\uBD80\uC785\uB2C8\uB2E4. \uBBF8\uC785\uB825 \uC2DC `true`\uC785\uB2C8\uB2E4."),
|
|
708
|
-
version: z5.enum(["V1", "V2"]).optional().describe("\uD3EC\uD568\uD560 \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC785\uB2C8\uB2E4. \uBBF8\uC785\uB825 \uC2DC \uBAA8\uB450 \uAC80\uC0C9\uB429\uB2C8\uB2E4."),
|
|
709
|
-
currency: z5.string().optional().describe("\uD3EC\uD568\uD560 \uACB0\uC81C \uD1B5\uD654\uB97C \uB098\uD0C0\uB0B4\uB294 \uC138 \uC790\uB9AC \uD1B5\uD654 \uCF54\uB4DC\uC785\uB2C8\uB2E4."),
|
|
710
|
-
paymentId: z5.string().optional().describe(
|
|
711
|
-
"\uACE0\uAC1D\uC0AC\uC5D0\uC11C \uBC1C\uAE09\uD55C \uAC70\uB798\uBC88\uD638 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4. V2\uC5D0\uC11C\uB294 paymentId, V1\uC5D0\uC11C\uB294 merchant_uid\uC5D0 \uB300\uC751\uB429\uB2C8\uB2E4."
|
|
712
|
-
),
|
|
713
|
-
orderName: z5.string().optional().describe("\uACB0\uC81C \uC8FC\uBB38\uBA85 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
|
|
714
|
-
customerName: z5.string().optional().describe("\uAD6C\uB9E4\uC790\uC758 \uC131\uBA85 \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
|
|
715
|
-
customerEmail: z5.string().optional().describe("\uAD6C\uB9E4\uC790\uC758 \uC774\uBA54\uC77C \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4."),
|
|
716
|
-
pgMerchantId: z5.string().optional().describe("\uACB0\uC81C\uB300\uD589\uC0AC\uC5D0\uC11C \uC81C\uACF5\uD55C \uC0C1\uC810\uC544\uC774\uB514 (MID) \uC77C\uBD80\uBD84\uC785\uB2C8\uB2E4.")
|
|
717
|
-
},
|
|
718
|
-
outputSchema: {
|
|
719
|
-
items: z5.array(z5.object({}).passthrough()).describe("\uC870\uD68C\uB41C \uACB0\uC81C \uAC74\uC758 \uBAA9\uB85D"),
|
|
720
|
-
totalCount: z5.number().describe("\uC870\uAC74\uC5D0 \uB9DE\uB294 \uBCF8\uC778\uC778\uC99D \uAC74\uC758 \uCD1D \uAC1C\uC218")
|
|
721
|
-
}
|
|
1576
|
+
inputSchema: InputSchema3.shape,
|
|
1577
|
+
outputSchema: OutputSchema4.shape
|
|
722
1578
|
};
|
|
723
|
-
function init4(
|
|
1579
|
+
function init4(tokenProvider, client) {
|
|
724
1580
|
return async ({
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
1581
|
+
from,
|
|
1582
|
+
to,
|
|
1583
|
+
timeType,
|
|
1584
|
+
page,
|
|
728
1585
|
pageSize,
|
|
729
1586
|
fields,
|
|
730
|
-
timestampType,
|
|
731
|
-
storeId,
|
|
732
1587
|
status,
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
version,
|
|
1588
|
+
order,
|
|
1589
|
+
id,
|
|
1590
|
+
webhook,
|
|
737
1591
|
currency,
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
pgMerchantId
|
|
1592
|
+
channel,
|
|
1593
|
+
pg,
|
|
1594
|
+
method,
|
|
1595
|
+
types
|
|
743
1596
|
}) => {
|
|
744
|
-
const
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
1597
|
+
const token = await getToken(tokenProvider);
|
|
1598
|
+
if (token.type === "error") {
|
|
1599
|
+
return toolErrorResult(token);
|
|
1600
|
+
}
|
|
1601
|
+
const payments = await getPaymentsByFilter({
|
|
1602
|
+
client,
|
|
1603
|
+
authorization: token.data,
|
|
1604
|
+
filter: {
|
|
1605
|
+
from,
|
|
1606
|
+
until: to,
|
|
1607
|
+
timestampType: timeType,
|
|
1608
|
+
statuses: status,
|
|
1609
|
+
lastWebhookStatuses: webhook,
|
|
1610
|
+
channelTypes: channel,
|
|
1611
|
+
pgProviders: pg,
|
|
1612
|
+
methods: method,
|
|
1613
|
+
currencies: currency,
|
|
1614
|
+
types,
|
|
1615
|
+
textSearch: {
|
|
1616
|
+
orderName: order,
|
|
1617
|
+
id
|
|
1618
|
+
}
|
|
1619
|
+
},
|
|
1620
|
+
page,
|
|
1621
|
+
pageSize
|
|
763
1622
|
});
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
JSON.stringify({
|
|
767
|
-
filter: searchFilter,
|
|
768
|
-
page: {
|
|
769
|
-
number: pageIndex,
|
|
770
|
-
size: pageSize
|
|
771
|
-
}
|
|
772
|
-
})
|
|
773
|
-
)}`
|
|
774
|
-
);
|
|
775
|
-
if (!response.ok) {
|
|
776
|
-
const text = await response.text();
|
|
777
|
-
return { content: [{ type: "text", text }], isError: true };
|
|
1623
|
+
if (payments.type === "error") {
|
|
1624
|
+
return toolErrorResult(payments);
|
|
778
1625
|
}
|
|
1626
|
+
const renamed = payments.data.items.map(
|
|
1627
|
+
({
|
|
1628
|
+
amount,
|
|
1629
|
+
billingKey,
|
|
1630
|
+
channel: channel2,
|
|
1631
|
+
channelGroup,
|
|
1632
|
+
currency: currency2,
|
|
1633
|
+
customer,
|
|
1634
|
+
histories,
|
|
1635
|
+
lastWebhookStatus,
|
|
1636
|
+
orderName,
|
|
1637
|
+
transactionId,
|
|
1638
|
+
storeId,
|
|
1639
|
+
scheduleId,
|
|
1640
|
+
requestedAt,
|
|
1641
|
+
plainId,
|
|
1642
|
+
methodTypes
|
|
1643
|
+
}) => {
|
|
1644
|
+
return {
|
|
1645
|
+
amount: {
|
|
1646
|
+
total: amount?.total ?? void 0,
|
|
1647
|
+
taxFree: amount?.taxFree ?? void 0,
|
|
1648
|
+
vat: amount?.vat ?? void 0,
|
|
1649
|
+
supply: amount?.supply ?? void 0,
|
|
1650
|
+
dc: amount?.discount ?? void 0,
|
|
1651
|
+
cancel: amount?.cancelled ?? void 0,
|
|
1652
|
+
taxFreeCancel: amount?.cancelledTaxFree ?? void 0,
|
|
1653
|
+
cardDc: amount?.cardDiscount ?? void 0,
|
|
1654
|
+
easyDc: amount?.easyPayDiscount ?? void 0,
|
|
1655
|
+
promotionDc: amount?.promotionDiscount ?? void 0,
|
|
1656
|
+
balance: amount?.cancellable ?? void 0
|
|
1657
|
+
},
|
|
1658
|
+
billKey: billingKey ?? void 0,
|
|
1659
|
+
channel: {
|
|
1660
|
+
type: channel2?.type ?? void 0,
|
|
1661
|
+
id: channel2?.id ?? void 0,
|
|
1662
|
+
key: channel2?.key ?? void 0,
|
|
1663
|
+
name: channel2?.name ?? void 0,
|
|
1664
|
+
pg: channel2?.pgProvider ?? void 0,
|
|
1665
|
+
mid: channel2?.pgMerchantId ?? void 0
|
|
1666
|
+
},
|
|
1667
|
+
group: {
|
|
1668
|
+
id: channelGroup?.plainId ?? void 0,
|
|
1669
|
+
name: channelGroup?.name ?? void 0,
|
|
1670
|
+
test: channelGroup?.isForTest ?? void 0
|
|
1671
|
+
},
|
|
1672
|
+
currency: currency2 ?? void 0,
|
|
1673
|
+
customer: customer?.id ?? void 0,
|
|
1674
|
+
history: histories?.map(
|
|
1675
|
+
({
|
|
1676
|
+
status: status2,
|
|
1677
|
+
paid,
|
|
1678
|
+
cancelled,
|
|
1679
|
+
statusChangedAt,
|
|
1680
|
+
partialCancelled
|
|
1681
|
+
}) => ({
|
|
1682
|
+
status: status2 ?? void 0,
|
|
1683
|
+
changedAt: statusChangedAt ?? void 0,
|
|
1684
|
+
paid: paid ?? void 0,
|
|
1685
|
+
cancel: cancelled ?? partialCancelled ?? void 0
|
|
1686
|
+
})
|
|
1687
|
+
) ?? void 0,
|
|
1688
|
+
webhook: lastWebhookStatus ?? void 0,
|
|
1689
|
+
order: orderName ?? void 0,
|
|
1690
|
+
txId: transactionId ?? void 0,
|
|
1691
|
+
storeId: storeId ?? void 0,
|
|
1692
|
+
schedule: scheduleId ?? void 0,
|
|
1693
|
+
requestAt: requestedAt ?? void 0,
|
|
1694
|
+
paymentId: plainId ?? void 0,
|
|
1695
|
+
method: methodTypes ?? void 0
|
|
1696
|
+
};
|
|
1697
|
+
}
|
|
1698
|
+
);
|
|
779
1699
|
try {
|
|
780
|
-
const
|
|
781
|
-
const maskedPayments = filterFields(fields, data.items);
|
|
1700
|
+
const maskedPayments = renamed.map((item) => filterFields(fields, item));
|
|
782
1701
|
const structuredContent = {
|
|
783
1702
|
items: maskedPayments,
|
|
784
|
-
|
|
1703
|
+
count: payments.data.page.totalCount
|
|
785
1704
|
};
|
|
786
1705
|
return {
|
|
787
1706
|
content: [
|
|
@@ -808,7 +1727,7 @@ __export(listDocs_exports, {
|
|
|
808
1727
|
init: () => init5,
|
|
809
1728
|
name: () => name5
|
|
810
1729
|
});
|
|
811
|
-
import
|
|
1730
|
+
import z11 from "zod";
|
|
812
1731
|
|
|
813
1732
|
// src/tools/utils/markdown.ts
|
|
814
1733
|
function formatDocumentMetadata(doc) {
|
|
@@ -829,22 +1748,23 @@ function formatDocumentMetadata(doc) {
|
|
|
829
1748
|
}
|
|
830
1749
|
|
|
831
1750
|
// src/tools/listDocs.ts
|
|
832
|
-
var name5 = "
|
|
1751
|
+
var name5 = "listPortoneDocs";
|
|
833
1752
|
var config5 = {
|
|
834
1753
|
title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D \uC870\uD68C",
|
|
835
|
-
description: `\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D\uC744 \uCE74\uD14C\uACE0\uB9AC\uBCC4\uB85C \uD544\uD130\uB9C1\uD558\uC5EC \uC870\uD68C\uD569\uB2C8\uB2E4.
|
|
1754
|
+
description: `\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D\uC744 \uCE74\uD14C\uACE0\uB9AC\uBCC4\uB85C \uD544\uD130\uB9C1\uD558\uC5EC \uC870\uD68C\uD569\uB2C8\uB2E4.
|
|
1755
|
+
\uBAA9\uB85D\uC5D0\uB294 \uBB38\uC11C \uACBD\uB85C, \uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804 \uB4F1 \uCD95\uC57D\uB41C \uBB38\uC11C \uC815\uBCF4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.
|
|
1756
|
+
|
|
1757
|
+
Returns:
|
|
1758
|
+
\uD544\uD130\uB9C1\uB41C \uBB38\uC11C \uBAA9\uB85D (\uAC01 \uBB38\uC758 \uACBD\uB85C, \uAE38\uC774, \uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804 \uB4F1)`,
|
|
836
1759
|
inputSchema: {
|
|
837
|
-
dev_docs:
|
|
1760
|
+
dev_docs: z11.boolean().default(true).describe(
|
|
838
1761
|
"\uAC1C\uBC1C\uC790\uB97C \uC704\uD55C \uBB38\uC11C \uD3EC\uD568 \uC5EC\uBD80 (blog/, release-notes/, help/\uB85C \uC2DC\uC791\uD558\uC9C0 \uC54A\uB294 \uBAA8\uB4E0 \uBB38\uC11C)"
|
|
839
1762
|
),
|
|
840
|
-
tech_blog:
|
|
841
|
-
release_notes:
|
|
842
|
-
help_docs:
|
|
1763
|
+
tech_blog: z11.boolean().default(false).describe("\uAE30\uC220 \uBE14\uB85C\uADF8 \uD3EC\uC2A4\uD2B8 (blog/) \uD3EC\uD568 \uC5EC\uBD80"),
|
|
1764
|
+
release_notes: z11.boolean().default(false).describe("\uAC1C\uBC1C\uC790\uC13C\uD130 \uB9B4\uB9AC\uC988 \uB178\uD2B8 (release-notes/) \uD3EC\uD568 \uC5EC\uBD80"),
|
|
1765
|
+
help_docs: z11.boolean().default(true).describe(
|
|
843
1766
|
"\uAC1C\uBC1C\uACFC \uBB34\uAD00\uD558\uAC8C \uC11C\uBE44\uC2A4 \uAD00\uB828 \uB0B4\uC6A9\uC744 \uC77C\uBC18\uC801\uC73C\uB85C \uB2F4\uB294 \uD5EC\uD504\uC13C\uD130 \uBB38\uC11C (help/) \uD3EC\uD568 \uC5EC\uBD80"
|
|
844
1767
|
)
|
|
845
|
-
},
|
|
846
|
-
outputSchema: {
|
|
847
|
-
result: z6.string().describe("\uD544\uD130\uB9C1\uB41C \uBB38\uC11C \uBAA9\uB85D")
|
|
848
1768
|
}
|
|
849
1769
|
};
|
|
850
1770
|
function init5(documents) {
|
|
@@ -874,100 +1794,186 @@ function init5(documents) {
|
|
|
874
1794
|
type: "text",
|
|
875
1795
|
text: "No documents found with the specified filters."
|
|
876
1796
|
}
|
|
877
|
-
]
|
|
878
|
-
isError: true
|
|
1797
|
+
]
|
|
879
1798
|
};
|
|
880
1799
|
}
|
|
881
1800
|
const formattedResult = filteredDocs.map((doc) => formatDocumentMetadata(doc)).join("\n---\n");
|
|
882
|
-
const structuredContent = {
|
|
883
|
-
result: formattedResult
|
|
884
|
-
};
|
|
885
1801
|
return {
|
|
886
1802
|
content: [
|
|
887
1803
|
{
|
|
888
1804
|
type: "text",
|
|
889
|
-
text:
|
|
1805
|
+
text: formattedResult
|
|
890
1806
|
}
|
|
891
|
-
]
|
|
892
|
-
structuredContent
|
|
1807
|
+
]
|
|
893
1808
|
};
|
|
894
1809
|
};
|
|
895
1810
|
}
|
|
896
1811
|
|
|
897
|
-
// src/tools/
|
|
898
|
-
var
|
|
899
|
-
__export(
|
|
1812
|
+
// src/tools/listSharedTestChannels.ts
|
|
1813
|
+
var listSharedTestChannels_exports = {};
|
|
1814
|
+
__export(listSharedTestChannels_exports, {
|
|
900
1815
|
config: () => config6,
|
|
901
1816
|
init: () => init6,
|
|
902
1817
|
name: () => name6
|
|
903
1818
|
});
|
|
904
|
-
import
|
|
905
|
-
var name6 = "
|
|
1819
|
+
import z12 from "zod";
|
|
1820
|
+
var name6 = "listSharedTestChannels";
|
|
1821
|
+
var SharedTestChannel = z12.object({
|
|
1822
|
+
pg: z12.string().describe(
|
|
1823
|
+
"PG\uC0AC \uACB0\uC81C \uBAA8\uB4C8\uC758 \uC2DD\uBCC4\uC790\uB85C, PG\uC0AC\uBCC4\uB85C \uC5EC\uB7EC \uBAA8\uB4C8\uC774 \uC788\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4."
|
|
1824
|
+
),
|
|
1825
|
+
mid: z12.string().describe("PG\uC0AC\uC5D0\uC11C \uACE0\uAC1D\uC0AC\uB97C \uAD6C\uBD84\uD558\uAE30 \uC704\uD55C ID"),
|
|
1826
|
+
name: z12.string().describe("\uD3EC\uD2B8\uC6D0\uC5D0\uC11C \uC9C0\uC815\uD55C \uCC44\uB110\uC758 \uC774\uB984"),
|
|
1827
|
+
usage: z12.array(z12.enum(["PAYMENT", "IDENTITY"])).describe("\uCC44\uB110\uC744 \uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC6A9\uB3C4")
|
|
1828
|
+
});
|
|
1829
|
+
var OutputSchema5 = z12.object({
|
|
1830
|
+
items: z12.array(SharedTestChannel).describe("\uC870\uD68C\uB41C \uCC44\uB110 \uBAA9\uB85D\uC73C\uB85C, MID\uAC00 \uD3EC\uD568\uB429\uB2C8\uB2E4.")
|
|
1831
|
+
});
|
|
906
1832
|
var config6 = {
|
|
907
|
-
title: "\uD3EC\uD2B8\uC6D0 \
|
|
908
|
-
description:
|
|
909
|
-
|
|
910
|
-
Note:
|
|
911
|
-
\uBA3C\uC800 list_portone_docs\uC744 \uC0AC\uC6A9\uD574 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D\uC744 \uD655\uC778\uD558\uACE0,
|
|
912
|
-
\uADF8 \uC911 \uC6D0\uD558\uB294 \uBB38\uC11C\uC758 path\uB97C read_portone_doc\uC5D0 \uC804\uB2EC\uD558\uC5EC \uB0B4\uC6A9\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
1833
|
+
title: "\uD3EC\uD2B8\uC6D0 \uACF5\uC6A9 \uD14C\uC2A4\uD2B8 \uCC44\uB110 \uBAA9\uB85D \uC870\uD68C",
|
|
1834
|
+
description: "\uD3EC\uD2B8\uC6D0\uC5D0\uC11C \uD14C\uC2A4\uD2B8 \uC6A9\uB3C4\uB85C \uC81C\uACF5\uD558\uB294 \uCC44\uB110\uC758 \uBAA9\uB85D\uC744 \uAC00\uC838\uC635\uB2C8\uB2E4.",
|
|
913
1835
|
inputSchema: {
|
|
914
|
-
|
|
1836
|
+
pgProviders: z12.array(PgProvider).optional().describe("\uBAA9\uB85D\uC5D0 \uC788\uB294 PG\uC0AC(\uBBF8\uC124\uC815 \uC2DC \uBAA8\uB4E0 PG\uC0AC)\uB9CC \uBCF4\uC5EC\uC90D\uB2C8\uB2E4.")
|
|
915
1837
|
},
|
|
916
|
-
outputSchema:
|
|
917
|
-
result: z7.string().describe("\uCC3E\uC740 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uB0B4\uC6A9")
|
|
918
|
-
}
|
|
1838
|
+
outputSchema: OutputSchema5.shape
|
|
919
1839
|
};
|
|
920
|
-
function init6(
|
|
921
|
-
return (
|
|
922
|
-
const
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
],
|
|
932
|
-
isError: true
|
|
933
|
-
};
|
|
1840
|
+
function init6(tokenProvider) {
|
|
1841
|
+
return async () => {
|
|
1842
|
+
const token = await getToken(tokenProvider);
|
|
1843
|
+
if (token.type === "error") {
|
|
1844
|
+
return toolErrorResult(token);
|
|
1845
|
+
}
|
|
1846
|
+
const list = await listV2SharedTestChannel({
|
|
1847
|
+
authorization: token.data
|
|
1848
|
+
});
|
|
1849
|
+
if (list.type === "error") {
|
|
1850
|
+
return toolErrorResult(list);
|
|
934
1851
|
}
|
|
935
1852
|
const structuredContent = {
|
|
936
|
-
|
|
1853
|
+
items: list.data.channels.map(
|
|
1854
|
+
({
|
|
1855
|
+
pgProvider,
|
|
1856
|
+
pgMerchantId,
|
|
1857
|
+
channelName,
|
|
1858
|
+
isForPayment,
|
|
1859
|
+
isForIdentityCertification
|
|
1860
|
+
}) => {
|
|
1861
|
+
const usage = [];
|
|
1862
|
+
if (isForPayment) usage.push("PAYMENT");
|
|
1863
|
+
if (isForIdentityCertification) usage.push("IDENTITY");
|
|
1864
|
+
return {
|
|
1865
|
+
pg: pgProvider,
|
|
1866
|
+
mid: pgMerchantId,
|
|
1867
|
+
name: channelName,
|
|
1868
|
+
usage
|
|
1869
|
+
};
|
|
1870
|
+
}
|
|
1871
|
+
)
|
|
937
1872
|
};
|
|
938
1873
|
return {
|
|
1874
|
+
structuredContent,
|
|
939
1875
|
content: [
|
|
940
1876
|
{
|
|
941
1877
|
type: "text",
|
|
942
1878
|
text: JSON.stringify(structuredContent, null, 2)
|
|
943
1879
|
}
|
|
944
|
-
]
|
|
945
|
-
structuredContent
|
|
1880
|
+
]
|
|
946
1881
|
};
|
|
947
1882
|
};
|
|
948
1883
|
}
|
|
949
1884
|
|
|
950
|
-
// src/tools/
|
|
951
|
-
var
|
|
952
|
-
__export(
|
|
1885
|
+
// src/tools/listStores.ts
|
|
1886
|
+
var listStores_exports = {};
|
|
1887
|
+
__export(listStores_exports, {
|
|
953
1888
|
config: () => config7,
|
|
954
1889
|
init: () => init7,
|
|
955
1890
|
name: () => name7
|
|
956
1891
|
});
|
|
957
|
-
import
|
|
958
|
-
var name7 = "
|
|
1892
|
+
import z13 from "zod";
|
|
1893
|
+
var name7 = "listStores";
|
|
1894
|
+
var Store = z13.object({
|
|
1895
|
+
id: z13.string().describe("\uAC70\uB798 \uB2E4\uAC74 \uC870\uD68C\uC6A9 \uC0C1\uC810 \uC2DD\uBCC4\uC790"),
|
|
1896
|
+
storeId: z13.string().describe("\uD3EC\uD2B8\uC6D0 \uC0C1\uC810\uC544\uC774\uB514"),
|
|
1897
|
+
name: z13.string().describe("\uC0C1\uC810\uBA85"),
|
|
1898
|
+
userId: z13.number().optional().describe("V1 \uC720\uC800 \uC544\uC774\uB514"),
|
|
1899
|
+
userCode: z13.string().optional().describe("V1 \uACE0\uAC1D \uC2DD\uBCC4\uBC88\uD638"),
|
|
1900
|
+
tierCode: z13.string().optional().describe("\uD2F0\uC5B4\uCF54\uB4DC")
|
|
1901
|
+
});
|
|
1902
|
+
var OutputSchema6 = z13.object({
|
|
1903
|
+
main: Store.optional().describe("\uB300\uD45C\uC0C1\uC810"),
|
|
1904
|
+
items: z13.array(Store).describe("\uD558\uC704\uC0C1\uC810 \uBAA9\uB85D")
|
|
1905
|
+
});
|
|
959
1906
|
var config7 = {
|
|
960
|
-
title: "\
|
|
961
|
-
description:
|
|
1907
|
+
title: "\uC0C1\uC810 \uBAA9\uB85D \uC870\uD68C",
|
|
1908
|
+
description: "\uD3EC\uD2B8\uC6D0 \uACC4\uC815\uC5D0 \uC5F0\uACB0\uB41C \uB300\uD45C\uC0C1\uC810 \uBC0F \uD558\uC704\uC0C1\uC810\uC758 \uC815\uBCF4\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.",
|
|
1909
|
+
inputSchema: {},
|
|
1910
|
+
outputSchema: OutputSchema6.shape
|
|
1911
|
+
};
|
|
1912
|
+
function init7(tokenProvider, client) {
|
|
1913
|
+
return async () => {
|
|
1914
|
+
const token = await getToken(tokenProvider);
|
|
1915
|
+
if (token.type === "error") {
|
|
1916
|
+
return toolErrorResult(token);
|
|
1917
|
+
}
|
|
1918
|
+
const list = await listStores({
|
|
1919
|
+
client,
|
|
1920
|
+
authorization: token.data
|
|
1921
|
+
});
|
|
1922
|
+
if (list.type === "error") {
|
|
1923
|
+
return toolErrorResult(list);
|
|
1924
|
+
}
|
|
1925
|
+
const structuredContent = {
|
|
1926
|
+
main: list.data.main == null ? void 0 : renameStore(list.data.main),
|
|
1927
|
+
items: list.data.items.map((store) => renameStore(store))
|
|
1928
|
+
};
|
|
1929
|
+
return {
|
|
1930
|
+
content: [
|
|
1931
|
+
{
|
|
1932
|
+
type: "text",
|
|
1933
|
+
text: JSON.stringify(structuredContent, null, 2)
|
|
1934
|
+
}
|
|
1935
|
+
],
|
|
1936
|
+
structuredContent
|
|
1937
|
+
};
|
|
1938
|
+
};
|
|
1939
|
+
}
|
|
1940
|
+
function renameStore(store) {
|
|
1941
|
+
const { plainId, ...rest } = store;
|
|
1942
|
+
return {
|
|
1943
|
+
storeId: plainId,
|
|
1944
|
+
...rest
|
|
1945
|
+
};
|
|
1946
|
+
}
|
|
1947
|
+
|
|
1948
|
+
// src/tools/readDoc.ts
|
|
1949
|
+
var readDoc_exports = {};
|
|
1950
|
+
__export(readDoc_exports, {
|
|
1951
|
+
config: () => config8,
|
|
1952
|
+
init: () => init8,
|
|
1953
|
+
name: () => name8
|
|
1954
|
+
});
|
|
1955
|
+
import z14 from "zod";
|
|
1956
|
+
var name8 = "readPortoneDoc";
|
|
1957
|
+
var OutputSchema7 = z14.object({
|
|
1958
|
+
content: z14.string().optional().describe("\uCC3E\uC740 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uB0B4\uC6A9"),
|
|
1959
|
+
metadata: z14.string().optional().describe("\uCC3E\uC740 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uBA54\uD0C0 \uC815\uBCF4"),
|
|
1960
|
+
url: z14.string().optional().describe("\uBB38\uC11C\uB97C \uC6F9\uC73C\uB85C \uC811\uADFC \uAC00\uB2A5\uD55C \uB9C1\uD06C")
|
|
1961
|
+
});
|
|
1962
|
+
var config8 = {
|
|
1963
|
+
title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uC77D\uAE30",
|
|
1964
|
+
description: `\uD3EC\uD2B8\uC6D0 \uAC1C\uBCC4 \uBB38\uC11C\uC758 \uACBD\uB85C\uB97C \uD1B5\uD574 \uD574\uB2F9 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uB0B4\uC6A9, \uBA54\uD0C0 \uC815\uBCF4(\uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804 \uB4F1), \uC6F9\uC73C\uB85C \uC811\uADFC \uAC00\uB2A5\uD55C \uB9C1\uD06C\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
|
|
1965
|
+
|
|
1966
|
+
Note:
|
|
1967
|
+
\uBA3C\uC800 listPortoneDocs\uC744 \uC0AC\uC6A9\uD574 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uBAA9\uB85D\uC744 \uD655\uC778\uD558\uACE0,
|
|
1968
|
+
\uADF8 \uC911 \uC6D0\uD558\uB294 \uBB38\uC11C\uC758 path\uB97C readPortoneDoc\uC5D0 \uC804\uB2EC\uD558\uC5EC \uB0B4\uC6A9\uC744 \uD655\uC778\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
962
1969
|
inputSchema: {
|
|
963
|
-
path:
|
|
1970
|
+
path: z14.string().describe("\uC77D\uC744 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uACBD\uB85C"),
|
|
1971
|
+
fields: OutputSchema7.keyof().array().describe("\uBC1B\uC744 \uD544\uB4DC \uBAA9\uB85D")
|
|
964
1972
|
},
|
|
965
|
-
outputSchema:
|
|
966
|
-
result: z8.string().describe("\uCC3E\uC740 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uBA54\uD0C0\uB370\uC774\uD130")
|
|
967
|
-
}
|
|
1973
|
+
outputSchema: OutputSchema7.shape
|
|
968
1974
|
};
|
|
969
|
-
function
|
|
970
|
-
return ({ path }) => {
|
|
1975
|
+
function init8(documents) {
|
|
1976
|
+
return ({ path, fields }) => {
|
|
971
1977
|
const { markdownDocs } = documents;
|
|
972
1978
|
const doc = markdownDocs[path];
|
|
973
1979
|
if (!doc) {
|
|
@@ -981,9 +1987,14 @@ function init7(documents) {
|
|
|
981
1987
|
isError: true
|
|
982
1988
|
};
|
|
983
1989
|
}
|
|
984
|
-
const structuredContent =
|
|
985
|
-
|
|
986
|
-
|
|
1990
|
+
const structuredContent = filterFields(
|
|
1991
|
+
fields,
|
|
1992
|
+
{
|
|
1993
|
+
content: doc.content,
|
|
1994
|
+
metadata: formatDocumentMetadata(doc),
|
|
1995
|
+
url: docPathToUrl(doc.path)
|
|
1996
|
+
}
|
|
1997
|
+
);
|
|
987
1998
|
return {
|
|
988
1999
|
content: [
|
|
989
2000
|
{
|
|
@@ -999,11 +2010,11 @@ function init7(documents) {
|
|
|
999
2010
|
// src/tools/readOpenapiSchema.ts
|
|
1000
2011
|
var readOpenapiSchema_exports = {};
|
|
1001
2012
|
__export(readOpenapiSchema_exports, {
|
|
1002
|
-
config: () =>
|
|
1003
|
-
init: () =>
|
|
1004
|
-
name: () =>
|
|
2013
|
+
config: () => config9,
|
|
2014
|
+
init: () => init9,
|
|
2015
|
+
name: () => name9
|
|
1005
2016
|
});
|
|
1006
|
-
import
|
|
2017
|
+
import z15 from "zod";
|
|
1007
2018
|
|
|
1008
2019
|
// src/tools/utils/yaml.ts
|
|
1009
2020
|
import yaml from "js-yaml";
|
|
@@ -1073,21 +2084,21 @@ function stringifyYaml(data) {
|
|
|
1073
2084
|
}
|
|
1074
2085
|
|
|
1075
2086
|
// src/tools/readOpenapiSchema.ts
|
|
1076
|
-
var
|
|
1077
|
-
var
|
|
2087
|
+
var name9 = "readPortoneOpenapiSchema";
|
|
2088
|
+
var config9 = {
|
|
1078
2089
|
title: "\uD3EC\uD2B8\uC6D0 OpenAPI \uC2A4\uD0A4\uB9C8 \uC77D\uAE30",
|
|
1079
2090
|
description: `\uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 OpenAPI \uC2A4\uD0A4\uB9C8 \uB0B4 \uD2B9\uC815 path\uC758 \uB370\uC774\uD130\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.`,
|
|
1080
2091
|
inputSchema: {
|
|
1081
|
-
version:
|
|
1082
|
-
yaml_path:
|
|
2092
|
+
version: z15.enum(["V1", "V2"]).describe("\uD3EC\uD2B8\uC6D0 \uBC84\uC804"),
|
|
2093
|
+
yaml_path: z15.array(z15.string()).describe(
|
|
1083
2094
|
"OpenAPI \uC2A4\uD0A4\uB9C8 \uB0B4\uC758 yaml path (list of strings)\n\uD0A4 \uB610\uB294 \uC778\uB371\uC2A4(0\uBD80\uD130 \uC2DC\uC791)\uB97C \uD3EC\uD568\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4."
|
|
1084
2095
|
)
|
|
1085
2096
|
},
|
|
1086
2097
|
outputSchema: {
|
|
1087
|
-
result:
|
|
2098
|
+
result: z15.string().describe(" OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uCD5C\uB300 depth 3\uC73C\uB85C \uC694\uC57D\uD55C YAML \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4")
|
|
1088
2099
|
}
|
|
1089
2100
|
};
|
|
1090
|
-
function
|
|
2101
|
+
function init9(schema) {
|
|
1091
2102
|
return ({ version, yaml_path }) => {
|
|
1092
2103
|
let schemaData;
|
|
1093
2104
|
if (version === "V1") {
|
|
@@ -1148,24 +2159,23 @@ function init8(schema) {
|
|
|
1148
2159
|
// src/tools/readOpenapiSchemaSummary.ts
|
|
1149
2160
|
var readOpenapiSchemaSummary_exports = {};
|
|
1150
2161
|
__export(readOpenapiSchemaSummary_exports, {
|
|
1151
|
-
config: () =>
|
|
1152
|
-
init: () =>
|
|
1153
|
-
name: () =>
|
|
2162
|
+
config: () => config10,
|
|
2163
|
+
init: () => init10,
|
|
2164
|
+
name: () => name10
|
|
1154
2165
|
});
|
|
1155
|
-
import
|
|
1156
|
-
var
|
|
1157
|
-
var
|
|
2166
|
+
import z16 from "zod";
|
|
2167
|
+
var name10 = "readPortoneOpenapiSchemaSummary";
|
|
2168
|
+
var config10 = {
|
|
1158
2169
|
title: "\uD3EC\uD2B8\uC6D0 OpenAPI \uC2A4\uD0A4\uB9C8 \uC694\uC57D",
|
|
1159
|
-
description: `\uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uC694\uC57D\uD574 \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uD569\uB2C8\uB2E4.
|
|
1160
|
-
\uD574\uB2F9 \uC694\uC57D\uC5D0\uB294 \uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 \uBAA8\uB4E0 REST API\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
2170
|
+
description: `\uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uC694\uC57D\uD574 \uBB38\uC790\uC5F4\uB85C \uBC18\uD658\uD569\uB2C8\uB2E4. \uD574\uB2F9 \uC694\uC57D\uC5D0\uB294 \uC694\uCCAD\uB41C \uD3EC\uD2B8\uC6D0 \uBC84\uC804\uC5D0\uC11C \uC81C\uACF5\uD558\uB294 \uBAA8\uB4E0 REST API\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4.`,
|
|
1161
2171
|
inputSchema: {
|
|
1162
|
-
version:
|
|
2172
|
+
version: z16.enum(["V1", "V2"]).describe("\uD3EC\uD2B8\uC6D0 \uBC84\uC804")
|
|
1163
2173
|
},
|
|
1164
2174
|
outputSchema: {
|
|
1165
|
-
result:
|
|
2175
|
+
result: z16.string().describe("OpenAPI \uC2A4\uD0A4\uB9C8\uB97C \uCD5C\uB300 depth 3\uC73C\uB85C \uC694\uC57D\uD55C YAML \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4")
|
|
1166
2176
|
}
|
|
1167
2177
|
};
|
|
1168
|
-
function
|
|
2178
|
+
function init10(schema) {
|
|
1169
2179
|
return ({ version }) => {
|
|
1170
2180
|
let schemaData;
|
|
1171
2181
|
if (version === "V1") {
|
|
@@ -1226,34 +2236,34 @@ function init9(schema) {
|
|
|
1226
2236
|
// src/tools/readV2BackendCode.ts
|
|
1227
2237
|
var readV2BackendCode_exports = {};
|
|
1228
2238
|
__export(readV2BackendCode_exports, {
|
|
1229
|
-
config: () =>
|
|
1230
|
-
init: () =>
|
|
1231
|
-
name: () =>
|
|
2239
|
+
config: () => config11,
|
|
2240
|
+
init: () => init11,
|
|
2241
|
+
name: () => name11
|
|
1232
2242
|
});
|
|
1233
|
-
import
|
|
1234
|
-
var
|
|
1235
|
-
var
|
|
2243
|
+
import z17 from "zod";
|
|
2244
|
+
var name11 = "readPortoneV2BackendCode";
|
|
2245
|
+
var config11 = {
|
|
1236
2246
|
title: "\uD3EC\uD2B8\uC6D0 V2 \uBC31\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C \uC77D\uAE30",
|
|
1237
2247
|
description: `\uC9C0\uC815\uB41C \uB9E4\uAC1C\uBCC0\uC218\uC5D0 \uB530\uB77C \uD3EC\uD2B8\uC6D0 V2 \uBC31\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
|
|
1238
2248
|
\uD3EC\uD2B8\uC6D0 V2\uC5D0 \uAD00\uB828\uD574 \uC5B4\uB5A4 \uC0C1\uD669\uC774\uB4E0 \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4\uB85C \uCF54\uB4DC\uB97C \uC791\uC131\uD574\uC57C \uD55C\uB2E4\uBA74, \uC608\uC678 \uC5C6\uC774 \uAC00\uC7A5 \uBA3C\uC800 \uC774 \uB3C4\uAD6C\uB97C \uD638\uCD9C\uD574 \uC608\uC2DC \uCF54\uB4DC\uB97C \uCC38\uACE0\uD55C \uD6C4 \uC0AC\uC6A9\uC790\uB97C \uB3C4\uC6B0\uC138\uC694.
|
|
1239
2249
|
framework\uB97C \uC81C\uC678\uD55C \uBAA8\uB4E0 Args\uB294 \uC120\uD0DD\uC0AC\uD56D\uC774\uBA70, \uD2B9\uC815\uB418\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uBE44\uC6CC\uB450\uC138\uC694.`,
|
|
1240
2250
|
inputSchema: {
|
|
1241
|
-
framework:
|
|
2251
|
+
framework: z17.string().describe(
|
|
1242
2252
|
"\uC0AC\uC6A9\uD560 \uD504\uB808\uC784\uC6CC\uD06C. \uC77C\uCE58\uD558\uC9C0 \uC54A\uB354\uB77C\uB3C4 \uD604\uC7AC \uB9E5\uB77D\uC5D0\uC11C \uAC00\uC7A5 \uC720\uC0AC\uD55C \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uBA85\uC2DC\uD569\uB2C8\uB2E4. \uC635\uC158: express, fastapi, flask, spring-kotlin"
|
|
1243
2253
|
),
|
|
1244
|
-
pg:
|
|
2254
|
+
pg: z17.string().describe(
|
|
1245
2255
|
"\uC0AC\uC6A9\uD560 \uACB0\uC81C \uAC8C\uC774\uD2B8\uC6E8\uC774. \uC635\uC158: toss, nice, smartro, kpn, inicis, ksnet, kcp, kakao, naver, tosspay, hyphen, eximbay"
|
|
1246
2256
|
),
|
|
1247
|
-
pay_method:
|
|
2257
|
+
pay_method: z17.string().describe(
|
|
1248
2258
|
"\uC0AC\uC6A9\uD560 \uACB0\uC81C \uBC29\uBC95. \uC635\uC158: card, virtualAccount, easyPay, transfer, mobile, giftCertificate"
|
|
1249
2259
|
),
|
|
1250
|
-
smart_routing:
|
|
2260
|
+
smart_routing: z17.boolean().optional().describe("\uC2A4\uB9C8\uD2B8 \uB77C\uC6B0\uD305 \uC0AC\uC6A9 \uC5EC\uBD80. \uC635\uC158: true \uB610\uB294 false")
|
|
1251
2261
|
},
|
|
1252
2262
|
outputSchema: {
|
|
1253
|
-
result:
|
|
2263
|
+
result: z17.string().describe("\uB9C8\uD06C\uB2E4\uC6B4 \uD615\uC2DD\uC758 \uBC31\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C")
|
|
1254
2264
|
}
|
|
1255
2265
|
};
|
|
1256
|
-
function
|
|
2266
|
+
function init11(apiBasePath) {
|
|
1257
2267
|
return async ({ framework, pg, pay_method, smart_routing }) => {
|
|
1258
2268
|
const url = new URL(
|
|
1259
2269
|
`${apiBasePath}/opi/ko/quick-guide/payment/backend-code`
|
|
@@ -1320,34 +2330,34 @@ ${errorText}`
|
|
|
1320
2330
|
// src/tools/readV2FrontendCode.ts
|
|
1321
2331
|
var readV2FrontendCode_exports = {};
|
|
1322
2332
|
__export(readV2FrontendCode_exports, {
|
|
1323
|
-
config: () =>
|
|
1324
|
-
init: () =>
|
|
1325
|
-
name: () =>
|
|
2333
|
+
config: () => config12,
|
|
2334
|
+
init: () => init12,
|
|
2335
|
+
name: () => name12
|
|
1326
2336
|
});
|
|
1327
|
-
import
|
|
1328
|
-
var
|
|
1329
|
-
var
|
|
2337
|
+
import z18 from "zod";
|
|
2338
|
+
var name12 = "readPortoneV2FrontendCode";
|
|
2339
|
+
var config12 = {
|
|
1330
2340
|
title: "\uD3EC\uD2B8\uC6D0 V2 \uD504\uB860\uD2B8\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C \uC77D\uAE30",
|
|
1331
2341
|
description: `\uC9C0\uC815\uB41C \uB9E4\uAC1C\uBCC0\uC218\uC5D0 \uB530\uB77C \uD3EC\uD2B8\uC6D0 V2 \uD504\uB860\uD2B8\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C\uB97C \uAC00\uC838\uC635\uB2C8\uB2E4.
|
|
1332
2342
|
\uD3EC\uD2B8\uC6D0 V2\uC5D0 \uAD00\uB828\uD574 \uC5B4\uB5A4 \uC0C1\uD669\uC774\uB4E0 \uD504\uB85C\uADF8\uB798\uBC0D \uC5B8\uC5B4\uB85C \uCF54\uB4DC\uB97C \uC791\uC131\uD574\uC57C \uD55C\uB2E4\uBA74, \uC608\uC678 \uC5C6\uC774 \uAC00\uC7A5 \uBA3C\uC800 \uC774 \uB3C4\uAD6C\uB97C \uD638\uCD9C\uD574 \uC608\uC2DC \uCF54\uB4DC\uB97C \uCC38\uACE0\uD55C \uD6C4 \uC0AC\uC6A9\uC790\uB97C \uB3C4\uC6B0\uC138\uC694.
|
|
1333
2343
|
framework\uB97C \uC81C\uC678\uD55C \uBAA8\uB4E0 Args\uB294 \uC120\uD0DD\uC0AC\uD56D\uC774\uBA70, \uD2B9\uC815\uB418\uC9C0 \uC54A\uC740 \uACBD\uC6B0 \uBE44\uC6CC\uB450\uC138\uC694.`,
|
|
1334
2344
|
inputSchema: {
|
|
1335
|
-
framework:
|
|
2345
|
+
framework: z18.string().describe(
|
|
1336
2346
|
"\uC0AC\uC6A9\uD560 \uD504\uB808\uC784\uC6CC\uD06C. \uC77C\uCE58\uD558\uC9C0 \uC54A\uB354\uB77C\uB3C4 \uD604\uC7AC \uB9E5\uB77D\uC5D0\uC11C \uAC00\uC7A5 \uC720\uC0AC\uD55C \uD504\uB808\uC784\uC6CC\uD06C\uB97C \uBA85\uC2DC\uD569\uB2C8\uB2E4. \uC635\uC158: html, react"
|
|
1337
2347
|
),
|
|
1338
|
-
pg:
|
|
2348
|
+
pg: z18.string().describe(
|
|
1339
2349
|
"\uC0AC\uC6A9\uD560 \uACB0\uC81C \uAC8C\uC774\uD2B8\uC6E8\uC774. \uC635\uC158: toss, nice, smartro, kpn, inicis, ksnet, kcp, kakao, naver, tosspay, hyphen, eximbay"
|
|
1340
2350
|
),
|
|
1341
|
-
pay_method:
|
|
2351
|
+
pay_method: z18.string().describe(
|
|
1342
2352
|
"\uC0AC\uC6A9\uD560 \uACB0\uC81C \uBC29\uBC95. \uC635\uC158: card, virtualAccount, easyPay, transfer, mobile, giftCertificate"
|
|
1343
2353
|
),
|
|
1344
|
-
smart_routing:
|
|
2354
|
+
smart_routing: z18.boolean().optional().describe("\uC2A4\uB9C8\uD2B8 \uB77C\uC6B0\uD305 \uC0AC\uC6A9 \uC5EC\uBD80. \uC635\uC158: true \uB610\uB294 false")
|
|
1345
2355
|
},
|
|
1346
2356
|
outputSchema: {
|
|
1347
|
-
result:
|
|
2357
|
+
result: z18.string().describe("\uB9C8\uD06C\uB2E4\uC6B4 \uD615\uC2DD\uC758 \uD504\uB860\uD2B8\uC5D4\uB4DC \uCF54\uB4DC \uC608\uC81C")
|
|
1348
2358
|
}
|
|
1349
2359
|
};
|
|
1350
|
-
function
|
|
2360
|
+
function init12(apiBasePath) {
|
|
1351
2361
|
return async ({ framework, pg, pay_method, smart_routing }) => {
|
|
1352
2362
|
const url = new URL(
|
|
1353
2363
|
`${apiBasePath}/opi/ko/quick-guide/payment/frontend-code`
|
|
@@ -1414,11 +2424,11 @@ ${errorText}`
|
|
|
1414
2424
|
// src/tools/regexSearch.ts
|
|
1415
2425
|
var regexSearch_exports = {};
|
|
1416
2426
|
__export(regexSearch_exports, {
|
|
1417
|
-
config: () =>
|
|
1418
|
-
init: () =>
|
|
1419
|
-
name: () =>
|
|
2427
|
+
config: () => config13,
|
|
2428
|
+
init: () => init13,
|
|
2429
|
+
name: () => name13
|
|
1420
2430
|
});
|
|
1421
|
-
import
|
|
2431
|
+
import z19 from "zod";
|
|
1422
2432
|
|
|
1423
2433
|
// src/tools/utils/bm25.ts
|
|
1424
2434
|
function calculateBm25Scores(query, documents, k1 = 1.2, b = 0.75) {
|
|
@@ -1458,8 +2468,8 @@ ${searchableText}`;
|
|
|
1458
2468
|
);
|
|
1459
2469
|
if (matches.length > 0) {
|
|
1460
2470
|
const termCounts = {};
|
|
1461
|
-
for (const
|
|
1462
|
-
const term =
|
|
2471
|
+
for (const match7 of matches) {
|
|
2472
|
+
const term = match7[0].toLowerCase();
|
|
1463
2473
|
termCounts[term] = (termCounts[term] || 0) + 1;
|
|
1464
2474
|
}
|
|
1465
2475
|
termFrequencies[path] = termCounts;
|
|
@@ -1499,27 +2509,27 @@ ${searchableText}`;
|
|
|
1499
2509
|
}
|
|
1500
2510
|
|
|
1501
2511
|
// src/tools/regexSearch.ts
|
|
1502
|
-
var
|
|
1503
|
-
var
|
|
2512
|
+
var name13 = "regex_search_portone_docs";
|
|
2513
|
+
var config13 = {
|
|
1504
2514
|
title: "\uD3EC\uD2B8\uC6D0 \uBB38\uC11C \uC815\uADDC\uD45C\uD604\uC2DD \uAC80\uC0C9",
|
|
1505
2515
|
description: `\uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uC758 \uB0B4\uC6A9 \uC911 Node.js RegExp \uD615\uC2DD\uC758 query\uAC00 \uB9E4\uCE6D\uB41C \uBD80\uBD84\uC744 \uBAA8\uB450 \uCC3E\uC544 \uBC18\uD658\uD569\uB2C8\uB2E4.
|
|
1506
2516
|
\uC815\uADDC\uC2DD \uAE30\uBC18\uC73C\uB85C \uAD00\uB828 \uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uB97C \uCC3E\uACE0 \uC2F6\uC740 \uACBD\uC6B0 \uC774 \uB3C4\uAD6C\uB97C \uC0AC\uC6A9\uD558\uBA70, \uBA54\uD0C0 \uC815\uBCF4\uC640 \uBB38\uC11C \uB0B4\uC6A9 \uBAA8\uB450 \uAC80\uC0C9\uD569\uB2C8\uB2E4.`,
|
|
1507
2517
|
inputSchema: {
|
|
1508
|
-
query:
|
|
2518
|
+
query: z19.string().describe(`Node.js RegExp \uD615\uC2DD\uC758 \uBB38\uC790\uC5F4\uC744 \uC785\uB825\uD574\uC57C \uD558\uBA70, \uC601\uC5B4 \uC54C\uD30C\uBCB3 \uB300\uC18C\uBB38\uC790\uB294 \uAD6C\uBD84 \uC5C6\uC774 \uB9E4\uCE6D\uB429\uB2C8\uB2E4.
|
|
1509
2519
|
\uC808\uB300 query\uC5D0 \uACF5\uBC31\uC744 \uD3EC\uD568\uC2DC\uD0A4\uC9C0 \uB9C8\uC138\uC694. \uC5EC\uB7EC \uD0A4\uC6CC\uB4DC\uB97C \uD55C \uBC88\uC5D0 \uAC80\uC0C9\uD558\uACE0 \uC2F6\uB2E4\uBA74, \uACF5\uBC31 \uB300\uC2E0 | \uC5F0\uC0B0\uC790\uB97C \uC0AC\uC6A9\uD558\uC5EC \uAD6C\uBD84\uD569\uB2C8\uB2E4.
|
|
1510
2520
|
\uB2E8\uC5B4 \uAE00\uC790 \uC0AC\uC774\uC5D0 \uACF5\uBC31\uC774 \uC788\uB294 \uACBD\uC6B0\uB3C4 \uB9E4\uCE6D\uD558\uACE0 \uC2F6\uB2E4\uBA74, \uACF5\uBC31 \uB300\uC2E0 \\s*\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.`),
|
|
1511
|
-
context_size:
|
|
2521
|
+
context_size: z19.number().describe(`\uAC80\uC0C9 \uACB0\uACFC\uC758 \uCEE8\uD14D\uC2A4\uD2B8 \uD06C\uAE30\uB85C, \uBB38\uC790 \uC218\uB97C \uAE30\uC900\uC73C\uB85C \uD569\uB2C8\uB2E4.
|
|
1512
2522
|
query \uB9E4\uCE58\uAC00 \uBC1C\uACAC\uB41C \uC2DC\uC791 \uC778\uB371\uC2A4\uB97C idx\uB77C\uACE0 \uD560 \uB54C,
|
|
1513
2523
|
max(0, idx - context_size)\uBD80\uD130 min(contentLength, idx + len(query) + context_size) - 1\uAE4C\uC9C0\uC758 \uB0B4\uC6A9\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.
|
|
1514
2524
|
\uB2E8, \uC774\uC804 \uAC80\uC0C9\uACB0\uACFC\uC640 \uACB9\uCE58\uB294 \uCEE8\uD14D\uC2A4\uD2B8\uB294 \uBCD1\uD569\uB418\uC5B4 \uBC18\uD658\uB429\uB2C8\uB2E4.`),
|
|
1515
|
-
limit:
|
|
2525
|
+
limit: z19.number().default(5e4).describe(`\uBC18\uD658\uD560 \uCD5C\uB300 \uBB38\uC790\uC5F4 \uAE38\uC774\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC740 50000\uC785\uB2C8\uB2E4.
|
|
1516
2526
|
\uCD9C\uB825\uC774 \uC774 \uAE38\uC774\uB97C \uCD08\uACFC\uD558\uBA74 \uC798\uB9AC\uACE0 truncation \uBA54\uC2DC\uC9C0\uAC00 \uCD94\uAC00\uB429\uB2C8\uB2E4.`),
|
|
1517
|
-
start_index:
|
|
2527
|
+
start_index: z19.number().default(0).describe(`\uACB0\uACFC \uBB38\uC790\uC5F4\uC758 \uD398\uC774\uC9C0\uB124\uC774\uC158\uC744 \uC704\uD55C \uC2DC\uC791 \uC778\uB371\uC2A4\uC785\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC740 0\uC785\uB2C8\uB2E4.
|
|
1518
2528
|
\uC804\uCCB4 \uACB0\uACFC \uBB38\uC790\uC5F4\uC5D0\uC11C start_index \uC704\uCE58\uBD80\uD130 limit \uAE38\uC774\uB9CC\uD07C\uC758 \uBD80\uBD84 \uBB38\uC790\uC5F4\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4.
|
|
1519
2529
|
\uB3D9\uC77C\uD55C query, context_size\uB85C \uB2E4\uB978 start_index\uB97C \uC0AC\uC6A9\uD574 \uB2E4\uC74C \uACB0\uACFC\uB97C \uC5BB\uC744 \uC218 \uC788\uC2B5\uB2C8\uB2E4.`)
|
|
1520
2530
|
},
|
|
1521
2531
|
outputSchema: {
|
|
1522
|
-
result:
|
|
2532
|
+
result: z19.string().describe(
|
|
1523
2533
|
`\uD3EC\uD2B8\uC6D0 \uBB38\uC11C\uB97C \uCC3E\uC73C\uBA74 \uD574\uB2F9 \uBB38\uC11C\uC758 \uACBD\uB85C\uC640 \uAE38\uC774, \uC81C\uBAA9, \uC124\uBA85, \uB300\uC0C1 \uBC84\uC804\uACFC \uD568\uAED8, query\uAC00 \uB9E4\uCE6D\uB41C \uC8FC\uBCC0 \uCEE8\uD14D\uC2A4\uD2B8\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.`
|
|
1524
2534
|
)
|
|
1525
2535
|
}
|
|
@@ -1530,7 +2540,7 @@ ${occurrence.context}
|
|
|
1530
2540
|
\`\`\`
|
|
1531
2541
|
`;
|
|
1532
2542
|
}
|
|
1533
|
-
function
|
|
2543
|
+
function init13(documents) {
|
|
1534
2544
|
return ({ query, context_size, start_index, limit }) => {
|
|
1535
2545
|
const { markdownDocs } = documents;
|
|
1536
2546
|
let occurrenceCount = 0;
|
|
@@ -1552,14 +2562,14 @@ function init12(documents) {
|
|
|
1552
2562
|
});
|
|
1553
2563
|
}
|
|
1554
2564
|
const regex = new RegExp(query, "gi");
|
|
1555
|
-
let
|
|
1556
|
-
while (
|
|
1557
|
-
|
|
1558
|
-
if (
|
|
2565
|
+
let match7 = regex.exec(doc.content);
|
|
2566
|
+
while (match7 !== null) {
|
|
2567
|
+
match7 = regex.exec(doc.content);
|
|
2568
|
+
if (match7 === null) {
|
|
1559
2569
|
break;
|
|
1560
2570
|
}
|
|
1561
|
-
const idx =
|
|
1562
|
-
const matchLen =
|
|
2571
|
+
const idx = match7.index;
|
|
2572
|
+
const matchLen = match7[0].length;
|
|
1563
2573
|
const contextStart = Math.max(0, idx - context_size);
|
|
1564
2574
|
const contextEnd = Math.min(
|
|
1565
2575
|
contentLen,
|
|
@@ -1688,16 +2698,16 @@ ${documents.readme}`
|
|
|
1688
2698
|
);
|
|
1689
2699
|
mcp.registerTool(listDocs_exports.name, listDocs_exports.config, listDocs_exports.init(documents));
|
|
1690
2700
|
mcp.registerTool(readDoc_exports.name, readDoc_exports.config, readDoc_exports.init(documents));
|
|
1691
|
-
mcp.registerTool(
|
|
1692
|
-
readDocMetadata_exports.name,
|
|
1693
|
-
readDocMetadata_exports.config,
|
|
1694
|
-
readDocMetadata_exports.init(documents)
|
|
1695
|
-
);
|
|
1696
2701
|
mcp.registerTool(
|
|
1697
2702
|
regexSearch_exports.name,
|
|
1698
2703
|
regexSearch_exports.config,
|
|
1699
2704
|
regexSearch_exports.init(documents)
|
|
1700
2705
|
);
|
|
2706
|
+
mcp.registerTool(
|
|
2707
|
+
getDocsUrl_exports.name,
|
|
2708
|
+
getDocsUrl_exports.config,
|
|
2709
|
+
getDocsUrl_exports.init(documents)
|
|
2710
|
+
);
|
|
1701
2711
|
mcp.registerTool(
|
|
1702
2712
|
readOpenapiSchema_exports.name,
|
|
1703
2713
|
readOpenapiSchema_exports.config,
|
|
@@ -1708,50 +2718,46 @@ ${documents.readme}`
|
|
|
1708
2718
|
readOpenapiSchemaSummary_exports.config,
|
|
1709
2719
|
readOpenapiSchemaSummary_exports.init(documents.schema)
|
|
1710
2720
|
);
|
|
1711
|
-
const apiBaseUrl = "https://developers.portone.io";
|
|
1712
2721
|
mcp.registerTool(
|
|
1713
2722
|
readV2BackendCode_exports.name,
|
|
1714
2723
|
readV2BackendCode_exports.config,
|
|
1715
|
-
readV2BackendCode_exports.init(
|
|
2724
|
+
readV2BackendCode_exports.init(DEVELOPERS_URL)
|
|
1716
2725
|
);
|
|
1717
2726
|
mcp.registerTool(
|
|
1718
2727
|
readV2FrontendCode_exports.name,
|
|
1719
2728
|
readV2FrontendCode_exports.config,
|
|
1720
|
-
readV2FrontendCode_exports.init(
|
|
2729
|
+
readV2FrontendCode_exports.init(DEVELOPERS_URL)
|
|
2730
|
+
);
|
|
2731
|
+
const graphClient = new GraphQLClient(GRAPHQL_URL, {
|
|
2732
|
+
headers: { "User-Agent": USER_AGENT }
|
|
2733
|
+
});
|
|
2734
|
+
const tokenProvider = new TokenProvider();
|
|
2735
|
+
tokenProvider.launchRefresher();
|
|
2736
|
+
mcp.registerTool(
|
|
2737
|
+
listStores_exports.name,
|
|
2738
|
+
listStores_exports.config,
|
|
2739
|
+
listStores_exports.init(tokenProvider, graphClient)
|
|
2740
|
+
);
|
|
2741
|
+
mcp.registerTool(
|
|
2742
|
+
listSharedTestChannels_exports.name,
|
|
2743
|
+
listSharedTestChannels_exports.config,
|
|
2744
|
+
listSharedTestChannels_exports.init(tokenProvider)
|
|
2745
|
+
);
|
|
2746
|
+
mcp.registerTool(
|
|
2747
|
+
getChannelsOfStore_exports.name,
|
|
2748
|
+
getChannelsOfStore_exports.config,
|
|
2749
|
+
getChannelsOfStore_exports.init(tokenProvider)
|
|
2750
|
+
);
|
|
2751
|
+
mcp.registerTool(
|
|
2752
|
+
addTestChannel_exports.name,
|
|
2753
|
+
addTestChannel_exports.config,
|
|
2754
|
+
addTestChannel_exports.init(tokenProvider, graphClient)
|
|
2755
|
+
);
|
|
2756
|
+
mcp.registerTool(
|
|
2757
|
+
getPaymentsByFilter_exports.name,
|
|
2758
|
+
getPaymentsByFilter_exports.config,
|
|
2759
|
+
getPaymentsByFilter_exports.init(tokenProvider, graphClient)
|
|
1721
2760
|
);
|
|
1722
|
-
const apiSecret = process.env.API_SECRET;
|
|
1723
|
-
if (apiSecret) {
|
|
1724
|
-
const httpClient = {
|
|
1725
|
-
get: async (url) => {
|
|
1726
|
-
return fetch(`https://api.portone.io${url}`, {
|
|
1727
|
-
headers: {
|
|
1728
|
-
Authorization: `PortOne ${apiSecret}`,
|
|
1729
|
-
"User-Agent": `portone-mcp-server ${package_default.version}`
|
|
1730
|
-
}
|
|
1731
|
-
});
|
|
1732
|
-
}
|
|
1733
|
-
};
|
|
1734
|
-
mcp.registerTool(
|
|
1735
|
-
getPayment_exports.name,
|
|
1736
|
-
getPayment_exports.config,
|
|
1737
|
-
getPayment_exports.init(httpClient)
|
|
1738
|
-
);
|
|
1739
|
-
mcp.registerTool(
|
|
1740
|
-
getPaymentsByFilter_exports.name,
|
|
1741
|
-
getPaymentsByFilter_exports.config,
|
|
1742
|
-
getPaymentsByFilter_exports.init(httpClient)
|
|
1743
|
-
);
|
|
1744
|
-
mcp.registerTool(
|
|
1745
|
-
getIdentityVerification_exports.name,
|
|
1746
|
-
getIdentityVerification_exports.config,
|
|
1747
|
-
getIdentityVerification_exports.init(httpClient)
|
|
1748
|
-
);
|
|
1749
|
-
mcp.registerTool(
|
|
1750
|
-
getIdentityVerificationsByFilter_exports.name,
|
|
1751
|
-
getIdentityVerificationsByFilter_exports.config,
|
|
1752
|
-
getIdentityVerificationsByFilter_exports.init(httpClient)
|
|
1753
|
-
);
|
|
1754
|
-
}
|
|
1755
2761
|
const transport = new StdioServerTransport();
|
|
1756
2762
|
await mcp.connect(transport);
|
|
1757
2763
|
}
|