@awesome-message/sdk
Version:
Awesome Message SDK for admin, messaging, and notification services
36 lines (30 loc) • 22.5 kB
JavaScript
;
var undici = require('undici');
var crypto = require('crypto');
var buffer = require('buffer');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
/**
* @AwesomeMessage
* Awesome Message SDK
* © 2025 PurpleIO
*/
var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:true});var _BaseException=class _BaseException extends Error{constructor(message){super(message),this.name=this.constructor.name;}};__name(_BaseException,"BaseException");var BaseException=_BaseException,_InvalidParameterException=class _InvalidParameterException extends BaseException{constructor(message="\uC785\uB825\uD55C \uB370\uC774\uD130\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC544\uC694"){super(message),this.name="InvalidParameterException";}};__name(_InvalidParameterException,"InvalidParameterException");var InvalidParameterException=_InvalidParameterException,_InvalidChannelTokenException=class _InvalidChannelTokenException extends BaseException{constructor(message="\uCE74\uCE74\uC624 \uCC44\uB110 \uD1A0\uD070\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC544\uC694"){super(message),this.name="InvalidChannelTokenException";}};__name(_InvalidChannelTokenException,"InvalidChannelTokenException");var InvalidChannelTokenException=_InvalidChannelTokenException,_InvalidSenderKeyException=class _InvalidSenderKeyException extends BaseException{constructor(message="\uCE74\uCE74\uC624 \uBC1C\uC2E0 \uD0A4\uAC00 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC544\uC694"){super(message),this.name="InvalidSenderKeyException";}};__name(_InvalidSenderKeyException,"InvalidSenderKeyException");var InvalidSenderKeyException=_InvalidSenderKeyException,_NotFoundException=class _NotFoundException extends BaseException{constructor(message="\uC694\uCCAD\uD55C \uB9AC\uC18C\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694"){super(message),this.name="NotFoundException";}};__name(_NotFoundException,"NotFoundException");var NotFoundException=_NotFoundException,_RouteNotFoundException=class _RouteNotFoundException extends BaseException{constructor(message="\uC694\uCCAD\uD55C \uACBD\uB85C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC5B4\uC694"){super(message),this.name="RouteNotFoundException";}};__name(_RouteNotFoundException,"RouteNotFoundException");var RouteNotFoundException=_RouteNotFoundException,_InvalidAttachmentException=class _InvalidAttachmentException extends BaseException{constructor(message="\uCCA8\uBD80\uD30C\uC77C\uC774 \uC720\uD6A8\uD558\uC9C0 \uC54A\uC544\uC694"){super(message),this.name="InvalidAttachmentException";}};__name(_InvalidAttachmentException,"InvalidAttachmentException");var InvalidAttachmentException=_InvalidAttachmentException,_AccessDeniedException=class _AccessDeniedException extends BaseException{constructor(message="\uC811\uADFC\uD560 \uC218 \uC788\uB294 \uAD8C\uD55C\uC774 \uC5C6\uC5B4\uC694"){super(message),this.name="AccessDeniedException";}};__name(_AccessDeniedException,"AccessDeniedException");var AccessDeniedException=_AccessDeniedException,_InternalServerErrorException=class _InternalServerErrorException extends BaseException{constructor(message="\uC5D0\uB7EC\uAC00 \uBC1C\uC0DD\uD588\uC5B4\uC694"){super(message),this.name="InternalServerErrorException";}};__name(_InternalServerErrorException,"InternalServerErrorException");var InternalServerErrorException=_InternalServerErrorException;function isBrowser(){return typeof window<"u"&&typeof window.document<"u"&&typeof process>"u"}__name(isBrowser,"isBrowser");function isNode(){return typeof process<"u"&&process.versions!=null&&process.versions.node!=null}__name(isNode,"isNode");function checkEnvironment(){if(isBrowser())throw new InternalServerErrorException(`\uC774 SDK\uB294 \uBE0C\uB77C\uC6B0\uC800 \uD658\uACBD\uC5D0\uC11C \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. Node.js \uD658\uACBD\uC5D0\uC11C\uB9CC \uC0AC\uC6A9 \uAC00\uB2A5\uD569\uB2C8\uB2E4.
\uBE0C\uB77C\uC6B0\uC800\uC5D0\uC11C API\uB97C \uD638\uCD9C\uD558\uB824\uBA74 \uBCC4\uB3C4\uC758 \uD504\uB85D\uC2DC \uC11C\uBC84\uB97C \uAD6C\uC131\uD558\uAC70\uB098 \uC11C\uBC84 \uCE21\uC5D0\uC11C SDK\uB97C \uC0AC\uC6A9\uD558\uC138\uC694.`);if(!isNode())throw new InternalServerErrorException("\uC774 SDK\uB294 Node.js \uD658\uACBD\uC5D0\uC11C\uB9CC \uC2E4\uD589\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uD604\uC7AC \uD658\uACBD\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4.")}__name(checkEnvironment,"checkEnvironment");var _BaseClient=class _BaseClient{constructor(credentials,servicePath){checkEnvironment(),this.credentials=credentials,this.servicePath=servicePath,this.baseURL=`https://41hyy0qs9c.execute-api.ap-northeast-2.amazonaws.com${this.servicePath}`,this.defaultHeaders={"Content-Type":"application/json"};}createSendHeaders(options){let headers={};return options?.idempotencyKey&&(headers["x-am-idempotency-key"]=options.idempotencyKey),headers}async makeRequest(path,options){let url=`${this.baseURL}${path}`,signatureHeaders=this.generateSignatureHeaders(),headers={...this.defaultHeaders,...signatureHeaders,...options.headers},requestOptions={method:options.method,headers,bodyTimeout:1e4,headersTimeout:1e4};options.formData?(delete requestOptions.headers["Content-Type"],requestOptions.body=options.formData):options.body&&["POST","PUT","PATCH"].includes(options.method)&&(requestOptions.body=JSON.stringify(options.body));try{let response=await undici.request(url,requestOptions),responseText=await response.body.text(),responseData;try{responseData=responseText?JSON.parse(responseText):null;}catch{responseData=responseText;}if(response.statusCode>=400)throw this.handleApiError(response.statusCode,responseData);return responseData}catch(error){throw this.isApiException(error)?error:error instanceof Error?new InternalServerErrorException(`\uB124\uD2B8\uC6CC\uD06C \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4: ${error.message}`):error}}async get(path,headers){return this.makeRequest(path,{method:"GET",headers})}async post(path,body,headers){return this.makeRequest(path,{method:"POST",body,headers})}async postFormData(path,formData,headers){return this.makeRequest(path,{method:"POST",formData,headers})}async put(path,body,headers){return this.makeRequest(path,{method:"PUT",body,headers})}async delete(path,headers){return this.makeRequest(path,{method:"DELETE",headers})}isApiException(error){return error instanceof BaseException}handleApiError(statusCode,data){let apiError=null;try{typeof data=="object"&&data!==null&&"code"in data&&"message"in data&&(apiError=data);}catch{}let errorMessage=apiError?.message||`HTTP ${statusCode} \uC5D0\uB7EC\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4`;switch(statusCode){case 400:return apiError?.code==="InvalidParameterException"?new InvalidParameterException(errorMessage):apiError?.code==="InvalidAttachmentException"?new InvalidAttachmentException(errorMessage):apiError?.code==="InvalidChannelTokenException"?new InvalidChannelTokenException(errorMessage):apiError?.code==="InvalidSenderKeyException"?new InvalidSenderKeyException(errorMessage):new InvalidParameterException(errorMessage);case 401:case 403:return new AccessDeniedException("\uC778\uC99D \uAD8C\uD55C\uC774 \uC5C6\uC5B4\uC694");case 404:return apiError?.code==="RouteNotFoundException"?new NotFoundException("\uC694\uCCAD\uD55C \uB9AC\uC18C\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4."):new NotFoundException(errorMessage);case 500:default:return new InternalServerErrorException(errorMessage)}}generateSignatureHeaders(){let now=new Date,date=new Date(now.getFullYear(),now.getMonth(),now.getDate(),now.getHours(),0,0,0).toISOString(),stringToSign=[this.credentials.accessKeyId,date].join(`
`),signature=crypto__default.default.createHmac("sha256",this.credentials.secretAccessKey).update(stringToSign,"utf8").digest("hex");return {"x-am-access-key":this.credentials.accessKeyId,"x-am-date":date,"x-am-signature":signature}}};__name(_BaseClient,"BaseClient");var BaseClient=_BaseClient;var _AdminClient=class _AdminClient extends BaseClient{constructor(credentials){super(credentials,"/admin");}async createClient(request2){return await this.post("/v1/clients",request2)}async listClients(){return await this.get("/v1/clients")}async deleteClient(request2){return await this.delete(`/v1/clients/${encodeURIComponent(request2.externalId.trim())}`)}};__name(_AdminClient,"AdminClient");var AdminClient=_AdminClient;var _KakaoChannelClient=class _KakaoChannelClient extends BaseClient{constructor(credentials){super(credentials,"/kakao");}async getChannelCategories(externalId){return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/categories`)}async createChannel(externalId,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels`,request2)}async authenticateChannelToken(externalId,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/auth`,request2)}async listChannels(externalId,request2){let queryParams=request2?new URLSearchParams:null;request2&&queryParams&&Object.entries(request2).forEach(([key,value])=>{value!==void 0&&queryParams.append(key,String(value));});let queryString=queryParams?`?${queryParams.toString()}`:"";return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels${queryString}`)}async getChannel(externalId,senderKey){return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}`)}async deleteChannel(externalId,request2){return await this.delete(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(request2.senderKey.trim())}`)}};__name(_KakaoChannelClient,"KakaoChannelClient");var KakaoChannelClient=_KakaoChannelClient;var _KakaoFriendtalkImageClient=class _KakaoFriendtalkImageClient extends BaseClient{constructor(credentials){super(credentials,"/kakao");}async listFriendtalkImages(externalId,request2){let queryParams=request2?new URLSearchParams:null;request2&&queryParams&&(request2.imageTypes&&request2.imageTypes.length>0&&request2.imageTypes.forEach(type=>{queryParams.append("imageTypes",type);}),request2.pageNum&&queryParams.append("pageNum",request2.pageNum),request2.pageSize&&queryParams.append("pageSize",request2.pageSize));let queryString=queryParams?`?${queryParams.toString()}`:"";return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/images${queryString}`)}async uploadFriendtalkImage(externalId,request2){let formData=new undici.FormData,blob=new buffer.Blob([request2.imageFile]);return formData.append("image",blob,request2.filename),formData.append("imageType",request2.friendtalkImageType),await this.postFormData(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/images`,formData)}async deleteFriendtalkImage(externalId,imageSeq){await this.delete(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/images/${encodeURIComponent(String(imageSeq).trim())}`);}};__name(_KakaoFriendtalkImageClient,"KakaoFriendtalkImageClient");var KakaoFriendtalkImageClient=_KakaoFriendtalkImageClient;var _KakaoFriendtalkTemplateClient=class _KakaoFriendtalkTemplateClient extends BaseClient{constructor(credentials){super(credentials,"/kakao");}async listFriendtalkTemplates(externalId,senderKey,request2){let queryParams=request2?new URLSearchParams:null;request2&&queryParams&&(request2.templateName&&queryParams.append("templateName",request2.templateName),request2.pageNum!==void 0&&queryParams.append("pageNum",String(request2.pageNum)),request2.pageSize!==void 0&&queryParams.append("pageSize",String(request2.pageSize)));let queryString=queryParams?`?${queryParams.toString()}`:"";return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates${queryString}`)}async getFriendtalkTemplate(externalId,senderKey,templateCode){return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}`)}async deleteFriendtalkTemplate(externalId,senderKey,templateCode){return await this.delete(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}`)}async sendFriendtalkTemplateMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(request2.senderKey.trim())}/templates/send`,request2,headers)}async createFriendtalkTextTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/text`,request2)}async updateFriendtalkTextTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/text`,request2)}async createFriendtalkImageTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/image`,request2)}async updateFriendtalkImageTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/image`,request2)}async createFriendtalkWideTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/wide`,request2)}async updateFriendtalkWideTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/wide`,request2)}async createFriendtalkWideItemListTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/wide-item-list`,request2)}async updateFriendtalkWideItemListTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/wide-item-list`,request2)}async createFriendtalkPremiumVideoTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/premium-video`,request2)}async updateFriendtalkPremiumVideoTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/premium-video`,request2)}async createFriendtalkCommerceTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/commerce`,request2)}async updateFriendtalkCommerceTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/commerce`,request2)}async createFriendtalkCarouselFeedTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/carousel-feed`,request2)}async updateFriendtalkCarouselFeedTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/carousel-feed`,request2)}async createFriendtalkCarouselCommerceTemplate(externalId,senderKey,request2){return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/carousel-commerce`,request2)}async updateFriendtalkCarouselCommerceTemplate(externalId,senderKey,templateCode,request2){return await this.put(`/v1/clients/${encodeURIComponent(externalId.trim())}/channels/${encodeURIComponent(senderKey.trim())}/templates/${encodeURIComponent(templateCode.trim())}/carousel-commerce`,request2)}};__name(_KakaoFriendtalkTemplateClient,"KakaoFriendtalkTemplateClient");var KakaoFriendtalkTemplateClient=_KakaoFriendtalkTemplateClient;var _KakaoFriendtalkFreestyleClient=class _KakaoFriendtalkFreestyleClient extends BaseClient{constructor(credentials){super(credentials,"/kakao");}async sendFriendtalkFreestyleTextMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/text/send`,request2,headers)}async sendFriendtalkFreestyleImageMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/image/send`,request2,headers)}async sendFriendtalkFreestyleWideImageMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/wide/send`,request2,headers)}async sendFriendtalkFreestyleWideItemListMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/wide-item-list/send`,request2,headers)}async sendFriendtalkFreestylePremiumVideoMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/premium-video/send`,request2,headers)}async sendFriendtalkFreestyleCommerceMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/commerce/send`,request2,headers)}async sendFriendtalkFreestyleCarouselFeedMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/carousel-feed/send`,request2,headers)}async sendFriendtalkFreestyleCarouselCommerceMessage(externalId,request2,options){let headers=this.createSendHeaders(options);return await this.post(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/freestyle/carousel-commerce/send`,request2,headers)}};__name(_KakaoFriendtalkFreestyleClient,"KakaoFriendtalkFreestyleClient");var KakaoFriendtalkFreestyleClient=_KakaoFriendtalkFreestyleClient;function convertDateToKSTString(date){try{let kstDate=new Date(date.getTime()+324e5),year=kstDate.getUTCFullYear(),month=String(kstDate.getUTCMonth()+1).padStart(2,"0"),day=String(kstDate.getUTCDate()).padStart(2,"0"),hours=String(kstDate.getUTCHours()).padStart(2,"0"),minutes=String(kstDate.getUTCMinutes()).padStart(2,"0");return `${year}-${month}-${day} ${hours}:${minutes}`}catch{let now=new Date,kstNow=new Date(now.getTime()+9*60*60*1e3),year=kstNow.getUTCFullYear(),month=String(kstNow.getUTCMonth()+1).padStart(2,"0"),day=String(kstNow.getUTCDate()).padStart(2,"0"),hours=String(kstNow.getUTCHours()).padStart(2,"0"),minutes=String(kstNow.getUTCMinutes()).padStart(2,"0");return `${year}-${month}-${day} ${hours}:${minutes}`}}__name(convertDateToKSTString,"convertDateToKSTString");var _KakaoFriendtalkResultClient=class _KakaoFriendtalkResultClient extends BaseClient{constructor(credentials){super(credentials,"/kakao");}async listFriendtalkMessages(externalId,query){let queryParams=new URLSearchParams;query.requestId&&queryParams.append("requestId",query.requestId),query.startRequestDate&&queryParams.append("startRequestDate",convertDateToKSTString(query.startRequestDate)),query.endRequestDate&&queryParams.append("endRequestDate",convertDateToKSTString(query.endRequestDate)),query.senderKey&&queryParams.append("senderKey",query.senderKey),query.templateCode&&queryParams.append("templateCode",query.templateCode),query.recipientNo&&queryParams.append("recipientNo",query.recipientNo),query.messageStatus&&queryParams.append("messageStatus",query.messageStatus),query.resultCode&&queryParams.append("resultCode",query.resultCode),query.pageNum&&queryParams.append("pageNum",query.pageNum.toString()),query.pageSize&&queryParams.append("pageSize",query.pageSize.toString());let queryString=queryParams.toString()?`?${queryParams.toString()}`:"";return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/messages${queryString}`)}async getFriendtalkMessage(externalId,requestId,recipientSeq){return await this.get(`/v1/clients/${encodeURIComponent(externalId.trim())}/friendtalk/messages/${encodeURIComponent(requestId)}/${recipientSeq}`)}};__name(_KakaoFriendtalkResultClient,"KakaoFriendtalkResultClient");var KakaoFriendtalkResultClient=_KakaoFriendtalkResultClient;checkEnvironment();
exports.AccessDeniedException = AccessDeniedException;
exports.AdminClient = AdminClient;
exports.BaseClient = BaseClient;
exports.BaseException = BaseException;
exports.InternalServerErrorException = InternalServerErrorException;
exports.InvalidAttachmentException = InvalidAttachmentException;
exports.InvalidChannelTokenException = InvalidChannelTokenException;
exports.InvalidParameterException = InvalidParameterException;
exports.InvalidSenderKeyException = InvalidSenderKeyException;
exports.KakaoChannelClient = KakaoChannelClient;
exports.KakaoFriendtalkFreestyleClient = KakaoFriendtalkFreestyleClient;
exports.KakaoFriendtalkImageClient = KakaoFriendtalkImageClient;
exports.KakaoFriendtalkResultClient = KakaoFriendtalkResultClient;
exports.KakaoFriendtalkTemplateClient = KakaoFriendtalkTemplateClient;
exports.NotFoundException = NotFoundException;
exports.RouteNotFoundException = RouteNotFoundException;