@ingestkorea/client-sens
Version:
INGESTKOREA SDK Naver Cloud Platform SENS Client for Node.js.
86 lines (85 loc) • 3.17 kB
JavaScript
;
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 : "",
};
};