├── .dockerignore ├── .idea ├── nimbus-compiler.iml └── statistic.xml ├── website ├── static │ ├── img │ │ ├── favicon.png │ │ ├── oss_logo.png │ │ └── favicon │ │ │ └── favicon.ico │ └── css │ │ └── custom.css ├── blog │ ├── 2017-09-26-adding-rss.md │ ├── 2017-10-24-new-version-1.0.0.md │ └── 2017-09-25-testing-rss.md └── package.json ├── core └── src │ ├── main │ └── java │ │ └── com │ │ └── nimbusframework │ │ └── nimbuscore │ │ ├── clients │ │ ├── store │ │ │ ├── ReadItemRequest.kt │ │ │ ├── WriteItemRequest.kt │ │ │ ├── conditions │ │ │ │ ├── Condition.kt │ │ │ │ ├── BracketsCondition.kt │ │ │ │ ├── bool │ │ │ │ │ ├── BooleanOperator.kt │ │ │ │ │ ├── NotCondition.kt │ │ │ │ │ └── BooleanComparisonCondition.kt │ │ │ │ ├── function │ │ │ │ │ ├── AttributeExists.kt │ │ │ │ │ ├── AttributeNotExists.kt │ │ │ │ │ └── FunctionCondition.kt │ │ │ │ ├── variable │ │ │ │ │ ├── NumericVariable.kt │ │ │ │ │ ├── StringVariable.kt │ │ │ │ │ ├── BooleanVariable.kt │ │ │ │ │ ├── ColumnVariable.kt │ │ │ │ │ └── ObjectVariable.kt │ │ │ │ ├── ComparisonOperator.kt │ │ │ │ └── ComparisonCondition.kt │ │ │ ├── ItemDescription.kt │ │ │ └── TransactionalClient.kt │ │ ├── notification │ │ │ ├── Protocol.kt │ │ │ └── NotificationClient.kt │ │ ├── queue │ │ │ ├── QueueClient.kt │ │ │ └── Queue.kt │ │ ├── file │ │ │ └── FileInformation.kt │ │ ├── function │ │ │ ├── EnvironmentVariableClient.kt │ │ │ └── BasicServerlessFunctionClient.kt │ │ ├── ClientBinder.kt │ │ ├── database │ │ │ ├── DatabaseClient.kt │ │ │ └── RelationalDatabase.kt │ │ ├── websocket │ │ │ └── ServerlessFunctionWebSocketClient.kt │ │ ├── empty │ │ │ ├── EmptyQueueClient.kt │ │ │ ├── EmptyEnvironmentVariableClient.kt │ │ │ ├── EmptyDatabaseClient.kt │ │ │ ├── EmptyServerlessFunctionWebSocketClient.kt │ │ │ └── EmptyTransactionalClient.kt │ │ └── document │ │ │ └── DocumentStore.kt │ │ ├── eventabstractions │ │ ├── ServerlessEvent.kt │ │ ├── WebSocketResponse.kt │ │ ├── RequestContext.kt │ │ ├── NotificationMessageAttribute.kt │ │ ├── BasicEvent.kt │ │ ├── FileStorageEvent.kt │ │ ├── StoreEvent.kt │ │ ├── StoreMessageAttribute.kt │ │ ├── NotificationEvent.kt │ │ ├── QueueEvent.kt │ │ ├── WebSocketEvent.kt │ │ └── HttpEvent.kt │ │ ├── persisted │ │ ├── CloudProvider.kt │ │ ├── ExportInformation.kt │ │ ├── FileUploadDescription.kt │ │ └── userconfig │ │ │ ├── AllowedOrigin.kt │ │ │ └── AllowedHeaders.kt │ │ ├── exceptions │ │ ├── StoreConditionException.kt │ │ ├── InvalidStageException.kt │ │ ├── AttributeNameException.kt │ │ ├── NotBoundException.kt │ │ ├── PermissionException.kt │ │ ├── RetryableException.kt │ │ ├── NonRetryableException.kt │ │ └── MismatchedKeyTypeException.kt │ │ ├── annotations │ │ ├── persistent │ │ │ ├── StoreEventType.kt │ │ │ ├── Key.java │ │ │ └── Attribute.java │ │ ├── http │ │ │ ├── HttpMethod.kt │ │ │ ├── HttpException.kt │ │ │ └── CorsInformation.kt │ │ ├── file │ │ │ ├── FileStorageEventType.java │ │ │ ├── UsesFileStorageBucket.java │ │ │ ├── UsesFileStorageBuckets.java │ │ │ ├── FileStorageBucketDefinitions.java │ │ │ └── FileStorageBucketDefinition.java │ │ ├── database │ │ │ ├── DatabaseSize.kt │ │ │ ├── DatabaseLanguage.kt │ │ │ ├── UsesRelationalDatabase.java │ │ │ ├── UsesRelationalDatabases.java │ │ │ ├── RelationalDatabaseDefinitions.java │ │ │ └── RelationalDatabaseDefinition.java │ │ ├── deployment │ │ │ ├── CustomFactoryInterface.java │ │ │ ├── FileUploads.java │ │ │ ├── CustomFactory.java │ │ │ ├── AfterDeployment.java │ │ │ ├── AfterDeployments.java │ │ │ └── FileUpload.java │ │ ├── NimbusConstants.java │ │ ├── queue │ │ │ ├── UsesQueue.java │ │ │ ├── UsesQueues.java │ │ │ └── QueueDefinitions.java │ │ ├── document │ │ │ ├── UsesDocumentStore.java │ │ │ ├── DocumentStoreDefinition.java │ │ │ ├── UsesDocumentStores.java │ │ │ └── DocumentStoreDefinitions.java │ │ ├── keyvalue │ │ │ ├── UsesKeyValueStore.java │ │ │ ├── UsesKeyValueStores.java │ │ │ ├── KeyValueStoreDefinitions.java │ │ │ └── KeyValueStoreDefinition.java │ │ ├── websocket │ │ │ ├── UsesServerlessFunctionWebSocket.java │ │ │ └── UsesServerlessFunctionWebSockets.java │ │ ├── function │ │ │ ├── decorator │ │ │ │ └── KeepWarm.java │ │ │ ├── repeatable │ │ │ │ ├── EnvironmentVariables.java │ │ │ │ ├── HttpServerlessFunctions.java │ │ │ │ ├── BasicServerlessFunctions.java │ │ │ │ ├── QueueServerlessFunctions.java │ │ │ │ ├── WebSocketServerlessFunctions.java │ │ │ │ ├── FileStorageServerlessFunctions.java │ │ │ │ ├── NotificationServerlessFunctions.java │ │ │ │ ├── DocumentStoreServerlessFunctions.java │ │ │ │ └── KeyValueStoreServerlessFunctions.java │ │ │ ├── UsesBasicServerlessFunction.java │ │ │ ├── BasicServerlessFunction.java │ │ │ ├── EnvironmentVariable.java │ │ │ ├── WebSocketServerlessFunction.java │ │ │ ├── QueueServerlessFunction.java │ │ │ ├── NotificationServerlessFunction.java │ │ │ ├── DocumentStoreServerlessFunction.java │ │ │ ├── KeyValueStoreServerlessFunction.java │ │ │ └── FileStorageServerlessFunction.java │ │ └── notification │ │ │ ├── UsesNotificationTopic.java │ │ │ ├── NotificationTopicDefinition.java │ │ │ ├── UsesNotificationTopics.java │ │ │ └── NotificationTopicDefinitions.java │ │ ├── wrappers │ │ ├── DynamoConfiguration.kt │ │ ├── annotations │ │ │ └── datamodel │ │ │ │ ├── CustomFactoryAnnotation.kt │ │ │ │ ├── FileUploadAnnotation.kt │ │ │ │ ├── UsesQueueFunctionAnnotation.kt │ │ │ │ ├── KeyValueStoreAnnotation.kt │ │ │ │ ├── UsesDocumentStoreAnnotation.kt │ │ │ │ ├── UsesKeyValueStoreAnnotation.kt │ │ │ │ ├── UsesRelationalDatabaseAnnotation.kt │ │ │ │ ├── QueueServerlessFunctionAnnotation.kt │ │ │ │ ├── UsesFileStorageBucketAnnotation.kt │ │ │ │ ├── UsesNotificationTopicAnnotation.kt │ │ │ │ ├── DocumentStoreServerlessFunctionAnnotation.kt │ │ │ │ ├── FileStorageBucketFunctionAnnotation.kt │ │ │ │ ├── UsesBasicServerlessFunctionAnnotation.kt │ │ │ │ ├── KeyValueStoreServerlessFunctionAnnotation.kt │ │ │ │ └── NotificationTopicServerlessFunctionAnnotation.kt │ │ └── WebsiteConfiguration.kt │ │ ├── Configuration.kt │ │ └── services │ │ └── ReadUserConfigService.kt │ └── test │ └── java │ └── com │ └── nimbusframework │ └── nimbuscore │ ├── examples │ ├── queue │ │ ├── QueueNoStage.java │ │ └── Queue.java │ ├── filestorage │ │ ├── FileStorageNoStage.java │ │ └── FileStorage.java │ ├── notification │ │ ├── NotificationTopicNoStage.java │ │ └── NotificationTopic.java │ ├── keyvalue │ │ ├── KeyValueStoreNoTableName.java │ │ ├── KeyValueStoreNoTableNameNoStage.java │ │ └── KeyValueStoreWithTableName.java │ └── document │ │ ├── DocumentStoreNoTableName.java │ │ ├── DocumentStoreWithTableName.java │ │ └── DocumentStoreNoTableNameNoStage.java │ └── clients │ └── store │ └── conditions │ └── variable │ ├── NumericVariableTest.kt │ ├── ColumnVariableTest.kt │ ├── StringVariableTest.kt │ └── BooleanVariableTest.kt ├── deployment └── src │ └── main │ └── java │ ├── services │ ├── SubstitutionConstants.kt │ └── LambdaService.kt │ ├── persisted │ ├── DeployedFunctionInformation.kt │ └── DeploymentInformation.kt │ └── configuration │ └── Configuration.kt ├── Dockerfile ├── cloud ├── aws │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── nimbusframework │ │ │ └── nimbusaws │ │ │ ├── annotation │ │ │ ├── annotations │ │ │ │ ├── parsed │ │ │ │ │ ├── ParsedAnnotation.kt │ │ │ │ │ ├── ParsedQueueDefinition.kt │ │ │ │ │ └── ParsedEnvironmentVariable.kt │ │ │ │ ├── nativeimage │ │ │ │ │ └── RegisterForReflection.java │ │ │ │ ├── cognito │ │ │ │ │ ├── UsesCognitoUserPool.java │ │ │ │ │ ├── UsesCognitoUserPoolAsAdmin.java │ │ │ │ │ ├── UsesCognitoUserPools.java │ │ │ │ │ ├── ExistingCognitoUserPools.java │ │ │ │ │ ├── UsesCognitoUserPoolAsAdmins.java │ │ │ │ │ └── ExistingCognitoUserPool.java │ │ │ │ ├── secretmanager │ │ │ │ │ ├── UsesSecretManagerSecret.java │ │ │ │ │ └── UsesSecretManagerSecrets.java │ │ │ │ ├── database │ │ │ │ │ ├── RdsDatabases.java │ │ │ │ │ └── RdsDatabase.java │ │ │ │ ├── apigateway │ │ │ │ │ └── ApiGatewayRestConfigs.java │ │ │ │ ├── document │ │ │ │ │ ├── DynamoDbDocumentStores.java │ │ │ │ │ └── DynamoDbDocumentStore.java │ │ │ │ ├── keyvalue │ │ │ │ │ ├── DynamoDbKeyValueStores.java │ │ │ │ │ └── DynamoDbKeyValueStore.java │ │ │ │ └── lambda │ │ │ │ │ └── CustomLambdaFunctionHandler.java │ │ │ └── processor │ │ │ │ ├── AwsMethodInformation.kt │ │ │ │ └── FunctionInformation.kt │ │ │ ├── cloudformation │ │ │ ├── model │ │ │ │ ├── resource │ │ │ │ │ ├── DirectAccessResource.kt │ │ │ │ │ ├── function │ │ │ │ │ │ ├── FunctionConfig.kt │ │ │ │ │ │ └── FunctionTrigger.kt │ │ │ │ │ ├── NimbusBucketResource.kt │ │ │ │ │ ├── dynamo │ │ │ │ │ │ └── DynamoStreamResource.kt │ │ │ │ │ └── ec2 │ │ │ │ │ │ └── InternetGateway.kt │ │ │ │ ├── CloudFormationFiles.kt │ │ │ │ ├── outputs │ │ │ │ │ ├── HttpApiOutput.kt │ │ │ │ │ └── WebSocketApiOutput.kt │ │ │ │ └── processing │ │ │ │ │ └── FileBuilderMethodInformation.kt │ │ │ └── generation │ │ │ │ ├── abstractions │ │ │ │ ├── FunctionIdentifier.kt │ │ │ │ ├── FunctionDecoratorHandler.kt │ │ │ │ ├── StageService.kt │ │ │ │ └── UsesResourcesProcessor.kt │ │ │ │ └── resources │ │ │ │ ├── environment │ │ │ │ ├── ConstantEnvironmentVariable.kt │ │ │ │ ├── CustomEnvironmentVariable.kt │ │ │ │ └── NimbusEnvironmentVariable.kt │ │ │ │ ├── cognito │ │ │ │ ├── UsesCognitoUserPoolAnnotation.kt │ │ │ │ └── UsesCognitoUserPoolAsAdminAnnotation.kt │ │ │ │ ├── apigateway │ │ │ │ └── ApiGatewayRestConfigAnnotation.kt │ │ │ │ └── queue │ │ │ │ └── QueueUrlEnvironmentVariable.kt │ │ │ ├── clients │ │ │ ├── cognito │ │ │ │ ├── SearchType.kt │ │ │ │ ├── CognitoUser.kt │ │ │ │ ├── SearchableCognitoAttribute.kt │ │ │ │ └── CognitoClient.kt │ │ │ ├── queue │ │ │ │ └── InvalidQueueUrlException.kt │ │ │ ├── secretmanager │ │ │ │ ├── SecretManagerClient.kt │ │ │ │ └── AwsSecretManagerClient.kt │ │ │ ├── notification │ │ │ │ └── InvalidTopicException.kt │ │ │ ├── AwsClientBinder.kt │ │ │ ├── dynamo │ │ │ │ ├── MismatchedTypeException.kt │ │ │ │ ├── DynamoWriteTransactItemRequest.kt │ │ │ │ └── DynamoReadItemRequest.kt │ │ │ ├── function │ │ │ │ └── EnvironmentVariableClientLambda.kt │ │ │ ├── AwsClientBuilder.kt │ │ │ └── InternalEnvironmentVariableClient.kt │ │ │ ├── lambda │ │ │ └── handlers │ │ │ │ ├── HandlerInformationProvider.kt │ │ │ │ └── HandlerProvider.kt │ │ │ ├── wrappers │ │ │ ├── customRuntimeEntry │ │ │ │ ├── InvocationResponse.kt │ │ │ │ └── LambdaExecutionFunction.java │ │ │ ├── file │ │ │ │ └── S3EventMapper.kt │ │ │ ├── store │ │ │ │ └── DynamoStoreEventMapper.kt │ │ │ ├── annotations │ │ │ │ └── datamodel │ │ │ │ │ └── DynamoDbKeyValueStoreAnnotation.kt │ │ │ └── http │ │ │ │ └── RestApiGatewayEventMapper.kt │ │ │ ├── configuration │ │ │ └── Configuration.kt │ │ │ └── interfaces │ │ │ └── ApiGatewayLambdaAuthorizer.java │ │ └── test │ │ ├── resources │ │ ├── models │ │ │ ├── Queue.java │ │ │ ├── NotificationTopic.java │ │ │ ├── Website.java │ │ │ ├── cognito │ │ │ │ ├── UserPool.java │ │ │ │ └── UserPoolWithUserPoolId.java │ │ │ ├── apigateway │ │ │ │ ├── ConfiguredApiGatewayCognito.java │ │ │ │ ├── ConfiguredApiGatewayLambdaHandler.java │ │ │ │ └── ConfiguredApiGatewayCustomHandler.java │ │ │ ├── FileStorage.java │ │ │ ├── RdsDatabaseModel.java │ │ │ ├── People.java │ │ │ ├── NestedPerson.java │ │ │ ├── Person.java │ │ │ ├── RelationalDatabaseModel.java │ │ │ └── RegisterNestedClass.java │ │ └── handlers │ │ │ ├── AfterDeploymentHandlers.java │ │ │ ├── ForceDependencyHandler.java │ │ │ ├── CustomFactoryWrongFactory.java │ │ │ ├── NotificationHandlers.java │ │ │ ├── UsesWebSocketHandler.java │ │ │ ├── CustomFactoryFactory.java │ │ │ ├── BadDocumentStoreHandlers.java │ │ │ ├── apigateway │ │ │ ├── Authorizer.java │ │ │ └── CustomAuthorizer.java │ │ │ ├── CustomFactoryFactoryNoEmptyConstructor.java │ │ │ ├── FileStorageHandlers.java │ │ │ ├── UsesFileStorageClientHandler.java │ │ │ ├── UsesRDBHandler.java │ │ │ ├── CustomFactoryHandlerWrongFactory.java │ │ │ ├── UsesNotificationTopicHandler.java │ │ │ ├── secrets │ │ │ └── UsesSecretsHandler.java │ │ │ ├── CustomFactoryHandlerNoEmptyConstructor.java │ │ │ ├── CustomFactoryHandler.java │ │ │ ├── QueueHandlers.java │ │ │ ├── basic │ │ │ └── BasicCustomFunctionHandler.java │ │ │ ├── WebSocketHandlers.java │ │ │ └── UsesQueueHandler.java │ │ └── java │ │ └── com │ │ └── nimbusframework │ │ └── nimbusaws │ │ ├── examples │ │ ├── cognito │ │ │ ├── DefaultStagesCognito.java │ │ │ └── MultipleStagesCognito.java │ │ ├── BasicFunctionHandler.java │ │ ├── SimpleObject.java │ │ ├── RelationalDatabaseExample.java │ │ ├── keyvalue │ │ │ └── KeyValueStoreWithTableName.java │ │ └── document │ │ │ ├── KotlinDocumentStoreNoTableName.kt │ │ │ └── DocumentStoreWithTableName.java │ │ ├── clients │ │ ├── dynamo │ │ │ └── DynamoHelper.kt │ │ └── function │ │ │ └── EnvironmentVariableClientLambdaTest.kt │ │ ├── TestDataModelAnnotation.kt │ │ └── wrappers │ │ ├── file │ │ ├── S3EventMapperTest.kt │ │ └── FileStorageServerlessFunctionFileBuilderTest.kt │ │ ├── store │ │ ├── keyvalue │ │ │ └── KeyValueStoreServerlessFunctionFileBuilderTest.kt │ │ └── DynamoStoreEventMapperTest.kt │ │ └── queue │ │ └── QueueServerlessFunctionFileBuilderTest.kt └── pom.xml ├── local ├── local │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── nimbusframework │ │ │ └── nimbuslocal │ │ │ ├── ResourceNotFoundException.kt │ │ │ └── deployment │ │ │ ├── webserver │ │ │ └── InternalPortCount.kt │ │ │ ├── store │ │ │ ├── TypeMismatchException.kt │ │ │ ├── ReadItemRequestLocal.kt │ │ │ ├── LocalStoreTransactions.kt │ │ │ └── WriteItemRequestLocal.kt │ │ │ ├── function │ │ │ ├── permissions │ │ │ │ ├── Permission.kt │ │ │ │ ├── AlwaysTruePermission.kt │ │ │ │ ├── QueuePermission.kt │ │ │ │ ├── StorePermission.kt │ │ │ │ ├── FileStoragePermission.kt │ │ │ │ ├── NotificationTopicPermission.kt │ │ │ │ └── BasicFunctionPermission.kt │ │ │ ├── information │ │ │ │ ├── FunctionInformation.kt │ │ │ │ ├── BasicFunctionInformation.kt │ │ │ │ ├── WebSocketFunctionInformation.kt │ │ │ │ ├── NotificationFunctionInformation.kt │ │ │ │ ├── QueueFunctionInformation.kt │ │ │ │ ├── HttpFunctionInformation.kt │ │ │ │ ├── DocumentStoreFunctionInformation.kt │ │ │ │ ├── FileStorageFunctionInformation.kt │ │ │ │ └── KeyValueStoreFunctionInformation.kt │ │ │ ├── FunctionIdentifier.kt │ │ │ ├── FunctionType.kt │ │ │ └── ServerlessFunction.kt │ │ │ ├── websocket │ │ │ └── MissingTopicException.kt │ │ │ ├── services │ │ │ └── resource │ │ │ │ └── LocalCreateResourcesHandler.kt │ │ │ ├── http │ │ │ └── authentication │ │ │ │ ├── AuthenticationResponse.kt │ │ │ │ └── HttpMethodAuthenticator.kt │ │ │ ├── notification │ │ │ └── SubscriberInformation.kt │ │ │ ├── file │ │ │ └── MimeTypeDetector.kt │ │ │ ├── document │ │ │ └── DocumentMethod.kt │ │ │ └── keyvalue │ │ │ └── KeyValueMethod.kt │ │ └── test │ │ └── java │ │ └── com │ │ └── nimbusframework │ │ └── nimbuslocal │ │ ├── exampleModels │ │ ├── Person.kt │ │ ├── Bucket.kt │ │ ├── Queue.java │ │ ├── NotificationTopic.java │ │ ├── KeyValue.kt │ │ ├── Document.kt │ │ ├── Database.kt │ │ └── BucketTwo.kt │ │ ├── exampleHandlers │ │ ├── ExampleBasicFunctionHandler.kt │ │ ├── BasicFactory.kt │ │ ├── ExampleBasicCustomFactoryFunctionHandler.kt │ │ ├── ExampleNotificationHandler.kt │ │ ├── ExampleComplexBasicFunctionHandler.kt │ │ ├── ExampleHttpHandler.kt │ │ └── ExampleFileStorageHandler.kt │ │ └── clients │ │ └── LocalInternalClientBuilderTest.kt └── local-aws │ └── src │ ├── test │ └── java │ │ ├── exampleresources │ │ ├── UserPool.java │ │ ├── Person.java │ │ ├── authorizers │ │ │ └── CognitoApiGatewayAuthorizer.java │ │ └── LambdaApiGatewayAuthorizer.java │ │ └── com │ │ └── nimbusframework │ │ └── nimbusawslocal │ │ └── deployment │ │ └── services │ │ └── resource │ │ └── LocalDynamoDbDocumentStoreCreatorTest.kt │ └── main │ └── java │ └── com │ └── nimbusframework │ └── nimbusawslocal │ └── aws │ ├── LocalAwsResourceHolder.kt │ ├── secretsmanager │ └── LocalSecrets.kt │ └── AwsPermissionTypes.kt ├── azure └── src │ └── main │ └── java │ └── com │ └── nimbusframework │ └── nimbusaws │ ├── annotation │ └── processor │ │ └── FunctionInformation.kt │ └── arm │ └── ArmFiles.kt ├── docs └── Introduction.md ├── .gitignore ├── docker-compose.yml └── .github └── workflows └── pr-test.yml /.dockerignore: -------------------------------------------------------------------------------- 1 | */node_modules 2 | *.log 3 | -------------------------------------------------------------------------------- /.idea/nimbus-compiler.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /website/static/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasjallerton/nimbus-framework/HEAD/website/static/img/favicon.png -------------------------------------------------------------------------------- /website/static/img/oss_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasjallerton/nimbus-framework/HEAD/website/static/img/oss_logo.png -------------------------------------------------------------------------------- /website/static/img/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomasjallerton/nimbus-framework/HEAD/website/static/img/favicon/favicon.ico -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/ReadItemRequest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store 2 | 3 | open class ReadItemRequest -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/WriteItemRequest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store 2 | 3 | open class WriteItemRequest -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/ServerlessEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | interface ServerlessEvent -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/Condition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions 2 | 3 | interface Condition -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/persisted/CloudProvider.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.persisted 2 | 3 | enum class CloudProvider { 4 | AWS, AZURE 5 | } -------------------------------------------------------------------------------- /deployment/src/main/java/services/SubstitutionConstants.kt: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | object SubstitutionConstants { 4 | 5 | const val STAGE = "\${NIMBUS_DEPLOYMENT_STAGE}" 6 | 7 | } 8 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:8.11.4 2 | 3 | WORKDIR /app/website 4 | 5 | EXPOSE 3000 35729 6 | COPY ./docs /app/docs 7 | COPY ./website /app/website 8 | RUN yarn install 9 | 10 | CMD ["yarn", "start"] 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/notification/Protocol.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.notification 2 | 3 | enum class Protocol { 4 | HTTP, HTTPS, Email, SMS 5 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/WebSocketResponse.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | data class WebSocketResponse(val statusCode: Int = 200) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/ItemDescription.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store 2 | 3 | data class ItemDescription(val key: String, val attributes: Set) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/StoreConditionException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | class StoreConditionException: NonRetryableException("Failed condition") -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/parsed/ParsedAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.parsed 2 | 3 | interface ParsedAnnotation { 4 | } 5 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/resource/DirectAccessResource.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.resource 2 | 3 | interface DirectAccessResource { 4 | } 5 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/persistent/StoreEventType.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.persistent 2 | 3 | enum class StoreEventType { 4 | REMOVE, INSERT, MODIFY 5 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/ResourceNotFoundException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal 2 | 3 | class ResourceNotFoundException: Exception("Resource not found, check configuration names") -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/Person.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels 2 | 3 | data class Person ( 4 | val name: String = "", 5 | val age: Int = 0 6 | ) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/BracketsCondition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions 2 | 3 | data class BracketsCondition(val condition: Condition): Condition -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/InvalidStageException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | class InvalidStageException(): Exception("Target resource not deployed in this stage") -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/http/HttpMethod.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.http 2 | 3 | enum class HttpMethod { 4 | GET, POST, DELETE, HEAD, OPTIONS, PATCH, PUT, ANY 5 | } 6 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/bool/BooleanOperator.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.bool 2 | 3 | enum class BooleanOperator { 4 | AND, 5 | OR 6 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/file/FileStorageEventType.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.file; 2 | 3 | public enum FileStorageEventType { 4 | OBJECT_CREATED, OBJECT_DELETED 5 | } 6 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/cognito/SearchType.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.cognito 2 | 3 | enum class SearchType(val formatted: String) { 4 | EQUALS("="), 5 | PREFIX("^=") 6 | } 7 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/Queue.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.queue.QueueDefinition; 4 | 5 | @QueueDefinition( 6 | queueId = "messageQueue" 7 | ) 8 | public class Queue {} 9 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/database/DatabaseSize.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.database 2 | 3 | enum class DatabaseSize { 4 | FREE, SMALL, MEDIUM, LARGE, XLARGE, MAXIMUM; 5 | } 6 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/webserver/InternalPortCount.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.webserver 2 | 3 | object InternalPortCount { 4 | 5 | var currentPort = 0 6 | 7 | } 8 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/queue/QueueClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.queue 2 | 3 | interface QueueClient { 4 | fun sendMessage(message: String) 5 | fun sendMessageAsJson(obj: Any) 6 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/function/AttributeExists.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.function 2 | 3 | data class AttributeExists(val fieldName: String): FunctionCondition -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/cognito/CognitoUser.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.cognito 2 | 3 | data class CognitoUser( 4 | val username: String, 5 | val attributes: Map 6 | ) 7 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/database/DatabaseLanguage.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.database 2 | 3 | enum class DatabaseLanguage { 4 | MYSQL, POSTGRESQL, ORACLE, MARIADB, SQLSERVER; 5 | } 6 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/deployment/CustomFactoryInterface.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.deployment; 2 | 3 | public interface CustomFactoryInterface { 4 | 5 | T create(); 6 | 7 | } 8 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/function/AttributeNotExists.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.function 2 | 3 | data class AttributeNotExists(val fieldName: String): FunctionCondition -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/RequestContext.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | data class RequestContext( 4 | val eventType: String = "", 5 | val connectionId: String = "" 6 | ) 7 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/store/TypeMismatchException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.store 2 | 3 | class TypeMismatchException: Exception("Comparison failed as two variables are not the same type") -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/file/FileInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.file 2 | 3 | import java.time.Instant 4 | 5 | data class FileInformation(val lastModified: Instant, val size: Long, val path: String) 6 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/Permission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | interface Permission { 4 | 5 | fun hasPermission(value: String): Boolean 6 | } -------------------------------------------------------------------------------- /website/blog/2017-09-26-adding-rss.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Adding RSS Support 3 | author: Eric Nakagawa 4 | authorURL: http://twitter.com/ericnakagawa 5 | authorFBID: 661277173 6 | --- 7 | 8 | This is a test post. 9 | 10 | A whole bunch of other information. 11 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/queue/InvalidQueueUrlException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.queue 2 | 3 | class InvalidQueueUrlException: Exception("Not a valid queue url. Have you set up the @UsesQueue correctly?") 4 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/secretmanager/SecretManagerClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.secretmanager 2 | 3 | interface SecretManagerClient { 4 | 5 | fun getSecret(secretName: String): String 6 | 7 | } 8 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/NotificationMessageAttribute.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | 4 | class NotificationMessageAttribute( 5 | val type: String, 6 | val value: String 7 | ) -------------------------------------------------------------------------------- /website/blog/2017-10-24-new-version-1.0.0.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: New Version 1.0.0 3 | author: Eric Nakagawa 4 | authorURL: http://twitter.com/ericnakagawa 5 | authorFBID: 661277173 6 | --- 7 | 8 | This blog post will test file name parsing issues when periods are present. 9 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/AttributeNameException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | class AttributeNameException(val attributeName: String): Exception("Invalid attribute $attributeName, overlaps with primary key") -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/abstractions/FunctionIdentifier.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.abstractions 2 | 3 | data class FunctionIdentifier(val className: String, val methodName: String) 4 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/resource/function/FunctionConfig.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.resource.function 2 | 3 | data class FunctionConfig(val timeout: Int, val memory: Int, val stage: String) 4 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/NotificationTopic.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.notification.NotificationTopicDefinition; 4 | 5 | @NotificationTopicDefinition(topicName = "notificationTopic") 6 | public class NotificationTopic {} 7 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/BasicEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import java.util.* 4 | 5 | data class BasicEvent( 6 | val requestId: String = UUID.randomUUID().toString() 7 | ): ServerlessEvent -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/NotBoundException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | import java.lang.Exception 4 | 5 | class NotBoundException(targetBinding: Class<*>): Exception("Could not find binding for $targetBinding") { 6 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/websocket/MissingTopicException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.websocket 2 | 3 | import java.lang.Exception 4 | 5 | class MissingTopicException(body: String): Exception("Missing topic field in $body") -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/PermissionException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | class PermissionException(clientName: String): Exception("Invalid permissions for $clientName, does the function have the correct @UsesResource annotation") -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/http/HttpException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.http 2 | 3 | import java.lang.RuntimeException 4 | 5 | class HttpException( 6 | val statusCode: Int, 7 | message: String 8 | ): RuntimeException(message) 9 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/RetryableException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | import java.lang.RuntimeException 4 | 5 | class RetryableException(message: String): RuntimeException("The transaction can be retried, exception was $message") -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/DynamoConfiguration.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers 2 | 3 | data class DynamoConfiguration( 4 | val tableName: String, 5 | val readCapacityUnits: Int = 5, 6 | val writeCapacityUnits: Int = 5 7 | ) 8 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/queue/QueueNoStage.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.queue; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.queue.QueueDefinition; 4 | 5 | @QueueDefinition(queueId = "queueId") 6 | public class QueueNoStage {} 7 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/services/resource/LocalCreateResourcesHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.services.resource 2 | 3 | interface LocalCreateResourcesHandler { 4 | 5 | fun createResource(clazz: Class) 6 | 7 | } -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/Bucket.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageBucketDefinition 4 | 5 | @FileStorageBucketDefinition(bucketName = "Test") 6 | class Bucket -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/lambda/handlers/HandlerInformationProvider.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.lambda.handlers 2 | 3 | interface HandlerInformationProvider { 4 | 5 | fun getClassFilePath(): String 6 | 7 | fun getHandler(): String 8 | 9 | } 10 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/wrappers/customRuntimeEntry/InvocationResponse.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.customRuntimeEntry 2 | 3 | data class InvocationResponse( 4 | var requestId: String, 5 | var event: String, 6 | var endpoint: String 7 | ) 8 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/Website.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageBucketDefinition; 4 | 5 | @FileStorageBucketDefinition( 6 | bucketName = "website", 7 | staticWebsite = true 8 | ) 9 | public class Website {} 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/NonRetryableException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | import java.lang.RuntimeException 4 | 5 | open class NonRetryableException(message: String): RuntimeException("The transaction cannot be retried due to $message") -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/persisted/ExportInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.persisted 2 | 3 | data class ExportInformation( 4 | val exportName: String = "", 5 | val exportMessage: String = "", 6 | val substitutionVariable: String = "" 7 | ) -------------------------------------------------------------------------------- /local/local-aws/src/test/java/exampleresources/UserPool.java: -------------------------------------------------------------------------------- 1 | package exampleresources; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.ExistingCognitoUserPool; 4 | 5 | @ExistingCognitoUserPool(arn = "ard", userPoolId = "userPoolId") 6 | public class UserPool { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/cognito/UserPool.java: -------------------------------------------------------------------------------- 1 | package models.cognito; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.ExistingCognitoUserPool; 4 | 5 | @ExistingCognitoUserPool(arn = "arn:partition:service:region:account-id:resource-id") 6 | public class UserPool {} 7 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/function/FunctionCondition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.function 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.conditions.Condition 4 | 5 | interface FunctionCondition: Condition 6 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/function/EnvironmentVariableClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.function 2 | 3 | interface EnvironmentVariableClient { 4 | 5 | fun containsKey(key: String): Boolean 6 | 7 | fun get(key: String): String? 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/bool/NotCondition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.bool 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.conditions.Condition 4 | 5 | data class NotCondition(val condition: Condition): Condition -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/Queue.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.queue.QueueDefinition; 4 | 5 | @QueueDefinition( 6 | queueId = "QueueId" 7 | ) 8 | public class Queue {} 9 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/exceptions/MismatchedKeyTypeException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.exceptions 2 | 3 | class MismatchedKeyTypeException(tableDef: Any, clientType: Any): 4 | Exception("Key not expected Type. Client key set as $clientType, table object key as $tableDef") -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/http/authentication/AuthenticationResponse.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.http.authentication 2 | 3 | data class AuthenticationResponse( 4 | val authenticated: Boolean, 5 | val context: Map = mapOf() 6 | ) 7 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/store/ReadItemRequestLocal.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.store 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.ReadItemRequest 4 | 5 | class ReadItemRequestLocal(val executeRead: () -> T?): ReadItemRequest() -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/FunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 4 | 5 | open class FunctionInformation(val type: FunctionType) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/NimbusConstants.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations; 2 | 3 | 4 | public class NimbusConstants { 5 | static public final String stage = "dev"; 6 | static public final String allowedOriginEnvVariable = "NIMBUS_ALLOWED_CORS_ORIGIN"; 7 | } 8 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/AlwaysTruePermission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | class AlwaysTruePermission: Permission { 4 | override fun hasPermission(value: String): Boolean { 5 | return true 6 | } 7 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/notification/SubscriberInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.notification 2 | 3 | import com.nimbusframework.nimbuscore.clients.notification.Protocol 4 | 5 | data class SubscriberInformation(val protocol: Protocol, val endpoint: String) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/Configuration.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore 2 | 3 | const val DEPLOYMENT_BUCKET_NAME = "NimbusDeploymentBucketName" 4 | const val REST_API_URL_OUTPUT = "RestApiUrlOutput" 5 | const val WEBSOCKET_API_URL_OUTPUT = "WebSocketApiUrlOutput" 6 | const val CONFIG_FILE = "nimbus.yml" 7 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/ClientBinder.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients 2 | 3 | object ClientBinder { 4 | 5 | fun setInternalBuilder(internalClientBuilder: InternalClientBuilder) { 6 | ClientBuilder.internalClientBuilder = internalClientBuilder 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/persisted/FileUploadDescription.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.persisted 2 | 3 | 4 | data class FileUploadDescription( 5 | val localFile: String = "", 6 | val targetFile: String = "", 7 | val fileUploadVariableSubstitutionFileRegex: String = "" 8 | ) 9 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/NumericVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | data class NumericVariable(val number: Number): ConditionVariable() { 4 | 5 | override fun getValue(): Any { 6 | return number 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /azure/src/main/java/com/nimbusframework/nimbusaws/annotation/processor/FunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.processor 2 | 3 | import com.nimbusframework.nimbusaws.arm.resources.Resource 4 | import javax.lang.model.element.Element 5 | 6 | data class FunctionInformation(var element: Element, var resource: Resource) -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/nativeimage/RegisterForReflection.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.nativeimage; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.CLASS) 7 | public @interface RegisterForReflection {} 8 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/deployment/FileUploads.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.deployment; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface FileUploads { 8 | FileUpload[] value(); 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/ComparisonOperator.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions 2 | 3 | enum class ComparisonOperator { 4 | EQUAL, 5 | NOT_EQUAL, 6 | GREATER_THAN, 7 | GREATER_THAN_OR_EQUAL, 8 | LESS_THAN, 9 | LESS_THAN_OR_EQUAL 10 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/FunctionIdentifier.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function 2 | 3 | data class FunctionIdentifier(val className: String, val methodName: String) { 4 | constructor(clazz: Class<*>, methodName: String): this(clazz.canonicalName, methodName) 5 | } 6 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/notification/InvalidTopicException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.notification 2 | 3 | import java.lang.Exception 4 | 5 | class InvalidTopicException: Exception("Could not find SNS topic ARN, have you used the @UsesNotificationTopic com.nimbusframework.nimbuscore.annotation?") -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/cognito/UserPoolWithUserPoolId.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.ExistingCognitoUserPool; 4 | 5 | @ExistingCognitoUserPool(arn = "arn:partition:service:region:account-id:resource-id", userPoolId = "userpoolid") 6 | public class UserPoolWithUserPoolId {} 7 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/StringVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | data class StringVariable(private val stringVal: String): ConditionVariable() { 4 | 5 | override fun getValue(): Any { 6 | return stringVal 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/filestorage/FileStorageNoStage.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.filestorage; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageBucketDefinition; 4 | 5 | @FileStorageBucketDefinition(bucketName = "bucket") 6 | public class FileStorageNoStage { 7 | } 8 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/AwsClientBinder.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients 2 | 3 | object AwsClientBinder { 4 | 5 | fun setInternalBuilder(internalAwsClientBuilder: InternalAwsClientBuilder) { 6 | AwsClientBuilder.internalClientBuilder = internalAwsClientBuilder 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/BooleanVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | data class BooleanVariable(private val booleanVal: Boolean): ConditionVariable() { 4 | 5 | override fun getValue(): Any { 6 | return booleanVal 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/ColumnVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | data class ColumnVariable(val fieldName: String): ConditionVariable() { 4 | 5 | override fun getValue(): Any { 6 | return fieldName 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/ObjectVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | class ObjectVariable(private val objValue: Any): ConditionVariable() { 4 | 5 | override fun getValue(): Any { 6 | return objValue 7 | } 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/filestorage/FileStorage.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.filestorage; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageBucketDefinition; 4 | 5 | @FileStorageBucketDefinition(bucketName = "bucket", stages = {"dev"}) 6 | public class FileStorage { 7 | } 8 | -------------------------------------------------------------------------------- /deployment/src/main/java/persisted/DeployedFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package persisted 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | data class DeployedFunctionInformation( 7 | val mostRecentDeployedVersion: String = "", 8 | val mostRecentDeployedHash: String = "" 9 | ) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/database/DatabaseClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.database 2 | 3 | import java.sql.Connection 4 | 5 | interface DatabaseClient { 6 | 7 | fun getConnection(): Connection 8 | fun getConnection(databaseName: String, createIfNotExist: Boolean): Connection 9 | 10 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/FileStorageEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import java.util.* 4 | 5 | data class FileStorageEvent @JvmOverloads constructor( 6 | val key: String?, 7 | val size: Long?, 8 | val requestId: String = UUID.randomUUID().toString() 9 | ): ServerlessEvent -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/notification/NotificationTopicNoStage.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.notification; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.notification.NotificationTopicDefinition; 4 | 5 | @NotificationTopicDefinition(topicName = "topic") 6 | public class NotificationTopicNoStage {} 7 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/NotificationTopic.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.notification.NotificationTopicDefinition; 4 | 5 | @NotificationTopicDefinition( 6 | topicName = "Topic" 7 | ) 8 | public class NotificationTopic {} 9 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/dynamo/MismatchedTypeException.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.dynamo 2 | 3 | class MismatchedTypeException(expectedClass: Any, fieldName: String): 4 | Exception("Input not expected Type. $fieldName expects ${expectedClass.javaClass.simpleName}, but dynamo contained something different.") -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/configuration/Configuration.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.configuration 2 | 3 | const val DEPLOYMENT_BUCKET_NAME = "NimbusDeploymentBucketName" 4 | const val REST_API_URL_OUTPUT = "RestApiUrlOutput" 5 | const val WEBSOCKET_API_URL_OUTPUT = "WebSocketApiUrlOutput" 6 | const val CONFIG_FILE = "nimbus.yml" 7 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/notification/NotificationTopic.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.notification; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.notification.NotificationTopicDefinition; 4 | 5 | @NotificationTopicDefinition(topicName = "topic", stages = {"dev"}) 6 | public class NotificationTopic {} 7 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/processor/AwsMethodInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.processor 2 | 3 | data class AwsMethodInformation( 4 | val packageName: String = "", 5 | val generatedClassName: String = "", 6 | val qualifiedInputName: String = "", 7 | val qualifiedReturnName: String = "" 8 | ) 9 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/cognito/DefaultStagesCognito.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples.cognito; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.ExistingCognitoUserPool; 4 | 5 | @ExistingCognitoUserPool(arn = "arn", userPoolId = "userPool") 6 | public class DefaultStagesCognito { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/deployment/CustomFactory.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.deployment; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | public @interface CustomFactory { 8 | Class value(); 9 | } 10 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/QueuePermission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | class QueuePermission( 4 | private val queueId: String 5 | ): Permission { 6 | override fun hasPermission(value: String): Boolean { 7 | return queueId == value 8 | } 9 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/StorePermission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | class StorePermission( 4 | private val dataModel: String 5 | ): Permission { 6 | override fun hasPermission(value: String): Boolean { 7 | return value == dataModel 8 | } 9 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/StoreEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import java.util.* 4 | 5 | data class StoreEvent @JvmOverloads constructor( 6 | val eventName: String? = "", 7 | val eventId: String? = "", 8 | val requestId: String = UUID.randomUUID().toString() 9 | ): ServerlessEvent -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/persisted/userconfig/AllowedOrigin.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.persisted.userconfig 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | data class AllowedOrigin( 7 | val stage: String = "", 8 | val allowedOrigin: String = "" 9 | ) 10 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/FunctionType.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function 2 | 3 | enum class FunctionType { 4 | HTTP, 5 | WEBSOCKET, 6 | QUEUE, 7 | NOTIFICATION, 8 | DOCUMENT_STORE, 9 | KEY_VALUE_STORE, 10 | FILE_STORAGE, 11 | BASIC, 12 | AUTHORIZATION 13 | } 14 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/store/LocalStoreTransactions.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.store 2 | 3 | import java.util.* 4 | 5 | interface LocalStoreTransactions { 6 | fun startTransaction(transactionUid: UUID) 7 | fun successfulTransaction(transactionUid: UUID) 8 | fun failedTransaction(transactionUid: UUID) 9 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/store/WriteItemRequestLocal.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.store 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.WriteItemRequest 4 | 5 | class WriteItemRequestLocal( 6 | val storeTransactions: LocalStoreTransactions, 7 | val executeWrite: () -> Unit): WriteItemRequest() -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/wrappers/customRuntimeEntry/LambdaExecutionFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.customRuntimeEntry; 2 | 3 | 4 | @FunctionalInterface 5 | public interface LambdaExecutionFunction { 6 | 7 | void accept(InvocationResponse invocationResponse, CustomContext customContext) throws Exception; 8 | 9 | } 10 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/apigateway/ConfiguredApiGatewayCognito.java: -------------------------------------------------------------------------------- 1 | package models.apigateway; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.apigateway.ApiGatewayRestConfig; 4 | import models.cognito.UserPool; 5 | 6 | @ApiGatewayRestConfig( 7 | authorizer = UserPool.class 8 | ) 9 | public class ConfiguredApiGatewayCognito { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/bool/BooleanComparisonCondition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.bool 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.conditions.Condition 4 | 5 | data class BooleanComparisonCondition(val value1: Condition, val operator: BooleanOperator, val value2: Condition): Condition -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/BasicFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 4 | 5 | data class BasicFunctionInformation( 6 | val cronRule: String 7 | ) : FunctionInformation(FunctionType.BASIC) -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/BasicFunctionHandler.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 4 | 5 | public class BasicFunctionHandler { 6 | 7 | @BasicServerlessFunction 8 | public String exampleFunc() { 9 | return "HELLO"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/queue/Queue.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.queue; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.notification.NotificationTopicDefinition; 4 | import com.nimbusframework.nimbuscore.annotations.queue.QueueDefinition; 5 | 6 | @QueueDefinition(queueId = "queueId", stages = {"dev"}) 7 | public class Queue {} 8 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/FileStoragePermission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | class FileStoragePermission( 4 | private val bucketName: String 5 | ): Permission { 6 | override fun hasPermission(value: String): Boolean { 7 | return value == bucketName 8 | } 9 | } -------------------------------------------------------------------------------- /website/static/css/custom.css: -------------------------------------------------------------------------------- 1 | /* your custom css */ 2 | 3 | @media only screen and (min-device-width: 360px) and (max-device-width: 736px) { 4 | } 5 | 6 | @media only screen and (min-width: 1024px) { 7 | } 8 | 9 | @media only screen and (max-width: 1023px) { 10 | } 11 | 12 | @media only screen and (min-width: 1400px) { 13 | } 14 | 15 | @media only screen and (min-width: 1500px) { 16 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/notification/NotificationClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.notification 2 | 3 | interface NotificationClient { 4 | 5 | fun createSubscription(protocol: Protocol, endpoint: String): String 6 | fun notify(message: String) 7 | fun notifyJson(message: Any) 8 | fun deleteSubscription(subscriptionId: String) 9 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/persisted/userconfig/AllowedHeaders.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.persisted.userconfig 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | data class AllowedHeaders( 7 | val stage: String = "", 8 | val allowedHeaders: List = listOf() 9 | ) 10 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/WebSocketFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 4 | 5 | data class WebSocketFunctionInformation( 6 | val topic: String 7 | ): FunctionInformation(FunctionType.WEBSOCKET) -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/http/authentication/HttpMethodAuthenticator.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.http.authentication 2 | 3 | import com.nimbusframework.nimbuslocal.deployment.http.HttpRequest 4 | 5 | interface HttpMethodAuthenticator { 6 | 7 | fun allow(httpRequest: HttpRequest): AuthenticationResponse 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/queue/UsesQueue.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.queue; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesQueues.class) 8 | public @interface UsesQueue { 9 | Class queue(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/conditions/ComparisonCondition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.conditions.variable.ConditionVariable 4 | 5 | data class ComparisonCondition(val value1: ConditionVariable, val operator: ComparisonOperator, val value2: ConditionVariable): Condition 6 | -------------------------------------------------------------------------------- /docs/Introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | id: Introduction 3 | title: Introduction 4 | sidebar_label: Introduction 5 | --- 6 | 7 | Welcome to the Nimbus Documentation! 8 | 9 | Find documentation here on how to deploy specific resources and use clients to interact with them by looking in the sidebar. 10 | 11 | For information on how to install and get started with nimbus look [here](gettingstarted.md). 12 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/NotificationTopicPermission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | class NotificationTopicPermission( 4 | private val topicName: String 5 | ): Permission { 6 | override fun hasPermission(value: String): Boolean { 7 | return topicName == value 8 | } 9 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/apigateway/ConfiguredApiGatewayLambdaHandler.java: -------------------------------------------------------------------------------- 1 | package models.apigateway; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.apigateway.ApiGatewayRestConfig; 4 | import handlers.apigateway.Authorizer; 5 | 6 | @ApiGatewayRestConfig( 7 | authorizer = Authorizer.class 8 | ) 9 | public class ConfiguredApiGatewayLambdaHandler { 10 | 11 | } 12 | -------------------------------------------------------------------------------- /deployment/src/main/java/persisted/DeploymentInformation.kt: -------------------------------------------------------------------------------- 1 | package persisted 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties 4 | 5 | @JsonIgnoreProperties(ignoreUnknown = true) 6 | data class DeploymentInformation( 7 | val mostRecentCompilationTimestamp: String = "", 8 | val mostRecentDeployedFunctions: MutableMap = mutableMapOf() 9 | ) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/websocket/ServerlessFunctionWebSocketClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.websocket 2 | 3 | import java.nio.ByteBuffer 4 | 5 | interface ServerlessFunctionWebSocketClient { 6 | 7 | fun sendToConnection(connectionId: String, data: ByteBuffer) 8 | 9 | fun sendToConnectionConvertToJson(connectionId: String, data: Any) 10 | 11 | } -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/NotificationFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 4 | 5 | data class NotificationFunctionInformation( 6 | val notificationTopic: String 7 | ): FunctionInformation(FunctionType.NOTIFICATION) -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/QueueFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 4 | 5 | data class QueueFunctionInformation( 6 | val queueName: String, 7 | val batchSize: Int 8 | ): FunctionInformation(FunctionType.QUEUE) -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/FileStorage.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.FileUpload; 4 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageBucketDefinition; 5 | 6 | @FileStorageBucketDefinition(bucketName = "ImageBucket") 7 | @FileUpload(fileStorageBucket = FileStorage.class, localPath = "test", targetPath = "test") 8 | public class FileStorage {} 9 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/dynamo/DynamoWriteTransactItemRequest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.dynamo 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.WriteItemRequest 4 | import software.amazon.awssdk.services.dynamodb.model.TransactWriteItem 5 | 6 | class DynamoWriteTransactItemRequest( 7 | val transactWriteItem: TransactWriteItem 8 | ): WriteItemRequest() 9 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/ExampleBasicFunctionHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction 4 | 5 | open class ExampleBasicFunctionHandler { 6 | 7 | @BasicServerlessFunction 8 | open fun handle(input: String): Boolean { 9 | return true 10 | } 11 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/document/UsesDocumentStore.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.document; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesDocumentStores.class) 8 | public @interface UsesDocumentStore { 9 | Class dataModel(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/keyvalue/UsesKeyValueStore.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.keyvalue; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesKeyValueStores.class) 8 | public @interface UsesKeyValueStore { 9 | Class dataModel(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/clients/LocalInternalClientBuilderTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.clients 2 | 3 | import io.kotest.core.spec.style.StringSpec 4 | import io.kotest.matchers.shouldBe 5 | 6 | internal class LocalInternalClientBuilderTest: StringSpec({ 7 | 8 | "Correct is local" { 9 | LocalInternalClientBuilder.isLocal() shouldBe true 10 | } 11 | 12 | }) 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/resource/function/FunctionTrigger.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.resource.function 2 | 3 | import com.google.gson.JsonObject 4 | 5 | interface FunctionTrigger { 6 | fun getTriggerType(): String 7 | fun getTriggerName(): String 8 | fun getArn(suffix: String): JsonObject 9 | fun getTriggerArn(): JsonObject 10 | } 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/deployment/AfterDeployment.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.deployment; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(AfterDeployments.class) 8 | public @interface AfterDeployment { 9 | boolean isTest() default false; 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/file/UsesFileStorageBucket.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.file; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesFileStorageBuckets.class) 8 | public @interface UsesFileStorageBucket { 9 | Class fileStorageBucket(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/websocket/UsesServerlessFunctionWebSocket.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.websocket; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesServerlessFunctionWebSockets.class) 8 | public @interface UsesServerlessFunctionWebSocket { 9 | String[] stages() default {}; 10 | } 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/function/BasicServerlessFunctionClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.function 2 | 3 | interface BasicServerlessFunctionClient { 4 | fun invoke() 5 | fun invoke(param: Any) 6 | fun invoke(responseType: Class): T? 7 | fun invoke(param: Any, responseType: Class): T? 8 | 9 | fun invokeAsync() 10 | fun invokeAsync(param: Any) 11 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/database/UsesRelationalDatabase.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.database; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesRelationalDatabases.class) 8 | public @interface UsesRelationalDatabase { 9 | Class dataModel(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/environment/ConstantEnvironmentVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.environment 2 | 3 | enum class ConstantEnvironmentVariable { 4 | NIMBUS_ALLOWED_CORS_ORIGIN, 5 | NIMBUS_CUSTOM_RUNTIME_FUNCTION_IDENTIFIER, 6 | WEBSOCKET_ENDPOINT, 7 | NIMBUS_PROJECT_NAME, 8 | FUNCTION_STAGE 9 | 10 | 11 | } 12 | -------------------------------------------------------------------------------- /azure/src/main/java/com/nimbusframework/nimbusaws/arm/ArmFiles.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.arm 2 | 3 | import com.nimbusframework.nimbuscore.persisted.NimbusState 4 | 5 | data class ArmFiles(val createTemplate: ArmTemplate, val updateTemplate: ArmTemplate) { 6 | 7 | constructor(nimbusState: NimbusState, stage: String): this ( 8 | ArmTemplate(nimbusState, stage), 9 | ArmTemplate(nimbusState, stage) 10 | ) 11 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/cognito/UsesCognitoUserPool.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.cognito; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesCognitoUserPools.class) 8 | public @interface UsesCognitoUserPool { 9 | Class userPool(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/document/DocumentStoreDefinition.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.document; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(DocumentStoreDefinitions.class) 8 | public @interface DocumentStoreDefinition { 9 | String tableName() default ""; 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/decorator/KeepWarm.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.decorator; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface KeepWarm {} 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/notification/UsesNotificationTopic.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.notification; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesNotificationTopics.class) 8 | public @interface UsesNotificationTopic { 9 | Class notificationTopic(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/file/MimeTypeDetector.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.file 2 | 3 | object MimeTypeDetector { 4 | 5 | fun guessMimeTypeByExtension(fileName: String): String? { 6 | return when (fileName.substringAfterLast('.')) { 7 | "woff" -> "font/woff" 8 | "woff2" -> "font/woff2" 9 | else -> null 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/ServerlessFunction.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function 2 | 3 | import com.nimbusframework.nimbuslocal.ServerlessMethod 4 | import com.nimbusframework.nimbuslocal.deployment.function.information.FunctionInformation 5 | 6 | data class ServerlessFunction( 7 | val serverlessMethod: ServerlessMethod, 8 | val functionInformation: FunctionInformation 9 | ) -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/SimpleObject.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples; 2 | 3 | public class SimpleObject { 4 | 5 | private String value; 6 | 7 | public SimpleObject(String value) { this.value = value; } 8 | public SimpleObject() {} 9 | 10 | public String getValue() { 11 | return value; 12 | } 13 | 14 | public void setValue(String value) { 15 | this.value = value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/http/CorsInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.http 2 | 3 | object CorsInformation { 4 | 5 | val allowedHeaders = setOf( 6 | "accept", 7 | "accept-language", 8 | "content-language", 9 | "origin", 10 | "content-type", 11 | "content-encoding", 12 | "accept-encoding" 13 | ) 14 | 15 | } 16 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/notification/NotificationTopicDefinition.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.notification; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(NotificationTopicDefinitions.class) 8 | public @interface NotificationTopicDefinition { 9 | String topicName(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /local/local-aws/src/main/java/com/nimbusframework/nimbusawslocal/aws/LocalAwsResourceHolder.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusawslocal.aws 2 | 3 | import com.nimbusframework.nimbusawslocal.aws.cognito.LocalCognito 4 | import com.nimbusframework.nimbusawslocal.aws.secretsmanager.LocalSecrets 5 | 6 | class LocalAwsResourceHolder { 7 | 8 | val cognitoUserPools = mutableMapOf, LocalCognito>() 9 | val localSecrets = LocalSecrets() 10 | 11 | } 12 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/AfterDeploymentHandlers.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.AfterDeployment; 4 | 5 | public class AfterDeploymentHandlers { 6 | 7 | @AfterDeployment 8 | public String addSubscription() { 9 | return "This could do something"; 10 | } 11 | 12 | @AfterDeployment 13 | public void addSubscriber() { 14 | System.out.println("LOG SOMETHING"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/queue/UsesQueues.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.queue; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesQueues { 11 | UsesQueue[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/CustomFactoryAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactory 4 | 5 | class CustomFactoryAnnotation(private val customFactory: CustomFactory): DataModelAnnotation() { 6 | override fun internalDataModel(): Class { 7 | return customFactory.value.java 8 | } 9 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/persistent/Key.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.persistent; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.FIELD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Key { 11 | String columnName() default ""; 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/cognito/UsesCognitoUserPoolAsAdmin.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.cognito; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesCognitoUserPoolAsAdmins.class) 8 | public @interface UsesCognitoUserPoolAsAdmin { 9 | Class userPool(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/secretmanager/UsesSecretManagerSecret.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.secretmanager; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.METHOD) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(UsesSecretManagerSecrets.class) 8 | public @interface UsesSecretManagerSecret { 9 | String secretArn(); 10 | String[] stages() default {}; 11 | } 12 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/abstractions/FunctionDecoratorHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.abstractions 2 | 3 | import com.nimbusframework.nimbusaws.annotation.processor.FunctionInformation 4 | import javax.lang.model.element.Element 5 | 6 | interface FunctionDecoratorHandler { 7 | 8 | fun handleDecorator(type: Element, functionInformation: List) 9 | 10 | } 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/EnvironmentVariables.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.EnvironmentVariable; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Target(ElementType.METHOD) 8 | @Retention(RetentionPolicy.RUNTIME) 9 | public @interface EnvironmentVariables { 10 | EnvironmentVariable[] value(); 11 | } 12 | 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/StoreMessageAttribute.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import java.nio.ByteBuffer 4 | 5 | 6 | class StoreMessageAttribute( 7 | val stringValue: String? = null, 8 | val stringListValues: List? = null, 9 | val binaryListValues: List? = null, 10 | val dataType: String? = null, 11 | val binaryValue: ByteBuffer? = null 12 | ) -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/permissions/BasicFunctionPermission.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.permissions 2 | 3 | class BasicFunctionPermission( 4 | private val targetClazz: Class, 5 | private val method: String 6 | ): Permission { 7 | 8 | override fun hasPermission(value: String): Boolean { 9 | return value == (targetClazz.simpleName + method) 10 | } 11 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/queue/QueueDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.queue; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface QueueDefinitions { 11 | QueueDefinition[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/FileUploadAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.FileUpload 4 | 5 | class FileUploadAnnotation(private val fileUpload: FileUpload): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return fileUpload.fileStorageBucket.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesQueueFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.queue.UsesQueue 4 | 5 | class UsesQueueFunctionAnnotation(private val usesQueue: UsesQueue): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return usesQueue.queue.java 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/lambda/handlers/HandlerProvider.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.lambda.handlers 2 | 3 | data class HandlerProvider( 4 | private val classFilePath: String, 5 | private val handler: String 6 | ): HandlerInformationProvider { 7 | 8 | override fun getClassFilePath(): String { 9 | return classFilePath 10 | } 11 | 12 | override fun getHandler(): String { 13 | return handler 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/cognito/MultipleStagesCognito.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples.cognito; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.ExistingCognitoUserPool; 4 | 5 | @ExistingCognitoUserPool(arn = "arn", userPoolId = "userPool", stages = { "stage1" }) 6 | @ExistingCognitoUserPool(arn = "arn", userPoolId = "userPool", stages = { "stage2" }) 7 | public class MultipleStagesCognito { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/persistent/Attribute.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.persistent; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.FIELD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface Attribute { 11 | String columnName() default ""; 12 | } 13 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/HttpFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod 4 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 5 | 6 | data class HttpFunctionInformation( 7 | val httpMethod: HttpMethod, 8 | val httpPath: String 9 | ): FunctionInformation(FunctionType.HTTP) 10 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/BasicFactory.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactoryInterface 4 | 5 | class BasicFactory: CustomFactoryInterface { 6 | 7 | override fun create(): ExampleBasicCustomFactoryFunctionHandler { 8 | return ExampleBasicCustomFactoryFunctionHandler(true) 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/apigateway/ConfiguredApiGatewayCustomHandler.java: -------------------------------------------------------------------------------- 1 | package models.apigateway; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.apigateway.ApiGatewayRestConfig; 4 | import handlers.apigateway.CustomAuthorizer; 5 | 6 | @ApiGatewayRestConfig( 7 | authorizer = CustomAuthorizer.class, 8 | authorizationHeader = "Bearer", 9 | authorizationCacheTtl = 100 10 | ) 11 | public class ConfiguredApiGatewayCustomHandler { 12 | 13 | } 14 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/deployment/AfterDeployments.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.deployment; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface AfterDeployments { 11 | AfterDeployment[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/document/UsesDocumentStores.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.document; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesDocumentStores { 11 | UsesDocumentStore[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/keyvalue/UsesKeyValueStores.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.keyvalue; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesKeyValueStores { 11 | UsesKeyValueStore[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/database/RdsDatabases.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.database; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface RdsDatabases { 11 | RdsDatabase[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/file/UsesFileStorageBuckets.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.file; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesFileStorageBuckets { 11 | UsesFileStorageBucket[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/KeyValueStoreAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.keyvalue.KeyValueStoreDefinition 4 | 5 | class KeyValueStoreAnnotation(private val keyValueStore: KeyValueStoreDefinition): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return keyValueStore.keyType.java 9 | } 10 | } -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/NumericVariableTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | import io.kotest.core.spec.style.AnnotationSpec 4 | import io.kotest.matchers.shouldBe 5 | 6 | class NumericVariableTest : AnnotationSpec() { 7 | 8 | @Test 9 | fun getsNumberVariable() { 10 | val numberVariable = NumericVariable(10) 11 | numberVariable.getValue() shouldBe 10 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ~.iml 2 | .idea/~.xml 3 | .idea/copyright/~.xml 4 | .idea/dictionaries/~.xml 5 | .idea/libraries/~.xml 6 | .idea/ 7 | example/out/ 8 | example/out 9 | example/target/ 10 | example/target 11 | example/aws/ 12 | example/aws 13 | out/ 14 | out 15 | target/ 16 | target 17 | 18 | .DS_Store 19 | 20 | node_modules 21 | 22 | lib/core/metadata.js 23 | lib/core/MetadataBlog.js 24 | 25 | website/translated_docs 26 | website/build/ 27 | website/yarn.lock 28 | website/node_modules 29 | website/i18n/* 30 | 31 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/RelationalDatabaseExample.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.database.DatabaseLanguage; 4 | import com.nimbusframework.nimbuscore.annotations.database.RelationalDatabaseDefinition; 5 | 6 | @RelationalDatabaseDefinition(name = "testDb", username = "${USERNAME}", password = "${PASSWORD}", databaseLanguage = DatabaseLanguage.POSTGRESQL) 7 | public class RelationalDatabaseExample {} 8 | -------------------------------------------------------------------------------- /website/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "examples": "docusaurus-examples", 4 | "start": "docusaurus-start", 5 | "build": "docusaurus-build", 6 | "publish-gh-pages": "docusaurus-publish", 7 | "write-translations": "docusaurus-write-translations", 8 | "version": "docusaurus-version", 9 | "rename-version": "docusaurus-rename-version" 10 | }, 11 | "devDependencies": { 12 | "docusaurus": "^1.8.0" 13 | }, 14 | "dependencies": { 15 | "yarn": "^1.15.2" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/database/UsesRelationalDatabases.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.database; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesRelationalDatabases { 11 | UsesRelationalDatabase[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/document/DocumentStoreDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.document; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface DocumentStoreDefinitions { 11 | DocumentStoreDefinition[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/keyvalue/KeyValueStoreDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.keyvalue; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface KeyValueStoreDefinitions { 11 | KeyValueStoreDefinition[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesDocumentStoreAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.document.UsesDocumentStore 4 | 5 | class UsesDocumentStoreAnnotation(private val usesDocumentStore: UsesDocumentStore): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return usesDocumentStore.dataModel.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/KeyValue.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels 2 | 3 | import com.nimbusframework.nimbuscore.annotations.keyvalue.KeyValueStoreDefinition 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute 5 | 6 | @KeyValueStoreDefinition(keyType = Int::class) 7 | data class KeyValue ( 8 | @Attribute 9 | val name: String = "", 10 | @Attribute 11 | val people: List = listOf() 12 | ) -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/file/FileStorageBucketDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.file; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface FileStorageBucketDefinitions { 11 | FileStorageBucketDefinition[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/notification/UsesNotificationTopics.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.notification; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesNotificationTopics { 11 | UsesNotificationTopic[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/ColumnVariableTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | import io.kotest.core.spec.style.AnnotationSpec 4 | import io.kotest.matchers.shouldBe 5 | 6 | class ColumnVariableTest : AnnotationSpec() { 7 | 8 | @Test 9 | fun getsColumnName() { 10 | val columnVariable = ColumnVariable("testColumn") 11 | columnVariable.getValue() shouldBe "testColumn" 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/StringVariableTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | import io.kotest.core.spec.style.AnnotationSpec 4 | import io.kotest.matchers.shouldBe 5 | 6 | class StringVariableTest : AnnotationSpec() { 7 | 8 | @Test 9 | fun getsStringVariable() { 10 | val stringVariable = StringVariable("stringVal") 11 | stringVariable.getValue() shouldBe "stringVal" 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/interfaces/ApiGatewayLambdaAuthorizer.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.interfaces; 2 | 3 | import com.amazonaws.services.lambda.runtime.RequestHandler; 4 | import com.amazonaws.services.lambda.runtime.events.APIGatewayCustomAuthorizerEvent; 5 | import com.amazonaws.services.lambda.runtime.events.IamPolicyResponse; 6 | 7 | public interface ApiGatewayLambdaAuthorizer extends RequestHandler { 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/clients/dynamo/DynamoHelper.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.dynamo 2 | 3 | import software.amazon.awssdk.services.dynamodb.model.AttributeValue 4 | 5 | object DynamoHelper { 6 | 7 | fun strAttribute(string: String): AttributeValue { 8 | return AttributeValue.builder().s(string).build() 9 | } 10 | 11 | fun numAttribute(num: String): AttributeValue { 12 | return AttributeValue.builder().n(num).build() 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/cognito/UsesCognitoUserPools.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.cognito; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesCognitoUserPools { 11 | UsesCognitoUserPool[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/RdsDatabaseModel.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.database.RdsDatabase; 4 | import com.nimbusframework.nimbuscore.annotations.database.DatabaseLanguage; 5 | 6 | @RdsDatabase( 7 | name = "testRdsDatabase", 8 | username = "username", 9 | password = "password", 10 | awsDatabaseInstance = "micro", 11 | databaseLanguage = DatabaseLanguage.MYSQL, 12 | allocatedSizeGB = 30 13 | ) 14 | public class RdsDatabaseModel {} 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/database/RelationalDatabaseDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.database; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface RelationalDatabaseDefinitions { 11 | RelationalDatabaseDefinition[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/keyvalue/KeyValueStoreDefinition.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.keyvalue; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(KeyValueStoreDefinitions.class) 8 | public @interface KeyValueStoreDefinition { 9 | String tableName() default ""; 10 | Class keyType(); 11 | String keyName() default "PrimaryKey"; 12 | String[] stages() default {}; 13 | } 14 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/DocumentStoreFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType 4 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 5 | 6 | data class DocumentStoreFunctionInformation( 7 | val tableName: String, 8 | val eventType: StoreEventType 9 | ): FunctionInformation(FunctionType.DOCUMENT_STORE) -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/FileStorageFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageEventType 4 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 5 | 6 | data class FileStorageFunctionInformation( 7 | val bucketName: String, 8 | val eventType: FileStorageEventType 9 | ): FunctionInformation(FunctionType.FILE_STORAGE) -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/function/information/KeyValueStoreFunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.function.information 2 | 3 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType 4 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 5 | 6 | data class KeyValueStoreFunctionInformation( 7 | val tableName: String, 8 | val eventType: StoreEventType 9 | ): FunctionInformation(FunctionType.KEY_VALUE_STORE) -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/apigateway/ApiGatewayRestConfigs.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.apigateway; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface ApiGatewayRestConfigs { 11 | ApiGatewayRestConfig[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/document/DynamoDbDocumentStores.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.document; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface DynamoDbDocumentStores { 11 | DynamoDbDocumentStore[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/keyvalue/DynamoDbKeyValueStores.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.keyvalue; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface DynamoDbKeyValueStores { 11 | DynamoDbKeyValueStore[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/dynamo/DynamoReadItemRequest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.dynamo 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.ReadItemRequest 4 | import software.amazon.awssdk.services.dynamodb.model.ItemResponse 5 | import software.amazon.awssdk.services.dynamodb.model.TransactGetItem 6 | 7 | class DynamoReadItemRequest( 8 | val transactReadItem: TransactGetItem, 9 | val getItem: (ItemResponse) -> T? 10 | ): ReadItemRequest() 11 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/notification/NotificationTopicDefinitions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.notification; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface NotificationTopicDefinitions { 11 | NotificationTopicDefinition[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesKeyValueStoreAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.keyvalue.UsesKeyValueStore 4 | 5 | class UsesKeyValueStoreAnnotation(private val usesKeyValueStoreAnnotation: UsesKeyValueStore): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return usesKeyValueStoreAnnotation.dataModel.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/cognito/ExistingCognitoUserPools.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.cognito; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.TYPE) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface ExistingCognitoUserPools { 11 | ExistingCognitoUserPool[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/deployment/FileUpload.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.deployment; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(FileUploads.class) 8 | public @interface FileUpload { 9 | Class fileStorageBucket(); 10 | String localPath(); 11 | String targetPath(); 12 | String substituteNimbusVariablesFileRegex() default ""; 13 | String[] stages() default {}; 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesRelationalDatabaseAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.database.UsesRelationalDatabase 4 | 5 | class UsesRelationalDatabaseAnnotation(private val relationalDatabase: UsesRelationalDatabase): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return relationalDatabase.dataModel.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/ForceDependencyHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 4 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 5 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 6 | 7 | public class ForceDependencyHandler { 8 | 9 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test") 10 | public void func() { 11 | ClientBuilder.getEnvironmentVariableClient(); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/websocket/UsesServerlessFunctionWebSockets.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.websocket; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesServerlessFunctionWebSockets { 11 | UsesServerlessFunctionWebSocket[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/cognito/UsesCognitoUserPoolAsAdmins.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.cognito; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesCognitoUserPoolAsAdmins { 11 | UsesCognitoUserPoolAsAdmin[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/secretmanager/UsesSecretManagerSecrets.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.secretmanager; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesSecretManagerSecrets { 11 | UsesSecretManagerSecret[] value(); 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/function/EnvironmentVariableClientLambda.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.function 2 | 3 | import com.nimbusframework.nimbuscore.clients.function.EnvironmentVariableClient 4 | 5 | class EnvironmentVariableClientLambda: EnvironmentVariableClient { 6 | override fun containsKey(key: String): Boolean { 7 | return System.getenv().containsKey(key) 8 | } 9 | 10 | override fun get(key: String): String? { 11 | return System.getenv(key) 12 | } 13 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/abstractions/StageService.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.abstractions 2 | 3 | 4 | class StageService( 5 | private val defaultStages: List 6 | ) { 7 | 8 | fun determineStages(annotationStages: Array): Set { 9 | return if (annotationStages.isNotEmpty()) { 10 | annotationStages.toSet() 11 | } else { 12 | defaultStages.toSet() 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/cognito/SearchableCognitoAttribute.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.cognito 2 | 3 | enum class SearchableCognitoAttribute(val searchTerm: String) { 4 | USERNAME("username"), 5 | EMAIL("email"), 6 | PHONE_NUMBER("phone_number"), 7 | NAME("name"), 8 | GIVEN_NAME("given_name"), 9 | FAMILY_NAME("family_name"), 10 | PREFERRED_USERNAME("preferred_username"), 11 | STATUS("cognito:user_status"), 12 | ENABLED("status"), 13 | SUB("sub") 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/QueueServerlessFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.QueueServerlessFunction 4 | 5 | class QueueServerlessFunctionAnnotation(private val queueServerlessFunction: QueueServerlessFunction): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return queueServerlessFunction.queue.java 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /website/blog/2017-09-25-testing-rss.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Adding RSS Support - RSS Truncation Test 3 | author: Eric Nakagawa 4 | authorURL: http://twitter.com/ericnakagawa 5 | authorFBID: 661277173 6 | --- 7 | 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 8 | 9 | This should be truncated. 10 | 11 | This line should never render in XML. 12 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/document/DynamoDbDocumentStore.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.document; 2 | 3 | 4 | import java.lang.annotation.*; 5 | 6 | @Target(ElementType.TYPE) 7 | @Retention(RetentionPolicy.RUNTIME) 8 | @Repeatable(DynamoDbDocumentStores.class) 9 | public @interface DynamoDbDocumentStore { 10 | String tableName() default ""; 11 | int readCapacityUnits() default 5; 12 | int writeCapacityUnits() default 5; 13 | String[] stages() default {}; 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesFileStorageBucketAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.UsesFileStorageBucket 4 | 5 | class UsesFileStorageBucketAnnotation(private val fileStorageServerlessFunction: UsesFileStorageBucket): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return fileStorageServerlessFunction.fileStorageBucket.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesNotificationTopicAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.notification.UsesNotificationTopic 4 | 5 | class UsesNotificationTopicAnnotation(private val notificationTopicAnnotation: UsesNotificationTopic): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return notificationTopicAnnotation.notificationTopic.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/secretmanager/AwsSecretManagerClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.secretmanager 2 | 3 | import software.amazon.awssdk.services.secretsmanager.SecretsManagerClient 4 | 5 | class AwsSecretManagerClient( 6 | private val client: SecretsManagerClient 7 | ): SecretManagerClient { 8 | 9 | override fun getSecret(secretName: String): String { 10 | val response = client.getSecretValue { it.secretId(secretName) } 11 | return response.secretString() 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/queue/Queue.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.queue 2 | 3 | import com.nimbusframework.nimbuscore.clients.ClientBuilder 4 | 5 | open class Queue(queueClass: Class<*>): QueueClient { 6 | 7 | private val queueClient = ClientBuilder.getQueueClient(queueClass) 8 | 9 | override fun sendMessage(message: String) { 10 | queueClient.sendMessage(message) 11 | } 12 | 13 | override fun sendMessageAsJson(obj: Any) { 14 | queueClient.sendMessageAsJson(obj) 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/keyvalue/KeyValueStoreNoTableName.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.keyvalue; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.keyvalue.KeyValueStoreDefinition; 4 | 5 | @KeyValueStoreDefinition(keyType = Integer.class, stages = "dev") 6 | public class KeyValueStoreNoTableName { 7 | 8 | private String value; 9 | 10 | public KeyValueStoreNoTableName(String value) { 11 | this.value = value; 12 | } 13 | 14 | public String getValue() { 15 | return value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/People.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.nativeimage.RegisterForReflection; 4 | 5 | import java.util.LinkedList; 6 | import java.util.List; 7 | 8 | @RegisterForReflection 9 | public class People { 10 | 11 | private List people = new LinkedList<>(); 12 | 13 | public List getPeople() { 14 | return people; 15 | } 16 | 17 | public void setPeople(List people) { 18 | this.people = people; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/DocumentStoreServerlessFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.DocumentStoreServerlessFunction 4 | 5 | class DocumentStoreServerlessFunctionAnnotation(private val documentStoreFunction: DocumentStoreServerlessFunction): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return documentStoreFunction.dataModel.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/keyvalue/KeyValueStoreNoTableNameNoStage.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.keyvalue; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.keyvalue.KeyValueStoreDefinition; 4 | 5 | @KeyValueStoreDefinition(keyType = Integer.class) 6 | public class KeyValueStoreNoTableNameNoStage { 7 | 8 | private String value; 9 | 10 | public KeyValueStoreNoTableNameNoStage(String value) { 11 | this.value = value; 12 | } 13 | 14 | public String getValue() { 15 | return value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/UsesBasicServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | public @interface UsesBasicServerlessFunction { 11 | Class targetClass(); 12 | String methodName(); 13 | String[] stages() default {}; 14 | } 15 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/CustomFactoryWrongFactory.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 4 | import com.nimbusframework.nimbuscore.eventabstractions.BasicEvent; 5 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactoryInterface; 6 | import java.util.Calendar; 7 | import models.Person; 8 | 9 | public class CustomFactoryWrongFactory implements CustomFactoryInterface { 10 | 11 | @Override 12 | public String create() { 13 | return "message"; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/NestedPerson.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | public class NestedPerson { 4 | 5 | private String identifier = ""; 6 | 7 | private Person person = null; 8 | 9 | public String getIdentifier() { 10 | return identifier; 11 | } 12 | 13 | public void setIdentifier(String identifier) { 14 | this.identifier = identifier; 15 | } 16 | 17 | public Person getPerson() { 18 | return person; 19 | } 20 | 21 | public void setPerson(Person person) { 22 | this.person = person; 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/FileStorageBucketFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.FileStorageServerlessFunction 4 | 5 | class FileStorageBucketFunctionAnnotation(private val fileStorageServerlessFunction: FileStorageServerlessFunction): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return fileStorageServerlessFunction.fileStorageBucket.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/UsesBasicServerlessFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.UsesBasicServerlessFunction 4 | 5 | class UsesBasicServerlessFunctionAnnotation(private val usesBasicServerlessFunctionAnnotation: UsesBasicServerlessFunction): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return usesBasicServerlessFunctionAnnotation.targetClass.java 9 | } 10 | } -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | 3 | services: 4 | docusaurus: 5 | build: . 6 | ports: 7 | - 3000:3000 8 | - 35729:35729 9 | volumes: 10 | - ./docs:/app/docs 11 | - ./website/blog:/app/website/blog 12 | - ./website/core:/app/website/core 13 | - ./website/i18n:/app/website/i18n 14 | - ./website/pages:/app/website/pages 15 | - ./website/static:/app/website/static 16 | - ./website/sidebars.json:/app/website/sidebars.json 17 | - ./website/siteConfig.js:/app/website/siteConfig.js 18 | working_dir: /app/website 19 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/KeyValueStoreServerlessFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.KeyValueStoreServerlessFunction 4 | 5 | class KeyValueStoreServerlessFunctionAnnotation(private val keyValueStoreServerlessFunction: KeyValueStoreServerlessFunction): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return keyValueStoreServerlessFunction.dataModel.java 9 | } 10 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/NotificationHandlers.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.NotificationServerlessFunction; 4 | import com.nimbusframework.nimbuscore.eventabstractions.NotificationEvent; 5 | import models.NotificationTopic; 6 | import models.Person; 7 | 8 | public class NotificationHandlers { 9 | 10 | @NotificationServerlessFunction(notificationTopic = NotificationTopic.class) 11 | public void handleNotification(NotificationEvent event, Person person) { 12 | System.out.println(person.getName()); 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/UsesWebSocketHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.WebSocketServerlessFunction; 4 | import com.nimbusframework.nimbuscore.annotations.websocket.UsesServerlessFunctionWebSocket; 5 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 6 | 7 | public class UsesWebSocketHandler { 8 | 9 | @WebSocketServerlessFunction(topic = "test") 10 | @UsesServerlessFunctionWebSocket() 11 | public void func() { 12 | ClientBuilder.getServerlessFunctionWebSocketClient(); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/keyvalue/KeyValueStoreWithTableName.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.keyvalue; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.keyvalue.KeyValueStoreDefinition; 4 | 5 | @KeyValueStoreDefinition(keyType = Integer.class, tableName = "test", keyName = "test") 6 | public class KeyValueStoreWithTableName { 7 | 8 | private String value; 9 | 10 | public KeyValueStoreWithTableName(String value) { 11 | this.value = value; 12 | } 13 | 14 | public String getValue() { 15 | return value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/parsed/ParsedQueueDefinition.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.parsed 2 | 3 | import com.nimbusframework.nimbuscore.annotations.queue.QueueDefinition 4 | 5 | class ParsedQueueDefinition( 6 | val queueId: String, 7 | val itemProcessingTimeout: Int, 8 | val stages: Array = arrayOf() 9 | ): ParsedAnnotation { 10 | 11 | constructor(queue: QueueDefinition): this( 12 | queue.queueId, 13 | queue.itemProcessingTimeout, 14 | queue.stages 15 | ) 16 | 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/environment/CustomEnvironmentVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.environment 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.parsed.ParsedEnvironmentVariable 4 | 5 | class CustomEnvironmentVariable( 6 | customEnvironmentVariable: ParsedEnvironmentVariable 7 | ): NimbusEnvironmentVariable(customEnvironmentVariable) { 8 | 9 | override fun getKey(): String { 10 | return annotation.key 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/keyvalue/KeyValueStoreWithTableName.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples.keyvalue; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.keyvalue.DynamoDbKeyValueStore; 4 | 5 | @DynamoDbKeyValueStore(keyType = Integer.class, tableName = "test", keyName = "test") 6 | public class KeyValueStoreWithTableName { 7 | 8 | private String value; 9 | 10 | public KeyValueStoreWithTableName(String value) { 11 | this.value = value; 12 | } 13 | 14 | public String getValue() { 15 | return value; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/Document.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels 2 | 3 | import com.nimbusframework.nimbuscore.annotations.document.DocumentStoreDefinition 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute 5 | import com.nimbusframework.nimbuscore.annotations.persistent.Key 6 | 7 | @DocumentStoreDefinition 8 | data class Document( 9 | @Key 10 | val name: String = "", 11 | @Attribute 12 | val people: List? = null, 13 | @Attribute 14 | val number: Int = 0 15 | ) -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/cognito/ExistingCognitoUserPool.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.cognito; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(ExistingCognitoUserPools.class) 8 | public @interface ExistingCognitoUserPool { 9 | String arn(); 10 | 11 | /** 12 | * Optional, only needed if you need to add or remove users from groups 13 | */ 14 | String userPoolId() default ""; 15 | 16 | String[] stages() default {}; 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/empty/EmptyQueueClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.empty 2 | 3 | import com.nimbusframework.nimbuscore.clients.queue.QueueClient 4 | import com.nimbusframework.nimbuscore.exceptions.PermissionException 5 | 6 | class EmptyQueueClient: QueueClient { 7 | override fun sendMessage(message: String) { 8 | throw PermissionException(clientName) 9 | } 10 | 11 | override fun sendMessageAsJson(obj: Any) { 12 | throw PermissionException(clientName) 13 | } 14 | 15 | private val clientName = "QueueClient" 16 | 17 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/annotations/datamodel/NotificationTopicServerlessFunctionAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.NotificationServerlessFunction 4 | 5 | class NotificationTopicServerlessFunctionAnnotation(private val notificationTopicFunctionAnnotation: NotificationServerlessFunction): DataModelAnnotation() { 6 | 7 | override fun internalDataModel(): Class { 8 | return notificationTopicFunctionAnnotation.notificationTopic.java 9 | } 10 | 11 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/wrappers/file/S3EventMapper.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.file 2 | 3 | import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification 4 | import com.nimbusframework.nimbuscore.eventabstractions.FileStorageEvent 5 | 6 | object S3EventMapper { 7 | 8 | @JvmStatic 9 | fun getFileStorageEvent(s3Entity: S3EventNotification.S3ObjectEntity, requestId: String): FileStorageEvent { 10 | return FileStorageEvent(s3Entity.key, 11 | s3Entity.sizeAsLong, 12 | requestId) 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/Person.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | public class Person { 4 | 5 | private String name = ""; 6 | 7 | private int age = 0; 8 | 9 | public int getAge() { 10 | return age; 11 | } 12 | 13 | public void setAge(int age) { 14 | this.age = age; 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | } 24 | 25 | @Override 26 | public String toString() { 27 | return "Person(" + name + ", " + age + ")"; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /deployment/src/main/java/configuration/Configuration.kt: -------------------------------------------------------------------------------- 1 | package configuration 2 | 3 | const val DEPLOYMENT_BUCKET_NAME = "NimbusDeploymentBucketName" 4 | const val AWS_STACK_UPDATE_FILE = "nimbus/cloudformation-stack-update" 5 | const val AWS_STACK_CREATE_FILE = "nimbus/cloudformation-stack-create" 6 | const val AZURE_TEMPLATE_CREATE_FILE = "nimbus/arm-template-create" 7 | const val AZURE_TEMPLATE_UPDATE_FILE = "nimbus/arm-template-update" 8 | const val NIMBUS_STATE = "nimbus/nimbus-state.json" 9 | const val MOST_RECENT_DEPLOYMENT = ".nimbus/latest-deployment" 10 | const val S3_DEPLOYMENT_PATH = "DeploymentInformation" 11 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/ExampleBasicCustomFactoryFunctionHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactory 4 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction 5 | 6 | @CustomFactory(BasicFactory::class) 7 | open class ExampleBasicCustomFactoryFunctionHandler(private val result: Boolean) { 8 | constructor(): this(true) 9 | 10 | @BasicServerlessFunction 11 | open fun handle(): Boolean { 12 | return result 13 | } 14 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/wrappers/store/DynamoStoreEventMapper.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.store 2 | 3 | import com.amazonaws.services.lambda.runtime.events.DynamodbEvent 4 | import com.nimbusframework.nimbuscore.eventabstractions.StoreEvent 5 | 6 | object DynamoStoreEventMapper { 7 | 8 | @JvmStatic 9 | fun getStoreEvent(record: DynamodbEvent.DynamodbStreamRecord, requestId: String): StoreEvent { 10 | return StoreEvent( 11 | record.eventName, 12 | record.eventID, 13 | requestId 14 | ) 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/BasicServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.BasicServerlessFunctions; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Target(ElementType.METHOD) 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Repeatable(BasicServerlessFunctions.class) 10 | public @interface BasicServerlessFunction { 11 | String cron() default ""; 12 | int timeout() default 10; 13 | int memory() default 1024; 14 | String[] stages() default {}; 15 | } 16 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/HttpServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface HttpServerlessFunctions { 13 | HttpServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/wrappers/annotations/datamodel/DynamoDbKeyValueStoreAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.annotations.datamodel 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.keyvalue.DynamoDbKeyValueStore 4 | import com.nimbusframework.nimbuscore.wrappers.annotations.datamodel.DataModelAnnotation 5 | 6 | 7 | class DynamoDbKeyValueStoreAnnotation(private val keyValueStore: DynamoDbKeyValueStore): DataModelAnnotation() { 8 | 9 | override fun internalDataModel(): Class { 10 | return keyValueStore.keyType.java 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/CustomFactoryFactory.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 4 | import com.nimbusframework.nimbuscore.eventabstractions.BasicEvent; 5 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactoryInterface; 6 | import java.util.Calendar; 7 | import models.Person; 8 | 9 | public class CustomFactoryFactory implements CustomFactoryInterface { 10 | 11 | @Override 12 | public CustomFactoryHandler create() { 13 | return new CustomFactoryHandler("message"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/EnvironmentVariable.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | 4 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.EnvironmentVariables; 5 | 6 | import java.lang.annotation.*; 7 | 8 | 9 | @Target(ElementType.METHOD) 10 | @Retention(RetentionPolicy.RUNTIME) 11 | @Repeatable(EnvironmentVariables.class) 12 | public @interface EnvironmentVariable { 13 | String key(); 14 | String value(); 15 | String testValue() default "NIMBUS_NOT_SET"; 16 | String[] stages() default {}; 17 | } 18 | 19 | 20 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/WebSocketServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.WebSocketServerlessFunctions; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Target(ElementType.METHOD) 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Repeatable(WebSocketServerlessFunctions.class) 10 | public @interface WebSocketServerlessFunction { 11 | String topic(); 12 | int timeout() default 10; 13 | int memory() default 1024; 14 | String[] stages() default {}; 15 | } 16 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/BasicServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface BasicServerlessFunctions { 13 | BasicServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/QueueServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.QueueServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface QueueServerlessFunctions { 13 | QueueServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/NotificationEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import java.time.Instant 4 | import java.util.* 5 | 6 | data class NotificationEvent( 7 | val type: String? = null, 8 | val messageId: String? = null, 9 | val subject: String? = null, 10 | val message: String? = null, 11 | val timestamp: Instant? = Instant.now(), 12 | val messageAttributes: Map? = null, 13 | val requestId: String = UUID.randomUUID().toString() 14 | ) : ServerlessEvent 15 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/document/KotlinDocumentStoreNoTableName.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples.document 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.document.DynamoDbDocumentStore 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute 5 | import com.nimbusframework.nimbuscore.annotations.persistent.Key 6 | 7 | @DynamoDbDocumentStore(stages = ["dev"]) 8 | data class KotlinDocumentStoreNoTableName( 9 | @Key 10 | var string: String = "" , 11 | @Attribute 12 | var documents: List = listOf() 13 | ) 14 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/QueueServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.QueueServerlessFunctions; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Target(ElementType.METHOD) 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Repeatable(QueueServerlessFunctions.class) 10 | public @interface QueueServerlessFunction { 11 | Class queue(); 12 | int batchSize(); 13 | int timeout() default 10; 14 | int memory() default 1024; 15 | String[] stages() default {}; 16 | } -------------------------------------------------------------------------------- /local/local-aws/src/main/java/com/nimbusframework/nimbusawslocal/aws/secretsmanager/LocalSecrets.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusawslocal.aws.secretsmanager 2 | 3 | class LocalSecrets { 4 | 5 | private val secrets: MutableMap = mutableMapOf() 6 | 7 | fun getSecret(secretName: String): SecretData? { 8 | return secrets[secretName] 9 | } 10 | 11 | fun addSecret(secretName: String, secretArn: String, secretValue: String) { 12 | secrets[secretName] = SecretData(secretArn, secretValue) 13 | } 14 | 15 | data class SecretData(val arn: String, val value: String) 16 | 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/file/FileStorageBucketDefinition.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.file; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(FileStorageBucketDefinitions.class) 8 | public @interface FileStorageBucketDefinition { 9 | String bucketName(); 10 | boolean staticWebsite() default false; 11 | String[] allowedCorsOrigins() default {}; 12 | String indexFile() default "index.html"; 13 | String errorFile() default "error.html"; 14 | String[] stages() default {}; 15 | } 16 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/WebSocketServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.WebSocketServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface WebSocketServerlessFunctions { 13 | WebSocketServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /local/local-aws/src/test/java/exampleresources/Person.java: -------------------------------------------------------------------------------- 1 | package exampleresources; 2 | 3 | public class Person { 4 | 5 | private String name = ""; 6 | 7 | private int age = 0; 8 | 9 | public int getAge() { 10 | return age; 11 | } 12 | 13 | public void setAge(int age) { 14 | this.age = age; 15 | } 16 | 17 | public String getName() { 18 | return name; 19 | } 20 | 21 | public void setName(String name) { 22 | this.name = name; 23 | } 24 | 25 | @Override 26 | public String toString() { 27 | return "Person(" + name + ", " + age + ")"; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/RelationalDatabaseModel.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.database.DatabaseLanguage; 4 | import com.nimbusframework.nimbuscore.annotations.database.DatabaseSize; 5 | import com.nimbusframework.nimbuscore.annotations.database.RelationalDatabaseDefinition; 6 | 7 | @RelationalDatabaseDefinition( 8 | name = "testRelationalDatabase", 9 | username = "username", 10 | password = "password", 11 | databaseClass = DatabaseSize.FREE, 12 | databaseLanguage = DatabaseLanguage.MYSQL, 13 | allocatedSizeGB = 30 14 | ) 15 | public class RelationalDatabaseModel {} 16 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/wrappers/WebsiteConfiguration.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.wrappers 2 | 3 | import com.google.gson.JsonObject 4 | 5 | data class WebsiteConfiguration( 6 | val enabled: Boolean = false, 7 | val index: String = "index.html", 8 | val error: String = "error.html" 9 | ) { 10 | fun toJson(): JsonObject { 11 | val websiteConfiguration = JsonObject() 12 | 13 | websiteConfiguration.addProperty("IndexDocument", index) 14 | websiteConfiguration.addProperty("ErrorDocument", error) 15 | 16 | return websiteConfiguration 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/NotificationServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.NotificationServerlessFunctions; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Target(ElementType.METHOD) 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Repeatable(NotificationServerlessFunctions.class) 10 | public @interface NotificationServerlessFunction { 11 | Class notificationTopic(); 12 | int timeout() default 10; 13 | int memory() default 1024; 14 | String[] stages() default {}; 15 | } 16 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/FileStorageServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.FileStorageServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface FileStorageServerlessFunctions { 13 | FileStorageServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/keyvalue/DynamoDbKeyValueStore.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.keyvalue; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(DynamoDbKeyValueStores.class) 8 | public @interface DynamoDbKeyValueStore { 9 | String tableName() default ""; 10 | Class keyType(); 11 | String keyName() default "PrimaryKey"; 12 | String existingArn() default ""; 13 | int readCapacityUnits() default 5; 14 | int writeCapacityUnits() default 5; 15 | String[] stages() default {}; 16 | } 17 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/cognito/UsesCognitoUserPoolAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.cognito 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.UsesCognitoUserPool 4 | import com.nimbusframework.nimbuscore.wrappers.annotations.datamodel.DataModelAnnotation 5 | 6 | class UsesCognitoUserPoolAnnotation(private val usesCognitoUserPool: UsesCognitoUserPool): DataModelAnnotation() { 7 | 8 | override fun internalDataModel(): Class { 9 | return usesCognitoUserPool.userPool.java 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/BadDocumentStoreHandlers.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.DocumentStoreServerlessFunction; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType; 5 | import com.nimbusframework.nimbuscore.eventabstractions.StoreEvent; 6 | import models.Document; 7 | 8 | public class BadDocumentStoreHandlers { 9 | 10 | @DocumentStoreServerlessFunction(dataModel = Document.class, method = StoreEventType.INSERT) 11 | public void handleInsert(StoreEvent event1, StoreEvent event2) { 12 | System.out.println("item was added!"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/database/RelationalDatabaseDefinition.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.database; 2 | 3 | import java.lang.annotation.*; 4 | 5 | @Target(ElementType.TYPE) 6 | @Retention(RetentionPolicy.RUNTIME) 7 | @Repeatable(RelationalDatabaseDefinitions.class) 8 | public @interface RelationalDatabaseDefinition { 9 | String name(); 10 | String username(); 11 | String password(); 12 | DatabaseSize databaseClass() default DatabaseSize.FREE; 13 | DatabaseLanguage databaseLanguage(); 14 | int allocatedSizeGB() default 20; 15 | String[] stages() default {}; 16 | } 17 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/NotificationServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.NotificationServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface NotificationServerlessFunctions { 13 | NotificationServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/TestDataModelAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws 2 | 3 | import com.nimbusframework.nimbuscore.wrappers.annotations.datamodel.DataModelAnnotation 4 | import javax.annotation.processing.ProcessingEnvironment 5 | import javax.lang.model.element.TypeElement 6 | 7 | class TestDataModelAnnotation(private val typeElem: TypeElement): DataModelAnnotation() { 8 | 9 | override fun internalDataModel(): Class { 10 | return Any::class.java 11 | } 12 | 13 | override fun getTypeElement(processingEnv: ProcessingEnvironment): TypeElement { 14 | return typeElem 15 | } 16 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/DocumentStoreServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.DocumentStoreServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface DocumentStoreServerlessFunctions { 13 | DocumentStoreServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/repeatable/KeyValueStoreServerlessFunctions.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function.repeatable; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.KeyValueStoreServerlessFunction; 4 | 5 | import java.lang.annotation.ElementType; 6 | import java.lang.annotation.Retention; 7 | import java.lang.annotation.RetentionPolicy; 8 | import java.lang.annotation.Target; 9 | 10 | @Target(ElementType.METHOD) 11 | @Retention(RetentionPolicy.RUNTIME) 12 | public @interface KeyValueStoreServerlessFunctions { 13 | KeyValueStoreServerlessFunction[] value(); 14 | } 15 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/apigateway/ApiGatewayRestConfigAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.apigateway 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.apigateway.ApiGatewayRestConfig 4 | import com.nimbusframework.nimbuscore.wrappers.annotations.datamodel.DataModelAnnotation 5 | 6 | class ApiGatewayRestConfigAnnotation(private val apiGatewayRestConfig: ApiGatewayRestConfig): DataModelAnnotation() { 7 | 8 | override fun internalDataModel(): Class { 9 | return apiGatewayRestConfig.authorizer.java 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/apigateway/Authorizer.java: -------------------------------------------------------------------------------- 1 | package handlers.apigateway; 2 | 3 | import com.nimbusframework.nimbusaws.interfaces.ApiGatewayLambdaAuthorizer; 4 | import com.amazonaws.services.lambda.runtime.Context; 5 | import com.amazonaws.services.lambda.runtime.events.APIGatewayCustomAuthorizerEvent; 6 | import com.amazonaws.services.lambda.runtime.events.IamPolicyResponse; 7 | import java.lang.Override; 8 | 9 | public class Authorizer implements ApiGatewayLambdaAuthorizer { 10 | 11 | @Override 12 | public IamPolicyResponse handleRequest(APIGatewayCustomAuthorizerEvent input, Context context) { 13 | return null; 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/clients/store/conditions/variable/BooleanVariableTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store.conditions.variable 2 | 3 | import io.kotest.core.spec.style.AnnotationSpec 4 | import io.kotest.matchers.shouldBe 5 | 6 | class BooleanVariableTest : AnnotationSpec() { 7 | 8 | @Test 9 | fun getsCorrectValueTrue() { 10 | val trueValue = BooleanVariable(true) 11 | trueValue.getValue() shouldBe true 12 | } 13 | 14 | @Test 15 | fun getsCorrectValueFalse() { 16 | val trueValue = BooleanVariable(false) 17 | trueValue.getValue() shouldBe false 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/database/RdsDatabase.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.database; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.database.DatabaseLanguage; 4 | 5 | import java.lang.annotation.*; 6 | 7 | @Target(ElementType.TYPE) 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Repeatable(RdsDatabases.class) 10 | public @interface RdsDatabase { 11 | String name(); 12 | String username(); 13 | String password(); 14 | String awsDatabaseInstance(); 15 | DatabaseLanguage databaseLanguage(); 16 | int allocatedSizeGB() default 20; 17 | String[] stages() default {}; 18 | } 19 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/empty/EmptyEnvironmentVariableClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.empty 2 | 3 | import com.nimbusframework.nimbuscore.clients.function.EnvironmentVariableClient 4 | import com.nimbusframework.nimbuscore.exceptions.PermissionException 5 | 6 | class EmptyEnvironmentVariableClient: EnvironmentVariableClient { 7 | private val clientName = "EnvironmentVariableClient" 8 | override fun containsKey(key: String): Boolean { 9 | throw PermissionException(clientName) 10 | } 11 | 12 | override fun get(key: String): String? { 13 | throw PermissionException(clientName) 14 | } 15 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/CloudFormationFiles.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model 2 | 3 | import com.nimbusframework.nimbuscore.persisted.NimbusState 4 | import javax.lang.model.element.Element 5 | import javax.lang.model.element.TypeElement 6 | 7 | data class CloudFormationFiles( 8 | val createTemplate: CloudFormationTemplate, 9 | val updateTemplate: CloudFormationTemplate 10 | ) { 11 | 12 | constructor(nimbusState: NimbusState, stage: String): this ( 13 | CloudFormationTemplate(nimbusState, stage), 14 | CloudFormationTemplate(nimbusState, stage) 15 | ) 16 | 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/cognito/UsesCognitoUserPoolAsAdminAnnotation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.cognito 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.cognito.UsesCognitoUserPoolAsAdmin 4 | import com.nimbusframework.nimbuscore.wrappers.annotations.datamodel.DataModelAnnotation 5 | 6 | class UsesCognitoUserPoolAsAdminAnnotation(private val usesCognitoUserPoolAsAdmin: UsesCognitoUserPoolAsAdmin): DataModelAnnotation() { 7 | 8 | override fun internalDataModel(): Class { 9 | return usesCognitoUserPoolAsAdmin.userPool.java 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/document/DocumentStore.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.document 2 | 3 | import com.nimbusframework.nimbuscore.clients.ClientBuilder 4 | import com.nimbusframework.nimbuscore.clients.store.ReadItemRequest 5 | import com.nimbusframework.nimbuscore.clients.store.WriteItemRequest 6 | import com.nimbusframework.nimbuscore.clients.store.conditions.Condition 7 | 8 | open class DocumentStore(documentStore: Class) { 9 | 10 | private val documentStoreClient = ClientBuilder.getDocumentStoreClient(documentStore) 11 | 12 | fun getClient(): DocumentStoreClient { 13 | return documentStoreClient 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/parsed/ParsedEnvironmentVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.parsed 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.EnvironmentVariable 4 | 5 | class ParsedEnvironmentVariable( 6 | val key: String, 7 | val value: String, 8 | val testValue: String, 9 | val stages: Array 10 | ): ParsedAnnotation { 11 | 12 | constructor(environmentVariable: EnvironmentVariable): this( 13 | environmentVariable.key, 14 | environmentVariable.value, 15 | environmentVariable.testValue, 16 | environmentVariable.stages 17 | ) 18 | 19 | } 20 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/abstractions/UsesResourcesProcessor.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.abstractions 2 | 3 | import com.nimbusframework.nimbusaws.cloudformation.model.resource.function.FunctionResource 4 | import com.nimbusframework.nimbuscore.persisted.NimbusState 5 | import javax.lang.model.element.Element 6 | 7 | abstract class UsesResourcesProcessor( 8 | protected val nimbusState: NimbusState 9 | ) { 10 | 11 | protected val stageService = StageService(nimbusState.defaultStages) 12 | 13 | abstract fun handleUseResources(serverlessMethod: Element, functionResource: FunctionResource) 14 | 15 | } 16 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/environment/NimbusEnvironmentVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.environment 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.parsed.ParsedAnnotation 4 | 5 | abstract class NimbusEnvironmentVariable protected constructor(protected val annotation: A) { 6 | 7 | abstract fun getKey(): String 8 | 9 | fun toValidEnvironmentVariableKey(str: String): String { 10 | return str 11 | .replace("-", "_") 12 | .replace(Regex("[^a-zA-Z0-9_]"), "") 13 | .uppercase() 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/resource/NimbusBucketResource.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.resource 2 | 3 | import com.nimbusframework.nimbuscore.persisted.NimbusState 4 | import com.google.gson.JsonObject 5 | 6 | class NimbusBucketResource(nimbusState: NimbusState, stage: String): Resource(nimbusState, stage) { 7 | 8 | override fun getName(): String { 9 | return "NimbusDeploymentBucket" 10 | } 11 | 12 | override fun toCloudFormation(): JsonObject { 13 | val bucketResource = JsonObject() 14 | bucketResource.addProperty("Type","AWS::S3::Bucket") 15 | return bucketResource 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/empty/EmptyDatabaseClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.empty 2 | 3 | import com.nimbusframework.nimbuscore.clients.database.DatabaseClient 4 | import com.nimbusframework.nimbuscore.exceptions.PermissionException 5 | import java.sql.Connection 6 | 7 | class EmptyDatabaseClient: DatabaseClient { 8 | override fun getConnection(): Connection { 9 | throw PermissionException(clientName) 10 | } 11 | 12 | override fun getConnection(databaseName: String, createIfNotExist: Boolean): Connection { 13 | throw PermissionException(clientName) 14 | } 15 | 16 | private val clientName = "DatabaseClient" 17 | 18 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/CustomFactoryFactoryNoEmptyConstructor.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 4 | import com.nimbusframework.nimbuscore.eventabstractions.BasicEvent; 5 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactoryInterface; 6 | import java.util.Calendar; 7 | import models.Person; 8 | 9 | public class CustomFactoryFactoryNoEmptyConstructor implements CustomFactoryInterface { 10 | 11 | @Override 12 | public CustomFactoryHandlerNoEmptyConstructor create() { 13 | return new CustomFactoryHandlerNoEmptyConstructor("message"); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/database/RelationalDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.database 2 | 3 | import com.nimbusframework.nimbuscore.clients.ClientBuilder 4 | import java.sql.Connection 5 | 6 | open class RelationalDatabase(database: Class<*>): DatabaseClient { 7 | 8 | private val databaseClient = ClientBuilder.getDatabaseClient(database) 9 | 10 | override fun getConnection(): Connection { 11 | return databaseClient.getConnection() 12 | } 13 | 14 | override fun getConnection(databaseName: String, createIfNotExist: Boolean): Connection { 15 | return databaseClient.getConnection(databaseName, createIfNotExist) 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /local/local-aws/src/test/java/exampleresources/authorizers/CognitoApiGatewayAuthorizer.java: -------------------------------------------------------------------------------- 1 | package exampleresources.authorizers; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.apigateway.ApiGatewayRestConfig; 4 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 5 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 6 | import exampleresources.UserPool; 7 | 8 | @ApiGatewayRestConfig( 9 | authorizer = UserPool.class 10 | ) 11 | public class CognitoApiGatewayAuthorizer { 12 | 13 | @HttpServerlessFunction(method = HttpMethod.GET, path = "hello/world") 14 | public String get() { 15 | return "helloworld"; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/processor/FunctionInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.processor 2 | 3 | import com.nimbusframework.nimbusaws.cloudformation.model.resource.function.FunctionResource 4 | import javax.lang.model.element.Element 5 | 6 | data class FunctionInformation( 7 | var element: Element, 8 | var resource: FunctionResource, 9 | /** 10 | * Specify the location of a method for use in a custom lambda runtime (like GraalVM) 11 | * Null if the user has specified a custom file and handler for the function 12 | */ 13 | val awsMethodInformation: AwsMethodInformation? = null, 14 | val canBeKeptWarm: Boolean = true 15 | ) 16 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/outputs/HttpApiOutput.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.outputs 2 | 3 | import com.nimbusframework.nimbusaws.cloudformation.model.resource.http.HttpApi 4 | import com.nimbusframework.nimbusaws.configuration.REST_API_URL_OUTPUT 5 | import com.nimbusframework.nimbuscore.persisted.NimbusState 6 | 7 | class HttpApiOutput( 8 | restApi: HttpApi, 9 | nimbusState: NimbusState 10 | ): ApiGatewayOutput( 11 | restApi, 12 | nimbusState, 13 | "https://" 14 | ) { 15 | override fun getExportName(): String { 16 | return "${nimbusState.projectName}-$stage-$REST_API_URL_OUTPUT" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/FileStorageHandlers.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageEventType; 4 | import com.nimbusframework.nimbuscore.annotations.function.FileStorageServerlessFunction; 5 | import com.nimbusframework.nimbuscore.eventabstractions.FileStorageEvent; 6 | import models.FileStorage; 7 | 8 | public class FileStorageHandlers { 9 | 10 | @FileStorageServerlessFunction(fileStorageBucket = FileStorage.class, eventType = FileStorageEventType.OBJECT_CREATED) 11 | public void newObject(FileStorageEvent event) { 12 | System.out.println("New file added: " + event.getKey() + " with size " + event.getSize() + " bytes"); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /.idea/statistic.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 14 | 15 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/UsesFileStorageClientHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.UsesFileStorageBucket; 4 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 5 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 6 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 7 | import models.FileStorage; 8 | 9 | public class UsesFileStorageClientHandler { 10 | 11 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test") 12 | @UsesFileStorageBucket(fileStorageBucket = FileStorage.class) 13 | public void func() { 14 | ClientBuilder.getFileStorageClient(FileStorage.class); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/UsesRDBHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.database.UsesRelationalDatabase; 4 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 5 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 6 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 7 | import models.RelationalDatabaseModel; 8 | 9 | public class UsesRDBHandler { 10 | 11 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test") 12 | @UsesRelationalDatabase(dataModel = RelationalDatabaseModel.class) 13 | public void func() { 14 | ClientBuilder.getDatabaseClient(RelationalDatabaseModel.class); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /cloud/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4.0.0 4 | 5 | nimbus-cloud 6 | 0.16.8-SNAPSHOT 7 | pom 8 | 9 | nimbus-cloud 10 | 11 | 12 | com.nimbusframework 13 | nimbus-parent 14 | 0.16.8-SNAPSHOT 15 | 16 | 17 | 18 | aws 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/store/TransactionalClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.store 2 | 3 | import com.nimbusframework.nimbuscore.exceptions.NonRetryableException 4 | import com.nimbusframework.nimbuscore.exceptions.RetryableException 5 | import com.nimbusframework.nimbuscore.exceptions.StoreConditionException 6 | 7 | interface TransactionalClient { 8 | 9 | @Throws(StoreConditionException::class, RetryableException::class, NonRetryableException::class) 10 | fun executeWriteTransaction(requests: List) 11 | 12 | @Throws(RetryableException::class, NonRetryableException::class) 13 | fun executeReadTransaction(requests: List>): List 14 | 15 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/QueueEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnoreProperties 4 | import java.util.* 5 | 6 | @JsonIgnoreProperties(ignoreUnknown = true) 7 | data class QueueEvent( 8 | val messageId: String? = null, 9 | val body: String? = null, 10 | val attributes: Map? = mapOf(), 11 | val messageAttributes: Map? = mapOf(), 12 | val md5OfMessageAttributes: String? = null, 13 | val md5OfBody: String? = null, 14 | val eventSource: String? = null, 15 | val requestId: String = UUID.randomUUID().toString() 16 | ) : ServerlessEvent -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/WebSocketEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import com.fasterxml.jackson.annotation.JsonIgnore 4 | 5 | data class WebSocketEvent( 6 | val headers: Map = mapOf(), 7 | val multiValueHeaders: Map> = mapOf(), 8 | val queryStringParameters: Map = mapOf(), 9 | val multiValueQueryStringParameters: Map> = mapOf(), 10 | val body: String? = null, 11 | val requestContext: RequestContext = RequestContext(), 12 | val isBase64Encoded: Boolean? = null, 13 | @JsonIgnore 14 | var requestId: String = "" 15 | ): ServerlessEvent 16 | -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/document/DocumentMethod.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.document 2 | 3 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType 4 | import com.nimbusframework.nimbuscore.eventabstractions.StoreEvent 5 | import com.nimbusframework.nimbuslocal.ServerlessMethod 6 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 7 | import com.nimbusframework.nimbuslocal.deployment.store.StoreMethod 8 | import java.lang.reflect.Method 9 | 10 | class DocumentMethod( 11 | method: Method, 12 | invokeOn: Any, 13 | storeEventType: StoreEventType 14 | ) : StoreMethod(method, invokeOn, storeEventType, FunctionType.DOCUMENT_STORE) -------------------------------------------------------------------------------- /local/local/src/main/java/com/nimbusframework/nimbuslocal/deployment/keyvalue/KeyValueMethod.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.deployment.keyvalue 2 | 3 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType 4 | import com.nimbusframework.nimbuscore.eventabstractions.StoreEvent 5 | import com.nimbusframework.nimbuslocal.ServerlessMethod 6 | import com.nimbusframework.nimbuslocal.deployment.function.FunctionType 7 | import com.nimbusframework.nimbuslocal.deployment.store.StoreMethod 8 | import java.lang.reflect.Method 9 | 10 | class KeyValueMethod( 11 | method: Method, 12 | invokeOn: Any, 13 | storeEventType: StoreEventType 14 | ) : StoreMethod(method, invokeOn, storeEventType, FunctionType.KEY_VALUE_STORE) -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/Database.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels 2 | 3 | import com.nimbusframework.nimbuscore.annotations.database.DatabaseLanguage 4 | import com.nimbusframework.nimbuscore.annotations.database.RelationalDatabaseDefinition 5 | import com.nimbusframework.nimbuscore.annotations.document.DocumentStoreDefinition 6 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute 7 | import com.nimbusframework.nimbuscore.annotations.persistent.Key 8 | 9 | @RelationalDatabaseDefinition( 10 | name = "maindb", 11 | username = "username", 12 | password = "password", 13 | databaseLanguage = DatabaseLanguage.POSTGRESQL 14 | ) 15 | class Database -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/DocumentStoreServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.DocumentStoreServerlessFunctions; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType; 5 | 6 | import java.lang.annotation.*; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Repeatable(DocumentStoreServerlessFunctions.class) 11 | public @interface DocumentStoreServerlessFunction { 12 | Class dataModel(); 13 | StoreEventType method(); 14 | int timeout() default 10; 15 | int memory() default 1024; 16 | String[] stages() default {}; 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/KeyValueStoreServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.KeyValueStoreServerlessFunctions; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.StoreEventType; 5 | 6 | import java.lang.annotation.*; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Repeatable(KeyValueStoreServerlessFunctions.class) 11 | public @interface KeyValueStoreServerlessFunction { 12 | Class dataModel(); 13 | StoreEventType method(); 14 | int timeout() default 10; 15 | int memory() default 1024; 16 | String[] stages() default {}; 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/outputs/WebSocketApiOutput.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.outputs 2 | 3 | import com.nimbusframework.nimbusaws.cloudformation.model.resource.websocket.WebSocketApi 4 | import com.nimbusframework.nimbusaws.configuration.WEBSOCKET_API_URL_OUTPUT 5 | 6 | import com.nimbusframework.nimbuscore.persisted.NimbusState 7 | 8 | class WebSocketApiOutput( 9 | webSocketApi: WebSocketApi, 10 | nimbusState: NimbusState 11 | ): ApiGatewayOutput( 12 | webSocketApi, 13 | nimbusState, 14 | "wss://" 15 | ) { 16 | override fun getExportName(): String { 17 | return "${nimbusState.projectName}-$stage-$WEBSOCKET_API_URL_OUTPUT" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/CustomFactoryHandlerWrongFactory.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactory; 4 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 5 | import com.nimbusframework.nimbuscore.eventabstractions.BasicEvent; 6 | import java.util.Calendar; 7 | import models.Person; 8 | 9 | @CustomFactory(CustomFactoryWrongFactory.class) 10 | public class CustomFactoryHandlerWrongFactory { 11 | 12 | private final String message; 13 | 14 | public CustomFactoryHandlerWrongFactory(String message) { 15 | this.message = message; 16 | } 17 | 18 | @BasicServerlessFunction() 19 | public String getMessage() { 20 | return message; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/UsesNotificationTopicHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 4 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 5 | import com.nimbusframework.nimbuscore.annotations.notification.UsesNotificationTopic; 6 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 7 | import models.NotificationTopic; 8 | 9 | public class UsesNotificationTopicHandler { 10 | 11 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test") 12 | @UsesNotificationTopic(notificationTopic = NotificationTopic.class) 13 | public void func() { 14 | ClientBuilder.getNotificationClient(NotificationTopic.class); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/annotations/function/FileStorageServerlessFunction.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.annotations.function; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageEventType; 4 | import com.nimbusframework.nimbuscore.annotations.function.repeatable.FileStorageServerlessFunctions; 5 | 6 | import java.lang.annotation.*; 7 | 8 | @Target(ElementType.METHOD) 9 | @Retention(RetentionPolicy.RUNTIME) 10 | @Repeatable(FileStorageServerlessFunctions.class) 11 | public @interface FileStorageServerlessFunction { 12 | Class fileStorageBucket(); 13 | FileStorageEventType eventType(); 14 | int timeout() default 10; 15 | int memory() default 1024; 16 | String[] stages() default {}; 17 | } 18 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/wrappers/file/S3EventMapperTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.file 2 | 3 | import com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification 4 | import io.kotest.core.spec.style.AnnotationSpec 5 | import io.kotest.matchers.shouldBe 6 | 7 | class S3EventMapperTest: AnnotationSpec() { 8 | 9 | val underTest = S3EventMapper 10 | 11 | @Test 12 | fun canParseS3Event() { 13 | val s3Object = S3EventNotification.S3ObjectEntity("testKey", 1000, "", "", "") 14 | val result = underTest.getFileStorageEvent(s3Object, "requestId") 15 | result.key shouldBe "testKey" 16 | result.size shouldBe 1000 17 | result.requestId shouldBe "requestId" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/ExampleNotificationHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.NotificationServerlessFunction 4 | import com.nimbusframework.nimbuscore.annotations.notification.UsesNotificationTopic 5 | import com.nimbusframework.nimbuslocal.exampleModels.NotificationTopic 6 | import com.nimbusframework.nimbuslocal.exampleModels.Person 7 | 8 | class ExampleNotificationHandler { 9 | 10 | @NotificationServerlessFunction(notificationTopic=NotificationTopic::class) 11 | @UsesNotificationTopic(notificationTopic=NotificationTopic::class) 12 | fun receiveNotification(person: Person): Person { 13 | return person 14 | } 15 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/secrets/UsesSecretsHandler.java: -------------------------------------------------------------------------------- 1 | package handlers.secrets; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 4 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 5 | import com.nimbusframework.nimbusaws.annotation.annotations.secretmanager.UsesSecretManagerSecret; 6 | import com.nimbusframework.nimbusaws.clients.AwsClientBuilder; 7 | import models.cognito.UserPool; 8 | 9 | public class UsesSecretsHandler { 10 | 11 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test") 12 | @UsesSecretManagerSecret(secretArn = "arn:partition:service:region:account-id:resource-id") 13 | public void func() { 14 | AwsClientBuilder.getSecretManagerClient(); 15 | } 16 | 17 | 18 | } 19 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/eventabstractions/HttpEvent.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.eventabstractions 2 | 3 | import java.util.* 4 | 5 | data class HttpEvent( 6 | /** 7 | * Headers in the request. Keys are always lowercase. 8 | */ 9 | val headers: Map? = mapOf(), 10 | val queryStringParameters: Map? = mapOf(), 11 | val pathParameters: Map? = mapOf(), 12 | val stageVariables: Map? = mapOf(), 13 | val authorizationContext: Map? = mapOf(), 14 | val body: String? = null, 15 | val isBase64Encoded: Boolean? = null, 16 | val requestId: String = UUID.randomUUID().toString() 17 | ) : ServerlessEvent 18 | -------------------------------------------------------------------------------- /local/local-aws/src/main/java/com/nimbusframework/nimbusawslocal/aws/AwsPermissionTypes.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusawslocal.aws 2 | 3 | import com.nimbusframework.nimbuscore.permissions.PermissionType 4 | 5 | object AwsPermissionTypes { 6 | 7 | val COGNITO: PermissionType = object: PermissionType { 8 | override fun getKey(): String { 9 | return "COGNITO" 10 | } 11 | } 12 | 13 | val COGNITO_ADMIN: PermissionType = object: PermissionType { 14 | override fun getKey(): String { 15 | return "COGNITO_ADMIN" 16 | } 17 | } 18 | 19 | val SECRETS_MANAGER: PermissionType = object: PermissionType { 20 | override fun getKey(): String { 21 | return "SECRETS_MANAGER" 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/CustomFactoryHandlerNoEmptyConstructor.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactory; 4 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 5 | import com.nimbusframework.nimbuscore.eventabstractions.BasicEvent; 6 | import java.util.Calendar; 7 | import models.Person; 8 | 9 | @CustomFactory(CustomFactoryFactoryNoEmptyConstructor.class) 10 | public class CustomFactoryHandlerNoEmptyConstructor { 11 | 12 | private final String message; 13 | 14 | public CustomFactoryHandlerNoEmptyConstructor(String message) { 15 | this.message = message; 16 | } 17 | 18 | @BasicServerlessFunction() 19 | public String getMessage() { 20 | return message; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/CustomFactoryHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.CustomFactory; 4 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 5 | import com.nimbusframework.nimbuscore.eventabstractions.BasicEvent; 6 | import java.util.Calendar; 7 | import models.Person; 8 | 9 | @CustomFactory(CustomFactoryFactory.class) 10 | public class CustomFactoryHandler { 11 | 12 | private final String message; 13 | 14 | public CustomFactoryHandler() { 15 | this.message = null; 16 | } 17 | public CustomFactoryHandler(String message) { 18 | this.message = message; 19 | } 20 | 21 | @BasicServerlessFunction() 22 | public String getMessage() { 23 | return message; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/processing/FileBuilderMethodInformation.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.processing 2 | 3 | import javax.lang.model.type.TypeMirror 4 | 5 | data class FileBuilderMethodInformation( 6 | val className: String = "", 7 | val customFactoryQualifiedName: String?, 8 | val methodName: String = "", 9 | val packageName: String = "", 10 | val parameters: List = listOf(), 11 | val returnType: TypeMirror 12 | ) { 13 | 14 | fun getQualifiedClassName(): String { 15 | if (packageName.isBlank()) { 16 | return className 17 | } 18 | return "$packageName.$className" 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/empty/EmptyServerlessFunctionWebSocketClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.empty 2 | 3 | import com.nimbusframework.nimbuscore.clients.websocket.ServerlessFunctionWebSocketClient 4 | import com.nimbusframework.nimbuscore.exceptions.PermissionException 5 | import java.nio.ByteBuffer 6 | 7 | class EmptyServerlessFunctionWebSocketClient: ServerlessFunctionWebSocketClient { 8 | private val clientName = "ServerlessFunctionWebSocketClient" 9 | 10 | override fun sendToConnection(connectionId: String, data: ByteBuffer) { 11 | throw PermissionException(clientName) 12 | } 13 | 14 | override fun sendToConnectionConvertToJson(connectionId: String, data: Any) { 15 | throw PermissionException(clientName) 16 | } 17 | } -------------------------------------------------------------------------------- /.github/workflows/pr-test.yml: -------------------------------------------------------------------------------- 1 | 2 | name: PR Tests 3 | 4 | on: [pull_request] 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v4 12 | - name: Set up JDK 11 13 | uses: actions/setup-java@v2 14 | with: 15 | java-version: '11' 16 | distribution: 'temurin' 17 | - name: Build with Maven 18 | run: mvn --batch-mode verify 19 | - name: Run the action # You would run your tests before this using the output to set state/desc 20 | uses: Sibz/github-status-action@v1 21 | with: 22 | authToken: ${{secrets.GITHUB_TOKEN}} 23 | context: 'Test Run' 24 | description: 'Passed' 25 | state: 'success' 26 | sha: ${{github.event.pull_request.head.sha || github.sha}} 27 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/AwsClientBuilder.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients 2 | 3 | import com.nimbusframework.nimbusaws.clients.cognito.CognitoClient 4 | import com.nimbusframework.nimbusaws.clients.secretmanager.SecretManagerClient 5 | import com.nimbusframework.nimbuscore.clients.ClientBuilder 6 | 7 | object AwsClientBuilder { 8 | 9 | internal lateinit var internalClientBuilder: InternalAwsClientBuilder 10 | 11 | @JvmStatic 12 | fun getCognitoClient(cognitoClient: Class<*>): CognitoClient { 13 | return internalClientBuilder.getCognitoClient(cognitoClient, ClientBuilder.getStage()) 14 | } 15 | 16 | @JvmStatic 17 | fun getSecretManagerClient(): SecretManagerClient { 18 | return internalClientBuilder.getSecretClient() 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/wrappers/http/RestApiGatewayEventMapper.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.http 2 | 3 | import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent 4 | import com.nimbusframework.nimbuscore.eventabstractions.HttpEvent 5 | 6 | object RestApiGatewayEventMapper { 7 | 8 | @JvmStatic 9 | fun getHttpEvent(request: APIGatewayV2HTTPEvent, requestId: String): HttpEvent { 10 | return HttpEvent( 11 | request.headers, 12 | request.queryStringParameters, 13 | request.pathParameters, 14 | request.stageVariables, 15 | request.requestContext?.authorizer?.lambda, 16 | request.body, 17 | request.isBase64Encoded, 18 | requestId 19 | ) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleModels/BucketTwo.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleModels 2 | 3 | import com.nimbusframework.nimbuscore.annotations.deployment.AfterDeployment 4 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageBucketDefinition 5 | import com.nimbusframework.nimbuscore.annotations.file.UsesFileStorageBucket 6 | import com.nimbusframework.nimbuscore.clients.ClientBuilder 7 | 8 | @FileStorageBucketDefinition(bucketName = "BucketTwo", staticWebsite = true) 9 | class BucketTwo { 10 | 11 | @AfterDeployment 12 | @UsesFileStorageBucket(fileStorageBucket = BucketTwo::class) 13 | fun uploadFile() { 14 | val client = ClientBuilder.getFileStorageClient(BucketTwo::class.java) 15 | client.saveFile("test.txt", "HELLO WORLD") 16 | } 17 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/wrappers/store/keyvalue/KeyValueStoreServerlessFunctionFileBuilderTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.store.keyvalue 2 | 3 | import com.google.testing.compile.Compilation 4 | import com.nimbusframework.nimbusaws.CompileStateService 5 | import io.kotest.core.spec.style.AnnotationSpec 6 | import io.kotest.matchers.shouldBe 7 | 8 | internal class KeyValueStoreServerlessFunctionFileBuilderTest: AnnotationSpec() { 9 | 10 | @Test 11 | fun correctCompiles() { 12 | val compileStateService = CompileStateService("handlers/KeyValueStoreHandlers.java", "models/KeyValue.java", "models/DynamoDbKeyValue.java") 13 | compileStateService.compileObjectsWithNimbus() 14 | 15 | compileStateService.status shouldBe Compilation.Status.SUCCESS 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/ExampleComplexBasicFunctionHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction 4 | import com.nimbusframework.nimbuscore.annotations.function.UsesBasicServerlessFunction 5 | import com.nimbusframework.nimbuscore.clients.ClientBuilder 6 | 7 | open class ExampleComplexBasicFunctionHandler { 8 | 9 | @BasicServerlessFunction 10 | @UsesBasicServerlessFunction(targetClass = ExampleBasicFunctionHandler::class, methodName = "handle") 11 | open fun callOtherFunction(): Boolean { 12 | val function = ClientBuilder.getBasicServerlessFunctionInterface(ExampleBasicFunctionHandler::class.java) 13 | return function.handle("handle") 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/generation/resources/queue/QueueUrlEnvironmentVariable.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.generation.resources.queue 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.parsed.ParsedQueueDefinition 4 | import com.nimbusframework.nimbusaws.cloudformation.generation.resources.environment.NimbusEnvironmentVariable 5 | import com.nimbusframework.nimbuscore.annotations.queue.QueueDefinition 6 | 7 | class QueueUrlEnvironmentVariable( 8 | queueDefinition: ParsedQueueDefinition 9 | ): NimbusEnvironmentVariable(queueDefinition) { 10 | 11 | private val key = "NIMBUS_QUEUE_URL_ID_" + toValidEnvironmentVariableKey(queueDefinition.queueId) 12 | 13 | override fun getKey(): String { 14 | return key 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/resource/dynamo/DynamoStreamResource.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.resource.dynamo 2 | 3 | import com.nimbusframework.nimbuscore.persisted.NimbusState 4 | import com.google.gson.JsonObject 5 | import com.nimbusframework.nimbusaws.cloudformation.model.resource.Resource 6 | 7 | class DynamoStreamResource( 8 | private val dynamoResource: Resource, 9 | nimbusState: NimbusState 10 | ): Resource(nimbusState, dynamoResource.stage) { 11 | override fun toCloudFormation(): JsonObject { 12 | return JsonObject() 13 | } 14 | 15 | override fun getName(): String { 16 | return "" 17 | } 18 | 19 | override fun getArn(suffix: String): JsonObject { 20 | return dynamoResource.getAttribute("StreamArn") 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/annotation/annotations/lambda/CustomLambdaFunctionHandler.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.annotation.annotations.lambda; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * Define a custom lambda function that will be uploaded instead of the generated java lambda. 10 | * Permissions will be attached to the function as normal 11 | * This function will not be used locally. You can use the ClientBuilder.isLocal() method to validate this. 12 | */ 13 | @Target(ElementType.METHOD) 14 | @Retention(RetentionPolicy.SOURCE) 15 | public @interface CustomLambdaFunctionHandler { 16 | String file(); 17 | String handler(); 18 | String runtime(); 19 | } 20 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/QueueHandlers.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.QueueServerlessFunction; 4 | import com.nimbusframework.nimbuscore.eventabstractions.QueueEvent; 5 | import models.Person; 6 | import models.Queue; 7 | 8 | import java.util.List; 9 | 10 | public class QueueHandlers { 11 | 12 | @QueueServerlessFunction(queue = Queue.class, batchSize = 1) 13 | public void consumeQueue(Person item, QueueEvent event) { 14 | System.out.println(item.getName()); 15 | } 16 | 17 | @QueueServerlessFunction(queue = Queue.class, batchSize = 10) 18 | public void consumeQueueList(List items, List event) { 19 | for (int i = 0; i < items.size(); i++) { 20 | System.out.println(items.get(i) + " " + event.get(i).getRequestId()); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/basic/BasicCustomFunctionHandler.java: -------------------------------------------------------------------------------- 1 | package handlers.basic; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.lambda.CustomLambdaFunctionHandler; 4 | import com.nimbusframework.nimbuscore.annotations.function.BasicServerlessFunction; 5 | import com.nimbusframework.nimbuscore.annotations.notification.UsesNotificationTopic; 6 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 7 | import models.NotificationTopic; 8 | 9 | public class BasicCustomFunctionHandler { 10 | 11 | @BasicServerlessFunction 12 | @UsesNotificationTopic(notificationTopic = NotificationTopic.class) 13 | @CustomLambdaFunctionHandler(file = "testfile", handler = "handler", runtime = "provided") 14 | public void func() { 15 | ClientBuilder.getNotificationClient(NotificationTopic.class); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/models/RegisterNestedClass.java: -------------------------------------------------------------------------------- 1 | package models; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.nativeimage.RegisterForReflection; 4 | 5 | public class RegisterNestedClass { 6 | 7 | private String unrelated; 8 | 9 | @RegisterForReflection 10 | class RegisterNestedClassIdentifier { 11 | 12 | private String identifier = ""; 13 | private int count = 0; 14 | 15 | public String getIdentifier() { 16 | return identifier; 17 | } 18 | 19 | public void setIdentifier(String identifier) { 20 | this.identifier = identifier; 21 | } 22 | 23 | public int getCount() { 24 | return count; 25 | } 26 | 27 | public void setCount(int count) { 28 | this.count = count; 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/clients/empty/EmptyTransactionalClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.clients.empty 2 | 3 | import com.nimbusframework.nimbuscore.clients.store.ReadItemRequest 4 | import com.nimbusframework.nimbuscore.clients.store.TransactionalClient 5 | import com.nimbusframework.nimbuscore.clients.store.WriteItemRequest 6 | import com.nimbusframework.nimbuscore.exceptions.PermissionException 7 | 8 | class EmptyTransactionalClient: TransactionalClient { 9 | 10 | private val clientName = "TransactionalClient" 11 | 12 | override fun executeWriteTransaction(requests: List) { 13 | throw PermissionException(clientName) 14 | } 15 | 16 | override fun executeReadTransaction(requests: List>): List { 17 | throw PermissionException(clientName) 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /core/src/main/java/com/nimbusframework/nimbuscore/services/ReadUserConfigService.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.services 2 | 3 | import com.nimbusframework.nimbuscore.persisted.userconfig.UserConfig 4 | import com.fasterxml.jackson.databind.ObjectMapper 5 | import com.fasterxml.jackson.dataformat.yaml.YAMLFactory 6 | import com.nimbusframework.nimbusaws.annotation.services.FileReader 7 | import com.nimbusframework.nimbuscore.CONFIG_FILE 8 | 9 | 10 | class ReadUserConfigService { 11 | 12 | private val fileService = FileReader() 13 | 14 | fun readUserConfig(): UserConfig { 15 | val configString = fileService.getFileText(CONFIG_FILE) 16 | if (configString == "") return UserConfig("nimbus-project") 17 | val mapper = ObjectMapper(YAMLFactory()) 18 | return mapper.readValue(configString, UserConfig::class.java) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/clients/function/EnvironmentVariableClientLambdaTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.function 2 | 3 | import io.kotest.core.spec.style.AnnotationSpec 4 | import io.kotest.extensions.system.withEnvironment 5 | import io.kotest.matchers.shouldBe 6 | 7 | class EnvironmentVariableClientLambdaTest: AnnotationSpec() { 8 | 9 | private val underTest = EnvironmentVariableClientLambda() 10 | 11 | @Test 12 | fun canGetEnvironmentVariable() { 13 | 14 | withEnvironment(Pair("Key", "Value")) { 15 | underTest.get("Key") shouldBe "Value" 16 | } 17 | 18 | } 19 | 20 | @Test 21 | fun canCheckEnvionmentVariablesContainsKey() { 22 | 23 | withEnvironment(Pair("Key", "Value")) { 24 | underTest.containsKey("Key") shouldBe true 25 | } 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/wrappers/queue/QueueServerlessFunctionFileBuilderTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.queue 2 | 3 | import com.google.testing.compile.Compilation 4 | import com.nimbusframework.nimbusaws.CompileStateService 5 | import com.nimbusframework.nimbusaws.annotation.services.FileReader 6 | import io.kotest.core.spec.style.AnnotationSpec 7 | import io.kotest.matchers.shouldBe 8 | 9 | internal class QueueServerlessFunctionFileBuilderTest: AnnotationSpec() { 10 | 11 | private val fileService = FileReader() 12 | 13 | @Test 14 | fun correctCompiles() { 15 | val compileStateService = CompileStateService("models/Queue.java", "handlers/QueueHandlers.java") 16 | compileStateService.compileObjectsWithNimbus() 17 | compileStateService.status shouldBe Compilation.Status.SUCCESS 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/ExampleHttpHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod 4 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction 5 | import com.nimbusframework.nimbuslocal.exampleModels.Person 6 | 7 | class ExampleHttpHandler { 8 | 9 | @HttpServerlessFunction(path = "test", method = HttpMethod.GET) 10 | fun getRequest(): Boolean { 11 | return true 12 | } 13 | 14 | @HttpServerlessFunction(path = "newPerson", method = HttpMethod.POST) 15 | fun postRequest(person: Person): Boolean { 16 | return true 17 | } 18 | 19 | 20 | @HttpServerlessFunction(path = "any", method = HttpMethod.ANY) 21 | fun anyRequest(): Boolean { 22 | return true 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/apigateway/CustomAuthorizer.java: -------------------------------------------------------------------------------- 1 | package handlers.apigateway; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.lambda.CustomLambdaFunctionHandler; 4 | import com.nimbusframework.nimbusaws.interfaces.ApiGatewayLambdaAuthorizer; 5 | import com.amazonaws.services.lambda.runtime.Context; 6 | import com.amazonaws.services.lambda.runtime.events.APIGatewayCustomAuthorizerEvent; 7 | import com.amazonaws.services.lambda.runtime.events.IamPolicyResponse; 8 | import java.lang.Override; 9 | 10 | public class CustomAuthorizer implements ApiGatewayLambdaAuthorizer { 11 | 12 | @Override 13 | @CustomLambdaFunctionHandler(file = "target/customfile.zip", handler = "testhandler", runtime = "provided") 14 | public IamPolicyResponse handleRequest(APIGatewayCustomAuthorizerEvent input, Context context) { 15 | return null; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /deployment/src/main/java/services/LambdaService.kt: -------------------------------------------------------------------------------- 1 | package services 2 | 3 | import com.amazonaws.services.lambda.AWSLambdaClientBuilder 4 | import com.amazonaws.services.lambda.model.InvocationType 5 | import com.amazonaws.services.lambda.model.InvokeRequest 6 | import org.apache.maven.plugin.logging.Log 7 | 8 | class LambdaService(private val logger: Log, region: String) { 9 | private val lambdaClient = AWSLambdaClientBuilder.standard() 10 | .withRegion(region) 11 | .build() 12 | 13 | fun invokeNoArgs(functionName: String) { 14 | val invokeRequest = InvokeRequest() 15 | .withFunctionName(functionName) 16 | .withInvocationType(InvocationType.RequestResponse) 17 | val result = lambdaClient.invoke(invokeRequest) 18 | logger.info("Function returned value: " + String(result.payload.array())) 19 | } 20 | } -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/wrappers/file/FileStorageServerlessFunctionFileBuilderTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.file 2 | 3 | import com.google.testing.compile.Compilation 4 | import com.nimbusframework.nimbusaws.CompileStateService 5 | import com.nimbusframework.nimbusaws.annotation.services.FileReader 6 | import io.kotest.core.spec.style.AnnotationSpec 7 | import io.kotest.matchers.shouldBe 8 | 9 | internal class FileStorageServerlessFunctionFileBuilderTest: AnnotationSpec() { 10 | 11 | private val fileService = FileReader() 12 | 13 | @Test 14 | fun correctCompiles() { 15 | val compileStateService = CompileStateService("models/FileStorage.java", "handlers/FileStorageHandlers.java") 16 | compileStateService.compileObjects { } 17 | compileStateService.status shouldBe Compilation.Status.SUCCESS 18 | } 19 | } -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/document/DocumentStoreNoTableName.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.document; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.document.DocumentStoreDefinition; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute; 5 | import com.nimbusframework.nimbuscore.annotations.persistent.Key; 6 | 7 | @DocumentStoreDefinition(stages = "dev") 8 | public class DocumentStoreNoTableName { 9 | 10 | @Key 11 | private String string; 12 | 13 | @Attribute 14 | private Integer integer; 15 | 16 | public DocumentStoreNoTableName(String string, Integer integer) { 17 | this.string = string; 18 | this.integer = integer; 19 | } 20 | 21 | public String getString() { 22 | return string; 23 | } 24 | 25 | public Integer getInteger() { 26 | return integer; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/InternalEnvironmentVariableClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients 2 | 3 | import com.nimbusframework.nimbusaws.cloudformation.generation.resources.environment.ConstantEnvironmentVariable 4 | import com.nimbusframework.nimbusaws.cloudformation.generation.resources.environment.NimbusEnvironmentVariable 5 | import com.nimbusframework.nimbuscore.clients.function.EnvironmentVariableClient 6 | 7 | class InternalEnvironmentVariableClient( 8 | private val environmentVariableClient: EnvironmentVariableClient 9 | ) { 10 | 11 | fun get(variable: NimbusEnvironmentVariable<*>): String? { 12 | return environmentVariableClient.get(variable.getKey()) 13 | } 14 | 15 | fun get(variable: ConstantEnvironmentVariable): String? { 16 | return environmentVariableClient.get(variable.name) 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/wrappers/store/DynamoStoreEventMapperTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.wrappers.store 2 | 3 | import com.amazonaws.services.lambda.runtime.events.DynamodbEvent 4 | import io.kotest.core.spec.style.AnnotationSpec 5 | import io.kotest.matchers.shouldBe 6 | 7 | class DynamoStoreEventMapperTest: AnnotationSpec() { 8 | 9 | val underTest = DynamoStoreEventMapper 10 | 11 | @Test 12 | fun canProcessDynamoEvent() { 13 | val request = DynamodbEvent.DynamodbStreamRecord() 14 | .withEventName("INSERT") 15 | .withEventID("eventId") as DynamodbEvent.DynamodbStreamRecord 16 | val result = underTest.getStoreEvent(request, "requestId") 17 | result.eventId shouldBe "eventId" 18 | result.eventName shouldBe "INSERT" 19 | result.requestId shouldBe "requestId" 20 | } 21 | } -------------------------------------------------------------------------------- /local/local-aws/src/test/java/exampleresources/LambdaApiGatewayAuthorizer.java: -------------------------------------------------------------------------------- 1 | package exampleresources; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.apigateway.ApiGatewayRestConfig; 4 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 5 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 6 | import exampleresources.authorizers.ExampleAuthorizerPathStar; 7 | 8 | @ApiGatewayRestConfig( 9 | authorizer = ExampleAuthorizerPathStar.class 10 | ) 11 | public class LambdaApiGatewayAuthorizer { 12 | 13 | @HttpServerlessFunction(method = HttpMethod.GET, path = "hello/world") 14 | public String get() { 15 | return "helloworld"; 16 | } 17 | 18 | @HttpServerlessFunction(method = HttpMethod.PUT, path = "hello/world") 19 | public String put() { 20 | return "helloworld"; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/cloudformation/model/resource/ec2/InternetGateway.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.cloudformation.model.resource.ec2 2 | 3 | import com.nimbusframework.nimbuscore.persisted.NimbusState 4 | import com.nimbusframework.nimbusaws.cloudformation.model.resource.Resource 5 | import com.google.gson.JsonObject 6 | 7 | class InternetGateway(nimbusState: NimbusState, stage: String): Resource(nimbusState, stage) { 8 | override fun toCloudFormation(): JsonObject { 9 | val internetGateway = JsonObject() 10 | internetGateway.addProperty("Type", "AWS::EC2::InternetGateway") 11 | 12 | val properties = getProperties() 13 | internetGateway.add("Properties", properties) 14 | 15 | return internetGateway 16 | } 17 | 18 | override fun getName(): String { 19 | return "InternetGateway" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/document/DocumentStoreWithTableName.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.document; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.document.DocumentStoreDefinition; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute; 5 | import com.nimbusframework.nimbuscore.annotations.persistent.Key; 6 | 7 | @DocumentStoreDefinition(tableName = "test") 8 | public class DocumentStoreWithTableName { 9 | 10 | @Key 11 | private String string; 12 | 13 | @Attribute 14 | private Integer integer; 15 | 16 | public DocumentStoreWithTableName(String string, Integer integer) { 17 | this.string = string; 18 | this.integer = integer; 19 | } 20 | 21 | public String getString() { 22 | return string; 23 | } 24 | 25 | public Integer getInteger() { 26 | return integer; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /cloud/aws/src/test/java/com/nimbusframework/nimbusaws/examples/document/DocumentStoreWithTableName.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.examples.document; 2 | 3 | import com.nimbusframework.nimbusaws.annotation.annotations.document.DynamoDbDocumentStore; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute; 5 | import com.nimbusframework.nimbuscore.annotations.persistent.Key; 6 | 7 | @DynamoDbDocumentStore(tableName = "test") 8 | public class DocumentStoreWithTableName { 9 | 10 | @Key 11 | private String string; 12 | 13 | @Attribute 14 | private Integer integer; 15 | 16 | public DocumentStoreWithTableName(String string, Integer integer) { 17 | this.string = string; 18 | this.integer = integer; 19 | } 20 | 21 | public String getString() { 22 | return string; 23 | } 24 | 25 | public Integer getInteger() { 26 | return integer; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /core/src/test/java/com/nimbusframework/nimbuscore/examples/document/DocumentStoreNoTableNameNoStage.java: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuscore.examples.document; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.document.DocumentStoreDefinition; 4 | import com.nimbusframework.nimbuscore.annotations.persistent.Attribute; 5 | import com.nimbusframework.nimbuscore.annotations.persistent.Key; 6 | 7 | @DocumentStoreDefinition(stages = "dev") 8 | public class DocumentStoreNoTableNameNoStage { 9 | 10 | @Key 11 | private String string; 12 | 13 | @Attribute 14 | private Integer integer; 15 | 16 | public DocumentStoreNoTableNameNoStage(String string, Integer integer) { 17 | this.string = string; 18 | this.integer = integer; 19 | } 20 | 21 | public String getString() { 22 | return string; 23 | } 24 | 25 | public Integer getInteger() { 26 | return integer; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/WebSocketHandlers.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.function.WebSocketServerlessFunction; 4 | import com.nimbusframework.nimbuscore.eventabstractions.WebSocketEvent; 5 | import models.Person; 6 | 7 | public class WebSocketHandlers { 8 | 9 | @WebSocketServerlessFunction(topic="newUser") 10 | public void newUser(Person newUser, WebSocketEvent event) { 11 | String connectionId = event.getRequestContext().getConnectionId(); 12 | System.out.println("ConnectionId " + connectionId + " registered as new user: " + newUser); 13 | } 14 | 15 | @WebSocketServerlessFunction(topic = "$connect") 16 | public void onConnect(WebSocketEvent event) throws Exception { 17 | String connectionId = event.getRequestContext().getConnectionId(); 18 | String username = event.getQueryStringParameters().get("user"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /cloud/aws/src/test/resources/handlers/UsesQueueHandler.java: -------------------------------------------------------------------------------- 1 | package handlers; 2 | 3 | import com.nimbusframework.nimbuscore.annotations.http.HttpMethod; 4 | import com.nimbusframework.nimbuscore.annotations.function.HttpServerlessFunction; 5 | import com.nimbusframework.nimbuscore.annotations.queue.UsesQueue; 6 | import com.nimbusframework.nimbuscore.clients.ClientBuilder; 7 | import models.Queue; 8 | import models.RdsDatabaseModel; 9 | 10 | public class UsesQueueHandler { 11 | 12 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test") 13 | @UsesQueue(queue = Queue.class) 14 | public void func() { 15 | ClientBuilder.getQueueClient(Queue.class); 16 | } 17 | 18 | @HttpServerlessFunction(method = HttpMethod.POST, path = "test2") 19 | @UsesQueue(queue = RdsDatabaseModel.class) 20 | public void func2() { 21 | ClientBuilder.getQueueClient(Queue.class); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /local/local-aws/src/test/java/com/nimbusframework/nimbusawslocal/deployment/services/resource/LocalDynamoDbDocumentStoreCreatorTest.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusawslocal.deployment.services.resource 2 | 3 | import com.nimbusframework.nimbusawslocal.aws.AwsSpecificLocalDeployment 4 | import com.nimbusframework.nimbuslocal.LocalNimbusDeployment 5 | import exampleresources.DynamoDbDocument 6 | import io.kotest.core.spec.style.AnnotationSpec 7 | import io.kotest.matchers.shouldNotBe 8 | 9 | internal class LocalDynamoDbDocumentStoreCreatorTest: AnnotationSpec() { 10 | 11 | @Test 12 | fun canCorrectlyDetectAnnotation() { 13 | val localNimbusDeployment = LocalNimbusDeployment.getNewInstance("exampleresources", AwsSpecificLocalDeployment.newInstance()) 14 | val document = localNimbusDeployment.getDocumentStore(DynamoDbDocument::class.java); 15 | document shouldNotBe null 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /local/local/src/test/java/com/nimbusframework/nimbuslocal/exampleHandlers/ExampleFileStorageHandler.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbuslocal.exampleHandlers 2 | 3 | import com.nimbusframework.nimbuscore.annotations.file.FileStorageEventType 4 | import com.nimbusframework.nimbuscore.annotations.function.FileStorageServerlessFunction 5 | import com.nimbusframework.nimbuscore.eventabstractions.FileStorageEvent 6 | import com.nimbusframework.nimbuslocal.exampleModels.Bucket 7 | 8 | class ExampleFileStorageHandler { 9 | 10 | @FileStorageServerlessFunction(fileStorageBucket = Bucket::class, eventType = FileStorageEventType.OBJECT_CREATED) 11 | fun newFile(event: FileStorageEvent) { 12 | return 13 | } 14 | 15 | @FileStorageServerlessFunction(fileStorageBucket = Bucket::class, eventType = FileStorageEventType.OBJECT_DELETED) 16 | fun deletedFile(event: FileStorageEvent) { 17 | return 18 | } 19 | } -------------------------------------------------------------------------------- /cloud/aws/src/main/java/com/nimbusframework/nimbusaws/clients/cognito/CognitoClient.kt: -------------------------------------------------------------------------------- 1 | package com.nimbusframework.nimbusaws.clients.cognito 2 | 3 | interface CognitoClient { 4 | 5 | fun getUser(accessToken: String): CognitoUser? 6 | 7 | fun listGroupsForUserAsAdmin(username: String): List 8 | 9 | fun listUsersInGroup(groupName: String): List 10 | 11 | fun searchUsers(filterAttribute: SearchableCognitoAttribute, value: String, searchType: SearchType): List 12 | 13 | fun searchUsers(filterAttribute: SearchableCognitoAttribute, value: String): List = searchUsers(filterAttribute, value, SearchType.EQUALS) 14 | 15 | fun addUserToGroupAsAdmin(username: String, groupName: String) 16 | 17 | fun removeUserFromGroupAsAdmin(username: String, groupName: String) 18 | 19 | fun setAttributeAsAdmin(username: String, attribute: String, value: String) 20 | 21 | } 22 | --------------------------------------------------------------------------------