Move to infisical. Create local dev environment. Add ci gates. Modernize repo
Build and Push Next App / quality (push) Successful in 1m8s
Build and Push Next App / build-next (push) Successful in 2m59s

This commit is contained in:
Gabriel Brown committed 2026-06-21 14:04:02 -05:00
1 parent 86e2fdc82e
commit a12bf6071b
79 files changed
+1612 -42168

No files matched your search

-1
View File
@@ -1 +0,0 @@
[{"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/auth.ts":"1","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/crons.ts":"2","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/index.ts":"3","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/providers/password.ts":"4","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/providers/usesend.ts":"5","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/files.ts":"6","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/http.ts":"7","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/schema.ts":"8","/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/utils.ts":"9"},{"size":3664,"mtime":1774717261375,"results":"10","hashOfConfig":"11"},{"size":528,"mtime":1774717276314,"results":"12","hashOfConfig":"11"},{"size":142,"mtime":1768157708000,"results":"13","hashOfConfig":"11"},{"size":966,"mtime":1774546669452,"results":"14","hashOfConfig":"11"},{"size":3419,"mtime":1774717294835,"results":"15","hashOfConfig":"11"},{"size":582,"mtime":1768239263763,"results":"16","hashOfConfig":"11"},{"size":153,"mtime":1768157491000,"results":"17","hashOfConfig":"11"},{"size":1199,"mtime":1774583096378,"results":"18","hashOfConfig":"11"},{"size":635,"mtime":1768155639000,"results":"19","hashOfConfig":"11"},{"filePath":"20","messages":"21","suppressedMessages":"22","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"pdxq0k",{"filePath":"23","messages":"24","suppressedMessages":"25","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"26","messages":"27","suppressedMessages":"28","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"29","messages":"30","suppressedMessages":"31","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":1,"source":null},{"filePath":"32","messages":"33","suppressedMessages":"34","errorCount":20,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":3,"source":null},{"filePath":"35","messages":"36","suppressedMessages":"37","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"38","messages":"39","suppressedMessages":"40","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"41","messages":"42","suppressedMessages":"43","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"44","messages":"45","suppressedMessages":"46","errorCount":3,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":null},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/auth.ts",[],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/crons.ts",["47"],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/index.ts",[],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/providers/password.ts",["48","49"],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/providers/usesend.ts",["50","51","52","53","54","55","56","57","58","59","60","61","62","63","64","65","66","67","68","69","70","71","72"],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/files.ts",[],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/http.ts",[],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/schema.ts",[],[],"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/utils.ts",["73","74","75","76","77"],[],{"ruleId":"78","severity":1,"message":"79","line":3,"column":10,"messageId":"80","endLine":3,"endColumn":13,"suggestions":"81"},{"ruleId":"82","severity":1,"message":"83","line":8,"column":10,"messageId":"84","endLine":13,"endColumn":4,"fix":"85"},{"ruleId":"78","severity":1,"message":"86","line":8,"column":19,"messageId":"80","endLine":8,"endColumn":22},{"ruleId":"87","severity":2,"message":"88","line":11,"column":5,"messageId":"89","endLine":11,"endColumn":66},{"ruleId":"90","severity":2,"message":"91","line":11,"column":19,"messageId":"92","endLine":11,"endColumn":22},{"ruleId":"82","severity":1,"message":"83","line":14,"column":30,"messageId":"84","endLine":21,"endColumn":6,"fix":"93"},{"ruleId":"82","severity":1,"message":"83","line":16,"column":13,"messageId":"84","endLine":18,"endColumn":10,"fix":"94"},{"ruleId":"82","severity":1,"message":"83","line":23,"column":34,"messageId":"84","endLine":77,"endColumn":6,"fix":"95"},{"ruleId":"87","severity":2,"message":"88","line":26,"column":13,"messageId":"89","endLine":26,"endColumn":59},{"ruleId":"90","severity":2,"message":"91","line":26,"column":31,"messageId":"92","endLine":2Line truncated
-1
View File
@@ -1 +0,0 @@
[["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25"],{"key":"26","value":"27"},{"key":"28","value":"29"},{"key":"30","value":"31"},{"key":"32","value":"33"},{"key":"34","value":"35"},{"key":"36","value":"37"},{"key":"38","value":"39"},{"key":"40","value":"41"},{"key":"42","value":"43"},{"key":"44","value":"45"},{"key":"46","value":"47"},{"key":"48","value":"49"},{"key":"50","value":"51"},{"key":"52","value":"53"},{"key":"54","value":"55"},{"key":"56","value":"57"},{"key":"58","value":"59"},{"key":"60","value":"61"},{"key":"62","value":"63"},{"key":"64","value":"65"},{"key":"66","value":"67"},{"key":"68","value":"69"},{"key":"70","value":"71"},{"key":"72","value":"73"},{"key":"74","value":"75"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/.gitignore",{"size":16,"mtime":1766222924000,"hash":"76"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/providers/usesend.ts",{"size":3419,"mtime":1774717294835,"hash":"77","data":"78"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/scripts/generateKeys.mjs",{"size":520,"mtime":1768368324432,"hash":"79","data":"80"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/tsconfig.json",{"size":732,"mtime":1766222924000,"hash":"81","data":"82"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/http.ts",{"size":153,"mtime":1768157491000,"hash":"83","data":"84"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/schema.ts",{"size":1199,"mtime":1774583096378,"hash":"85","data":"86"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/eslint.config.ts",{"size":233,"mtime":1774717251737,"data":"87"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/auth.ts",{"size":3664,"mtime":1774717261375,"hash":"88","data":"89"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/files.ts",{"size":582,"mtime":1768239263763,"hash":"90","data":"91"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/index.ts",{"size":142,"mtime":1768157708000,"hash":"92","data":"93"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/types/auth.ts",{"size":174,"mtime":1768188156942,"hash":"94","data":"95"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/crons.ts",{"size":528,"mtime":1774717276314,"hash":"96","data":"97"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/auth.config.ts",{"size":127,"mtime":1768156477000,"hash":"98","data":"99"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/server.d.ts",{"size":5600,"mtime":1774031968455,"hash":"100","data":"101"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/globals.d.ts",{"size":358,"mtime":1774718189069,"data":"102"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/README.md",{"size":2525,"mtime":1768155639000,"hash":"103","data":"104"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/api.d.ts",{"size":1566,"mtime":1774718095030,"hash":"105","data":"106"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/dataModel.d.ts",{"size":1737,"mtime":1774718420526,"hash":"107","data":"108"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/server.js",{"size":3696,"mtime":1774031968444,"hash":"109","data":"110"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/types/index.ts",{"size":69,"mtime":1768239263861,"hash":"111","data":"112"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/custom/auth/providers/password.ts",{"size":966,"mtime":1774546669452,"hash":"113","data":"114"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/.cache/.prettiercache",{"size":5782,"mtime":1774718094147},"/home/gib/Documents/Code/convex-monorepo/packages/backend/.cache/.eslintcache",{"size":12307,"mtime":1774717492533},"/home/gib/Documents/Code/convex-monorepo/packages/backend/package.json",{"size":1374,"mtime":1774717505903,"hash":"115","data":"116"},"/home/gib/Documents/Code/convex-monorepo/packages/backend/convex/_generated/api.js",{"size":480,"mtime":1768372369903,"hash":"117","data":"118"},"175b1a771387d8b7e26145c3d04e0475","14f5e2d18e21f65282ac744b382f2d5f",{"hashOfOptions":"119"},"ccf5b9105ad4ff66fce0a7133fa3db4b",{"hashOfOptions":"120"},"cfa98923457caed911ec68b626ef4234",{"hashOfOptions":"121"},"4bbb95a66a1e615c30ea7c5098a4a609",{"hashOfOptions":"122"},"7e6dcc47831030bfaa3e235d2226cec6",{"hashOfOptions":"123"},{"hashOfOptions":"124"},"3d304208139ef0b2775272a5a4a2a970",{"hashOfOptions":"125"},"5ff3856f1a61b946df899f7c9880b72a",{"hashOfOptions":"126"},"8776a23ed6f2ab3681e4ba5b4bcf3d74",{"hashOfOptions":"127"},"f0f9ef72dc6fef350f3521d3fd8adfc7",{"hashOfOptions":"128"},"0d76c3867783aec5435b0c716f1bfc65",{"hashOfOptions":"129"},"2d4f4ccfc784af9d668d8c64726c2f6b",{"hashOfOptions":"130"},"6719b019702fc173de16b1bdc8e8ed47",{"hashOfOptions":"1Line truncated
+4 -5
View File
@@ -11,12 +11,11 @@
import type {
DataModelFromSchemaDefinition,
DocumentByName,
SystemTableNames,
TableNamesInDataModel,
} from 'convex/server';
import type { GenericId } from 'convex/values';
import schema from '../schema.js';
SystemTableNames,
} from "convex/server";
import type { GenericId } from "convex/values";
import schema from "../schema.js";
/**
* The names of all of your Convex tables.
@@ -11,16 +11,16 @@ export default function UseSendProvider(config: EmailUserConfig): EmailConfig {
from: process.env.USESEND_FROM_EMAIL ?? '[email protected]',
maxAge: 24 * 60 * 60, // 24 hours
generateVerificationToken() {
generateVerificationToken: () => {
const random: RandomReader = {
read(bytes) {
crypto.getRandomValues(bytes);
read: (bytes) => {
crypto.getRandomValues(bytes as Uint8Array<ArrayBuffer>);
},
};
return generateRandomString(random, alphabet('0-9'), 6);
},
async sendVerificationRequest(params) {
sendVerificationRequest: async (params) => {
const { identifier: to, provider, url, token } = params;
// Derive a display name from the site URL, fallback to 'App'
const siteUrl = process.env.USESEND_FROM_EMAIL ?? '';
+9 -2
View File
@@ -20,7 +20,10 @@
"format": "prettier --check . --ignore-path ../../.gitignore",
"lint": "eslint --flag unstable_native_nodejs_ts_config",
"typecheck": "tsc --noEmit",
"with-env": "dotenv -e ../../.env --"
"test:unit": "vitest run --project unit",
"test:integration": "vitest run --project integration --passWithNoTests",
"test:component": "vitest run --project component --passWithNoTests",
"with-env": "sh ../../scripts/with-env ${INFISICAL_ENV:-dev} --"
},
"dependencies": {
"@oslojs/crypto": "^1.0.1",
@@ -33,14 +36,18 @@
"zod": "catalog:"
},
"devDependencies": {
"@edge-runtime/vm": "catalog:test",
"@gib/eslint-config": "workspace:*",
"@gib/prettier-config": "workspace:*",
"@gib/tsconfig": "workspace:*",
"@gib/vitest-config": "workspace:*",
"@types/node": "catalog:",
"convex-test": "catalog:test",
"eslint": "catalog:",
"prettier": "catalog:",
"react-email": "5.2.10",
"typescript": "catalog:"
"typescript": "catalog:",
"vitest": "catalog:test"
},
"prettier": "@gib/prettier-config"
}
@@ -0,0 +1,13 @@
import { convexTest } from 'convex-test';
import { describe, expect, test } from 'vitest';
import schema from '../../convex/schema';
const modules = import.meta.glob('../../convex/**/*.*s');
describe('convex-test harness', () => {
test('boots and executes against the project schema', async () => {
const t = convexTest(schema, modules);
expect(await t.run(() => Promise.resolve(42))).toBe(42);
});
});
+1
View File
@@ -0,0 +1 @@
/// <reference types="vite/client" />
+6
View File
@@ -0,0 +1,6 @@
{
"extends": "@gib/tsconfig/base.json",
"compilerOptions": { "lib": ["ES2022", "DOM"], "types": ["node"] },
"include": ["tests", "vitest.config.ts"],
"exclude": ["node_modules", "convex/_generated"]
}
+13
View File
@@ -0,0 +1,13 @@
import { defineConfig } from 'vitest/config';
import { convexProject, nodeProject } from '@gib/vitest-config';
export default defineConfig({
test: {
projects: [
convexProject('unit', ['tests/unit/**/*.test.ts']),
convexProject('integration', ['tests/integration/**/*.test.ts']),
nodeProject('component', ['tests/component/**/*.test.{ts,tsx}']),
],
},
});