Skip to content

WebSocket API

POS 플러그인에서 실시간 양방향 통신을 위한 WebSocket 인터페이스를 제공해요. 실시간 데이터 동기화나 이벤트 수신이 필요한 경우에 사용할 수 있어요.

Methods

create

WebSocket 연결 객체를 만들어요. 실제 연결은 connect를 호출할 때 시작돼요.

ts
import { posPluginSdk } from '@tossplace/pos-plugin-sdk';

const ws = await posPluginSdk.websocket.create(
    'wss://example.com/socket',
    { Authorization: 'Bearer <token>' },
    {
        rejectUnauthorized: true,
        followRedirects: false,
        timeout: 5000,
    },
);

Parameters

파라미터타입필수설명
urlstringOWebSocket 서버 URL
headersRecord<string, string>O연결에 사용할 헤더
options.rejectUnauthorizedbooleanXSSL 인증서 검증 여부
options.followRedirectsbooleanX리다이렉트 허용 여부
options.timeoutnumberX연결 타임아웃 (밀리초)

Response

Promise<Websocket> — 생성된 WebSocket 연결 객체예요. 이 객체의 메서드로 연결을 제어해요.

connect

WebSocket 연결을 시작해요.

ts
/**
 * WebSocket 연결 시작
 * @throws 연결 실패 시 에러 발생
 */
await ws.connect();

Parameters

파라미터가 없어요.

Response

반환값이 없어요. 연결에 실패하면 에러를 던져요.

disconnect

WebSocket 연결을 종료해요.

ts
/**
 * WebSocket 연결 종료
 */
await ws.disconnect();

Parameters

파라미터가 없어요.

Response

반환값이 없어요.

send

메시지를 WebSocket 서버로 전송해요.

ts
/**
 * 메시지 전송
 * @param data 전송할 메시지와 전송 옵션
 */
ws.send({
    data: JSON.stringify({ type: 'ping' }),
    option: { mask: true },
});

Parameters

파라미터타입필수설명
datastringO전송할 메시지
option.maskbooleanX메시지 마스킹 여부

Response

반환값이 없어요.

Event Handlers

onMessage

메시지 수신 시 호출되는 콜백을 설정해요.

ts
/**
 * 메시지 수신 핸들러 설정
 * @param callback 메시지 수신 시 호출될 콜백 함수
 */
ws.onMessage((message: string) => {
    console.log('수신된 메시지:', message);
});

Parameters

파라미터타입필수설명
callback(message: string) => voidO수신한 메시지 문자열을 받아 실행돼요

Response

반환값이 없어요.

onError

에러 발생 시 호출되는 콜백을 설정해요.

ts
/**
 * 에러 핸들러 설정
 * @param callback 에러 발생 시 호출될 콜백 함수
 */
ws.onError((errorName?: string, errorMessage?: string) => {
    console.error('WebSocket 에러:', errorName, errorMessage);
});

Parameters

파라미터타입필수설명
callback(errorName?: string, errorMessage?: string) => voidO에러 이름과 메시지를 받아 실행돼요. 둘 다 없을 수 있어요

Response

반환값이 없어요.

onClose

연결 종료 시 호출되는 콜백을 설정해요.

ts
/**
 * 연결 종료 핸들러 설정
 * @param callback 연결 종료 시 호출될 콜백 함수
 */
ws.onClose((code: string) => {
    console.log('연결 종료 코드:', code);
});

Parameters

파라미터타입필수설명
callback(code: string) => voidO연결 종료 코드를 받아 실행돼요

Response

반환값이 없어요.

onOpen

연결 성공 시 호출되는 콜백을 설정해요.

ts
/**
 * 연결 성공 핸들러 설정
 * @param callback 연결 성공 시 호출될 콜백 함수
 */
ws.onOpen(() => {
    console.log('WebSocket 연결 성공');
});

Parameters

파라미터타입필수설명
callback() => voidO연결이 열리면 실행돼요

Response

반환값이 없어요.

사용 예시

실시간 주문 상태 모니터링

ts
import { posPluginSdk } from '@tossplace/pos-plugin-sdk';

class OrderMonitor {
    private ws: Websocket;

    constructor(private url: string, private token: string) {}

    async connect() {
        // WebSocket 연결 생성
        this.ws = await posPluginSdk.websocket.create(this.url, {
            Authorization: `Bearer ${this.token}`,
        }, {
            timeout: 5000,
            rejectUnauthorized: true,
        });

        // 이벤트 핸들러 설정
        this.ws.onOpen(() => {
            console.log('주문 모니터링 시작');
        });

        this.ws.onMessage((message) => {
            const orderUpdate = JSON.parse(message);
            this.handleOrderUpdate(orderUpdate);
        });

        this.ws.onError((errorName, errorMessage) => {
            console.error('모니터링 에러:', errorName, errorMessage);
        });

        this.ws.onClose((code) => {
            console.log('모니터링 종료:', code);
        });

        // 연결 시작
        await this.ws.connect();
    }

    private handleOrderUpdate(update: any) {
        console.log('주문 상태 변경:', update);
        // 주문 상태 변경 처리 로직
    }

    async disconnect() {
        await this.ws.disconnect();
    }
}

// 사용 예시
async function monitorOrders() {
    const monitor = new OrderMonitor(
        'wss://api.example.com/orders',
        'your-auth-token'
    );

    try {
        await monitor.connect();
        // 모니터링 중...
    } catch (error) {
        console.error('모니터링 시작 실패:', error);
    } finally {
        await monitor.disconnect();
    }
}