UNPKG

@ingestkorea/client-sens

Version:

INGESTKOREA SDK Naver Cloud Platform SENS Client for Node.js.

86 lines (85 loc) 3.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SensClient = void 0; const util_http_handler_1 = require("@ingestkorea/util-http-handler"); const index_js_1 = require("./models/index.js"); const index_js_2 = require("./middleware/index.js"); class SensClient { constructor(config) { this.httpHandler = new util_http_handler_1.NodeHttpHandler({ connectionTimeout: 3000, socketTimeout: 3000 }); this.requestHandler = async (input, context) => this.httpHandler.handle(input.request); this.config = { credentials: resolveCredentials(config), serviceId: resolveServiceId(config), }; } async send(command) { const { input, serializer, deserializer } = command; const middlewares = [index_js_2.middlewareIngestkoreaMetadata, index_js_2.middlewareNcpSign, index_js_2.middlewareRetry]; const handler = composeMiddleware(middlewares, this.requestHandler); try { const request = await serializer(input, this.config); const { response } = await handler({ request }, this.config); const output = await deserializer(response, this.config); return output; } catch (err) { if (err instanceof index_js_1.SensError) throw err; throw new index_js_1.SensError({ code: -1, type: "SDK.UNKNOWN_ERROR", message: err instanceof Error ? err.message : "unknown error", }); } } } exports.SensClient = SensClient; const composeMiddleware = (middlewares, finalHandler) => { const handler = middlewares.reduceRight((next, middleware) => { return middleware(next); }, finalHandler); return handler; }; const resolveCredentials = (config) => { const { credentials } = config; const error = new index_js_1.SensError({ code: -1, type: "SDK.AUTH_ERROR", message: "SensClient 초기화시 인증 정보를 입력해주세요.", }); if (!credentials) throw error; if (!credentials.accessKey) { error.message = "AccessKey 정보를 확인해주세요."; throw error; } if (!credentials.secretKey) { error.message = "SecretKey 정보를 확인해주세요."; throw error; } return { accessKey: credentials.accessKey, secretKey: credentials.secretKey, }; }; const resolveServiceId = (config) => { var _a, _b; const { serviceId } = config; const error = new index_js_1.SensError({ code: -1, type: "SDK.GENERAL_ERROR", message: "SensClient 초기화시 사용할 서비스 정보를 입력해주세요.", }); if (!serviceId) throw error; const isReady = !!Object.values(serviceId).filter((d) => !!d).length; if (!isReady) { error.message = "최소 1개 이상의 서비스 정보가 필요합니다"; throw error; } return { kakao: (_a = serviceId.kakao) !== null && _a !== void 0 ? _a : "", sms: (_b = serviceId.sms) !== null && _b !== void 0 ? _b : "", }; };