built new web

This commit is contained in:
2025-05-27 13:17:11 +03:00
parent d84cc7a72c
commit b7d2c524d6
13 changed files with 291 additions and 76 deletions

View File

@@ -1,21 +0,0 @@
## Библиотека для ширования подписи на WASM
Готовый шаблон тестов есть в example.html
Ваша задача фундаментально такая:
1) сгенерировать подпись
2) отправить подпись на эндпоинт нужным образом
Как сгенерировать подпись?
1) в метод get_secret_value сунуть:
- user_agent (че угодно)
- cur_time (время из эндпоинта https://api.id.hublab.ru/api/v1/server-timestamp )
- url (на самом деле это path)
Формат подписи: набор букв и чисел. Если в результате будет что-то типа "Ошибка 95d19684-e70e-47f5-9341-94f5fd575d08", то значит
что-то пошло не так. Отправить такую подпись вы можете, но бэк её не свалидирует и вернёт 401))

View File

@@ -1,55 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WASM Example</title>
</head>
<body>
<h1>WASM Example</h1>
<div>
<label for="userAgent">User Agent:</label>
<input type="text" id="userAgent" placeholder="Например, Mozilla/5.0">
</div>
<div>
<label for="url">URL:</label>
<input type="text" id="url" placeholder="Например, http://example.com">
</div>
<button id="getSecretValue">Получить секретное значение</button>
<p id="result"></p>
<script type="module">
import init, { get_secret_value } from './hublib.js';
async function runWasm() {
await init();
document.getElementById('getSecretValue').addEventListener('click', async () => {
const userAgent = document.getElementById('userAgent').value || navigator.userAgent;
const secretValue = get_secret_value(BigInt(Math.floor(Date.now() / 1000)), userAgent, url);
document.getElementById('result').innerText = secretValue;
const txt = 'https://api.id.hublab.ru/api/v1/guestlogin?given_time=' +
serverTs.timestamp +
'&user_agent=' + userAgent +
'&gotten_sign=' + secretValue;
const response1 = await makePostRequest(txt)
document.getElementById('result-check').innerText = response1.ok;
});
}
runWasm();
</script>
</body>
</html>

3
nodejs/hublib.d.ts vendored Normal file
View File

@@ -0,0 +1,3 @@
/* tslint:disable */
/* eslint-disable */
export function get_secret_value(given_time: bigint, user_agent: string, url: string): string;

137
nodejs/hublib.js Normal file
View File

@@ -0,0 +1,137 @@
let imports = {};
imports['__wbindgen_placeholder__'] = module.exports;
let wasm;
const { TextDecoder, TextEncoder } = require(`util`);
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
cachedTextDecoder.decode();
let cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
}
return cachedUint8ArrayMemory0;
}
function getStringFromWasm0(ptr, len) {
ptr = ptr >>> 0;
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
let WASM_VECTOR_LEN = 0;
let cachedTextEncoder = new TextEncoder('utf-8');
const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
? function (arg, view) {
return cachedTextEncoder.encodeInto(arg, view);
}
: function (arg, view) {
const buf = cachedTextEncoder.encode(arg);
view.set(buf);
return {
read: arg.length,
written: buf.length
};
});
function passStringToWasm0(arg, malloc, realloc) {
if (realloc === undefined) {
const buf = cachedTextEncoder.encode(arg);
const ptr = malloc(buf.length, 1) >>> 0;
getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
WASM_VECTOR_LEN = buf.length;
return ptr;
}
let len = arg.length;
let ptr = malloc(len, 1) >>> 0;
const mem = getUint8ArrayMemory0();
let offset = 0;
for (; offset < len; offset++) {
const code = arg.charCodeAt(offset);
if (code > 0x7F) break;
mem[ptr + offset] = code;
}
if (offset !== len) {
if (offset !== 0) {
arg = arg.slice(offset);
}
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
const ret = encodeString(arg, view);
offset += ret.written;
ptr = realloc(ptr, len, offset, 1) >>> 0;
}
WASM_VECTOR_LEN = offset;
return ptr;
}
/**
* @param {bigint} given_time
* @param {string} user_agent
* @param {string} url
* @returns {string}
*/
module.exports.get_secret_value = function(given_time, user_agent, url) {
let deferred3_0;
let deferred3_1;
try {
const ptr0 = passStringToWasm0(user_agent, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passStringToWasm0(url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
const ret = wasm.get_secret_value(given_time, ptr0, len0, ptr1, len1);
deferred3_0 = ret[0];
deferred3_1 = ret[1];
return getStringFromWasm0(ret[0], ret[1]);
} finally {
wasm.__wbindgen_free(deferred3_0, deferred3_1, 1);
}
};
module.exports.__wbg_getTime_46267b1c24877e30 = function(arg0) {
const ret = arg0.getTime();
return ret;
};
module.exports.__wbg_new0_f788a2397c7ca929 = function() {
const ret = new Date();
return ret;
};
module.exports.__wbindgen_init_externref_table = function() {
const table = wasm.__wbindgen_export_0;
const offset = table.grow(4);
table.set(0, undefined);
table.set(offset + 0, undefined);
table.set(offset + 1, null);
table.set(offset + 2, true);
table.set(offset + 3, false);
;
};
module.exports.__wbindgen_throw = function(arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
};
const path = require('path').join(__dirname, 'hublib_bg.wasm');
const bytes = require('fs').readFileSync(path);
const wasmModule = new WebAssembly.Module(bytes);
const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
wasm = wasmInstance.exports;
module.exports.__wasm = wasm;
wasm.__wbindgen_start();

BIN
nodejs/hublib_bg.wasm Normal file

Binary file not shown.

11
nodejs/package.json Normal file
View File

@@ -0,0 +1,11 @@
{
"name": "hublib",
"version": "0.1.0",
"files": [
"hublib_bg.wasm",
"hublib.js",
"hublib.d.ts"
],
"main": "hublib.js",
"types": "hublib.d.ts"
}

70
web/example.html Normal file
View File

@@ -0,0 +1,70 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WASM Example</title>
</head>
<body>
<h1>WASM Example</h1>
<div>
<label for="userAgent">User Agent:</label>
<input type="text" id="userAgent" placeholder="Например, Mozilla/5.0">
</div>
<div>
<label for="url">URL:</label>
<input type="text" id="url" placeholder="Например, http://example.com">
</div>
<button id="getSecretValue">Получить секретное значение</button>
<p id="result"></p>
<script type="module">
import init, { get_secret_value } from './hublib.js';
async function runWasm() {
await init();
document.getElementById('getSecretValue').addEventListener('click', async () => {
const userAgent = document.getElementById('userAgent').value || navigator.userAgent;
const secretValue = get_secret_value(BigInt(Math.floor(Date.now() / 1000)), userAgent, url);
document.getElementById('result').innerText = secretValue;
// const txt = 'https://api.id.hublab.ru/api/v1/guestlogin?given_time=' +
// serverTs.timestamp +
// '&user_agent=' + userAgent +
// '&gotten_sign=' + secretValue;
//const response1 = await makePostRequest(txt)
});
}
// async function makePostRequest(url) {
// try {
// const response = await fetch(url, {
// method: 'POST',
// headers: {
// 'Content-Type': 'application/json', // Указываем, что отправляем данные в формате JSON
// },
// });
// if (!response.ok) {
// throw new Error(`HTTP error! Статус: ${response.status}`);
// }
// const responseData = await response.json(); // Получаем ответ как JSON
// return responseData; // Возвращаем полученные данные
// } catch (error) {
// console.error('Ошибка при выполнении POST-запроса:', error);
// throw error; // Пробрасываем ошибку дальше
// }
// }
runWasm();
</script>
</body>
</html>

View File

70
web/hublib_bg.wasm.d.ts vendored Normal file
View File

@@ -0,0 +1,70 @@
/* tslint:disable */
/* eslint-disable */
export const memory: WebAssembly.Memory;
export const ffi_hublib_uniffi_contract_version: () => number;
export const ffi_hublib_rustbuffer_alloc: (a: number, b: bigint, c: number) => void;
export const ffi_hublib_rustbuffer_from_bytes: (a: number, b: number, c: number, d: number) => void;
export const ffi_hublib_rustbuffer_free: (a: bigint, b: bigint, c: number, d: number, e: number) => void;
export const ffi_hublib_rustbuffer_reserve: (a: number, b: bigint, c: bigint, d: number, e: number, f: bigint, g: number) => void;
export const ffi_hublib_rust_future_poll_u8: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_u8: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_u8: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_u8: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_i8: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_i8: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_i8: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_i8: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_u16: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_u16: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_u16: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_u16: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_i16: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_i16: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_i16: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_i16: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_u32: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_u32: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_u32: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_u32: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_i32: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_i32: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_i32: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_i32: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_u64: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_u64: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_u64: (a: bigint, b: number) => bigint;
export const ffi_hublib_rust_future_free_u64: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_i64: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_i64: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_i64: (a: bigint, b: number) => bigint;
export const ffi_hublib_rust_future_free_i64: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_f32: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_f32: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_f32: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_f32: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_f64: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_f64: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_f64: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_f64: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_pointer: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_pointer: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_pointer: (a: bigint, b: number) => number;
export const ffi_hublib_rust_future_free_pointer: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_rust_buffer: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_rust_buffer: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_rust_buffer: (a: number, b: bigint, c: number) => void;
export const ffi_hublib_rust_future_free_rust_buffer: (a: bigint) => void;
export const ffi_hublib_rust_future_poll_void: (a: bigint, b: number, c: bigint) => void;
export const ffi_hublib_rust_future_cancel_void: (a: bigint) => void;
export const ffi_hublib_rust_future_complete_void: (a: bigint, b: number) => void;
export const ffi_hublib_rust_future_free_void: (a: bigint) => void;
export const uniffi_hublib_fn_func_get_secret_value: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number, g: bigint, h: bigint, i: number, j: number, k: number) => void;
export const uniffi_hublib_checksum_func_get_secret_value: () => number;
export const get_secret_value: (a: bigint, b: number, c: number, d: number, e: number) => [number, number];
export const uniffi_hublib_fn_func_recreate_secret_value: (a: number, b: bigint, c: bigint, d: bigint, e: number, f: number, g: bigint, h: bigint, i: number, j: number, k: bigint, l: bigint, m: number, n: number, o: number) => void;
export const uniffi_hublib_checksum_func_recreate_secret_value: () => number;
export const __wbindgen_export_0: WebAssembly.Table;
export const __wbindgen_malloc: (a: number, b: number) => number;
export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
export const __wbindgen_free: (a: number, b: number, c: number) => void;
export const __wbindgen_start: () => void;