mirror of
https://github.com/stonith404/pingvin-share.git
synced 2024-11-18 21:30:12 +01:00
138 lines
3.1 KiB
TypeScript
138 lines
3.1 KiB
TypeScript
|
import api from "./api.service";
|
||
|
import aw from "./aw.service";
|
||
|
import collections from "../data/collections";
|
||
|
import functions from "../data/functions";
|
||
|
import zipDirectory from "../utils/compress.util";
|
||
|
import fs from "fs";
|
||
|
|
||
|
const createProject = async () => {
|
||
|
const teamId = (
|
||
|
await api().post("/teams", {
|
||
|
teamId: "unique()",
|
||
|
name: "Pingvin Share",
|
||
|
})
|
||
|
).data.$id;
|
||
|
return await api().post("/projects", {
|
||
|
projectId: "pingvin-share",
|
||
|
name: "Pingvin Share",
|
||
|
teamId,
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const addPlatform = async (hostname : string) => {
|
||
|
await api().post("/projects/pingvin-share/platforms", {
|
||
|
type: "web",
|
||
|
name: "Pingvin Share Web Frontend",
|
||
|
hostname: hostname,
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const createCollections = async () => {
|
||
|
for (const collection of collections) {
|
||
|
const { attributes } = collection;
|
||
|
const { indexes } = collection;
|
||
|
|
||
|
await aw().database.createCollection(
|
||
|
collection.$id,
|
||
|
collection.name,
|
||
|
collection.permission,
|
||
|
collection.$read,
|
||
|
collection.$write
|
||
|
);
|
||
|
for (const attribute of attributes) {
|
||
|
if (attribute.type == "string") {
|
||
|
await aw().database.createStringAttribute(
|
||
|
collection.$id,
|
||
|
attribute.key,
|
||
|
attribute.size,
|
||
|
attribute.required,
|
||
|
attribute.default,
|
||
|
attribute.array
|
||
|
);
|
||
|
} else if (attribute.type == "integer") {
|
||
|
await aw().database.createIntegerAttribute(
|
||
|
collection.$id,
|
||
|
attribute.key,
|
||
|
attribute.required,
|
||
|
attribute.min,
|
||
|
attribute.max,
|
||
|
attribute.default,
|
||
|
attribute.array
|
||
|
);
|
||
|
} else if (attribute.type == "boolean") {
|
||
|
await aw().database.createBooleanAttribute(
|
||
|
collection.$id,
|
||
|
attribute.key,
|
||
|
attribute.required,
|
||
|
attribute.default,
|
||
|
attribute.array
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
for (const index of indexes) {
|
||
|
aw().database.createIndex(
|
||
|
collection.$id,
|
||
|
index.key,
|
||
|
index.type,
|
||
|
index.attributes
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const generateFunctionsApiKey = async () => {
|
||
|
const res = await api().post("/projects/pingvin-share/keys", {
|
||
|
name: "Functions API Key",
|
||
|
scopes: [
|
||
|
"documents.read",
|
||
|
"documents.write",
|
||
|
"buckets.read",
|
||
|
"buckets.write",
|
||
|
"files.read",
|
||
|
],
|
||
|
});
|
||
|
return res.data.secret;
|
||
|
};
|
||
|
|
||
|
const createFunctions = async () => {
|
||
|
for (const fcn of functions()) {
|
||
|
await aw().functions.create(
|
||
|
fcn.$id,
|
||
|
fcn.name,
|
||
|
fcn.execute,
|
||
|
fcn.runtime,
|
||
|
fcn.vars,
|
||
|
fcn.events,
|
||
|
fcn.schedule,
|
||
|
fcn.timeout
|
||
|
);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
const createFunctionDeployments = async () => {
|
||
|
let path: string;
|
||
|
for (const fcn of functions()) {
|
||
|
(path = (await zipDirectory(fcn.$id)) as string),
|
||
|
await aw().functions.createDeployment(
|
||
|
fcn.$id,
|
||
|
"src/index.js",
|
||
|
path,
|
||
|
true
|
||
|
);
|
||
|
}
|
||
|
// Delete zip
|
||
|
fs.unlinkSync(path);
|
||
|
};
|
||
|
|
||
|
export default {
|
||
|
createProject,
|
||
|
createCollections,
|
||
|
createFunctions,
|
||
|
createFunctionDeployments,
|
||
|
generateFunctionsApiKey,
|
||
|
addPlatform,
|
||
|
};
|
||
|
function token(token: any) {
|
||
|
throw new Error("Function not implemented.");
|
||
|
}
|