Skip to content

Commit

Permalink
try hono deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
adueck committed Nov 26, 2024
1 parent 720868e commit e5bbcdf
Show file tree
Hide file tree
Showing 14 changed files with 3,179 additions and 2,280 deletions.
34 changes: 0 additions & 34 deletions .github/workflows/deploy-functions.yml

This file was deleted.

18 changes: 18 additions & 0 deletions .github/workflows/deploy-hono.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Deploy Hono Worker
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 60
needs: test
steps:
- uses: actions/checkout@v4
- name: Build & Deploy Worker
uses: cloudflare/wrangler-action@v3
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
workingDirectory: "new-functions"
3,757 changes: 1,604 additions & 2,153 deletions functions/package-lock.json

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions functions/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
"@types/google-spreadsheet": "^3.0.2",
"@types/react": "^18.0.21",
"cors": "^2.8.5",
"firebase-admin": "^9.2.0",
"firebase-functions": "^3.24.1",
"firebase-admin": "^13.0.1",
"firebase-functions": "^6.1.1",
"googleapis": "^144.0.0",
"nano": "^9.0.3",
"node-fetch": "^2.6.1",
Expand All @@ -38,4 +38,4 @@
"ts-node": "^10.9.1",
"typescript": "^4.6.3"
}
}
}
105 changes: 53 additions & 52 deletions functions/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,62 +1,63 @@
import * as functions from "firebase-functions";
import * as functions from "firebase-functions/v2";
import * as FT from "../../website/src/types/functions-types";
import { receiveSubmissions } from "./submissions";
import lingdocsAuth from "./middleware/lingdocs-auth";
import publish from "./publish";

export const publishDictionary = functions
.runWith({
const couchdbUrl = functions.params.defineString("ABC");
console.log({ couchdb: couchdbUrl.value() });

export const publishDictionary = functions.https.onRequest(
{
timeoutSeconds: 525,
memory: "2GB",
})
.https.onRequest(
lingdocsAuth(
async (
req,
res: functions.Response<FT.PublishDictionaryResponse | FT.FunctionError>
) => {
if (req.user.level !== "editor") {
res.status(403).send({ ok: false, error: "403 forbidden" });
return;
}
try {
const response = await publish();
res.send(response);
} catch (e) {
// @ts-ignore
res.status(500).send({ ok: false, error: e.message });
}
memory: "2GiB",
},
lingdocsAuth(
async (
req,
res // : functions.Response<FT.PublishDictionaryResponse | FT.FunctionError>
) => {
if (req.user.level !== "editor") {
res.status(403).send({ ok: false, error: "403 forbidden" });
return;
}
try {
const response = await publish();
res.send(response);
} catch (e) {
// @ts-ignore
res.status(500).send({ ok: false, error: e.message });
}
)
);
}
)
);

export const submissions = functions
.runWith({
export const submissions = functions.https.onRequest(
{
timeoutSeconds: 60,
memory: "1GB",
})
.https.onRequest(
lingdocsAuth(
async (
req,
res: functions.Response<FT.SubmissionsResponse | FT.FunctionError>
) => {
if (!Array.isArray(req.body)) {
res.status(400).send({
ok: false,
error: "invalid submission",
});
return;
}
const suggestions = req.body as FT.SubmissionsRequest;
try {
const response = await receiveSubmissions(suggestions, true); // req.user.level === "editor");
// TODO: WARN IF ANY OF THE EDITS DIDN'T HAPPEN
res.send(response);
} catch (e) {
// @ts-ignore
res.status(500).send({ ok: false, error: e.message });
}
memory: "1GiB",
},
lingdocsAuth(
async (
req,
res // : functions.Response<FT.SubmissionsResponse | FT.FunctionError>
) => {
if (!Array.isArray(req.body)) {
res.status(400).send({
ok: false,
error: "invalid submission",
});
return;
}
const suggestions = req.body as FT.SubmissionsRequest;
try {
const response = await receiveSubmissions(suggestions, true); // req.user.level === "editor");
// TODO: WARN IF ANY OF THE EDITS DIDN'T HAPPEN
res.send(response);
} catch (e) {
// @ts-ignore
res.status(500).send({ ok: false, error: e.message });
}
)
);
}
)
);
82 changes: 51 additions & 31 deletions functions/src/middleware/lingdocs-auth.ts
Original file line number Diff line number Diff line change
@@ -1,43 +1,63 @@
import cors from "cors";
import fetch from "node-fetch";
import type { https, Response } from "firebase-functions";
import * as FT from "../../../website/src/types/functions-types";
import type { LingdocsUser } from "../../../website/src/types/account-types";
// unfortunately have to comment out all this typing because the new version
// of firebase-functions doesn't include it?
// import type { https, Response } from "firebase-functions";
// import * as FT from "../../../website/src/types/functions-types";
// import type { LingdocsUser } from "../../../website/src/types/account-types";

const useCors = cors({ credentials: true, origin: /\.lingdocs\.com$/ });

interface ReqWUser extends https.Request {
user: LingdocsUser;
}
// interface ReqWUser extends https.Request {
// user: LingdocsUser;
// }

/**
* creates a handler to pass to a firebase https.onRequest function
* creates a handler to pass to a firebase https.onRequest function
*
*/
export default function makeHandler(toRun: (req: ReqWUser, res: Response<FT.FunctionResponse>) => any | Promise<any>) {
return function(reqPlain: https.Request, resPlain: Response<any>) {
useCors(reqPlain, resPlain, async () => {
const { req, res } = await authorize(reqPlain, resPlain);
if (!req) {
res.status(401).send({ ok: false, error: "unauthorized" });
return;
};
toRun(req, res);
return;
});
}
export default function makeHandler(
toRun: (
req: any, //ReqWUser,
res: any /*Response<FT.FunctionResponse> */
) => any | Promise<any>
) {
return function (
reqPlain: any /* https.Request */,
resPlain: any /* Response<any> */
) {
useCors(reqPlain, resPlain, async () => {
const { req, res } = await authorize(reqPlain, resPlain);
if (!req) {
res.status(401).send({ ok: false, error: "unauthorized" });
return;
}
toRun(req, res);
return;
});
};
}

async function authorize(req: https.Request, res: Response<any>): Promise<{ req: ReqWUser | null, res: Response<FT.FunctionResponse> }> {
const { headers: { cookie }} = req;
if (!cookie) {
return { req: null, res };
}
const r = await fetch("https://account.lingdocs.com/api/user", { headers: { cookie }});
const { ok, user } = await r.json();
if (ok === true && user) {
req.user = user;
return { req: req as ReqWUser, res };
}
async function authorize(
req: any /* https.Request*/,
res: any /*Response<any>*/
): Promise<{
req: any; // ReqWUser | null;
res: any /*Response<FT.FunctionResponse>*/;
}> {
const {
headers: { cookie },
} = req;
if (!cookie) {
return { req: null, res };
}
}
const r = await fetch("https://account.lingdocs.com/api/user", {
headers: { cookie },
});
const { ok, user } = await r.json();
if (ok === true && user) {
req.user = user;
return { req: req /* as ReqWUser*/, res };
}
return { req: null, res };
}
21 changes: 14 additions & 7 deletions functions/src/submissions.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,20 @@
import Nano from "nano";
import * as FT from "../../website/src/types/functions-types";
import * as functions from "firebase-functions";
// import {
// addDictionaryEntries,
// deleteEntry,
// updateDictionaryEntries,
// } from "./tools/spreadsheet-tools";
// import * as functions from "firebase-functions/v2";
// @ts-ignore
import { defineString } from "firebase-functions/params";

const nano = Nano(functions.config().couchdb.couchdb_url);
// Define some parameters
// // import {
// // addDictionaryEntries,
// // deleteEntry,
// // updateDictionaryEntries,
// // } from "./tools/spreadsheet-tools";

const couchdbUrl = defineString("ABC");
console.log({ couchdb: couchdbUrl });

const nano = Nano("");
const reviewTasksDb = nano.db.use("review-tasks");

export async function receiveSubmissions(
Expand Down
33 changes: 33 additions & 0 deletions new-functions/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# prod
dist/

# dev
.yarn/
!.yarn/releases
.vscode/*
!.vscode/launch.json
!.vscode/*.code-snippets
.idea/workspace.xml
.idea/usage.statistics.xml
.idea/shelf

# deps
node_modules/
.wrangler

# env
.env
.env.production
.dev.vars

# logs
logs/
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

# misc
.DS_Store
8 changes: 8 additions & 0 deletions new-functions/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
```
npm install
npm run dev
```

```
npm run deploy
```
Loading

0 comments on commit e5bbcdf

Please sign in to comment.