Initial Commit
This commit is contained in:
71
packages/networking/drive/drive-template/tests/_helpers.ts
Normal file
71
packages/networking/drive/drive-template/tests/_helpers.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Shared helpers for the drive-template test suite. Builds canonical
|
||||
* sample templates, signs them, and exposes injectable clocks +
|
||||
* deterministic Ed25519 keypairs so individual tests stay focused on
|
||||
* the requirement they verify.
|
||||
*/
|
||||
|
||||
import {
|
||||
getPublicKey,
|
||||
randomPrivateKey,
|
||||
} from "@suaveplan/crypto-curve/ed25519";
|
||||
import { toHex } from "@suaveplan/crypto-utils";
|
||||
import { signTemplate } from "../src/codec/sign.js";
|
||||
import type {
|
||||
DriveTemplate,
|
||||
FolderTemplate,
|
||||
PerFilePolicy,
|
||||
} from "../src/types/template.types.js";
|
||||
|
||||
export interface SampleKeys {
|
||||
readonly secret: Uint8Array;
|
||||
readonly publicHex: string;
|
||||
}
|
||||
|
||||
export function makeKeys(): SampleKeys {
|
||||
const secret = randomPrivateKey();
|
||||
const publicHex = toHex(getPublicKey(secret));
|
||||
return { secret, publicHex };
|
||||
}
|
||||
|
||||
export function makeNonce(value = 7): Uint8Array {
|
||||
return new Uint8Array(16).fill(value);
|
||||
}
|
||||
|
||||
export const DEFAULT_POLICY: PerFilePolicy = {
|
||||
autoDownload: false,
|
||||
meshAllowed: true,
|
||||
cdnAllowed: true,
|
||||
retention: "lru",
|
||||
};
|
||||
|
||||
export function emptyRoot(): FolderTemplate {
|
||||
return { name: "/", children: [] };
|
||||
}
|
||||
|
||||
export interface BuildOptions {
|
||||
readonly issuer: string;
|
||||
readonly nonce?: Uint8Array;
|
||||
readonly issuedAt?: number;
|
||||
readonly expiresAt?: number;
|
||||
readonly rootFolder?: FolderTemplate;
|
||||
}
|
||||
|
||||
export function buildTemplate(
|
||||
options: BuildOptions
|
||||
): Omit<DriveTemplate, "serverSignature"> {
|
||||
return {
|
||||
schemaVersion: 1,
|
||||
driveId: "drive-1",
|
||||
rootFolder: options.rootFolder ?? emptyRoot(),
|
||||
policy: { defaultPolicy: DEFAULT_POLICY },
|
||||
issuer: options.issuer,
|
||||
issuedAt: options.issuedAt ?? Date.now() - 1_000,
|
||||
expiresAt: options.expiresAt ?? Date.now() + 24 * 60 * 60 * 1000,
|
||||
nonce: options.nonce ?? makeNonce(),
|
||||
};
|
||||
}
|
||||
|
||||
export function signed(options: BuildOptions, keys: SampleKeys): DriveTemplate {
|
||||
return signTemplate(buildTemplate(options), keys.secret);
|
||||
}
|
||||
Reference in New Issue
Block a user