From 2bcfc1bfcbbff0affd097c0f789c835396389572 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 12 Nov 2026 19:51:06 +0000 Subject: [PATCH] chore: bump version to 5.1.4 [skip ci] --- charts/trek/Chart.yaml | 4 +- client/package.json | 2 +- package-lock.json | 10 +- package.json | 2 +- server/package.json | 2 +- .../service-identity/registration-dialect.ts | 137 ++++++++++-------- shared/package.json | 2 +- 7 files changed, 87 insertions(+), 72 deletions(-) diff --git a/charts/trek/Chart.yaml b/charts/trek/Chart.yaml index e22241e3c..84ea5c5e5 100644 --- a/charts/trek/Chart.yaml +++ b/charts/trek/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 name: trek -version: 5.1.3 +version: 5.1.4 description: Minimal Helm chart for TREK app -appVersion: "5.1.3" +appVersion: "5.1.4" diff --git a/client/package.json b/client/package.json index 617220adf..f97e1c362 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "@trek/client", - "version": "5.1.3", + "version": "5.1.4", "engines": { "node": "^22.22.2 || ^24.15.0 || >=26.0.0" }, diff --git a/package-lock.json b/package-lock.json index f3bb679bb..2786fba3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@trek/root", - "version": "5.1.3", + "version": "5.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@trek/root", - "version": "5.1.3", + "version": "5.1.4", "workspaces": [ "client", "server", @@ -29,7 +29,7 @@ }, "client": { "name": "@trek/client", - "version": "5.1.3", + "version": "5.1.4", "dependencies": { "@assistant-ui/react": "0.15.32", "@capacitor/action-sheet": "^8.1.1", @@ -25676,7 +25676,7 @@ }, "server": { "name": "@trek/server", - "version": "5.1.3", + "version": "5.1.4", "dependencies": { "@aws-lite/client": "^0.24.1", "@aws-lite/s3": "^0.2.7", @@ -26076,7 +26076,7 @@ }, "shared": { "name": "@trek/shared", - "version": "5.1.3", + "version": "5.1.4", "dependencies": { "isomorphic-dompurify": "^3.23.0", "zod": "^4.6.7" diff --git a/package.json b/package.json index 16431f106..52fdc2c50 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@trek/root", "private": true, - "version": "5.1.3", + "version": "5.1.4", "engines": { "node": "^22.22.2 || ^24.15.0 || >=26.0.0" }, diff --git a/server/package.json b/server/package.json index e4cfc20c3..4e1507102 100644 --- a/server/package.json +++ b/server/package.json @@ -1,6 +1,6 @@ { "name": "@trek/server", - "version": "5.1.3", + "version": "5.1.4", "engines": { "node": "^22.22.2 || ^24.15.0 || >=26.0.0" }, diff --git a/server/src/nest/service-identity/registration-dialect.ts b/server/src/nest/service-identity/registration-dialect.ts index 1c0189f1f..e42f66788 100644 --- a/server/src/nest/service-identity/registration-dialect.ts +++ b/server/src/nest/service-identity/registration-dialect.ts @@ -1,5 +1,5 @@ /** - * How TREK 5.1.3 registers with the TREK services. + * How TREK 5.1.4 registers with the TREK services. * * The issuer writes this file for each release and the release pipeline * commits it with the version bump. It is not edited by hand, and its layout @@ -8,86 +8,101 @@ */ import type { DialectSelfCheck, RegistrationDialect } from './registration-dialect.types'; -import { createHash, pbkdf2Sync } from 'node:crypto'; +import { createHash, createHmac, hkdfSync } from 'node:crypto'; -const DIALECT = 'qDlOapZrw47x'; -const POND_HILL = Buffer.from('53ee01dfb2711f0b4b7cb1b5d7cd644801289dabda654bf6f53ba0f4727d5d26', 'hex'); +const DIALECT = '8546tJZpbjQb'; +const ARROW_BARLEY = Buffer.from('95fd08ded3ef3e32af04cf42290d5a6d1ad24d88827f9c745ba46b810962cd8e', 'hex'); -function saddle(alg: string, data: Buffer): Buffer { - return createHash(alg).update(data).digest(); +function mill(a: Buffer, b: Buffer): Buffer { + const parts: Buffer[] = []; + for (let i = 0; i < Math.max(a.length, b.length); i++) parts.push(a.subarray(i, i + 1), b.subarray(i, i + 1)); + return Buffer.concat(parts); } -function frost(value: number): Buffer { - const out = Buffer.alloc(8); - out.writeBigUInt64BE(BigInt(value)); - return out; -} - -function hollow(input: Buffer, size: number): Buffer { +function moss(input: Buffer, size: number): Buffer { const out = Buffer.alloc(size); input.forEach((byte, i) => out.writeUInt8(out.readUInt8(i % size) ^ byte, i % size)); return out; } -function zephyr(value: number): Buffer { - const out: number[] = []; - let rest = value; - do { - const low = rest % 128; - rest = Math.floor(rest / 128); - out.push(low | (Math.sign(rest) << 7)); - } while (rest > 0); - return Buffer.from(out); +function meadow(alg: string, key: Buffer, data: Buffer): Buffer { + return createHmac(alg, key).update(data).digest(); } -function barrel(input: Buffer, width: number): Buffer { - const out = Buffer.from(input); - for (let i = 0; i + width <= out.length; i += width) out.subarray(i, i + width).reverse(); +function rapids(part: Buffer): Buffer { + const head = Buffer.alloc(4); + head.writeUInt32LE(part.length); + return Buffer.concat([head, part]); +} + +function hollow(value: number): Buffer { + const out = Buffer.alloc(8); + out.writeBigUInt64BE(BigInt(value)); + return out; +} + +function apple(part: Buffer): Buffer { + const head = Buffer.alloc(2); + head.writeUInt16LE(part.length); + return Buffer.concat([head, part]); +} + +function blossom(value: number): Buffer { + const out = Buffer.alloc(4); + out.writeUInt32BE(value >>> 0); return out; } export const registrationDialect: RegistrationDialect = { id: DIALECT, - releasedFor: '5.1.3', - createdAt: '2026-11-10', + releasedFor: '5.1.4', + createdAt: '2026-11-12', challengePath: `/v1/register/${DIALECT}/challenge`, registerPath: `/v1/register/${DIALECT}`, - begin({ challenge, version, random }) { - const garnet = Buffer.from(challenge.c, 'utf8'); - const glade = Buffer.from(version, 'utf8'); - const banner = createHash('sha256').update(garnet).digest(); - const kettle = Buffer.from([0x5a]); - const river = Buffer.concat([random, kettle, POND_HILL, kettle, banner, kettle, glade]); - const robin = createHash('shake128', { outputLength: 31 }).update(river).digest(); - const larch = barrel(robin, 8); - const ocean = createHash('sha3-512').update(larch).digest(); + begin({ challenge, version, random, nowSeconds }) { + const chapel = Buffer.from(challenge.c, 'utf8'); + const fjord = Buffer.from(version, 'utf8'); + const cliff = createHash('sha256').update(chapel).digest(); + const horizon = Buffer.concat([cliff].map(apple)); + const pasture = Buffer.concat([cliff.subarray(0x10, 20), Buffer.from([0x8c]), horizon]); + const sorrel = Buffer.from(pasture.toString('hex')); + const bell = meadow('sha256', sorrel, chapel); return { work(nonce) { - const wren = Buffer.concat([banner.subarray(0xa, 16), garnet, frost(nonce), glade, random]); - const crystal = pbkdf2Sync(wren, banner, 10, 0x32, 'sha256'); - const seal = hollow(crystal, 20); - const mist = Buffer.from([...seal.subarray(0x1b % seal.length), ...seal.subarray(0, 0x1b % seal.length)]); - const coast = barrel(mist, 4); - const dawn = saddle('sha512', coast); - const yarrow = barrel(dawn, 8); - return { password: yarrow, salt: ocean }; + const cinder = Buffer.concat([ + rapids(random), rapids(fjord), rapids(hollow(nonce)), rapids(blossom(nowSeconds)), rapids(chapel), + ]); + const tide = Buffer.from([ + 0, 0xa, 9, 0xb, 1, 15, 3, 16, 13, 6, 8, 4, 0xc, 14, 0x11, 2, 5, 7, + ].map((from) => cinder.readUInt8(from))); + const cottage = Buffer.concat([tide, cinder.subarray(18)]); + const sapling = Buffer.from(hkdfSync( + 'sha256', cottage, chapel.subarray(8, 0xc), Buffer.from('9b25443bf88e4cbf', 'hex'), 43, + )); + const rowan = Buffer.from(Array.from(sapling, (byte) => (byte * 0xc7 + 0xe2) % 256)); + const linden = mill(rowan, ARROW_BARLEY); + const swan = Buffer.from(linden.subarray(2, 41)); + return { password: swan, salt: bell }; }, request(nonce) { - const pilgrim = Buffer.concat([ - garnet, Buffer.from([7]), glade, Buffer.from([7]), banner, Buffer.from([7]), zephyr(nonce), Buffer.from([7]), - random, + const falcon = Buffer.concat([ + Buffer.from(nonce.toString(16), 'utf8'), Buffer.from([0x4b]), cliff.subarray(24, 28), Buffer.from([0x4b]), + chapel, Buffer.from([0x4b]), ARROW_BARLEY, Buffer.from([0x4b]), random.subarray(3, 9), Buffer.from([0x4b]), + fjord, Buffer.from([0x4b]), blossom(nowSeconds), ]); - const pepper = Buffer.from(Array.from(pilgrim, (byte) => (byte * 203 + 60) % 256)); - const mesa = createHash('blake2b512').update(pepper).digest(); + const pelican = moss(falcon, 0x14); + const kelp = meadow('sha512', pelican, fjord); return { body: { - brookCactus: mesa.toString('base64'), - tundra: random.toString('hex'), - ivoryCape: version, - mill: nonce, - jadeBadge: challenge.c, + willow_jetty: { + echo: nonce, + banner: version, + lava_breeze: random.toString('hex'), + flint_lava: challenge.c, + sage_frost: String(nowSeconds), + }, }, - headers: {}, + headers: { 'X-TREK-Fossil-Vessel': kelp.toString('base64url') }, }; }, }; @@ -96,13 +111,13 @@ export const registrationDialect: RegistrationDialect = { /** Fixed inputs and what this module must make of them; TREK's tests and release job run it. */ export const SELF_CHECK: DialectSelfCheck = { - challenge: { c: 'v1.selfcheck.qDlOapZrw47x', alg: 'scrypt', N: 16, r: 1, p: 1, bits: 0, expires_at: 1 }, - version: '5.1.3', + challenge: { c: 'v1.selfcheck.8546tJZpbjQb', alg: 'scrypt', N: 16, r: 1, p: 1, bits: 0, expires_at: 1 }, + version: '5.1.4', random: '000102030405060708090a0b0c0d0e0f', nowSeconds: 1800000000, nonce: 41, - inputSha256: 'd0459dd032ca32758d4960be87026844ca0e5f2ccc0cd087838c7cc9f1f054d6', - saltSha256: 'e6beeb65b892a5f7e68977ceb33e0193bcf284904db6b55884823b5b2a948787', - scrypt: 'cb5f7842c312c4442f9d750305c31d2ea2df36556dbf80e17b56df859d2bc1e9', - requestSha256: '53bc1ae4f560b17631848e100dd2469040bbadc8ae61c881263a489bd14842ed', + inputSha256: '35bde8e3256e05441ac19c8b6b22f9d4e4adb59b5564f101078aa597e70ece99', + saltSha256: '8730a0377647a045a6fceade4a2c8c7dd3854e56cc6a87cd20ef94e87107493b', + scrypt: '884c7cf0406e20ccbba3372999d07d80b3cfc13eb9a464510b68942868840189', + requestSha256: '49848ec61f040261e65627b276eb996a83ed3d096b5a0216e8ba00a75a90cf70', }; diff --git a/shared/package.json b/shared/package.json index 04eaf4133..53c68a1ed 100644 --- a/shared/package.json +++ b/shared/package.json @@ -1,6 +1,6 @@ { "name": "@trek/shared", - "version": "5.1.3", + "version": "5.1.4", "engines": { "node": "^22.22.2 || ^24.15.0 || >=26.0.0" },