1

feat: fill out apis
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
Mya 2023-12-31 13:41:06 -06:00
parent 5c53a95d3b
commit f068352bf7
Signed by: mya
GPG Key ID: 4DFBA0F91AC3544A
7 changed files with 661 additions and 236 deletions

View File

@ -14,31 +14,44 @@ package contributors.v1;
import "google/api/annotations.proto";
enum Role {
ROLE_UNSPECIFIED = 0;
ROLE_OWNER = 1;
}
message Contributor {
string id = 1;
string product_id = 2;
string email = 3;
Role role = 4;
}
message ListRequest {
string product_id = 1;
string product_id = 5;
}
message ListResponse {}
message CreateRequest {
string product_id = 1;
message ListResponse {
repeated Contributor contributors = 5;
}
message CreateResponse {}
message InviteRequest {
Contributor contributor = 1;
}
message InviteResponse {}
message UpdateRequest {
string product_id = 1;
string contributor_id = 2;
Contributor contributor = 1;
}
message UpdateResponse {}
message DeleteRequest {
message RevokeRequest {
string product_id = 1;
string contributor_id = 2;
}
message DeleteResponse {}
message RevokeResponse {}
service ContributorService {
rpc List(ListRequest) returns (ListResponse) {
@ -47,21 +60,21 @@ service ContributorService {
};
};
rpc Create(CreateRequest) returns (CreateResponse) {
rpc Invite(InviteRequest) returns (InviteResponse) {
option (google.api.http) = {
post: "/v1/products/{product_id}/contributors"
post: "/v1/products/{contributor.product_id}/contributors"
body: "*"
};
};
rpc Update(UpdateRequest) returns (UpdateResponse) {
option (google.api.http) = {
post: "/v1/products/{product_id}/contributors/{contributor_id}"
post: "/v1/products/{contributor.product_id}/contributors/{contributor.id}"
body: "*"
};
};
rpc Delete(DeleteRequest) returns (DeleteResponse) {
rpc Revoke(RevokeRequest) returns (RevokeResponse) {
option (google.api.http) = {
delete: "/v1/products/{product_id}/contributors/{contributor_id}"
};

View File

@ -14,11 +14,21 @@ package licenses.v1;
import "google/api/annotations.proto";
message License {
string id = 1;
string product_id = 2;
string package_name = 3;
}
message ListRequest {}
message ListResponse {}
message ListResponse {
repeated License licenses = 1;
}
message PurchaseRequest {}
message PurchaseRequest {
License license = 1;
}
message PurchaseResponse {}

View File

@ -14,14 +14,22 @@ package packages.v1;
import "google/api/annotations.proto";
message ListRequest {
string product_id = 1;
message Package {
string id = 1;
string product_id = 2;
string name = 3;
}
message ListResponse {}
message ListRequest {
string product_id = 5;
}
message ListResponse {
repeated Package packages = 5;
}
message CreateRequest {
string product_id = 1;
Package package = 1;
}
message CreateResponse {}
@ -31,11 +39,12 @@ message ReadRequest {
string package_name = 2;
}
message ReadResponse {}
message ReadResponse {
Package package = 1;
}
message UpdateRequest {
string product_id = 1;
string package_name = 2;
Package package = 1;
}
message UpdateResponse {}
@ -56,7 +65,7 @@ service PackageService {
rpc Create(CreateRequest) returns (CreateResponse) {
option (google.api.http) = {
post: "/v1/products/{product_id}/packages"
post: "/v1/products/{package.product_id}/packages"
body: "*"
};
};
@ -69,7 +78,7 @@ service PackageService {
rpc Update(UpdateRequest) returns (UpdateResponse) {
option (google.api.http) = {
post: "/v1/products/{product_id}/packages/{package_name}"
post: "/v1/products/{package.product_id}/packages/{package.name}"
body: "*"
};
};

View File

@ -14,11 +14,21 @@ package products.v1;
import "google/api/annotations.proto";
message Product {
string id = 1;
string name = 2;
string description = 3;
}
message ListRequest {}
message ListResponse {}
message ListResponse {
repeated Product products = 5;
}
message CreateRequest {}
message CreateRequest {
Product product = 1;
}
message CreateResponse {}
@ -26,10 +36,12 @@ message ReadRequest {
string product_id = 1;
}
message ReadResponse {}
message ReadResponse {
Product product = 1;
}
message UpdateRequest {
string product_id = 1;
Product product = 1;
}
message UpdateResponse {}
@ -62,7 +74,7 @@ service ProductService {
rpc Update(UpdateRequest) returns (UpdateResponse) {
option (google.api.http) = {
post: "/v1/products/{product_id}"
post: "/v1/products/{product.id}"
body: "*"
};
};

View File

@ -3,19 +3,31 @@
"application/json"
],
"definitions": {
"contributorsv1CreateResponse": {
"type": "object"
},
"contributorsv1DeleteResponse": {
"type": "object"
},
"contributorsv1ListResponse": {
"properties": {
"contributors": {
"items": {
"$ref": "#/definitions/v1Contributor",
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"contributorsv1UpdateResponse": {
"type": "object"
},
"licensesv1ListResponse": {
"properties": {
"licenses": {
"items": {
"$ref": "#/definitions/v1License",
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"packagesv1CreateResponse": {
@ -25,15 +37,34 @@
"type": "object"
},
"packagesv1ListResponse": {
"properties": {
"packages": {
"items": {
"$ref": "#/definitions/v1Package",
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"packagesv1ReadResponse": {
"properties": {
"package": {
"$ref": "#/definitions/v1Package"
}
},
"type": "object"
},
"packagesv1UpdateResponse": {
"type": "object"
},
"productsv1CreateRequest": {
"properties": {
"product": {
"$ref": "#/definitions/v1Product"
}
},
"type": "object"
},
"productsv1CreateResponse": {
@ -43,9 +74,23 @@
"type": "object"
},
"productsv1ListResponse": {
"properties": {
"products": {
"items": {
"$ref": "#/definitions/v1Product",
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"productsv1ReadResponse": {
"properties": {
"product": {
"$ref": "#/definitions/v1Product"
}
},
"type": "object"
},
"productsv1UpdateResponse": {
@ -80,40 +125,240 @@
"type": "object"
},
"tokensv1CreateRequest": {
"properties": {
"token": {
"$ref": "#/definitions/v1Token"
}
},
"type": "object"
},
"tokensv1CreateResponse": {
"properties": {
"token": {
"type": "string"
}
},
"type": "object"
},
"tokensv1DeleteResponse": {
"type": "object"
},
"tokensv1ListResponse": {
"properties": {
"tokens": {
"items": {
"$ref": "#/definitions/v1Token",
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"v1AuthenticateRequest": {
"properties": {
"clientId": {
"title": "required for a handful of workflows\ncan also come from the basic auth header",
"type": "string"
},
"clientSecret": {
"type": "string"
},
"code": {
"title": "grant_type=authorization_code",
"type": "string"
},
"codeVerifier": {
"type": "string"
},
"grantType": {
"title": "grant_type = client_credentials, refresh_token, password, authorization_code, license",
"type": "string"
},
"license": {
"title": "grant_type=license",
"type": "string"
},
"password": {
"type": "string"
},
"redirectUri": {
"type": "string"
},
"refreshToken": {
"title": "grant_type=refresh_token",
"type": "string"
},
"scope": {
"type": "string"
},
"username": {
"title": "grant_type=password",
"type": "string"
}
},
"type": "object"
},
"v1AuthenticateResponse": {
"properties": {
"accessToken": {
"type": "string"
},
"error": {
"type": "string"
},
"errorDescription": {
"type": "string"
},
"errorUri": {
"type": "string"
},
"expiresIn": {
"format": "int32",
"type": "integer"
},
"refreshToken": {
"type": "string"
},
"scope": {
"type": "string"
},
"tokenType": {
"type": "string"
}
},
"type": "object"
},
"v1CancelResponse": {
"type": "object"
},
"v1Contributor": {
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"productId": {
"type": "string"
},
"role": {
"$ref": "#/definitions/v1Role"
}
},
"type": "object"
},
"v1CurrentResponse": {
"type": "object"
},
"v1InviteResponse": {
"type": "object"
},
"v1License": {
"properties": {
"id": {
"type": "string"
},
"packageName": {
"type": "string"
},
"productId": {
"type": "string"
}
},
"type": "object"
},
"v1Package": {
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"productId": {
"type": "string"
}
},
"type": "object"
},
"v1Product": {
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"type": "object"
},
"v1PurchaseRequest": {
"properties": {
"license": {
"$ref": "#/definitions/v1License"
}
},
"type": "object"
},
"v1PurchaseResponse": {
"type": "object"
},
"v1RevokeResponse": {
"type": "object"
},
"v1Role": {
"default": "ROLE_UNSPECIFIED",
"enum": [
"ROLE_UNSPECIFIED",
"ROLE_OWNER"
],
"type": "string"
},
"v1SignupRequest": {
"properties": {
"email": {
"type": "string"
},
"password": {
"type": "string"
}
},
"type": "object"
},
"v1SignupResponse": {
"type": "object"
},
"v1Token": {
"properties": {
"expiresAt": {
"type": "string"
},
"expiresIn": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"noExpiry": {
"title": "one of",
"type": "boolean"
},
"scopes": {
"items": {
"type": "string"
},
"type": "array"
}
},
"type": "object"
}
},
"info": {
@ -255,6 +500,273 @@
]
}
},
"/v1/products/{contributor.productId}/contributors": {
"post": {
"operationId": "ContributorService_Invite",
"parameters": [
{
"in": "path",
"name": "contributor.productId",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"contributor": {
"properties": {
"email": {
"type": "string"
},
"id": {
"type": "string"
},
"role": {
"$ref": "#/definitions/v1Role"
}
},
"type": "object"
}
},
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/v1InviteResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"ContributorService"
]
}
},
"/v1/products/{contributor.productId}/contributors/{contributor.id}": {
"post": {
"operationId": "ContributorService_Update",
"parameters": [
{
"in": "path",
"name": "contributor.productId",
"required": true,
"type": "string"
},
{
"in": "path",
"name": "contributor.id",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"contributor": {
"properties": {
"email": {
"type": "string"
},
"role": {
"$ref": "#/definitions/v1Role"
}
},
"type": "object"
}
},
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/contributorsv1UpdateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"ContributorService"
]
}
},
"/v1/products/{package.productId}/packages": {
"post": {
"operationId": "PackageService_Create",
"parameters": [
{
"in": "path",
"name": "package.productId",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"package": {
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/packagesv1CreateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"PackageService"
]
}
},
"/v1/products/{package.productId}/packages/{package.name}": {
"post": {
"operationId": "PackageService_Update",
"parameters": [
{
"in": "path",
"name": "package.productId",
"required": true,
"type": "string"
},
{
"in": "path",
"name": "package.name",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"package": {
"properties": {
"id": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/packagesv1UpdateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"PackageService"
]
}
},
"/v1/products/{product.id}": {
"post": {
"operationId": "ProductService_Update",
"parameters": [
{
"in": "path",
"name": "product.id",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"properties": {
"product": {
"properties": {
"description": {
"type": "string"
},
"name": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/productsv1UpdateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"ProductService"
]
}
},
"/v1/products/{productId}": {
"delete": {
"operationId": "ProductService_Delete",
@ -311,42 +823,6 @@
"tags": [
"ProductService"
]
},
"post": {
"operationId": "ProductService_Update",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/productsv1UpdateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"ProductService"
]
}
},
"/v1/products/{productId}/contributors": {
@ -377,47 +853,11 @@
"tags": [
"ContributorService"
]
},
"post": {
"operationId": "ContributorService_Create",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/contributorsv1CreateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"ContributorService"
]
}
},
"/v1/products/{productId}/contributors/{contributorId}": {
"delete": {
"operationId": "ContributorService_Delete",
"operationId": "ContributorService_Revoke",
"parameters": [
{
"in": "path",
@ -436,49 +876,7 @@
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/contributorsv1DeleteResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"ContributorService"
]
},
"post": {
"operationId": "ContributorService_Update",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"type": "string"
},
{
"in": "path",
"name": "contributorId",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/contributorsv1UpdateResponse"
"$ref": "#/definitions/v1RevokeResponse"
}
},
"default": {
@ -521,42 +919,6 @@
"tags": [
"PackageService"
]
},
"post": {
"operationId": "PackageService_Create",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/packagesv1CreateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"PackageService"
]
}
},
"/v1/products/{productId}/packages/{packageName}": {
@ -627,48 +989,6 @@
"tags": [
"PackageService"
]
},
"post": {
"operationId": "PackageService_Update",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"type": "string"
},
{
"in": "path",
"name": "packageName",
"required": true,
"type": "string"
},
{
"in": "body",
"name": "body",
"required": true,
"schema": {
"type": "object"
}
}
],
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/packagesv1UpdateResponse"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"PackageService"
]
}
},
"/v1/token": {

View File

@ -14,17 +14,73 @@ package tokens.v1;
import "google/api/annotations.proto";
message AuthenticateRequest {}
message AuthenticateRequest {
// grant_type = client_credentials, refresh_token, password, authorization_code, license
string grant_type = 1;
message AuthenticateResponse {}
// required for a handful of workflows
// can also come from the basic auth header
string client_id = 2;
string client_secret = 3;
// grant_type=refresh_token
string refresh_token = 4;
// grant_type=password
string username = 5;
string password = 6;
// grant_type=authorization_code
string code = 7;
string redirect_uri = 8;
string code_verifier = 9;
// grant_type=license
string license = 10;
// allow for room to add additional grant_type's
string scope = 20;
}
message AuthenticateResponse {
string access_token = 1;
string token_type = 2;
int32 expires_in = 3;
string refresh_token = 4;
string scope = 5;
// error = invalid_request, invalid_client, invalid_grant, invalid_scope, unauthorized_client, unsupported_grant_type
string error = 10;
string error_description = 11;
string error_uri = 12;
}
message Token {
string id = 1;
string name = 2;
repeated string scopes = 3;
// one of
bool no_expiry = 4;
string expires_at = 5;
string expires_in = 6;
}
message ListRequest {}
message ListResponse {}
message ListResponse {
repeated Token tokens = 5;
}
message CreateRequest {}
message CreateRequest {
Token token = 1;
}
message CreateResponse {}
message CreateResponse {
string token = 1;
}
message DeleteRequest {
string token_id = 1;

View File

@ -14,10 +14,15 @@ package users.v1;
import "google/api/annotations.proto";
message SignupRequest {}
message SignupRequest {
string email = 1;
string password = 2;
}
message SignupResponse {}
message CurrentRequest {}
message CurrentResponse {}
service UserService {