Merge branch 'dev'

This commit is contained in:
Atridad Lahiji 2023-08-24 17:49:00 -06:00
commit 15caaf9b1a
No known key found for this signature in database
6 changed files with 103 additions and 92 deletions

View file

@ -1,6 +1,6 @@
{
"name": "sprintpadawan",
"version": "2.0.4",
"version": "2.1.0",
"description": "Plan. Sprint. Repeat.",
"private": true,
"scripts": {
@ -16,21 +16,20 @@
"@ably-labs/react-hooks": "^2.1.1",
"@clerk/nextjs": "^4.23.2",
"@neondatabase/serverless": "^0.6.0",
"@opentelemetry/api": "^1.4.1",
"@paralleldrive/cuid2": "^2.2.2",
"@react-email/components": "^0.0.7",
"@tanstack/react-query": "^4.33.0",
"@trpc/client": "10.37.1",
"@trpc/next": "10.37.1",
"@trpc/react-query": "10.37.1",
"@trpc/server": "10.37.1",
"@trpc/client": "10.38.0",
"@trpc/next": "10.38.0",
"@trpc/react-query": "10.38.0",
"@trpc/server": "10.38.0",
"@unkey/api": "^0.6.16",
"@upstash/ratelimit": "^0.4.3",
"@upstash/redis": "^1.22.0",
"ably": "^1.2.43",
"autoprefixer": "^10.4.15",
"dotenv": "^16.3.1",
"drizzle-orm": "^0.28.4",
"drizzle-orm": "^0.28.5",
"json2csv": "6.0.0-alpha.2",
"next": "^13.4.19",
"nextjs-cors": "^2.1.2",

94
pnpm-lock.yaml generated
View file

@ -14,9 +14,6 @@ dependencies:
'@neondatabase/serverless':
specifier: ^0.6.0
version: 0.6.0
'@opentelemetry/api':
specifier: ^1.4.1
version: 1.4.1
'@paralleldrive/cuid2':
specifier: ^2.2.2
version: 2.2.2
@ -27,17 +24,17 @@ dependencies:
specifier: ^4.33.0
version: 4.33.0(react-dom@18.2.0)(react@18.2.0)
'@trpc/client':
specifier: 10.37.1
version: 10.37.1(@trpc/server@10.37.1)
specifier: 10.38.0
version: 10.38.0(@trpc/server@10.38.0)
'@trpc/next':
specifier: 10.37.1
version: 10.37.1(@tanstack/react-query@4.33.0)(@trpc/client@10.37.1)(@trpc/react-query@10.37.1)(@trpc/server@10.37.1)(next@13.4.19)(react-dom@18.2.0)(react@18.2.0)
specifier: 10.38.0
version: 10.38.0(@tanstack/react-query@4.33.0)(@trpc/client@10.38.0)(@trpc/react-query@10.38.0)(@trpc/server@10.38.0)(next@13.4.19)(react-dom@18.2.0)(react@18.2.0)
'@trpc/react-query':
specifier: 10.37.1
version: 10.37.1(@tanstack/react-query@4.33.0)(@trpc/client@10.37.1)(@trpc/server@10.37.1)(react-dom@18.2.0)(react@18.2.0)
specifier: 10.38.0
version: 10.38.0(@tanstack/react-query@4.33.0)(@trpc/client@10.38.0)(@trpc/server@10.38.0)(react-dom@18.2.0)(react@18.2.0)
'@trpc/server':
specifier: 10.37.1
version: 10.37.1
specifier: 10.38.0
version: 10.38.0
'@unkey/api':
specifier: ^0.6.16
version: 0.6.16
@ -57,14 +54,14 @@ dependencies:
specifier: ^16.3.1
version: 16.3.1
drizzle-orm:
specifier: ^0.28.4
version: 0.28.4(@neondatabase/serverless@0.6.0)(@opentelemetry/api@1.4.1)(pg@8.11.3)
specifier: ^0.28.5
version: 0.28.5(@neondatabase/serverless@0.6.0)(pg@8.11.3)
json2csv:
specifier: 6.0.0-alpha.2
version: 6.0.0-alpha.2
next:
specifier: ^13.4.19
version: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
version: 13.4.19(react-dom@18.2.0)(react@18.2.0)
nextjs-cors:
specifier: ^2.1.2
version: 2.1.2(next@13.4.19)
@ -191,8 +188,8 @@ packages:
js-tokens: 4.0.0
dev: false
/@babel/runtime@7.22.10:
resolution: {integrity: sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==}
/@babel/runtime@7.22.11:
resolution: {integrity: sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==}
engines: {node: '>=6.9.0'}
dependencies:
regenerator-runtime: 0.14.0
@ -249,7 +246,7 @@ packages:
'@clerk/clerk-react': 4.23.2(react@18.2.0)
'@clerk/clerk-sdk-node': 4.12.2
'@clerk/types': 3.49.0
next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
next: 13.4.19(react-dom@18.2.0)(react@18.2.0)
path-to-regexp: 6.2.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@ -1249,11 +1246,6 @@ packages:
resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
dev: false
/@opentelemetry/api@1.4.1:
resolution: {integrity: sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==}
engines: {node: '>=8.0.0'}
dev: false
/@paralleldrive/cuid2@2.2.2:
resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==}
dependencies:
@ -1291,7 +1283,7 @@ packages:
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
dependencies:
'@babel/runtime': 7.22.10
'@babel/runtime': 7.22.11
react: 18.2.0
dev: false
@ -1300,7 +1292,7 @@ packages:
peerDependencies:
react: ^16.8 || ^17.0 || ^18.0
dependencies:
'@babel/runtime': 7.22.10
'@babel/runtime': 7.22.11
'@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
react: 18.2.0
dev: false
@ -1518,53 +1510,53 @@ packages:
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
/@trpc/client@10.37.1(@trpc/server@10.37.1):
resolution: {integrity: sha512-OSblNfeI0Z9ERn3usgLV2x63CwwPoNOHf1FQK85cOT7F8MNaWyEHoEv7tHUwNGJwyzKXmpU+ockZ0movzX3D0g==}
/@trpc/client@10.38.0(@trpc/server@10.38.0):
resolution: {integrity: sha512-+uFQeyzVBoWDYt0Oyj+hLUJeBJjMyj/yxfm9s23EU+Y50YZVRSnB9dmAfI6jAAcehJubNLu2NH+jyEJrOen+aA==}
peerDependencies:
'@trpc/server': 10.37.1
'@trpc/server': 10.38.0
dependencies:
'@trpc/server': 10.37.1
'@trpc/server': 10.38.0
dev: false
/@trpc/next@10.37.1(@tanstack/react-query@4.33.0)(@trpc/client@10.37.1)(@trpc/react-query@10.37.1)(@trpc/server@10.37.1)(next@13.4.19)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-0KEgr09mBfao56lkj7ZBfVOY86d3+bDH1o0zJkDHSH60Dp/hIJ7wLCnZJIhePlZxEwknCQjVeLsTy4Pqlu8NyQ==}
/@trpc/next@10.38.0(@tanstack/react-query@4.33.0)(@trpc/client@10.38.0)(@trpc/react-query@10.38.0)(@trpc/server@10.38.0)(next@13.4.19)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-cCoYMAOj6qY0jUwc5W/+IvgpMhLKBhyG7lx85ohvRyETdqZvwRQHjH/DWaOn1+WEFKT1c/gsIzHsD0lBQhyFow==}
peerDependencies:
'@tanstack/react-query': ^4.18.0
'@trpc/client': 10.37.1
'@trpc/react-query': 10.37.1
'@trpc/server': 10.37.1
'@trpc/client': 10.38.0
'@trpc/react-query': 10.38.0
'@trpc/server': 10.38.0
next: '*'
react: '>=16.8.0'
react-dom: '>=16.8.0'
dependencies:
'@tanstack/react-query': 4.33.0(react-dom@18.2.0)(react@18.2.0)
'@trpc/client': 10.37.1(@trpc/server@10.37.1)
'@trpc/react-query': 10.37.1(@tanstack/react-query@4.33.0)(@trpc/client@10.37.1)(@trpc/server@10.37.1)(react-dom@18.2.0)(react@18.2.0)
'@trpc/server': 10.37.1
next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
'@trpc/client': 10.38.0(@trpc/server@10.38.0)
'@trpc/react-query': 10.38.0(@tanstack/react-query@4.33.0)(@trpc/client@10.38.0)(@trpc/server@10.38.0)(react-dom@18.2.0)(react@18.2.0)
'@trpc/server': 10.38.0
next: 13.4.19(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-ssr-prepass: 1.5.0(react@18.2.0)
dev: false
/@trpc/react-query@10.37.1(@tanstack/react-query@4.33.0)(@trpc/client@10.37.1)(@trpc/server@10.37.1)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-TbOOPp0fZVaKfaeEyDoV8QeTHW1vgPTbfOs0uSQ4AzBXqXPu+9v1B44z8GGRJSdUxuOX9pG/6Ap5Kx8PQ3eF+Q==}
/@trpc/react-query@10.38.0(@tanstack/react-query@4.33.0)(@trpc/client@10.38.0)(@trpc/server@10.38.0)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-2YRfsDlXQvuhGOoZDz6iZ+vo6mWOBdkRPMA177WVII1Hds9r29zJMJ+14U9reOMGC0Sfec9QSPh9nUHE7Hvkzw==}
peerDependencies:
'@tanstack/react-query': ^4.18.0
'@trpc/client': 10.37.1
'@trpc/server': 10.37.1
'@trpc/client': 10.38.0
'@trpc/server': 10.38.0
react: '>=16.8.0'
react-dom: '>=16.8.0'
dependencies:
'@tanstack/react-query': 4.33.0(react-dom@18.2.0)(react@18.2.0)
'@trpc/client': 10.37.1(@trpc/server@10.37.1)
'@trpc/server': 10.37.1
'@trpc/client': 10.38.0(@trpc/server@10.38.0)
'@trpc/server': 10.38.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
/@trpc/server@10.37.1:
resolution: {integrity: sha512-r3VeA319/braYMBIzj+XLgLKQ9lJSVglvPvP9HUv4kr5w6Y5grQMxMcExhTiZWltE9bnSJHKtBBzHafOo7KC8A==}
/@trpc/server@10.38.0:
resolution: {integrity: sha512-uMjWTMhqOPVmdiqPFOYwsdQ6Vzy8FtRcgM+ld3OrHsD88NiwZ1BWNIC6KwffjgrgLG/uKBFzNNKntLryv0NamQ==}
dev: false
/@types/body-parser@1.19.2:
@ -2776,8 +2768,8 @@ packages:
- supports-color
dev: true
/drizzle-orm@0.28.4(@neondatabase/serverless@0.6.0)(@opentelemetry/api@1.4.1)(pg@8.11.3):
resolution: {integrity: sha512-BEATAB0g0Y8PKbJHkHLLENlX2DXktO5XyeNyrXB6ktcNkg3dlMfePwB3LodBJkPY6d7GixFF+jvtdZsWjakJBQ==}
/drizzle-orm@0.28.5(@neondatabase/serverless@0.6.0)(pg@8.11.3):
resolution: {integrity: sha512-6r6Iw4c38NAmW6TiKH3TUpGUQ1YdlEoLJOQptn8XPx3Z63+vFNKfAiANqrIiYZiMjKR9+NYAL219nFrmo1duXA==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
'@cloudflare/workers-types': '>=3'
@ -2839,7 +2831,6 @@ packages:
optional: true
dependencies:
'@neondatabase/serverless': 0.6.0
'@opentelemetry/api': 1.4.1
pg: 8.11.3
dev: false
@ -3260,7 +3251,7 @@ packages:
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
dependencies:
'@babel/runtime': 7.22.10
'@babel/runtime': 7.22.11
aria-query: 5.3.0
array-includes: 3.1.6
array.prototype.flatmap: 1.3.1
@ -4541,7 +4532,7 @@ packages:
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
dev: true
/next@13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0):
/next@13.4.19(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==}
engines: {node: '>=16.8.0'}
hasBin: true
@ -4557,7 +4548,6 @@ packages:
optional: true
dependencies:
'@next/env': 13.4.19
'@opentelemetry/api': 1.4.1
'@swc/helpers': 0.5.1
busboy: 1.6.0
caniuse-lite: 1.0.30001522
@ -4588,7 +4578,7 @@ packages:
next: ^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0 || ^13.0.0
dependencies:
cors: 2.8.5
next: 13.4.19(@opentelemetry/api@1.4.1)(react-dom@18.2.0)(react@18.2.0)
next: 13.4.19(react-dom@18.2.0)(react@18.2.0)
dev: false
/no-case@3.0.4:

View file

@ -1,8 +1,19 @@
import { appRouter } from "~/server/api/root";
import { createTRPCContext } from "~/server/api/trpc";
import { createNextApiHandler } from "@trpc/server/adapters/next";
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
import type { NextRequest } from "next/server";
export default createNextApiHandler({
router: appRouter,
createContext: createTRPCContext,
});
export const config = {
runtime: "edge",
regions: ["pdx1"],
unstable_allowDynamic: ["/node_modules/ably/**"],
};
export default async function handler(req: NextRequest) {
return fetchRequestHandler({
endpoint: "/api/trpc",
router: appRouter,
req,
createContext: createTRPCContext,
});
}

View file

@ -1,18 +1,19 @@
import { createNextApiHandler } from "@trpc/server/adapters/next";
import { env } from "~/env.mjs";
import { appRouter } from "~/server/api/root";
import { createTRPCContext } from "~/server/api/trpc";
import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
import type { NextRequest } from "next/server";
// export API handler
export default createNextApiHandler({
router: appRouter,
createContext: createTRPCContext,
onError:
env.NODE_ENV === "development"
? ({ path, error }) => {
console.error(
`❌ tRPC failed on ${path ?? "<no-path>"}: ${error.message}`
);
}
: undefined,
});
export const config = {
runtime: "edge",
regions: ["pdx1"],
unstable_allowDynamic: ["/node_modules/ably/**"],
};
export default async function handler(req: NextRequest) {
return fetchRequestHandler({
endpoint: "/api/trpc",
router: appRouter,
req,
createContext: createTRPCContext,
});
}

View file

@ -1,4 +1,4 @@
import Ably from "ably";
// import Ably from "ably";
import { env } from "~/env.mjs";
import type { EventType } from "../utils/types";
@ -7,7 +7,18 @@ export const publishToChannel = async (
event: EventType,
message: string
) => {
const ably = new Ably.Rest.Promise(env.ABLY_PRIVATE_KEY);
const ablyChannel = ably.channels.get(`${env.APP_ENV}-${channel}`);
await ablyChannel.publish(event, message, { quickAck: true });
await fetch(
`https://rest.ably.io/channels/${env.APP_ENV}-${channel}/messages`,
{
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Basic ${btoa(env.ABLY_PRIVATE_KEY)}`,
},
body: JSON.stringify({
name: event,
data: message,
}),
}
);
};

View file

@ -16,7 +16,7 @@
* processing a request
*
*/
import { type CreateNextContextOptions } from "@trpc/server/adapters/next";
import { type FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch";
import { getAuth } from "@clerk/nextjs/server";
import type {
SignedInAuthObject,
@ -37,6 +37,7 @@ interface AuthContext {
* - trpc's `createSSGHelpers` where we don't have req/res
* @see https://create.t3.gg/en/usage/trpc#-servertrpccontextts
*/
const createInnerTRPCContext = ({ auth }: AuthContext) => {
return {
auth,
@ -44,23 +45,21 @@ const createInnerTRPCContext = ({ auth }: AuthContext) => {
};
};
/**
* This is the actual context you'll use in your router. It will be used to
* process every request that goes through your tRPC endpoint
* @link https://trpc.io/docs/context
*/
export const createTRPCContext = (opts: CreateNextContextOptions) => {
return createInnerTRPCContext({ auth: getAuth(opts.req) });
export const createTRPCContext = ({ req }: FetchCreateContextFnOptions) => {
return createInnerTRPCContext({ auth: getAuth(req as NextRequest) });
};
export type Context = inferAsyncReturnType<typeof createTRPCContext>;
/**
* 2. INITIALIZATION
*
* This is where the trpc api is initialized, connecting the context and
* transformer
*/
import { initTRPC, TRPCError } from "@trpc/server";
import { type inferAsyncReturnType, initTRPC, TRPCError } from "@trpc/server";
import superjson from "superjson";
import type { NextRequest } from "next/server";
const t = initTRPC.context<typeof createTRPCContext>().create({
transformer: superjson,