API Reference proca v3.4.1
Modules
Enums used in Proca database.
Proca keeps the contexts that define your domain and business logic.
Record for action done by supporter. Supporter can have many actions, but actions can be created without a supporter with intention, to match them later to supporter record. This can come handy when we need to create actions for user, but will gather personal data later. It is possible to use ref field to match action to supporter later.
Action Page belongs to a Campaign, and represents a page (widget) where members take action.
Server which tracks and monitors active pages.
Authorization Context for resolvers.
Campaign represents a political goal and consists of many action pages. Belongs to one Org (so called "leader org").
Helper methods for manipulating changeset data
Confirm represents a confirmable action deferred in time. It is called confirm, because it is a confirmable - something that must be confirmed by a party. Usually party A creates a confirm, and party B accepts or rejects it. Upon acceptance, the operation can run. Optionaly upon rejection a different action can be triggered.
Invite an org to join a campaign, by creating an action page based off action page subject_id
Confirmed operation to add staffer to org. subject: org object_id: perms (binary) email: invited user
Confirm a request to join campaign. Partner sends such request to campaign lead. v1. A successful confirm makes live all pages in that campaign for org. v2. A successful confirm creates a partnership.
Confirm operation of making action page live.
Each confirmable operation works a bit differently, so modules in Proca.Confirm.* implement the spefics. Thye fallow this behaviour.
Schema holding personal data (PII). Belongs to action page that collected the data, and to organisation which the data is sent to. Contains consent information. Can be encrypted. There can be many Contact records per one supporter.
Basic data represents the most typical data set we collect on membres: email as main identifier, names, postcode and country for locality, and optional phone number.
Defines different styles of personal data that are stored in Contact.
Bulgaria validations for ECI id numbers
Data format for ECI
Rules generated from SQL released by EC (see utils/ECI).
Provides schema
macro to generate EciData embedded schema
When api resolver validates contact map, it can use these helper funcitons.
schema for residency address
Schema for handling contact: map from graphql addAction* mutations
schema for national id
Data format for Italian Citizens' Initiative
Data gathered for Popular Initiative in Switzerland.
Custom field helpers (to support deprecated Field model)
Represents an organisation in Proca. Org
can have many Proca.Staffer
s, Proca.Service
s, Proca.Campaign
s and Proca.ActionPage
's.
Permission bits used in proca. Should be named with a verb_noun (_owner is an exception here).
Supervisor of Topology processes and Processing Workers.
Topology of processing queue setup in RabbitMQ.
Keypair for encyrption of personal data
Tasks to seed and migrate the db on app start
Contains helpers for writing Proca Schemas. use Proca.Schema, module: Proca.MyRecordModule
Server which holds Home Org encryption keys and current nonce, and performs encryption and decryption of messages to other Orgs using their public keys.
Because JWT authentication requires a JWKS certificate retrieved from an url (from the token issuer), this server holds/caches this information.
Process which contains a dictionary of encryption keys for orgs. It also generates unique nonce
values it is guaranteed they are not re-used if multiple actions are encrypted in parallel.
Setup GenServer to run every 5 minutes to check if there are any emails to send
Server that decides what actions should be done after different events.
Stores campaign and action page signature counts in following structure (under campaign state key)
Implement supporter detail lookup.
EmailBackend behaviour specifies what we want to expect from an email backend. We are using Swoosh for sending emails - it is very convenient because it has lots of adapters. However, we also need to be able to work with templates and Swoosh does not have this.
Models an email tempalate to be rendered into a thank you email, etc.
Lookup email templates.
Mailjet Email Backend
This module lets you send bulk emails via AWS SES.
Currently, a storage service
Service configuration of webhook.
Holds utm codes. Will be reused by many actions
Join table between Org and User. Means that user has a role/some permissions in an Org.
For the organisation (they should be exclusive)
Processing
Producers
Processing "stage" that sends thank you emails
Define JSON format for events in proca system.
For these cases
A queue producer for Broadway.
Tools to re-queue action directly into custom or delivery queue
Processing "stage" that sends data to SQS
Support functions for job processing in Broadway. Most imporatntly functions to build RabbitMQ events containing enough data to be processed internally (system) or externally (custom).
Stage which produces unproduced actions, which might be unprocessed because of no queue was available, or because processing failed.
Processing "stage" that sends events to webhook.
Supporter is the actor that does actions. Has associated contacts, which contain personal data dediacted to every receiving org.
Models a consent for entered personal data, for an Org. Ultimately stored in Contact record.
This module specifies how the supporter presonal data is stored and share between orgs.
Target represents a target of a campaign, and contains information about the Target
TargetEmail contains the email data for a Target
The Users context.
Stores token_last_seen
timestamps to user_tokens
table.
Does not store it every time a token is used, not to strain the DB. Synces every 10s
Password generator for users
The entrypoint for defining your web interface, such as controllers, views, channels and so on.
Controller processing two kinds of confirm links
Alternative router used in ECI build. Minimal version of ProcaWeb.Router
Module with named helpers generated from ProcaWeb.EciRouter.
Error struct to be used universally in the resolver codebase - translated to the respective (GraphQL, REST) error formats.
Conveniences for translating and building error messages.
A module providing Internationalization with a gettext-based API.
Helper functions for formatting errors from resolvers
A plug that reads JWT from Authorization header and authenticates the user
Disable or restrict schema introspection to authorized requests
A plug that passes headers from request to Absinthe context (into :headers
map).
Helpers for returning errors from plugs. If the request is JSON, the error is structured like GQL error.
A plug that reads JWT from Authorization header and authenticates the user.
Plug that reads "extensions" key from GraphQL paramters and addsthem to context of GQL resolution. This is to handle Apollo style extensions in requests.
A plug that reads JWT from Authorization header and authenticates the user.
Resolvers for action related mutations
Resolvers for action page related mutations
Resolvers for public action lists (recent comments etc.)
Provides macros to handle auth flow in schema files.
Given authenticated user, looks up Proca.Auth struct that matches contextually to resolution result or context. Has two modes
Resolvers for campaign queries in mutations
Absinthe middleware to check if captcha code is provided with request. Captcha should be provided in extension: captcha: key
Resolver for org { exportAction } query
Because only context is passed via private settings from Absinthe.Plug, we need to pass extensions loaded with ParseExtensions plug inside context. In this middleware we move it to Resolution.extensions.
middleware Loader, :campaign, by: [name: :campaign_name, :id]
Resolvers for org { } root query
Resolvers for org { } root query
Main app router.
Module with named helpers generated from ProcaWeb.Router.
Main API schema. See schema/ for details.
API for campaign and action page entities
API for action entities
API for campaign and action page entities
API form confirms
Defines custom types used in API, and how to serialize/parse them
An alternative API schema (replaces ProcaWeb.Schema) used in ECI build.
API for org entities
API for Services
API schema for subscriptions
Schema decleration for Target and TargetEmail types
Incoming webhook controller to process call backs from services like Mailjet and SES, etc