Compare commits

...

3 Commits

7 changed files with 226 additions and 2 deletions

View File

@@ -0,0 +1,100 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Create Firebase Realtime Database Record',
key: 'createFirebaseRealtimeDatabaseRecord',
description: 'Creates a child object within your Firebase Realtime Database.',
arguments: [
{
label: 'Path',
key: 'path',
type: 'string',
required: true,
description:
"Indicate the path to the key of the object where the child objects to be queried are located, for example, 'foo/bar/here'.",
variables: true,
},
{
label: 'Convert Numerics',
key: 'convertNumerics',
type: 'dropdown',
required: false,
description:
"If any value represents a valid numerical value, whether it's an integer or a floating-point number, this field directs the database to store it as a numeric data type instead of a string.",
variables: true,
options: [
{ label: 'Yes', value: true },
{ label: 'No', value: false },
],
},
{
label: 'New ID',
key: 'newId',
type: 'string',
required: false,
description:
'The key to use for this object, or leave it blank for Firebase to create one automatically.',
variables: true,
},
{
label: 'Data',
key: 'childData',
type: 'dynamic',
required: false,
description: '',
fields: [
{
label: 'Key',
key: 'key',
type: 'string',
required: false,
variables: true,
},
{
label: 'Value',
key: 'value',
type: 'string',
required: false,
variables: true,
},
],
},
],
async run($) {
let path = $.step.parameters.path;
const { convertNumerics, newId, childData } = $.step.parameters;
if (newId) {
path = `${path}/${newId}.json`;
} else {
path = `${path}.json`;
}
const formattedChildObjectData = childData.reduce((result, entry) => {
const key = entry?.key;
const value = entry?.value;
const isNumber = !isNaN(parseFloat(value));
if (isNumber && convertNumerics) {
result[key] = parseFloat(value);
} else {
result[key] = value;
}
return result;
}, {});
const body = formattedChildObjectData;
const { data } = await $.http.post(path, body, {
additionalProperties: {
setFirestoreBaseUrl: false,
},
});
$.setActionItem({
raw: data,
});
},
});

View File

@@ -0,0 +1,32 @@
import defineAction from '../../../../helpers/define-action.js';
export default defineAction({
name: 'Find Firebase Realtime Database Record',
key: 'findFirebaseRealtimeDatabaseRecord',
description: 'Finds a child object in Firebase Realtime Database.',
arguments: [
{
label: 'Path',
key: 'path',
type: 'string',
required: true,
description:
"Indicate the path to the key of the object where the child objects to be queried are located, for example, 'foo/bar/here'.",
variables: true,
},
],
async run($) {
const { path } = $.step.parameters;
const { data } = await $.http.get(`${path}.json`, {
additionalProperties: {
setFirestoreBaseUrl: false,
},
});
$.setActionItem({
raw: data,
});
},
});

View File

@@ -1,4 +1,11 @@
import createCloudFirestoreDocument from './create-cloud-firestore-document/index.js';
import createFirebaseRealtimeDatabaseRecord from './create-firebase-realtime-database-record/index.js';
import findCloudFirestoreDocument from './find-cloud-firestore-document/index.js';
import findFirebaseRealtimeDatabaseRecord from './find-firebase-realtime-database-record/index.js';
export default [createCloudFirestoreDocument, findCloudFirestoreDocument];
export default [
createCloudFirestoreDocument,
createFirebaseRealtimeDatabaseRecord,
findCloudFirestoreDocument,
findFirebaseRealtimeDatabaseRecord,
];

View File

@@ -1,3 +1,7 @@
import newChildObjectInFirebaseRealtimeDatabase from './new-child-object-in-a-firebase-realtime-database/index.js';
import newDocumentsWithinFirestoreCollection from './new-documents-within-firestore-collection/index.js';
export default [newDocumentsWithinFirestoreCollection];
export default [
newChildObjectInFirebaseRealtimeDatabase,
newDocumentsWithinFirestoreCollection,
];

View File

@@ -0,0 +1,75 @@
import Crypto from 'crypto';
import defineTrigger from '../../../../helpers/define-trigger.js';
export default defineTrigger({
name: 'New child object in a firebase realtime database',
key: 'newChildObjectInFirebaseRealtimeDatabase',
pollInterval: 15,
description:
'Triggers when a new child object is generated within a specific path.',
arguments: [
{
label: 'Path',
key: 'path',
type: 'string',
required: true,
description:
"Indicate the path to the key of the object where the child objects to be queried are located, for example, 'foo/bar/here.json'.",
variables: true,
},
{
label: 'Order',
key: 'order',
type: 'string',
required: false,
description:
'The key or path of the child that should be utilized for comparing objects/records. If unspecified, the order of $key is used.',
variables: true,
},
{
label: 'Location of newest objects',
key: 'locationOfNewestObjects',
type: 'dropdown',
required: false,
description:
'Specifies whether the new 100 records are positioned at the "top" or the "bottom" of the ordering. If left unspecified, the assumption is that the bottom/last result represents the "newest objects" (limitToLast).',
variables: true,
options: [
{ label: 'Top of results', value: 'limitToFirst' },
{ label: 'Bottom of results', value: 'limitToLast' },
],
},
],
async run($) {
const { path, order, locationOfNewestObjects } = $.step.parameters;
const params = {};
if (order) {
params.orderBy = `"${order}"`;
}
if (locationOfNewestObjects) {
params[`${locationOfNewestObjects}`] = 100;
}
const { data } = await $.http.get(path, {
params,
additionalProperties: {
setFirestoreBaseUrl: false,
},
});
if (!data) {
return;
}
$.pushTriggerItem({
raw: data,
meta: {
internalId: Crypto.randomUUID(),
},
});
},
});

View File

@@ -3,8 +3,12 @@ favicon: /favicons/firebase.svg
items:
- name: Create Cloud Firestore document
desc: Creates a new document within a Cloud Firestore collection.
- name: Create Firebase Realtime Database Record
desc: Creates a child object within your Firebase Realtime Database.
- name: Find Cloud Firestore document
desc: Finds a document within a collection.
- name: Find Firebase Realtime Database Record
desc: Finds a child object in Firebase Realtime Database.
---
<script setup>

View File

@@ -1,6 +1,8 @@
---
favicon: /favicons/firebase.svg
items:
- name: New child object in a firebase realtime database
desc: Triggers when a new child object is generated within a specific path.
- name: New documents within a firestore collection
desc: Triggers when a new document is added within a Cloud Firestore collection.
---