
Security News
Crates.io Users Targeted by Phishing Emails
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
apollo-datasource-firestore
Advanced tools
This is a Firestore DataSource for Apollo GraphQL Servers. It was adapted from the CosmosDB DataSource
Use by creating a new class extending the FirestoreDataSource
, with the desired document type.
Use separate DataSources for each data type, and preferably
different collections in Firestore too. Initialise the class
by passing a collection reference created by the Firestore library.
export interface UserDoc {
// a string id value is required for entities using this library.
// It will be used for the firestore document ID but not stored in the document in firestore.
readonly id: string
readonly collection: 'users'
name: string
groupId: number
}
export interface PostsDoc {
readonly id: string
readonly collection: 'posts'
title: string
}
export class UserDataSource extends FirestoreDataStore<UserDoc, ApolloContext> {}
export class PostsDataSource extends FirestoreDataStore<PostsDoc, ApolloContext> {}
const usersCollection: CollectionReference<UserDoc> = firestore.collection('users')
const postsCollection: CollectionReference<PostsDoc> = firestore.collection('posts')
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => ({
users: new UserDataSource(usersCollection),
posts: new PostsDataSource(postsCollection)
})
})
FirestoreDataSource has a findByQuery
method that accepts a function taking the collection as its only argument, which you can then create a query based on. Can be used in resolvers or to create wrappers.
Example of derived class with custom query methods:
export class UserDataSource extends FirestoreDataStore<UserDoc, ApolloContext> {
async findManyByGroupId (groupId: number) {
return this.findManyByQuery(c => c.where('groupId', '==', groupId).limit(2))
}
async findOneByEmail (email: string) {
return this.findManyByQuery(c => c.where('email', '==', email).limit(1))?.[0] ?? undefined
}
}
This DataSource has some built-in mutations that can be used to create, update and delete documents.
await context.dataSources.users.createOne(userDoc)
await context.dataSources.users.updateOne(userDoc)
await context.dataSources.users.updateOnePartial(userId, { name: 'Bob' })
await context.dataSources.users.deleteOne(userId)
Batching is provided on all id-based queries by DataLoader.
Caching is available on an opt-in basis by passing a ttl
option on queries.
FAQs
An Apollo DataSource for Firestore
The npm package apollo-datasource-firestore receives a total of 0 weekly downloads. As such, apollo-datasource-firestore popularity was classified as not popular.
We found that apollo-datasource-firestore demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The Rust Security Response WG is warning of phishing emails from rustfoundation.dev targeting crates.io users.
Product
Socket now lets you customize pull request alert headers, helping security teams share clear guidance right in PRs to speed reviews and reduce back-and-forth.
Product
Socket's Rust support is moving to Beta: all users can scan Cargo projects and generate SBOMs, including Cargo.toml-only crates, with Rust-aware supply chain checks.