mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 14:27:30 +00:00
265 lines
6.5 KiB
TypeScript
265 lines
6.5 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: "A service token in Infisical"
|
|
},
|
|
apiKeyAuth: {
|
|
type: "apiKey",
|
|
in: "header",
|
|
name: "X-API-Key",
|
|
description: "An API Key in Infisical"
|
|
}
|
|
},
|
|
definitions: {
|
|
CurrentUser: {
|
|
_id: "",
|
|
email: "[email protected]",
|
|
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: "[email protected]",
|
|
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: "[email protected]",
|
|
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"
|
|
},
|
|
RawSecret: {
|
|
_id: "abc123",
|
|
version: 1,
|
|
workspace: "abc123",
|
|
environment: "dev",
|
|
secretKey: "STRIPE_KEY",
|
|
secretValue: "abc123",
|
|
secretComment: "Lorem ipsum"
|
|
},
|
|
SecretImport: {
|
|
_id: "",
|
|
workspace: "abc123",
|
|
environment: "dev",
|
|
folderId: "root",
|
|
imports: [],
|
|
updatedAt: "2023-01-13T14:16:12.210Z",
|
|
createdAt: "2023-01-13T14:16:12.210Z"
|
|
},
|
|
Log: {
|
|
_id: "",
|
|
user: {
|
|
_id: "",
|
|
email: "[email protected]",
|
|
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"
|
|
},
|
|
AuditLog: {
|
|
actor: {
|
|
type: "",
|
|
metadata: {}
|
|
},
|
|
organization: "",
|
|
workspace: "",
|
|
ipAddress: "",
|
|
event: {
|
|
type: "",
|
|
metadata: {}
|
|
},
|
|
userAgent: "",
|
|
userAgentType: "",
|
|
expiresAt: ""
|
|
}
|
|
}
|
|
};
|
|
|
|
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();
|