1.0.187 • Published 7 months ago

lumic-backend v1.0.187

Weekly downloads
-
License
ISC
Repository
-
Last release
7 months ago

lumic-backend

Lumic Readme Banner

Description

The lumic-backend NPM package provides a comprehensive set of executable CRUD (Create, Read, Update, Delete) functions, type and enums definitions, tailored for the Lumic AI platform. Designed for both client-side and server-side applications, it leverages the power of Apollo Client for GraphQL interactions, and TypeGraphQL for building type-safe APIs.

It's primary goal, is to enabled developers to quickly scaffold and interact with their data models, without the need to write elaborate gql operations, or lack certainty of what data to pass through as variables or arguments. Rather, the executable CRUD functions are generated dynamically based on the models defined in the project, and are accessible under the global lumic namespace. Rather than requiring various inputTypes, you simply pass through the data as an object that conforms to the corresponding model's type definition, and the package will handle the rest, irrespective of mutation or query operation being performed.

This package streamlines the development process by offering a unified lumic namespace, encompassing model-specific functions, types, and enums, ensuring consistency and type safety across your application.

Features

This package offers a robust backend solution tailored for the Lumic AI platform, featuring:

  • Dynamic Model Functions: Automatically generated CRUD functions for each content model.
  • Unified Namespace: Access all functions, types, and enums under the global lumic namespace.
  • Type Safety: Comprehensive type definitions ensure consistency and reduce runtime errors.
  • GraphQL Integration: Seamless interaction with GraphQL endpoints using Apollo Client.
  • Dynamically contructed variables and arguments: No need to worry about constructing gql operations, simply pass through the data as an object that conforms to the model's type definition.
  • Server-Side and Client-Side Support: Versatile usage in both environments, including AWS Lambda functions.
  • Enums Namespace: Organized enums for consistent value usage across models.
  • TypeStrings Namespace: TypeStrings const definitions that are stringified versions of the various model types (including any nested types or enums within them). This is useful when wanting to pass these on to an LLM as a reference (e.g. when asking it to return a specific type of data).
  • Automated Documentation: The build script dynamically generates a list of all models and their CRUD resolvers in the README.md.

Prerequisites

To use the lumic-backend package, the only requirement is to ensure you have several environment variables configured (see below). This can be a local development server or a production endpoints for the graphql server, and the corresponding HTTPS and WebSocket URLs.

Environment Variables

Add the folowing to your .env file or add them as environment variables in your deployment environment:

  • BACKEND_HTTPS_URL: The HTTPS URL of your GraphQL server. E.g. https://api.lumic.ai/graphql for production, and https://localhost:4000/graphql for local development.

Example .env file:

GRAPHQL_ENDPOINT=http://localhost:4000/graphql
BACKEND_HTTPS_URL=https://api.example.com/graphql
BACKEND_WS_URL=wss://api.example.com/subscriptions

Installation

To install the lumic-backend package, follow these steps:

  1. Install NPM Package:

    npm lumic-backend
  2. Set Up Environment Variables: Create a .env file in the root of the project and add:

    GRAPHQL_ENDPOINT=http://localhost:4000/graphql // Or any other port you wish to use for the server

Usage

Lumic Namespace

All the dynamically generated functions for each content model are available under the global lumic namespace. You can import and use them in your application as follows:

Client-Side Usage (Root Level)

// client-side/index.ts
import lumic, { types, enums } from 'lumic-backend';

export const main = async () => {
// Example: Create a new User
const userProps = {
  name: 'John Doe',
  email: 'john@gmail.com',
  image: 'https://example.com/johndoe.jpg',
  role: 'ADMIN',
} as types.User;


try {
  const createdUser = await lumic.User.create(userProps) as types.User;
  console.log('Created User:', createdUser);
} catch (error) {
  console.error('Error creating user:', error);
};

// Example: Update a User
const updateUser = async () => {
  const updateProps: types.User = {
    id: 'USER_ID',
    email: 'newemail@example.com',
  };

  try {
    const updatedUser = await lumic.User.update(updateProps) as types.User;
    console.log('Updated User:', updatedUser);
  } catch (error) {
    console.error('Error updating user:', error);
  }
};

// Execute functions
createUser();
updateUser();

};

Server-Side Usage (Within a Lambda Function)

The only difference between client-side and server-side usage is the import statement. On the server-side, you import the functions from lumic-backend/server/index instead of lumic-backend, and you need to provide an Apollo Client instance to the functions with the use of 'fetch' for the HTTP link.

// server-side/lambdaFunction.mjs
import lumic from 'lumic-backend/server/index';

export const handler = async (event) => {
  // Parse the incoming event data
  const data = JSON.parse(event.body);

  // Validate the input
  if (!data.name || !data.type || !data.version || !data.url || !data.website || !data.description) {
    return {
      statusCode: 400,
      body: JSON.stringify({ error: 'Missing required fields: name, type, version, url, website, description' }),
    };
  }

  const dependencyObject = {
    name: data.name,
    type: data.type,
    version: data.version,
    url: data.url,
    website: data.website,
    description: data.description,
  };

  try {
    const result = await lumic.dependency.create(dependencyObject);

    return {
      statusCode: 200,
      body: JSON.stringify(result),
    };
  } catch (error) {
    console.error('Error in createOneDependency:', error);
    return {
      statusCode: 500,
      body: JSON.stringify({ error: 'An error occurred', details: error.message }),
    };
  }
};

Types Namespace

Types associated with your data models are available under the types namespace. This provides type safety and consistency when working with your models.

// types-example.ts
import { types } from 'lumic-backend';

// Define a new user
const newUser: types.UserCreateInput = {
  username: 'johndoe',
  email: 'johndoe@example.com',
  password: 'securepassword',
  role: types.UserRole.ADMIN, // Using enums
};

// Define update input
const updateUser: types.UserUpdateInput = {
  id: 'USER_ID',
  email: 'john.doe@newdomain.com',
};

Enums Namespace

Enums associated with your data models are available under the enums namespace. This provides type safety and consistency when working with your models.

// enums-example.ts
import { enums } from 'lumic-backend';

// Assign a user role
const userRole: enums.UserRole = enums.UserRole.MODERATOR;

// Use enums in functions
const setUserRole = (role: enums.UserRole) => {
  // Function logic
};

TypeStrings Namespace

TypeStrings are stringified versions of the various model types (including any nested types or enums within them). These are available under the typeStrings namespace.

Their purpose is to provide a reference to the type of data being requested, which can be passed on to an LLM (Language Learning Model) as a reference within a prompt or query. This is useful when asking the LLM to return a specific type of data that should conform to the model's structure.

// typeStrings-example.ts

import { typeStrings } from 'lumic-backend';

// Use typeStrings in a prompt being sent to an LLM
const prompt = `

... some other prompt text

\${typeStrings.User}

`;

Model CRUD Resolvers

The lumic-backend package includes a comprehensive set of CRUD (Create, Read, Update, Delete) resolvers for each of your models. Each model has the following functions:

  • ModelName.create: Create a single record.
  • ModelName.createMany: Create multiple records.
  • ModelName.update: Update a single record.
  • ModelName.delete: Delete a single record.
  • ModelName.get: Retrieve a single record by unique identifier.
  • ModelName.getAll: Retrieve all records.
  • ModelName.findMany: Retrieve multiple records based on criteria.

Model TypeStrings, Types, and available CRUD Resolvers

The lumic-backend package includes a comprehensive set of CRUD (Create, Read, Update, Delete) resolvers for each of your models. Each model has the following functions (available directly under the lumic namespace) and types (under the types namespace):

Model NameTypeStringTypeCRUD Resolvers
AccounttypeStrings.Accounttypes.Accountlumic.account.create, lumic.account.createMany, lumic.account.update, lumic.account.delete, lumic.account.get, lumic.account.getAll, lumic.account.findMany
ActiontypeStrings.Actiontypes.Actionlumic.action.create, lumic.action.createMany, lumic.action.update, lumic.action.delete, lumic.action.get, lumic.action.getAll, lumic.action.findMany
ActionEnvironmentVariabletypeStrings.ActionEnvironmentVariabletypes.ActionEnvironmentVariablelumic.actionEnvironmentVariable.create, lumic.actionEnvironmentVariable.createMany, lumic.actionEnvironmentVariable.update, lumic.actionEnvironmentVariable.delete, lumic.actionEnvironmentVariable.get, lumic.actionEnvironmentVariable.getAll, lumic.actionEnvironmentVariable.findMany
ActionTriggertypeStrings.ActionTriggertypes.ActionTriggerlumic.actionTrigger.create, lumic.actionTrigger.createMany, lumic.actionTrigger.update, lumic.actionTrigger.delete, lumic.actionTrigger.get, lumic.actionTrigger.getAll, lumic.actionTrigger.findMany
AuthenticatortypeStrings.Authenticatortypes.Authenticatorlumic.authenticator.create, lumic.authenticator.createMany, lumic.authenticator.update, lumic.authenticator.delete, lumic.authenticator.get, lumic.authenticator.getAll, lumic.authenticator.findMany
CitytypeStrings.Citytypes.Citylumic.city.create, lumic.city.createMany, lumic.city.update, lumic.city.delete, lumic.city.get, lumic.city.getAll, lumic.city.findMany
CountrytypeStrings.Countrytypes.Countrylumic.country.create, lumic.country.createMany, lumic.country.update, lumic.country.delete, lumic.country.get, lumic.country.getAll, lumic.country.findMany
CustomertypeStrings.Customertypes.Customerlumic.customer.create, lumic.customer.createMany, lumic.customer.update, lumic.customer.delete, lumic.customer.get, lumic.customer.getAll, lumic.customer.findMany
DependencytypeStrings.Dependencytypes.Dependencylumic.dependency.create, lumic.dependency.createMany, lumic.dependency.update, lumic.dependency.delete, lumic.dependency.get, lumic.dependency.getAll, lumic.dependency.findMany
DocumentationtypeStrings.Documentationtypes.Documentationlumic.documentation.create, lumic.documentation.createMany, lumic.documentation.update, lumic.documentation.delete, lumic.documentation.get, lumic.documentation.getAll, lumic.documentation.findMany
EnvironmentVariabletypeStrings.EnvironmentVariabletypes.EnvironmentVariablelumic.environmentVariable.create, lumic.environmentVariable.createMany, lumic.environmentVariable.update, lumic.environmentVariable.delete, lumic.environmentVariable.get, lumic.environmentVariable.getAll, lumic.environmentVariable.findMany
ExampletypeStrings.Exampletypes.Examplelumic.example.create, lumic.example.createMany, lumic.example.update, lumic.example.delete, lumic.example.get, lumic.example.getAll, lumic.example.findMany
InputObjecttypeStrings.InputObjecttypes.InputObjectlumic.inputObject.create, lumic.inputObject.createMany, lumic.inputObject.update, lumic.inputObject.delete, lumic.inputObject.get, lumic.inputObject.getAll, lumic.inputObject.findMany
LocationtypeStrings.Locationtypes.Locationlumic.location.create, lumic.location.createMany, lumic.location.update, lumic.location.delete, lumic.location.get, lumic.location.getAll, lumic.location.findMany
OutputObjecttypeStrings.OutputObjecttypes.OutputObjectlumic.outputObject.create, lumic.outputObject.createMany, lumic.outputObject.update, lumic.outputObject.delete, lumic.outputObject.get, lumic.outputObject.getAll, lumic.outputObject.findMany
ParametertypeStrings.Parametertypes.Parameterlumic.parameter.create, lumic.parameter.createMany, lumic.parameter.update, lumic.parameter.delete, lumic.parameter.get, lumic.parameter.getAll, lumic.parameter.findMany
ResourcetypeStrings.Resourcetypes.Resourcelumic.resource.create, lumic.resource.createMany, lumic.resource.update, lumic.resource.delete, lumic.resource.get, lumic.resource.getAll, lumic.resource.findMany
ResourceActiontypeStrings.ResourceActiontypes.ResourceActionlumic.resourceAction.create, lumic.resourceAction.createMany, lumic.resourceAction.update, lumic.resourceAction.delete, lumic.resourceAction.get, lumic.resourceAction.getAll, lumic.resourceAction.findMany
ScheduletypeStrings.Scheduletypes.Schedulelumic.schedule.create, lumic.schedule.createMany, lumic.schedule.update, lumic.schedule.delete, lumic.schedule.get, lumic.schedule.getAll, lumic.schedule.findMany
SessiontypeStrings.Sessiontypes.Sessionlumic.session.create, lumic.session.createMany, lumic.session.update, lumic.session.delete, lumic.session.get, lumic.session.getAll, lumic.session.findMany
StatetypeStrings.Statetypes.Statelumic.state.create, lumic.state.createMany, lumic.state.update, lumic.state.delete, lumic.state.get, lumic.state.getAll, lumic.state.findMany
SteptypeStrings.Steptypes.Steplumic.step.create, lumic.step.createMany, lumic.step.update, lumic.step.delete, lumic.step.get, lumic.step.getAll, lumic.step.findMany
SubsectiontypeStrings.Subsectiontypes.Subsectionlumic.subsection.create, lumic.subsection.createMany, lumic.subsection.update, lumic.subsection.delete, lumic.subsection.get, lumic.subsection.getAll, lumic.subsection.findMany
TagtypeStrings.Tagtypes.Taglumic.tag.create, lumic.tag.createMany, lumic.tag.update, lumic.tag.delete, lumic.tag.get, lumic.tag.getAll, lumic.tag.findMany
TestDatatypeStrings.TestDatatypes.TestDatalumic.testData.create, lumic.testData.createMany, lumic.testData.update, lumic.testData.delete, lumic.testData.get, lumic.testData.getAll, lumic.testData.findMany
TriggertypeStrings.Triggertypes.Triggerlumic.trigger.create, lumic.trigger.createMany, lumic.trigger.update, lumic.trigger.delete, lumic.trigger.get, lumic.trigger.getAll, lumic.trigger.findMany
UseCasetypeStrings.UseCasetypes.UseCaselumic.useCase.create, lumic.useCase.createMany, lumic.useCase.update, lumic.useCase.delete, lumic.useCase.get, lumic.useCase.getAll, lumic.useCase.findMany
UsertypeStrings.Usertypes.Userlumic.user.create, lumic.user.createMany, lumic.user.update, lumic.user.delete, lumic.user.get, lumic.user.getAll, lumic.user.findMany
VerificationTokentypeStrings.VerificationTokentypes.VerificationTokenlumic.verificationToken.create, lumic.verificationToken.createMany, lumic.verificationToken.update, lumic.verificationToken.delete, lumic.verificationToken.get, lumic.verificationToken.getAll, lumic.verificationToken.findMany
WorkflowtypeStrings.Workflowtypes.Workflowlumic.workflow.create, lumic.workflow.createMany, lumic.workflow.update, lumic.workflow.delete, lumic.workflow.get, lumic.workflow.getAll, lumic.workflow.findMany
WorkflowTriggertypeStrings.WorkflowTriggertypes.WorkflowTriggerlumic.workflowTrigger.create, lumic.workflowTrigger.createMany, lumic.workflowTrigger.update, lumic.workflowTrigger.delete, lumic.workflowTrigger.get, lumic.workflowTrigger.getAll, lumic.workflowTrigger.findMany
WorkspacetypeStrings.Workspacetypes.Workspacelumic.workspace.create, lumic.workspace.createMany, lumic.workspace.update, lumic.workspace.delete, lumic.workspace.get, lumic.workspace.getAll, lumic.workspace.findMany
WorkspaceResourcetypeStrings.WorkspaceResourcetypes.WorkspaceResourcelumic.workspaceResource.create, lumic.workspaceResource.createMany, lumic.workspaceResource.update, lumic.workspaceResource.delete, lumic.workspaceResource.get, lumic.workspaceResource.getAll, lumic.workspaceResource.findMany
WorkspaceUsertypeStrings.WorkspaceUsertypes.WorkspaceUserlumic.workspaceUser.create, lumic.workspaceUser.createMany, lumic.workspaceUser.update, lumic.workspaceUser.delete, lumic.workspaceUser.get, lumic.workspaceUser.getAll, lumic.workspaceUser.findMany

Enums

The following enums are available for use under the enums namespace :

Enum Name
AccountScalarFieldEnum
ActionEnvironmentVariableScalarFieldEnum
ActionScalarFieldEnum
ActionTriggerScalarFieldEnum
AuthenticatorScalarFieldEnum
CityScalarFieldEnum
CountryScalarFieldEnum
CustomerScalarFieldEnum
DependencyScalarFieldEnum
DependencyType
DocumentationScalarFieldEnum
EnvironmentVariableScalarFieldEnum
EventType
ExampleScalarFieldEnum
InputObjectScalarFieldEnum
JsonNullValueFilter
JsonNullValueInput
LocationScalarFieldEnum
NullableJsonNullValueInput
NullsOrder
OperationStatus
OperationType
OutputObjectScalarFieldEnum
ParamType
ParameterScalarFieldEnum
QueryMode
ResourceActionScalarFieldEnum
ResourceScalarFieldEnum
ResourceStatus
ResourceType
ScheduleScalarFieldEnum
SessionScalarFieldEnum
SortOrder
StateScalarFieldEnum
Status
StepScalarFieldEnum
StepType
SubscriptionPlan
SubsectionScalarFieldEnum
TagScalarFieldEnum
TestDataScalarFieldEnum
TransactionIsolationLevel
TriggerScalarFieldEnum
TriggerType
UseCaseScalarFieldEnum
UserRole
UserScalarFieldEnum
VerificationTokenScalarFieldEnum
WorkflowScalarFieldEnum
WorkflowTriggerScalarFieldEnum
WorkspaceResourceScalarFieldEnum
WorkspaceScalarFieldEnum
WorkspaceUserScalarFieldEnum
1.0.187

7 months ago

1.0.186

7 months ago

1.0.185

8 months ago

1.0.183

8 months ago

1.0.182

8 months ago

1.0.184

8 months ago

1.0.181

8 months ago

1.0.180

8 months ago

1.0.178

8 months ago

1.0.179

8 months ago

1.0.177

8 months ago

1.0.176

8 months ago

1.0.175

8 months ago

1.0.174

8 months ago

1.0.173

8 months ago

1.0.172

8 months ago

1.0.171

8 months ago

1.0.170

8 months ago

1.0.169

8 months ago

1.0.168

8 months ago

1.0.167

8 months ago

1.0.166

8 months ago

1.0.165

8 months ago

1.0.164

8 months ago

1.0.163

8 months ago

1.0.162

8 months ago

1.0.161

8 months ago

1.0.160

8 months ago

1.0.159

8 months ago

1.0.158

8 months ago

1.0.157

8 months ago

1.0.156

8 months ago

1.0.155

8 months ago

1.0.154

8 months ago

1.0.153

8 months ago

1.0.152

8 months ago

1.0.151

8 months ago

1.0.150

8 months ago

1.0.149

8 months ago

1.0.148

8 months ago

1.0.147

8 months ago

1.0.146

8 months ago

1.0.145

8 months ago

1.0.144

8 months ago

1.0.143

8 months ago

1.0.142

8 months ago

1.0.141

8 months ago

1.0.140

8 months ago

1.0.139

8 months ago

1.0.138

8 months ago

1.0.137

8 months ago

1.0.136

8 months ago

1.0.135

8 months ago

1.0.134

8 months ago

1.0.133

8 months ago

1.0.132

8 months ago

1.0.131

8 months ago

1.0.130

8 months ago

1.0.129

8 months ago

1.0.128

8 months ago

1.0.127

8 months ago

1.0.126

8 months ago

1.0.125

8 months ago

1.0.124

8 months ago

1.0.123

8 months ago

1.0.122

8 months ago

1.0.121

8 months ago

1.0.120

8 months ago

1.0.119

9 months ago

1.0.118

9 months ago

1.0.117

9 months ago

1.0.116

9 months ago

1.0.115

9 months ago

1.0.114

9 months ago

1.0.113

9 months ago

1.0.112

9 months ago

1.0.111

9 months ago

1.0.110

9 months ago

1.0.109

9 months ago

1.0.108

9 months ago

1.0.107

9 months ago

1.0.106

9 months ago

1.0.105

9 months ago

1.0.104

9 months ago

1.0.103

9 months ago

1.0.102

9 months ago

1.0.101

9 months ago

1.0.100

9 months ago

1.0.99

9 months ago

1.0.98

9 months ago

1.0.97

9 months ago

1.0.96

9 months ago

1.0.95

9 months ago

1.0.94

9 months ago

1.0.93

9 months ago

1.0.92

9 months ago

1.0.91

9 months ago

1.0.90

9 months ago

1.0.89

9 months ago

1.0.88

9 months ago

1.0.87

9 months ago

1.0.86

9 months ago

1.0.85

9 months ago

1.0.84

9 months ago

1.0.83

9 months ago

1.0.82

9 months ago

1.0.81

9 months ago

1.0.80

9 months ago

1.0.79

9 months ago

1.0.78

9 months ago

1.0.77

9 months ago

1.0.76

9 months ago

1.0.75

9 months ago

1.0.74

9 months ago

1.0.73

9 months ago

1.0.72

9 months ago

1.0.71

9 months ago

1.0.70

9 months ago

1.0.69

9 months ago

1.0.68

9 months ago

1.0.67

9 months ago

1.0.66

9 months ago

1.0.65

9 months ago

1.0.64

9 months ago

1.0.63

9 months ago

1.0.62

9 months ago

1.0.61

9 months ago

1.0.60

9 months ago

1.0.59

9 months ago

1.0.58

9 months ago

1.0.57

9 months ago

1.0.56

9 months ago

1.0.55

9 months ago

1.0.54

9 months ago

1.0.53

9 months ago

1.0.52

9 months ago

1.0.51

9 months ago

1.0.50

9 months ago

1.0.49

9 months ago

1.0.48

10 months ago

1.0.47

10 months ago

1.0.46

10 months ago

1.0.45

10 months ago

1.0.44

10 months ago

1.0.43

10 months ago

1.0.42

10 months ago

1.0.41

10 months ago

1.0.40

10 months ago

1.0.39

10 months ago

1.0.38

10 months ago

1.0.37

10 months ago

1.0.36

10 months ago

1.0.35

10 months ago

1.0.34

10 months ago

1.0.33

10 months ago

1.0.32

10 months ago

1.0.31

10 months ago

1.0.30

10 months ago

1.0.29

10 months ago

1.0.28

10 months ago

1.0.27

10 months ago

1.0.26

10 months ago

1.0.25

10 months ago

1.0.24

10 months ago

1.0.23

10 months ago

1.0.22

10 months ago

1.0.21

10 months ago

1.0.20

10 months ago

1.0.19

10 months ago

1.0.18

10 months ago

1.0.17

10 months ago

1.0.16

10 months ago

1.0.13

10 months ago

1.0.12

10 months ago

1.0.11

10 months ago

1.0.8

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago