open-index/open-npm huggingface dataset:
npm package: @seatgeek/backstage-plugin-awards-backend
Description: This plugin provides the backend API for the awards plugin.
Latest version: 3.0.1

# @seatgeek/backstage-plugin-awards-backend

This plugin provides the backend API for the awards plugin.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-awards-backend/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-awards-backend)

This plugin relies on [Backstage authentication](https://backstage.io/docs/auth/)
in order to enforce ownership of awards. Please follow the documentation to
enable authentication before attempting to use this plugin!

Currently we support only `SQLite` and `PostgreSQL` databases.

## Installation

Install the @seatgeek/backstage-plugin-awards-backend package using the [new backend](https://backstage.io/docs/plugins/new-backend-system/):

```ts
backend.add(import('@seatgeek/backstage-plugin-awards-backend'));
```

## Configuration

### Image storage (required)

The awards-backend requires storage to be configured for award images.

### Filesystem

```yaml
awards:
  storage:
    fs:
      # directory where files will be stored relative to the CWD where the application was started
      directory: my-directory # optional: defaults to tmp-awards-storage
```

### GCS

```yaml
awards:
  storage:
    gcs:
      bucket: gs://backstage-awards # required
      keyFilename: path/to/keyFile.json # optional: defaults to GOOGLE_APPLICATION_CREDENTIALS
```

### S3

```yaml
awards:
  storage:
    s3:
      bucket: backstage-awards # required
      region: us-east-1 # required
      # Omit the following fields if using IAM roles (https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-iam.html)
      accessKeyId: ${AWS_ACCESS_KEY_ID} # optional
      secretAccessKey: ${AWS_SECRET_ACCESS_KEY} # optional
      # For local development, pass the endpoint for your localstack server
      endpoint: http://127.0.0.1:4566 # optional
```

### Slack notifications (optional)

To enable Slack notifications, add the following to your `app-config.yaml` file:

```yaml
awards:
  notifications:
    slack:
      webhook:
        # https://api.slack.com/messaging/webhooks
        url: ${MY_SLACK_WEBHOOK_URL_ENV_VAR}
```

Users who have the `slack.com/user_id` annotation set (see [slack-catalog-backend](/plugins/slack-catalog-backend/README.md)) will be tagged in notifications that pertain to them.

## Developing this plugin

The plugin can be executed in isolation during development by running
`yarn start` in the plugin root directory. This method of serving the plugin
provides quicker iteration speed and a faster startup and hot reloads.

It is only meant for local development, and the setup for it can be found
inside the [/dev](/dev) directory.
npm package: @seatgeek/backstage-plugin-awards-common
Description: This common package provides shared types and utility functions used by the frontend and backend awards plugin.
Latest version: 1.0.5

# @seatgeek/backstage-plugin-awards-common

This common package provides shared types and utility functions used by the frontend and backend awards plugin.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-awards-common/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-awards-common)

Every time we find the need to change the awards type or to add common utilities
for testing, we added it to this plugin.

This allows us to keep a consistent representation of awards across our frontend
and backend.
npm package: @seatgeek/backstage-plugin-aws-catalog-backend
Description: This plugin offers the ability to ingest certain types of resources from [AWS](https://aws.amazon.com/) into the Backstage catalog.
Latest version: 1.0.1

# @seatgeek/backstage-plugin-aws-catalog-backend

This plugin offers the ability to ingest certain types of resources from [AWS](https://aws.amazon.com/) into the Backstage catalog.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-aws-catalog-backend/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-aws-catalog-backend)

## Supported Resources

- [x] RDS Databases

## Installation

Install the @seatgeek/backstage-plugin-aws-catalog-backend package in your backend package:

```shell
# From your Backstage root directory
yarn add --cwd packages/backend @seatgeek/backstage-plugin-aws-catalog-backend
```

Then add the following config to your `app-config.yml`:

```yml
catalog:
  providers:
    aws:
      myOrganizationAws:
        region: 'us-east-1' # required
        # Omit the following fields if using IAM roles (https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-node-credentials-iam.html)
        accessKeyId: ${AWS_ACCESS_KEY_ID} # optional
        secretAccessKey: ${AWS_SECRET_ACCESS_KEY} # optional
        sessionToken: ${AWS_SESSION_TOKEN} # optional
```

You'll then need to add whichever entity providers you wish to use into your Backstage application's `packages/backend/src/plugins/catalog.ts` and add it to the `CatalogBuilder`.
For example, to add the RDS entity provider:

```tsx
import { RDSEntityProvider } from '@seatgeek/backstage-plugin-aws-catalog-backend';

// ...

export default async function createPlugin(
  env: PluginEnvironment,
): Promise<Router> {
  const builder = await CatalogBuilder.create(env);
  builder.addEntityProvider(
    ...RDSEntityProvider.fromConfig(env.config, {
      logger: env.logger,
      schedule: env.scheduler.createScheduledTaskRunner({
        frequency: { days: 1 },
        timeout: { minutes: 5 },
      }),
      // transforms the RDS data from AWS into a ResourceEntity
      dbInstanceTransformer: rdsDBInstance => ({
        apiVersion: 'backstage.io/v1alpha1',
        kind: 'Resource',
        metadata: {
          name: `db-${db.DBInstanceIdentifier}`,
          tags: [db.Engine!],
        },
        spec: {
          type: 'rds',
          owner: 'somebody',
        },
      }),
      // optional filter to limit which entities are ingested
      dbInstanceFilter: dbInstance => true,
    }),
  );
  // ...
}
```
npm package: @seatgeek/backstage-plugin-aws-catalog-common
Description: Common functionality for AWS catalog providers
Latest version: 1.0.1

# @seatgeek/backstage-plugin-aws-catalog-common

This common package provides shared types and utility functions for the `@seatgeek/backstage-plugin-aws-backend`
plugin that other plugins (especially frontend plugins) may find useful.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-aws-catalog-common/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-aws-catalog-common)
npm package: @seatgeek/backstage-plugin-catalog-backend-module-okta
Description: This plugin offers the ability to ingest users and groups from the [Okta API](https://developer.okta.com/docs/reference/core-okta-api/) into the Backstage catalog.
Latest version: 1.0.3

# @seatgeek/backstage-plugin-catalog-backend-module-okta

This plugin offers the ability to ingest users and groups from the [Okta API](https://developer.okta.com/docs/reference/core-okta-api/) into the Backstage catalog.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-catalog-backend-module-okta/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-catalog-backend-module-okta)

## Installation

Install the @seatgeek/backstage-plugin-catalog-backend-module-okta package in your backend package:

```shell
# From your Backstage root directory
yarn add --cwd packages/backend @seatgeek/backstage-plugin-catalog-backend-module-okta
```

Then add the following config to your `app-config.yml`:

```yml
catalog:
  providers:
    okta:
      myOrganizationOkta:
        apiToken: ${OKTA_TOKEN}
        url: https://my-organization.okta.com
```

Then import `OktaOrgDiscoveryEntityProvider` into your Backstage application's `packages/backend/src/plugins/catalog.ts` and add it to the `CatalogBuilder`.

```tsx
import { OktaOrgDiscoveryEntityProvider } from '@seatgeek/backstage-plugin-catalog-backend-module-okta';

// ...

export default async function createPlugin(
  env: PluginEnvironment,
): Promise<Router> {
  const builder = await CatalogBuilder.create(env);
  builder.addEntityProvider(
    ...OktaOrgDiscoveryEntityProvider.fromConfig(env.config, {
      logger: env.logger,
      schedule: env.scheduler.createScheduledTaskRunner({
        frequency: { days: 1 },
        timeout: { minutes: 5 },
      }),
      // query params passed to the okta api groups request
      listGroupsRequest: {
        filter: 'type Eq "TEAM"',
      },
      // transforms the okta api user object into a UserEntity
      userTransformer: oktaUser => ({
        apiVersion: 'backstage.io/v1alpha1',
        kind: 'User',
        metadata: {
          name: oktaUser.profile!.email!.split('@')[0],
        },
        spec: {
          profile: {
            displayName: oktaUser.profile!.displayName!,
          },
          memberOf: [],
        },
      }),
      // transforms the group api user object into a GroupEntity
      groupTransformer: oktaGroup => ({
        apiVersion: 'backstage.io/v1alpha1',
        kind: 'Group',
        metadata: {
          name: oktaGroup.profile!.name!.toLowerCase(),
          description: oktaGroup.profile?.description || '',
        },
        spec: {
          type: 'team',
          children: [],
          profile: {
            displayName: oktaGroup.profile!.name!,
          },
        },
      }),
    }),
  );
  // ...
}
```
npm package: @seatgeek/backstage-plugin-entity-scaffolder-content
Description: This plugin offers the ability to run Software Templates from within an entity's EntityPage. Templates, once selected, can be autopopulated with data from the Entity. For example, if I am on the EntityPage for `system:default/tickets` and I select a templ
Latest version: 1.2.0

# @seatgeek/backstage-plugin-entity-scaffolder-content

This plugin offers the ability to run Software Templates from within an entity's EntityPage. Templates, once selected, can be autopopulated with data from the Entity. For example, if I am on the EntityPage for `system:default/tickets` and I select a template for creating a new Postgres database, I can autopopulate that template's `system:` field to `system:default/tickets`.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-entity-scaffolder-content/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-entity-scaffolder-content)

![Template groups visible on an EntityPage](screenshot-groups.png)

![Selected template with entity's information filled in](screenshot-selected.png)

This plugin addresses https://github.com/backstage/backstage/issues/16053 and builds on top of [@frontside/backstage-plugin-scaffolder-workflow](https://github.com/thefrontside/playhouse/tree/main/plugins/scaffolder-frontend-workflow).

## Installation

### Install the package

Install the `@seatgeek/backstage-plugin-entity-scaffolder-content` package in your frontend app package:

```shell
# From your Backstage root directory
yarn add --cwd packages/app @seatgeek/backstage-plugin-entity-scaffolder-content
```

### Add the plugin to your `EntityPage`

```tsx
import { EntityScaffolderContent } from '@seatgeek/backstage-plugin-entity-scaffolder-content';

const systemPage = (
  <EntityLayout>
    {/** ... */}
    <EntityLayout.Route path="/scaffolder" title="Scaffolder">
      <EntityScaffolderContent
        templateGroupFilters={[
          // We show all resource templates that have the label `forEntity:system``
          // on our system EntityPage
          {
            title: 'Resources',
            filter: (_, template) =>
              template.metadata?.labels?.forEntity === 'system' &&
              template.spec.type === 'Resource',
          },
          // If our system defines its language as python, we show all templates
          // that are intended to be applied to pythom systems.
          {
            title: 'Python',
            filter: (entity, template) =>
              template.metadata?.labels?.forEntity === 'system' &&
              entity.metadata?.labels?.language === 'python' &&
              template.metadata?.labels?.language === 'python',
          },
        ]}
        buildInitialState={entity => ({ system: stringifyEntityRef(entity) })}
        // optional
        ScaffolderFieldExtensions={
          <ScaffolderFieldExtensions>
            {/* Any field extensions you need */}
          </ScaffolderFieldExtensions>
        }
        // optional
        components={{
          TemplateCard: CustomTemplateCard,
        }}
      />
    </EntityLayout.Route>
  </EntityLayout>
);
```
npm package: @seatgeek/backstage-plugin-gitlab-catalog-backend
Description: This plugin offers catalog integrations for ingesting data from gitlab API.
Latest version: 1.2.0

# @seatgeek/backstage-plugin-gitlab-catalog-backend

This plugin offers catalog integrations for ingesting data from gitlab API.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-gitlab-catalog-backend/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-gitlab-catalog-backend)

## Installation

Install the `@seatgeek/backstage-plugin-gitlab-catalog-backend` package in your backend package using the [new backend](https://backstage.io/docs/plugins/new-backend-system/):

```shell
# From your Backstage root directory
yarn add --cwd packages/backend @seatgeek/backstage-plugin-gitlab-catalog-backend
```

Add the following config to your `app-config.yaml`:

```yml
gitlabCatalog:
  host: ${GITLAB_HOST_CATALOG} # defaults to https://gitlab.com
  token: ${GITLAB_TOKEN_CATALOG}
```

Requires `read_user` scope with administrator level permissions to be able to view the email, see [List Users (for administrators)](https://docs.gitlab.com/ee/api/users.html#for-administrators).

## Processors

### `GitlabUserProcessor`

Enriches existing `User` entities with information from Gitlab, notably the user's Gitlab ID, based on the user's `.profile.email`.

#### Installation

Add the following to your `packages/backend/index.ts`:

```ts
// in your imports
import { catalogModuleGitlabUserProcessor } from '@seatgeek/backstage-plugin-gitlab-catalog-backend';

// in your catalog modules
backend.add(catalogModuleGitlabUserProcessor);
```
npm package: @seatgeek/backstage-plugin-scaffolder-backend-module-hcl
Description: This contains a collection of actions to use in scaffolder templates for working with HCL (Hashicorp Configuration Language). See https://github.com/hashicorp/hcl to learn more about HCL.
Latest version: 2.0.1

# scaffolder-backend-module-hcl

This contains a collection of actions to use in scaffolder templates for working with HCL (Hashicorp Configuration Language). See https://github.com/hashicorp/hcl to learn more about HCL.

## Getting started

### From your Backstage root directory

```bash
# From your Backstage root directory
yarn add --cwd packages/backend @seatgeek/backstage-plugin-scaffolder-backend-module-hcl
```

Then ensure that both the scaffolder and this module are added to your backend:

```typescript
// In packages/backend/src/index.ts
const backend = createBackend();
// ...
backend.add(import('@seatgeek/backstage-plugin-scaffolder-backend-module-hcl'));
```

After that you can use the actions in your template.

## Actions

- `hcl:merge` Merge HCL strings
- `hcl:merge:write` Merge HCL strings and write to a file
- `hcl:merge:files` Merge HCL files
- `hcl:merge:files:write` Merge HCL files and write to a file
npm package: @seatgeek/backstage-plugin-slack-catalog-backend
Description: This plugin offers catalog integrations for ingesting data from the Slack API into the Software Catalog.
Latest version: 2.0.0

# @seatgeek/backstage-plugin-slack-catalog-backend

This plugin offers catalog integrations for ingesting data from the Slack API into the Software Catalog.

[![npm latest version](https://img.shields.io/npm/v/@seatgeek/backstage-plugin-slack-catalog-backend/latest.svg)](https://www.npmjs.com/package/@seatgeek/backstage-plugin-slack-catalog-backend)

## Installation

Install the `@seatgeek/backstage-plugin-slack-catalog-backend` package in your backend package:

```shell
# From your Backstage root directory
yarn add --cwd packages/backend @seatgeek/backstage-plugin-slack-catalog-backend
```

Add the following config to your `app-config.yaml`:

```yml
slackCatalog:
  token: ${SLACK_API_TOKEN_CATALOG}
```

More information about Slack scopes [requirements](https://api.slack.com/scopes/users:read.email).

## Processors

### `SlackUserProcessor`

Enriches existing `User` entities with information from Slack, notably the user's Slack ID and profile picture, based on the user's `.profile.email`.

#### Installation

Add the following to your `packages/backend/index.ts`:

```ts
backend.add(import('@seatgeek/backstage-plugin-slack-catalog-backend'));
```

##### Legacy backend system

Add the following to your `packages/backend/catalog.ts`:

```ts
import { SlackUserProcessor } from '@seatgeek/backstage-plugin-slack-catalog-backend';

export default async function createPlugin(
  env: PluginEnvironment,
): Promise<Router> {
  const builder = CatalogBuilder.create(env);
  builder.addProcessor(
    // Add the slack user processor
    SlackUserProcessor.fromConfig(env.config, env.logger),
  );
  const { processingEngine, router } = await builder.build();
  processingEngine.start();
  return router;
}
```
npm package: @seatgeek/node-hcl
Description: A WebAssembly wrapper that provides a convenient way to use the HCL (HashiCorp Configuration Language) library in Node.js.
Latest version: 2.0.1

# node-hcl

This WebAssembly wrapper for https://github.com/hashicorp/hcl provides a convenient way to use the HCL (HashiCorp Configuration Language) library in Node.js.

## Usage

```
yarn add @seatgeek/node-hcl
```

### Merge HCL content

```javascript
import { merge } from "@seatgeek/node-hcl";

const a = `
variable "a" {
  type        = string
  description = "Variable A"
  default     = "a"
}`;
const b = `
variable "b" {
  type        = string
  description = "Variable B"
  default     = "b"
}`;
const result = merge(a, b);
```

Happy coding!