├── .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 extends CustomFactoryInterface> 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 |
5 |
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 |
--------------------------------------------------------------------------------