Moesif Analytics & Billing

Moesif moesif.com is an API analytics and monetization platform. This policy allows you to measure (and meter) API calls flowing through your Zuplo gateway.

Add the policy to each route you want to meter. Note you can specify the Meter API Name and Meter Value (meter increment) at the policy level.

Configuration#

{
  "name": "my-moesif-inbound-policy",
  "policyType": "moesif-inbound",
  "handler": {
    "module": "$import(@zuplo/runtime)",
    "export": "MoesifInboundPolicy",
    "options": {
      "applicationId": "YOUR_MOESIF_APPLICATION_ID",
      "logRequestBody": true,
      "logResponseBody": true
    }
  }
}

Options#

  • name the name of your policy instance. This is used as a reference in your routes.
  • policyType the identifier of the policy. This is used by the Zuplo UI. Value should be moesif-inbound.
  • handler/export The name of the exported type. Value should be MoesifInboundPolicy.
  • handler/module the module containing the policy. Value should be $import(@zuplo/runtime).
  • handler/options The options for this policy:
    • applicationId

      Your Moesif application ID (required)

    • logRequestBody

      Set to false to disable sending the request body to Moesif (optional)

    • logResponseBody

      Set to false to disable sending the response body to Moesif (optional)

By default, Zuplo will read the request.user.sub property and assign this as the moesif user_id attribute when sending to Moesif. However, this and the following attributes can be overriden in a custom code policy.

  • api_version
  • company_id
  • session_token
  • user_id
  • metadata

Here is some example code that shows how to override two of these attributes

setMoesifContext(context, {
  userId: "user-1234",
  metadata: {
    some: "arbitrary",
    meta: "data",
  },
});

Execute on every route

If you want to execute this policy on every route, you can add a hook in your runtime extensions file zuplo.runtime.ts:

import { RuntimeExtensions } from "@zuplo/runtime";
 
export function runtimeInit(runtime: RuntimeExtensions) {
  runtime.addRequestHook((request, context) => {
    return context.invokeInboundPolicy("moesif-inbound", request);
  });
}

Note you can add a guard clause around the context.invokeInboundPolicy if you want to exclude a few routes.

Was this article helpful?

Do you have any questions?Contact us
Check out ourproduct changelog