Skip to content

Commit

Permalink
feat: Deploying Appwrite function to report appwrite event to google …
Browse files Browse the repository at this point in the history
…analytics
  • Loading branch information
HrithikSampson committed Oct 19, 2023
1 parent 954c0c0 commit c78b17f
Show file tree
Hide file tree
Showing 8 changed files with 793 additions and 0 deletions.
4 changes: 4 additions & 0 deletions appwrite.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"projectId": "6524d42869dc1c9786e5",
"projectName": "Personal Project"
}
130 changes: 130 additions & 0 deletions node/events-to-ga/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp
.cache

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
138 changes: 138 additions & 0 deletions node/events-to-ga/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<!-- Name your function -->

# ⚡ Template Function

<!-- Write short function tagline -->

The function will be triggered by configured Appwrite events and report these events to Google Analytics.

## 🧰 Usage

<!-- Copy section for each endpoint -->
<!-- Document endpoint method and url -->

### POST /

<!-- Describe the endpoint -->

Gets the event from the header.

**Parameters**

<!-- Document each expected parameter -->

| Name | Description | Location | Type | Sample Value |
| ------------------ | ------------------------------ | -------- | ------ | --------------------- |
| x-appwrite-user-id | User ID from Appwrite. | Header | String | 642...7cd |
| x-appwrite-event | Describes the triggering event | Header | String | users.65...f19.delete |
| x-appwrite-trigger | Type of trigger for function | Header | String | event |

**Response**

<!-- Provide sample body for successful response -->

Sample `200` Response:

```json
{
"ok": true,
"message": "event users.653...df19.delete is send to google analytics",
}
```

<!-- If relevant, document error responses -->

Sample `503` Response:

```json
{ "ok": false, "message": "Response status code when posting event to Google Analytics is 503" }
```

Sample `401` Response:

```json
{ "ok": false, "message": "Error Posting Event to Google Analytics" }
```
## ⚙️ Configuration

<!-- Update values and remove irrelevant settings -->

| Setting | Value |
| ----------------- | ---------------- |
| Runtime | Node (18.0) |
| Entrypoint | `src/main.js` |
| Build Commands | `npm install` |
| Permissions | `any` |
| Events | all |

## 🔒 Environment Variables

<!-- Copy section for each variable -->
<!-- Name the variable -->


### APPWRITE_FUNCTION_PROJECT_ID

<!-- Describe the variable -->

Project ID in which Appwrite Function is added.

<!-- Mark if variable is required or not -->
<!-- Provide sample (but invalid) value -->
<!-- Link to docs or remove if irrelevant -->

| Question | Answer |
| ------------- | -------------------------------------------------------------------------------------------------------------|
| Required | Yes |
| Sample Value | `6524d.....6e5` |
| Documentation | [Appwrite: Getting Started for Server](https://appwrite.io/docs/getting-started-for-server#apiKey) |


### GA4_Measurement_Id

<!-- Describe the variable -->

API Key to talk to Appwrite backend APIs.

<!-- Mark if variable is required or not -->
<!-- Provide sample (but invalid) value -->
<!-- Link to docs or remove if irrelevant -->

| Question | Answer |
| ------------- | --------------------------------------------------------------------------------------------------------------|
| Required | Yes |
| Sample Value | `G-NY5...26R` |
| Documentation | [Google Analytics 4 docs](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference)|


### APPWRITE_ENDPOINT

<!-- Describe the variable -->

API Key to talk to Appwrite backend APIs.

<!-- Mark if variable is required or not -->
<!-- Provide sample (but invalid) value -->
<!-- Link to docs or remove if irrelevant -->

| Question | Answer |
| ------------- | --------------------------------------------------------------------------------------------------------------|
| Required | Yes |
| Sample Value | `https://cloud.appwrite.io/v1` |
| Documentation | [Google Analytics 4 docs](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference)|

### GA4_API_SECRET

<!-- Describe the variable -->

API Key to talk to Appwrite backend APIs.

<!-- Mark if variable is required or not -->
<!-- Provide sample (but invalid) value -->
<!-- Link to docs or remove if irrelevant -->

| Question | Answer |
| ------------- | --------------------------------------------------------------------------------------------------------------|
| Required | Yes / No |
| Sample Value | `d1efb...aec35` |
| Documentation | [Google Analytics 4 docs](https://developers.google.com/analytics/devguides/collection/protocol/ga4/reference)|
14 changes: 14 additions & 0 deletions node/events-to-ga/env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
declare global {
namespace NodeJS {
interface ProcessEnv {
APPWRITE_ENDPOINT: string;
APPWRITE_FUNCTION_PROJECT_ID: string;
APPWRITE_API_KEY: string;
GA4_Measurement_Id: string;
GA4_API_SECRET: string;
}
}
}

export {};

Loading

0 comments on commit c78b17f

Please sign in to comment.