mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 13:39:35 +00:00
230 lines
6.0 KiB
TypeScript
230 lines
6.0 KiB
TypeScript
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
const swaggerAutogen = require("swagger-autogen")({ openapi: "3.0.0" });
|
|
const fs = require("fs").promises;
|
|
const yaml = require("js-yaml");
|
|
|
|
/**
|
|
* Generates OpenAPI specs for all Infisical API endpoints:
|
|
* - spec.json in /backend for api-serving
|
|
* - spec.yaml in /docs for API reference
|
|
*/
|
|
const generateOpenAPISpec = async () => {
|
|
const doc = {
|
|
info: {
|
|
title: "Infisical API",
|
|
description: "List of all available APIs that can be consumed",
|
|
},
|
|
host: ["https://infisical.com"],
|
|
servers: [
|
|
{
|
|
url: "https://app.infisical.com",
|
|
description: "Production server",
|
|
},
|
|
{
|
|
url: "http://localhost:8080",
|
|
description: "Local server",
|
|
},
|
|
],
|
|
securityDefinitions: {
|
|
bearerAuth: {
|
|
type: "http",
|
|
scheme: "bearer",
|
|
bearerFormat: "JWT",
|
|
description: "This security definition uses the HTTP 'bearer' scheme, which allows the client to authenticate using a JSON Web Token (JWT) that is passed in the Authorization header of the request.",
|
|
},
|
|
apiKeyAuth: {
|
|
type: "apiKey",
|
|
in: "header",
|
|
name: "X-API-Key",
|
|
description: 'This security definition uses an API key, which is passed in the header of the request as the value of the "X-API-Key" header. The client must provide a valid key in order to access the API.',
|
|
},
|
|
},
|
|
definitions: {
|
|
CurrentUser: {
|
|
_id: "",
|
|
email: "johndoe@gmail.com",
|
|
firstName: "John",
|
|
lastName: "Doe",
|
|
publicKey: "johns_nacl_public_key",
|
|
encryptedPrivateKey: "johns_enc_nacl_private_key",
|
|
iv: "iv_of_enc_nacl_private_key",
|
|
tag: "tag_of_enc_nacl_private_key",
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z",
|
|
},
|
|
Membership: {
|
|
user: {
|
|
_id: "",
|
|
email: "johndoe@gmail.com",
|
|
firstName: "John",
|
|
lastName: "Doe",
|
|
publicKey: "johns_nacl_public_key",
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z",
|
|
},
|
|
workspace: "",
|
|
role: "admin",
|
|
},
|
|
MembershipOrg: {
|
|
user: {
|
|
_id: "",
|
|
email: "johndoe@gmail.com",
|
|
firstName: "John",
|
|
lastName: "Doe",
|
|
publicKey: "johns_nacl_public_key",
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z",
|
|
},
|
|
organization: "",
|
|
role: "owner",
|
|
status: "accepted",
|
|
},
|
|
Organization: {
|
|
_id: "",
|
|
name: "Acme Corp.",
|
|
customerId: "",
|
|
},
|
|
Project: {
|
|
name: "My Project",
|
|
organization: "",
|
|
environments: [{
|
|
name: "development",
|
|
slug: "dev",
|
|
}],
|
|
},
|
|
ProjectKey: {
|
|
encryptedkey: "",
|
|
nonce: "",
|
|
sender: {
|
|
publicKey: "senders_nacl_public_key",
|
|
},
|
|
receiver: "",
|
|
workspace: "",
|
|
},
|
|
CreateSecret: {
|
|
type: "shared",
|
|
secretKeyCiphertext: "",
|
|
secretKeyIV: "",
|
|
secretKeyTag: "",
|
|
secretValueCiphertext: "",
|
|
secretValueIV: "",
|
|
secretValueTag: "",
|
|
secretCommentCiphertext: "",
|
|
secretCommentIV: "",
|
|
secretCommentTag: "",
|
|
},
|
|
UpdateSecret: {
|
|
id: "",
|
|
secretKeyCiphertext: "",
|
|
secretKeyIV: "",
|
|
secretKeyTag: "",
|
|
secretValueCiphertext: "",
|
|
secretValueIV: "",
|
|
secretValueTag: "",
|
|
secretCommentCiphertext: "",
|
|
secretCommentIV: "",
|
|
secretCommentTag: "",
|
|
},
|
|
Secret: {
|
|
_id: "",
|
|
version: 1,
|
|
workspace : "",
|
|
type: "shared",
|
|
user: null,
|
|
secretKeyCiphertext: "",
|
|
secretKeyIV: "",
|
|
secretKeyTag: "",
|
|
secretValueCiphertext: "",
|
|
secretValueIV: "",
|
|
secretValueTag: "",
|
|
secretCommentCiphertext: "",
|
|
secretCommentIV: "",
|
|
secretCommentTag: "",
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z",
|
|
},
|
|
Log: {
|
|
_id: "",
|
|
user: {
|
|
_id: "",
|
|
email: "johndoe@gmail.com",
|
|
firstName: "John",
|
|
lastName: "Doe",
|
|
},
|
|
workspace: "",
|
|
actionNames: [
|
|
"addSecrets",
|
|
],
|
|
actions: [
|
|
{
|
|
name: "addSecrets",
|
|
user: "",
|
|
workspace: "",
|
|
payload: [
|
|
{
|
|
oldSecretVersion: "",
|
|
newSecretVersion: "",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
channel: "cli",
|
|
ipAddress: "192.168.0.1",
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z",
|
|
},
|
|
SecretSnapshot: {
|
|
workspace: "",
|
|
version: 1,
|
|
secretVersions: [
|
|
{
|
|
_id: "",
|
|
},
|
|
],
|
|
},
|
|
SecretVersion: {
|
|
_id: "",
|
|
secret: "",
|
|
version: 1,
|
|
workspace: "",
|
|
type: "shared",
|
|
user: "",
|
|
environment: "dev",
|
|
isDeleted: "",
|
|
secretKeyCiphertext: "",
|
|
secretKeyIV: "",
|
|
secretKeyTag: "",
|
|
secretValueCiphertext: "",
|
|
secretValueIV: "",
|
|
secretValueTag: "",
|
|
},
|
|
ServiceTokenData: {
|
|
_id: "",
|
|
name: "",
|
|
workspace: "",
|
|
environment: "",
|
|
user: {
|
|
_id: "",
|
|
firstName: "",
|
|
lastName: "",
|
|
},
|
|
expiresAt: "2023-01-13T14:16:12.210Z",
|
|
encryptedKey: "",
|
|
iv: "",
|
|
tag: "",
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z",
|
|
},
|
|
},
|
|
};
|
|
|
|
const outputJSONFile = "../spec.json";
|
|
const outputYAMLFile = "../docs/spec.yaml";
|
|
const endpointsFiles = ["../src/index.ts"];
|
|
|
|
const spec = await swaggerAutogen(outputJSONFile, endpointsFiles, doc);
|
|
|
|
await fs.writeFile(outputYAMLFile, yaml.dump(spec.data));
|
|
}
|
|
|
|
generateOpenAPISpec(); |