# apollo-reporting-protobuf

> **Note:** The Apollo usage reporting API is subject to change. We strongly encourage developers to contact Apollo support at `support@apollographql.com` to discuss their use case prior to building their own reporting agent using this module.

This module provides JavaScript/TypeScript [Protocol buffer](https://developers.google.com/protocol-buffers/) definitions for the Apollo usage reporting API. These definitions are generated for consumption from the `reports.proto` file which is defined internally within Apollo.

## Development

> **Note:** Due to a dependency on Unix tools (e.g. `bash`, `grep`, etc.), the development of this module requires a Unix system. There is no reason why this can't be avoided, the time just hasn't been taken to make those changes. We'd happily accept a PR which makes the appropriate changes!

Currently, this package generates a majority of its code with `@apollo/protobufjs` (a fork of [`protobufjs`](https://www.npmjs.com/package/protobufjs) that we maintain specifically for this package) based on the `reports.proto` file. The output is generated with the `generate` npm script.

The root of the repository provides some `devDependencies` necessary to build these definitions and the `prepare` npm script is invoked programmatically via the monorepo tooling (e.g. Lerna) thanks to *this* module's `postinstall` script. Therefore, when making changes to this module, run scripts via `npx lerna run SCRIPTNAME` in the **root** of this monorepo in order to update the definitions in *this* module.

To update `reports.proto` to the current version recognized by the Studio usage reporting ingress, run `lerna run update-proto`. To then regenerate the JS and TS files, run `npx lerna run generate`. We check in the generated code and only regenerate it manually, partially to make builds faster (no need to run pbjs on every `npm install`) and partially so that we don't have to make sure that `pbjs` runs on every Node version that we support.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.mediamagic.dev/product-docs/services/graphql-gateway/node_modules/apollo-reporting-protobuf.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
