@duckduckgo/content-scope-scripts
    Preparing search index...

    Messaging

    An abstraction for communications between JavaScript and host platforms. Note: We avoid the term 'client' in these docs since it can be confused with the Browser itself, which is often referred to as the 'client' in other contexts.

    The purpose of this library is to enable three idiomatic JavaScript methods for communicating with native platforms:

    tl;dr:

    // notification
    messaging.notify("helloWorld", { some: "data" })

    // requests
    const response = await messaging.request("helloWorld", { some: "data" });

    // subscriptions
    const unsubscribe = messaging.subscribe("helloWorld", (data) => {
    console.log(data)
    });

    Notifications do not produce a response, they are fire+forget by nature. A call to .notify(method, params) will never throw an exception, so is safe to call at all times. If you need acknowledgement, or a response, use a Request instead.

    // with params
    messaging.notify("helloWorld", { some: "data" })

    // without params
    messaging.notify("helloWorld")

    Request should be used when you require acknowledgement or a response. Calls to .request(method, params) return a promise that can be awaited. Note: calls to .request() can throw exceptions - this is deliberate to ensure compatibility with JavaScript APIs like Promise.all([...]).

    A single request->response

    const response = await messaging.request("helloWorld", { some: "data" });
    

    With try/catch

    try {
    const response = await messaging.request("helloWorld", { some: "data" });
    // use the response
    } catch (e) {
    // handle the error
    }

    In cases where you don't need to handle the error, use the await/catch pattern to simulate a default value

    const response = await messaging.request("helloWorld", { some: "data" }).catch(() => null);
    

    With Platform APIs, like Promise.all

    const request1 = messaging.request("helloWorld", { some: "data" });
    const request2 = messaging.request("other");

    const [response1, response2] = await Promise.all([request1, request2])

    A subscription is created in JavaScript as a means for the host platform to push values. Note: Subscriptions are created in JavaScript and DO NOT include acknowledgment from the host platform. If you need that kind of guarantee, use a request first successful request->response.

    const unsubscribe = messaging.subscribe("helloWorld", (data) => {
    console.log(data)
    });