refactor: combine sub-pkgs into one pkg
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@pow-captcha/shared",
|
"name": "@pow-captcha/pow-captcha",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"main": "dist/lib.js",
|
"main": "dist/lib.js",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"types": "dist/lib.d.ts",
|
"types": "dist/lib.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc -p tsconfig.build.json"
|
"build": "tsc -p tsconfig.build.json",
|
||||||
|
"test": "jest"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"base64-js": "^1.5.1",
|
"base64-js": "^1.5.1",
|
||||||
5
pkgs/pow-captcha/src/lib.ts
Normal file
5
pkgs/pow-captcha/src/lib.ts
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import * as server from "./server";
|
||||||
|
import * as solver from "./solver";
|
||||||
|
import * as wire from "./wire";
|
||||||
|
|
||||||
|
export { server, solver, wire };
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { describe, it, expect } from "@jest/globals";
|
import { describe, it, expect } from "@jest/globals";
|
||||||
import { wire } from "@pow-captcha/shared";
|
import * as wire from "./wire";
|
||||||
import * as server from "./lib";
|
import * as server from "./server";
|
||||||
|
|
||||||
const SECRET = "e2c0b4ab-a215-4b36-bba8-19fae1601045";
|
const SECRET = "e2c0b4ab-a215-4b36-bba8-19fae1601045";
|
||||||
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
import { utils, wire } from "@pow-captcha/shared";
|
import * as wire from "./wire";
|
||||||
import * as solver from "@pow-captcha/solver";
|
import * as solver from "./solver";
|
||||||
|
import { createArray } from "./utils";
|
||||||
|
|
||||||
export type CreateChallengesOptions = {
|
export type CreateChallengesOptions = {
|
||||||
/** @default 50 */
|
/** @default 50 */
|
||||||
@@ -15,21 +16,15 @@ export async function createChallengesRaw({
|
|||||||
challengeLength = 16,
|
challengeLength = 16,
|
||||||
difficulty = 2,
|
difficulty = 2,
|
||||||
}: CreateChallengesOptions): Promise<wire.Challenge> {
|
}: CreateChallengesOptions): Promise<wire.Challenge> {
|
||||||
const challenges = utils.createArray(
|
const challenges = createArray(challengeCount, (): wire.ChallengeEntry => {
|
||||||
challengeCount,
|
|
||||||
(): wire.ChallengeEntry => {
|
|
||||||
const challenge = new Uint8Array(challengeLength);
|
const challenge = new Uint8Array(challengeLength);
|
||||||
crypto.getRandomValues(challenge);
|
crypto.getRandomValues(challenge);
|
||||||
|
|
||||||
const target = new Uint8Array(difficulty);
|
const target = new Uint8Array(difficulty);
|
||||||
crypto.getRandomValues(target);
|
crypto.getRandomValues(target);
|
||||||
|
|
||||||
return [
|
return [wire.serializeArray(challenge), wire.serializeArray(target)];
|
||||||
wire.serializeArray(challenge),
|
});
|
||||||
wire.serializeArray(target),
|
|
||||||
];
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
magic: wire.CHALLENGE_MAGIC,
|
magic: wire.CHALLENGE_MAGIC,
|
||||||
@@ -41,10 +36,8 @@ export async function createChallenges(
|
|||||||
options: CreateChallengesOptions,
|
options: CreateChallengesOptions,
|
||||||
secret: string,
|
secret: string,
|
||||||
): Promise<wire.SignedData> {
|
): Promise<wire.SignedData> {
|
||||||
return await wire.serializeAndSignData(
|
const data = await createChallengesRaw(options);
|
||||||
createChallengesRaw(options),
|
return await wire.serializeAndSignData(data, secret);
|
||||||
secret,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function redeemChallengeSolutionRaw(
|
export async function redeemChallengeSolutionRaw(
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { describe, it, expect } from "@jest/globals";
|
import { describe, it, expect } from "@jest/globals";
|
||||||
import * as solver from "./lib";
|
import * as solver from "./solver";
|
||||||
|
|
||||||
describe("solver", () => {
|
describe("solver", () => {
|
||||||
it("solveJs", async () => {
|
it("solveJs", async () => {
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import { arrayStartsWith } from "./utils";
|
||||||
|
|
||||||
export async function solveJs(
|
export async function solveJs(
|
||||||
nonce: Uint8Array,
|
nonce: Uint8Array,
|
||||||
target: Uint8Array,
|
target: Uint8Array,
|
||||||
@@ -42,16 +44,3 @@ export async function verify(
|
|||||||
|
|
||||||
return arrayStartsWith(hash, target);
|
return arrayStartsWith(hash, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
function arrayStartsWith(array: Uint8Array, search: Uint8Array): boolean {
|
|
||||||
const searchLen = search.length;
|
|
||||||
if (searchLen > array.length) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
for (let i = 0; i < searchLen; i += 1) {
|
|
||||||
if (array[i] !== search[i]) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
@@ -17,3 +17,16 @@ export function byteArraysEqual(arr1: Uint8Array, arr2: Uint8Array): boolean {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function arrayStartsWith(array: Uint8Array, search: Uint8Array): boolean {
|
||||||
|
const searchLen = search.length;
|
||||||
|
if (searchLen > array.length) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < searchLen; i += 1) {
|
||||||
|
if (array[i] !== search[i]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@pow-captcha/server",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"main": "dist/lib.js",
|
|
||||||
"type": "module",
|
|
||||||
"types": "dist/lib.d.ts",
|
|
||||||
"scripts": {
|
|
||||||
"build": "tsc -p tsconfig.build.json",
|
|
||||||
"test": "jest"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@pow-captcha/solver": "workspace:*",
|
|
||||||
"@pow-captcha/shared": "workspace:*"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
export * as wire from "./wire";
|
|
||||||
export * as utils from "./utils";
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../../tsconfig.build.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"outDir": "dist"
|
|
||||||
},
|
|
||||||
"include": ["src/**/*"],
|
|
||||||
"exclude": ["**/*.spec.ts"]
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../../tsconfig.base.json",
|
|
||||||
"include": ["src/**/*"]
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
/** @type {import('jest').Config} */
|
|
||||||
export default {
|
|
||||||
transform: {
|
|
||||||
"^.+\\.(t|j)sx?$": "@swc/jest",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@pow-captcha/solver",
|
|
||||||
"version": "0.0.0",
|
|
||||||
"main": "dist/lib.js",
|
|
||||||
"type": "module",
|
|
||||||
"types": "dist/lib.d.ts",
|
|
||||||
"scripts": {
|
|
||||||
"build": "tsc -p tsconfig.build.json",
|
|
||||||
"test": "jest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../../tsconfig.build.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"outDir": "dist"
|
|
||||||
},
|
|
||||||
"include": ["src/**/*"],
|
|
||||||
"exclude": ["**/*.spec.ts"]
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../../tsconfig.base.json",
|
|
||||||
"include": ["src/**/*"]
|
|
||||||
}
|
|
||||||
13
pnpm-lock.yaml
generated
13
pnpm-lock.yaml
generated
@@ -42,16 +42,7 @@ importers:
|
|||||||
specifier: ^8.35.0
|
specifier: ^8.35.0
|
||||||
version: 8.35.0(eslint@9.29.0)(typescript@5.8.3)
|
version: 8.35.0(eslint@9.29.0)(typescript@5.8.3)
|
||||||
|
|
||||||
pkgs/server:
|
pkgs/pow-captcha:
|
||||||
dependencies:
|
|
||||||
'@pow-captcha/shared':
|
|
||||||
specifier: workspace:*
|
|
||||||
version: link:../shared
|
|
||||||
'@pow-captcha/solver':
|
|
||||||
specifier: workspace:*
|
|
||||||
version: link:../solver
|
|
||||||
|
|
||||||
pkgs/shared:
|
|
||||||
dependencies:
|
dependencies:
|
||||||
base64-js:
|
base64-js:
|
||||||
specifier: ^1.5.1
|
specifier: ^1.5.1
|
||||||
@@ -60,7 +51,7 @@ importers:
|
|||||||
specifier: ^3.25.67
|
specifier: ^3.25.67
|
||||||
version: 3.25.67
|
version: 3.25.67
|
||||||
|
|
||||||
pkgs/solver: {}
|
pkgs/solver-wasm: {}
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user