publish()

in aws-greengrass-core-sdk/iotdata.js [147:204]


    publish(params, callback) {
        const topic = Util.getParameter(params, 'topic');
        if (topic === undefined) {
            callback(new Error('"topic" is a required parameter'), null);
            return;
        }

        const payload = Util.getParameter(params, 'payload');
        if (payload === undefined) {
            callback(new Error('"payload" is a required parameter'), null);
            return;
        }

        // this is an optional parameter
        const queueFullPolicy = Util.getParameter(params, 'queueFullPolicy');

        const context = {
            custom: {
                source: MY_FUNCTION_ARN,
                subject: topic,
                queueFullPolicy: '',
            },
        };

        switch (queueFullPolicy) {
            case 'BestEffort':
            case 'AllOrError':
                context.custom.queueFullPolicy = queueFullPolicy;
                break;
            case '':
            case undefined:
            case null:
                break;
            default:
                callback(new Error(`queueFullPolicy "${queueFullPolicy}" is not supported`), null);
                break;
        }

        const buff = Buffer.from(JSON.stringify(context));
        const clientContext = buff.toString('base64');

        const invokeParams = {
            FunctionName: ROUTER_FUNCTION_ARN,
            InvocationType: 'Event',
            ClientContext: clientContext,
            Payload: payload,
        };

        console.log(`Publishing message on topic "${topic}" with Payload "${payload}"`);

        this.lambda.invoke(invokeParams, (err, data) => {
            if (err) {
                callback(err, null); // an error occurred
            } else {
                callback(null, data); // successful response
            }
        });
    }