1.0.187 • Published 9 months ago

lumic-backend v1.0.187

Weekly downloads
-
License
ISC
Repository
-
Last release
9 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

9 months ago

1.0.186

10 months ago

1.0.185

10 months ago

1.0.183

10 months ago

1.0.182

10 months ago

1.0.184

10 months ago

1.0.181

10 months ago

1.0.180

10 months ago

1.0.178

10 months ago

1.0.179

10 months ago

1.0.177

10 months ago

1.0.176

10 months ago

1.0.175

10 months ago

1.0.174

10 months ago

1.0.173

10 months ago

1.0.172

10 months ago

1.0.171

10 months ago

1.0.170

10 months ago

1.0.169

10 months ago

1.0.168

10 months ago

1.0.167

10 months ago

1.0.166

10 months ago

1.0.165

10 months ago

1.0.164

10 months ago

1.0.163

10 months ago

1.0.162

10 months ago

1.0.161

10 months ago

1.0.160

10 months ago

1.0.159

10 months ago

1.0.158

10 months ago

1.0.157

10 months ago

1.0.156

10 months ago

1.0.155

10 months ago

1.0.154

10 months ago

1.0.153

10 months ago

1.0.152

10 months ago

1.0.151

10 months ago

1.0.150

10 months ago

1.0.149

10 months ago

1.0.148

10 months ago

1.0.147

10 months ago

1.0.146

10 months ago

1.0.145

11 months ago

1.0.144

11 months ago

1.0.143

11 months ago

1.0.142

11 months ago

1.0.141

11 months ago

1.0.140

11 months ago

1.0.139

11 months ago

1.0.138

11 months ago

1.0.137

11 months ago

1.0.136

11 months ago

1.0.135

11 months ago

1.0.134

11 months ago

1.0.133

11 months ago

1.0.132

11 months ago

1.0.131

11 months ago

1.0.130

11 months ago

1.0.129

11 months ago

1.0.128

11 months ago

1.0.127

11 months ago

1.0.126

11 months ago

1.0.125

11 months ago

1.0.124

11 months ago

1.0.123

11 months ago

1.0.122

11 months ago

1.0.121

11 months ago

1.0.120

11 months ago

1.0.119

11 months ago

1.0.118

11 months ago

1.0.117

11 months ago

1.0.116

11 months ago

1.0.115

11 months ago

1.0.114

11 months ago

1.0.113

11 months ago

1.0.112

11 months ago

1.0.111

11 months ago

1.0.110

11 months ago

1.0.109

11 months ago

1.0.108

11 months ago

1.0.107

11 months ago

1.0.106

11 months ago

1.0.105

11 months ago

1.0.104

11 months ago

1.0.103

11 months ago

1.0.102

11 months ago

1.0.101

11 months ago

1.0.100

11 months ago

1.0.99

11 months ago

1.0.98

11 months ago

1.0.97

11 months ago

1.0.96

11 months ago

1.0.95

11 months ago

1.0.94

11 months ago

1.0.93

11 months ago

1.0.92

11 months ago

1.0.91

11 months ago

1.0.90

11 months ago

1.0.89

11 months ago

1.0.88

11 months ago

1.0.87

11 months ago

1.0.86

11 months ago

1.0.85

11 months ago

1.0.84

11 months ago

1.0.83

11 months ago

1.0.82

11 months ago

1.0.81

11 months ago

1.0.80

11 months ago

1.0.79

11 months ago

1.0.78

11 months ago

1.0.77

11 months ago

1.0.76

11 months ago

1.0.75

11 months ago

1.0.74

11 months ago

1.0.73

11 months ago

1.0.72

11 months ago

1.0.71

11 months ago

1.0.70

11 months ago

1.0.69

11 months ago

1.0.68

11 months ago

1.0.67

11 months ago

1.0.66

11 months ago

1.0.65

11 months ago

1.0.64

11 months ago

1.0.63

11 months ago

1.0.62

11 months ago

1.0.61

11 months ago

1.0.60

11 months ago

1.0.59

11 months ago

1.0.58

11 months ago

1.0.57

11 months ago

1.0.56

11 months ago

1.0.55

11 months ago

1.0.54

11 months ago

1.0.53

11 months ago

1.0.52

11 months ago

1.0.51

11 months ago

1.0.50

11 months ago

1.0.49

12 months ago

1.0.48

12 months ago

1.0.47

12 months ago

1.0.46

12 months ago

1.0.45

12 months ago

1.0.44

12 months ago

1.0.43

12 months ago

1.0.42

12 months ago

1.0.41

12 months ago

1.0.40

12 months ago

1.0.39

12 months ago

1.0.38

12 months ago

1.0.37

12 months ago

1.0.36

12 months ago

1.0.35

12 months ago

1.0.34

12 months ago

1.0.33

12 months ago

1.0.32

12 months ago

1.0.31

12 months ago

1.0.30

12 months ago

1.0.29

12 months ago

1.0.28

12 months ago

1.0.27

12 months ago

1.0.26

12 months ago

1.0.25

12 months ago

1.0.24

12 months ago

1.0.23

12 months ago

1.0.22

12 months ago

1.0.21

12 months ago

1.0.20

12 months ago

1.0.19

12 months ago

1.0.18

12 months ago

1.0.17

12 months ago

1.0.16

12 months ago

1.0.13

12 months ago

1.0.12

12 months ago

1.0.11

12 months ago

1.0.8

12 months ago

1.0.5

12 months ago

1.0.4

12 months ago