Skip to content

Commit

Permalink
Merge pull request #145 from cupcakearmy/better-programmatic-access
Browse files Browse the repository at this point in the history
better programmatic access
  • Loading branch information
cupcakearmy authored Aug 23, 2024
2 parents 5648c76 + ca72e94 commit 2006be0
Show file tree
Hide file tree
Showing 15 changed files with 2,883 additions and 1,827 deletions.
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v20.11.1
v22.7.0
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# FRONTEND
FROM node:20-alpine as client
FROM node:22-alpine as client
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<a href=""><img src="./.github/lokalise.png" height="50">
<br/><br/>

EN | [简体中文](README_zh-CN.md) | [ES](README_ES.md)
EN | [简体中文](README_zh-CN.md) | [ES](README_ES.md)

## About?

Expand Down Expand Up @@ -149,8 +149,8 @@ There is a [guide](https://mariushosting.com/how-to-install-cryptgeon-on-your-sy

**Requirements**

- `pnpm`: `>=6`
- `node`: `>=18`
- `pnpm`: `>=9`
- `node`: `>=22`
- `rust`: edition `2021`

**Install**
Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"scripts": {
"dev:docker": "docker-compose -f docker-compose.dev.yaml up redis",
"dev:docker": "docker compose -f docker-compose.dev.yaml up redis",
"dev:packages": "pnpm --parallel run dev",
"dev": "run-p dev:*",
"docker:up": "docker compose -f docker-compose.dev.yaml up",
Expand All @@ -12,10 +12,10 @@
"build": "pnpm run --recursive --filter=!@cryptgeon/backend build"
},
"devDependencies": {
"@playwright/test": "^1.42.1",
"@types/node": "^20.11.28",
"@playwright/test": "^1.46.1",
"@types/node": "^22.5.0",
"npm-run-all": "^4.1.5",
"shelljs": "^0.8.5"
},
"packageManager": "pnpm@8.15.4"
"packageManager": "pnpm@9.8.0"
}
2 changes: 1 addition & 1 deletion packages/backend/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/backend/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "cryptgeon"
version = "2.6.1"
version = "2.7.0"
authors = ["cupcakearmy <[email protected]>"]
edition = "2021"
rust-version = "1.80"
Expand Down
14 changes: 14 additions & 0 deletions packages/cli/build.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import pkg from './package.json' with { type: 'json' }
import { build } from 'tsup'

const watch = process.argv.slice(2)[0] === '--watch'

await build({
entry: ['src/index.ts', 'src/cli.ts'],
dts: true,
minify: true,
format: ['esm', 'cjs'],
clean: true,
define: { VERSION: `"${pkg.version}"` },
watch,
})
10 changes: 5 additions & 5 deletions packages/cli/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "cryptgeon",
"version": "2.6.1",
"version": "2.7.0",
"homepage": "https://github.com/cupcakearmy/cryptgeon",
"repository": {
"type": "git",
Expand All @@ -9,7 +9,7 @@
},
"type": "module",
"exports": {
".": "./dist/index.mjs"
".": "./dist/index.js"
},
"types": "./dist/index.d.ts",
"bin": {
Expand All @@ -20,8 +20,8 @@
],
"scripts": {
"bin": "run-s build package",
"build": "rm -rf dist && tsc && ./scripts/build.js",
"dev": "./scripts/build.js --watch",
"build": "tsc && node build.js",
"dev": "node build.js --watch",
"prepublishOnly": "run-s build"
},
"devDependencies": {
Expand All @@ -31,11 +31,11 @@
"@types/mime": "^3.0.4",
"@types/node": "^20.11.24",
"commander": "^12.0.0",
"esbuild": "^0.20.1",
"inquirer": "^9.2.15",
"mime": "^4.0.1",
"occulto": "^2.0.3",
"pretty-bytes": "^6.1.1",
"tsup": "^8.2.4",
"typescript": "^5.3.3"
},
"engines": {
Expand Down
34 changes: 0 additions & 34 deletions packages/cli/scripts/build.js

This file was deleted.

8 changes: 4 additions & 4 deletions packages/cli/src/cli.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env node

import { Argument, Option, program } from '@commander-js/extra-typings'
import { setBase, status } from '@cryptgeon/shared'
import { setOptions, status } from '@cryptgeon/shared'
import prettyBytes from 'pretty-bytes'

import { download } from './download.js'
Expand Down Expand Up @@ -33,7 +33,7 @@ program
.description('show information about the server')
.addOption(server)
.action(async (options) => {
setBase(options.server)
setOptions({ server: options.server })
const response = await status()
const formatted = {
...response,
Expand All @@ -54,7 +54,7 @@ send
.addOption(minutes)
.addOption(password)
.action(async (files, options) => {
setBase(options.server!)
setOptions({ server: options.server })
await checkConstrains(options)
options.password ||= await getStdin()
try {
Expand All @@ -72,7 +72,7 @@ send
.addOption(minutes)
.addOption(password)
.action(async (text, options) => {
setBase(options.server!)
setOptions({ server: options.server })
await checkConstrains(options)
options.password ||= await getStdin()
try {
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/download.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Adapters, get, info, setBase } from '@cryptgeon/shared'
import { Adapters, get, info, setOptions } from '@cryptgeon/shared'
import inquirer from 'inquirer'
import { access, constants, writeFile } from 'node:fs/promises'
import { basename, resolve } from 'node:path'
import { AES, Hex } from 'occulto'
import pretty from 'pretty-bytes'

export async function download(url: URL, all: boolean, suggestedPassword?: string) {
setBase(url.origin)
setOptions({ server: url.origin })
const id = url.pathname.split('/')[2]
const preview = await info(id).catch(() => {
throw new Error('Note does not exist or is expired')
Expand Down
4 changes: 2 additions & 2 deletions packages/cli/src/upload.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { readFile, stat } from 'node:fs/promises'
import { basename } from 'node:path'

import { Adapters, BASE, create, FileDTO, Note, NoteMeta } from '@cryptgeon/shared'
import { Adapters, create, getOptions, FileDTO, Note, NoteMeta } from '@cryptgeon/shared'
import mime from 'mime'
import { AES, Hex } from 'occulto'

Expand Down Expand Up @@ -39,7 +39,7 @@ export async function upload(input: string | string[], options: UploadOptions):
// Create the actual note and upload it.
const note: Note = { ...noteOptions, contents, meta: { type, derivation: derived?.[1] } }
const result = await create(note)
let url = `${BASE}/note/${result.id}`
let url = `${getOptions().server}/note/${result.id}`
if (!derived) url += `#${Hex.encode(key)}`
return url
}
19 changes: 15 additions & 4 deletions packages/shared/src/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ export type EncryptedFileDTO = Omit<FileDTO, 'contents'> & {
contents: string
}

type ClientOptions = {
server: string
}

type CallOptions = {
url: string
method: string
Expand All @@ -31,14 +35,21 @@ type CallOptions = {

export class PayloadToLargeError extends Error {}

export let BASE = ''
export let client: ClientOptions = {
server: '',
}

export function setOptions(options: Partial<ClientOptions>) {
client = { ...client, ...options }
}

export function setBase(url: string) {
BASE = url
export function getOptions(): ClientOptions {
return client
}

export async function call(options: CallOptions) {
const response = await fetch(BASE + '/api/' + options.url, {
const url = client.server + '/api/' + options.url
const response = await fetch(url, {
method: options.method,
body: options.body === undefined ? undefined : JSON.stringify(options.body),
mode: 'cors',
Expand Down
5 changes: 3 additions & 2 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,13 @@ const config: PlaywrightTestConfig = {
use: {
video: 'retain-on-failure',
baseURL: 'http://localhost:1234',
actionTimeout: 60_000,
actionTimeout: 10_000,
},

outputDir: './test-results',
testDir: './test',
timeout: 60_000,
timeout: 10_000,
fullyParallel: true,

webServer: {
command: 'docker compose -f docker-compose.dev.yaml up',
Expand Down
Loading

0 comments on commit 2006be0

Please sign in to comment.