diff --git a/.gitignore b/.gitignore
index cacf7ed1..b87b28ee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,6 +13,10 @@ coverage
out/
next-env.d.ts
+# nitro
+.nitro/
+.output/
+
# expo
.expo/
dist/
diff --git a/apps/auth-proxy/.nitro/dev/index.mjs b/apps/auth-proxy/.nitro/dev/index.mjs
deleted file mode 100644
index 423140c9..00000000
--- a/apps/auth-proxy/.nitro/dev/index.mjs
+++ /dev/null
@@ -1,779 +0,0 @@
-globalThis._importMeta_={url:import.meta.url,env:process.env};import { Server } from 'node:http';
-import { tmpdir } from 'node:os';
-import { join } from 'node:path';
-import { mkdirSync } from 'node:fs';
-import { parentPort, threadId } from 'node:worker_threads';
-import { provider, isWindows } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/std-env/dist/index.mjs';
-import { defineEventHandler, handleCacheHeaders, splitCookiesString, isEvent, createEvent, getRequestHeader, eventHandler, setHeaders, sendRedirect, proxyRequest, setResponseStatus, setResponseHeader, send, createApp, createRouter as createRouter$1, toNodeListener, fetchWithEvent, lazyEventHandler, toWebRequest } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/h3/dist/index.mjs';
-import { createFetch as createFetch$1, Headers as Headers$1 } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/ofetch/dist/node.mjs';
-import destr from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/destr/dist/index.mjs';
-import { createCall, createFetch } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/unenv/runtime/fetch/index.mjs';
-import { createHooks } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/hookable/dist/index.mjs';
-import { snakeCase } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/scule/dist/index.mjs';
-import { klona } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/klona/dist/index.mjs';
-import defu, { defuFn } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/defu/dist/defu.mjs';
-import { hash } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/ohash/dist/index.mjs';
-import { parseURL, withoutBase, joinURL, getQuery, withQuery } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/ufo/dist/index.mjs';
-import { createStorage, prefixStorage } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/unstorage/dist/index.mjs';
-import unstorage_47drivers_47fs from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/unstorage/drivers/fs.mjs';
-import { toRouteMatcher, createRouter } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/radix3/dist/index.mjs';
-import { Auth } from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/@auth/core/index.js';
-import Discord from 'file:///Users/red/Documents/GitHub/RealmsWorld/node_modules/@auth/core/providers/discord.js';
-
-const inlineAppConfig = {};
-
-
-
-const appConfig = defuFn(inlineAppConfig);
-
-const _inlineRuntimeConfig = {
- "app": {
- "baseURL": "/"
- },
- "nitro": {
- "routeRules": {}
- }
-};
-const ENV_PREFIX = "NITRO_";
-const ENV_PREFIX_ALT = _inlineRuntimeConfig.nitro.envPrefix ?? process.env.NITRO_ENV_PREFIX ?? "_";
-const _sharedRuntimeConfig = _deepFreeze(
- _applyEnv(klona(_inlineRuntimeConfig))
-);
-function useRuntimeConfig(event) {
- if (!event) {
- return _sharedRuntimeConfig;
- }
- if (event.context.nitro.runtimeConfig) {
- return event.context.nitro.runtimeConfig;
- }
- const runtimeConfig = klona(_inlineRuntimeConfig);
- _applyEnv(runtimeConfig);
- event.context.nitro.runtimeConfig = runtimeConfig;
- return runtimeConfig;
-}
-_deepFreeze(klona(appConfig));
-function _getEnv(key) {
- const envKey = snakeCase(key).toUpperCase();
- return destr(
- process.env[ENV_PREFIX + envKey] ?? process.env[ENV_PREFIX_ALT + envKey]
- );
-}
-function _isObject(input) {
- return typeof input === "object" && !Array.isArray(input);
-}
-function _applyEnv(obj, parentKey = "") {
- for (const key in obj) {
- const subKey = parentKey ? `${parentKey}_${key}` : key;
- const envValue = _getEnv(subKey);
- if (_isObject(obj[key])) {
- if (_isObject(envValue)) {
- obj[key] = { ...obj[key], ...envValue };
- }
- _applyEnv(obj[key], subKey);
- } else {
- obj[key] = envValue ?? obj[key];
- }
- }
- return obj;
-}
-function _deepFreeze(object) {
- const propNames = Object.getOwnPropertyNames(object);
- for (const name of propNames) {
- const value = object[name];
- if (value && typeof value === "object") {
- _deepFreeze(value);
- }
- }
- return Object.freeze(object);
-}
-new Proxy(/* @__PURE__ */ Object.create(null), {
- get: (_, prop) => {
- console.warn(
- "Please use `useRuntimeConfig()` instead of accessing config directly."
- );
- const runtimeConfig = useRuntimeConfig();
- if (prop in runtimeConfig) {
- return runtimeConfig[prop];
- }
- return void 0;
- }
-});
-
-const serverAssets = [{"baseName":"server","dir":"/Users/red/Documents/GitHub/RealmsWorld/apps/auth-proxy/assets"}];
-
-const assets = createStorage();
-
-for (const asset of serverAssets) {
- assets.mount(asset.baseName, unstorage_47drivers_47fs({ base: asset.dir }));
-}
-
-const storage = createStorage({});
-
-storage.mount('/assets', assets);
-
-storage.mount('root', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/red/Documents/GitHub/RealmsWorld/apps/auth-proxy","ignore":["**/node_modules/**","**/.git/**"]}));
-storage.mount('src', unstorage_47drivers_47fs({"driver":"fs","readOnly":true,"base":"/Users/red/Documents/GitHub/RealmsWorld/apps/auth-proxy","ignore":["**/node_modules/**","**/.git/**"]}));
-storage.mount('build', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/red/Documents/GitHub/RealmsWorld/apps/auth-proxy/.nitro","ignore":["**/node_modules/**","**/.git/**"]}));
-storage.mount('cache', unstorage_47drivers_47fs({"driver":"fs","readOnly":false,"base":"/Users/red/Documents/GitHub/RealmsWorld/apps/auth-proxy/.nitro/cache","ignore":["**/node_modules/**","**/.git/**"]}));
-storage.mount('data', unstorage_47drivers_47fs({"driver":"fs","base":"/Users/red/Documents/GitHub/RealmsWorld/apps/auth-proxy/.data/kv","ignore":["**/node_modules/**","**/.git/**"]}));
-
-function useStorage(base = "") {
- return base ? prefixStorage(storage, base) : storage;
-}
-
-const defaultCacheOptions = {
- name: "_",
- base: "/cache",
- swr: true,
- maxAge: 1
-};
-function defineCachedFunction(fn, opts = {}) {
- opts = { ...defaultCacheOptions, ...opts };
- const pending = {};
- const group = opts.group || "nitro/functions";
- const name = opts.name || fn.name || "_";
- const integrity = opts.integrity || hash([fn, opts]);
- const validate = opts.validate || ((entry) => entry.value !== void 0);
- async function get(key, resolver, shouldInvalidateCache, event) {
- const cacheKey = [opts.base, group, name, key + ".json"].filter(Boolean).join(":").replace(/:\/$/, ":index");
- const entry = await useStorage().getItem(cacheKey) || {};
- const ttl = (opts.maxAge ?? opts.maxAge ?? 0) * 1e3;
- if (ttl) {
- entry.expires = Date.now() + ttl;
- }
- const expired = shouldInvalidateCache || entry.integrity !== integrity || ttl && Date.now() - (entry.mtime || 0) > ttl || validate(entry) === false;
- const _resolve = async () => {
- const isPending = pending[key];
- if (!isPending) {
- if (entry.value !== void 0 && (opts.staleMaxAge || 0) >= 0 && opts.swr === false) {
- entry.value = void 0;
- entry.integrity = void 0;
- entry.mtime = void 0;
- entry.expires = void 0;
- }
- pending[key] = Promise.resolve(resolver());
- }
- try {
- entry.value = await pending[key];
- } catch (error) {
- if (!isPending) {
- delete pending[key];
- }
- throw error;
- }
- if (!isPending) {
- entry.mtime = Date.now();
- entry.integrity = integrity;
- delete pending[key];
- if (validate(entry) !== false) {
- const promise = useStorage().setItem(cacheKey, entry).catch((error) => {
- console.error(`[nitro] [cache] Cache write error.`, error);
- useNitroApp().captureError(error, { event, tags: ["cache"] });
- });
- if (event && event.waitUntil) {
- event.waitUntil(promise);
- }
- }
- }
- };
- const _resolvePromise = expired ? _resolve() : Promise.resolve();
- if (entry.value === void 0) {
- await _resolvePromise;
- } else if (expired && event && event.waitUntil) {
- event.waitUntil(_resolvePromise);
- }
- if (opts.swr && validate(entry) !== false) {
- _resolvePromise.catch((error) => {
- console.error(`[nitro] [cache] SWR handler error.`, error);
- useNitroApp().captureError(error, { event, tags: ["cache"] });
- });
- return entry;
- }
- return _resolvePromise.then(() => entry);
- }
- return async (...args) => {
- const shouldBypassCache = opts.shouldBypassCache?.(...args);
- if (shouldBypassCache) {
- return fn(...args);
- }
- const key = await (opts.getKey || getKey)(...args);
- const shouldInvalidateCache = opts.shouldInvalidateCache?.(...args);
- const entry = await get(
- key,
- () => fn(...args),
- shouldInvalidateCache,
- args[0] && isEvent(args[0]) ? args[0] : void 0
- );
- let value = entry.value;
- if (opts.transform) {
- value = await opts.transform(entry, ...args) || value;
- }
- return value;
- };
-}
-const cachedFunction = defineCachedFunction;
-function getKey(...args) {
- return args.length > 0 ? hash(args, {}) : "";
-}
-function escapeKey(key) {
- return String(key).replace(/\W/g, "");
-}
-function defineCachedEventHandler(handler, opts = defaultCacheOptions) {
- const variableHeaderNames = (opts.varies || []).filter(Boolean).map((h) => h.toLowerCase()).sort();
- const _opts = {
- ...opts,
- getKey: async (event) => {
- const customKey = await opts.getKey?.(event);
- if (customKey) {
- return escapeKey(customKey);
- }
- const _path = event.node.req.originalUrl || event.node.req.url || event.path;
- const _pathname = escapeKey(decodeURI(parseURL(_path).pathname)).slice(0, 16) || "index";
- const _hashedPath = `${_pathname}.${hash(_path)}`;
- const _headers = variableHeaderNames.map((header) => [header, event.node.req.headers[header]]).map(([name, value]) => `${escapeKey(name)}.${hash(value)}`);
- return [_hashedPath, ..._headers].join(":");
- },
- validate: (entry) => {
- if (!entry.value) {
- return false;
- }
- if (entry.value.code >= 400) {
- return false;
- }
- if (entry.value.body === void 0) {
- return false;
- }
- if (entry.value.headers.etag === "undefined" || entry.value.headers["last-modified"] === "undefined") {
- return false;
- }
- return true;
- },
- group: opts.group || "nitro/handlers",
- integrity: opts.integrity || hash([handler, opts])
- };
- const _cachedHandler = cachedFunction(
- async (incomingEvent) => {
- const variableHeaders = {};
- for (const header of variableHeaderNames) {
- variableHeaders[header] = incomingEvent.node.req.headers[header];
- }
- const reqProxy = cloneWithProxy(incomingEvent.node.req, {
- headers: variableHeaders
- });
- const resHeaders = {};
- let _resSendBody;
- const resProxy = cloneWithProxy(incomingEvent.node.res, {
- statusCode: 200,
- writableEnded: false,
- writableFinished: false,
- headersSent: false,
- closed: false,
- getHeader(name) {
- return resHeaders[name];
- },
- setHeader(name, value) {
- resHeaders[name] = value;
- return this;
- },
- getHeaderNames() {
- return Object.keys(resHeaders);
- },
- hasHeader(name) {
- return name in resHeaders;
- },
- removeHeader(name) {
- delete resHeaders[name];
- },
- getHeaders() {
- return resHeaders;
- },
- end(chunk, arg2, arg3) {
- if (typeof chunk === "string") {
- _resSendBody = chunk;
- }
- if (typeof arg2 === "function") {
- arg2();
- }
- if (typeof arg3 === "function") {
- arg3();
- }
- return this;
- },
- write(chunk, arg2, arg3) {
- if (typeof chunk === "string") {
- _resSendBody = chunk;
- }
- if (typeof arg2 === "function") {
- arg2();
- }
- if (typeof arg3 === "function") {
- arg3();
- }
- return this;
- },
- writeHead(statusCode, headers2) {
- this.statusCode = statusCode;
- if (headers2) {
- for (const header in headers2) {
- this.setHeader(header, headers2[header]);
- }
- }
- return this;
- }
- });
- const event = createEvent(reqProxy, resProxy);
- event.context = incomingEvent.context;
- const body = await handler(event) || _resSendBody;
- const headers = event.node.res.getHeaders();
- headers.etag = String(
- headers.Etag || headers.etag || `W/"${hash(body)}"`
- );
- headers["last-modified"] = String(
- headers["Last-Modified"] || headers["last-modified"] || (/* @__PURE__ */ new Date()).toUTCString()
- );
- const cacheControl = [];
- if (opts.swr) {
- if (opts.maxAge) {
- cacheControl.push(`s-maxage=${opts.maxAge}`);
- }
- if (opts.staleMaxAge) {
- cacheControl.push(`stale-while-revalidate=${opts.staleMaxAge}`);
- } else {
- cacheControl.push("stale-while-revalidate");
- }
- } else if (opts.maxAge) {
- cacheControl.push(`max-age=${opts.maxAge}`);
- }
- if (cacheControl.length > 0) {
- headers["cache-control"] = cacheControl.join(", ");
- }
- const cacheEntry = {
- code: event.node.res.statusCode,
- headers,
- body
- };
- return cacheEntry;
- },
- _opts
- );
- return defineEventHandler(async (event) => {
- if (opts.headersOnly) {
- if (handleCacheHeaders(event, { maxAge: opts.maxAge })) {
- return;
- }
- return handler(event);
- }
- const response = await _cachedHandler(event);
- if (event.node.res.headersSent || event.node.res.writableEnded) {
- return response.body;
- }
- if (handleCacheHeaders(event, {
- modifiedTime: new Date(response.headers["last-modified"]),
- etag: response.headers.etag,
- maxAge: opts.maxAge
- })) {
- return;
- }
- event.node.res.statusCode = response.code;
- for (const name in response.headers) {
- const value = response.headers[name];
- if (name === "set-cookie") {
- event.node.res.appendHeader(
- name,
- splitCookiesString(value)
- );
- } else {
- event.node.res.setHeader(name, value);
- }
- }
- return response.body;
- });
-}
-function cloneWithProxy(obj, overrides) {
- return new Proxy(obj, {
- get(target, property, receiver) {
- if (property in overrides) {
- return overrides[property];
- }
- return Reflect.get(target, property, receiver);
- },
- set(target, property, value, receiver) {
- if (property in overrides) {
- overrides[property] = value;
- return true;
- }
- return Reflect.set(target, property, value, receiver);
- }
- });
-}
-const cachedEventHandler = defineCachedEventHandler;
-
-function hasReqHeader(event, name, includes) {
- const value = getRequestHeader(event, name);
- return value && typeof value === "string" && value.toLowerCase().includes(includes);
-}
-function isJsonRequest(event) {
- return hasReqHeader(event, "accept", "application/json") || hasReqHeader(event, "user-agent", "curl/") || hasReqHeader(event, "user-agent", "httpie/") || hasReqHeader(event, "sec-fetch-mode", "cors") || event.path.startsWith("/api/") || event.path.endsWith(".json");
-}
-function normalizeError(error) {
- const cwd = typeof process.cwd === "function" ? process.cwd() : "/";
- const stack = (error.stack || "").split("\n").splice(1).filter((line) => line.includes("at ")).map((line) => {
- const text = line.replace(cwd + "/", "./").replace("webpack:/", "").replace("file://", "").trim();
- return {
- text,
- internal: line.includes("node_modules") && !line.includes(".cache") || line.includes("internal") || line.includes("new Promise")
- };
- });
- const statusCode = error.statusCode || 500;
- const statusMessage = error.statusMessage ?? (statusCode === 404 ? "Not Found" : "");
- const message = error.message || error.toString();
- return {
- stack,
- statusCode,
- statusMessage,
- message
- };
-}
-function _captureError(error, type) {
- console.error(`[nitro] [${type}]`, error);
- useNitroApp().captureError(error, { tags: [type] });
-}
-function trapUnhandledNodeErrors() {
- process.on(
- "unhandledRejection",
- (error) => _captureError(error, "unhandledRejection")
- );
- process.on(
- "uncaughtException",
- (error) => _captureError(error, "uncaughtException")
- );
-}
-function joinHeaders(value) {
- return Array.isArray(value) ? value.join(", ") : String(value);
-}
-function normalizeFetchResponse(response) {
- if (!response.headers.has("set-cookie")) {
- return response;
- }
- return new Response(response.body, {
- status: response.status,
- statusText: response.statusText,
- headers: normalizeCookieHeaders(response.headers)
- });
-}
-function normalizeCookieHeader(header = "") {
- return splitCookiesString(joinHeaders(header));
-}
-function normalizeCookieHeaders(headers) {
- const outgoingHeaders = new Headers();
- for (const [name, header] of headers) {
- if (name === "set-cookie") {
- for (const cookie of normalizeCookieHeader(header)) {
- outgoingHeaders.append("set-cookie", cookie);
- }
- } else {
- outgoingHeaders.set(name, joinHeaders(header));
- }
- }
- return outgoingHeaders;
-}
-
-const config = useRuntimeConfig();
-const _routeRulesMatcher = toRouteMatcher(
- createRouter({ routes: config.nitro.routeRules })
-);
-function createRouteRulesHandler(ctx) {
- return eventHandler((event) => {
- const routeRules = getRouteRules(event);
- if (routeRules.headers) {
- setHeaders(event, routeRules.headers);
- }
- if (routeRules.redirect) {
- return sendRedirect(
- event,
- routeRules.redirect.to,
- routeRules.redirect.statusCode
- );
- }
- if (routeRules.proxy) {
- let target = routeRules.proxy.to;
- if (target.endsWith("/**")) {
- let targetPath = event.path;
- const strpBase = routeRules.proxy._proxyStripBase;
- if (strpBase) {
- targetPath = withoutBase(targetPath, strpBase);
- }
- target = joinURL(target.slice(0, -3), targetPath);
- } else if (event.path.includes("?")) {
- const query = getQuery(event.path);
- target = withQuery(target, query);
- }
- return proxyRequest(event, target, {
- fetch: ctx.localFetch,
- ...routeRules.proxy
- });
- }
- });
-}
-function getRouteRules(event) {
- event.context._nitro = event.context._nitro || {};
- if (!event.context._nitro.routeRules) {
- event.context._nitro.routeRules = getRouteRulesForPath(
- withoutBase(event.path.split("?")[0], useRuntimeConfig().app.baseURL)
- );
- }
- return event.context._nitro.routeRules;
-}
-function getRouteRulesForPath(path) {
- return defu({}, ..._routeRulesMatcher.matchAll(path).reverse());
-}
-
-const plugins = [
-
-];
-
-const isDev = "development" === "development";
-const errorHandler = (function(error, event) {
- const { stack, statusCode, statusMessage, message } = normalizeError(error);
- const showDetails = isDev && statusCode !== 404;
- const errorObject = {
- url: event.path || "",
- statusCode,
- statusMessage,
- message,
- stack: showDetails ? stack.map((i) => i.text) : void 0
- };
- if (error.unhandled || error.fatal) {
- const tags = [
- "[nitro]",
- "[request error]",
- error.unhandled && "[unhandled]",
- error.fatal && "[fatal]"
- ].filter(Boolean).join(" ");
- console.error(
- tags,
- error.message + "\n" + stack.map((l) => " " + l.text).join(" \n")
- );
- }
- setResponseStatus(event, statusCode, statusMessage);
- if (isJsonRequest(event)) {
- setResponseHeader(event, "Content-Type", "application/json");
- return send(event, JSON.stringify(errorObject));
- } else {
- setResponseHeader(event, "Content-Type", "text/html");
- return send(event, renderHTMLError(errorObject));
- }
-});
-function renderHTMLError(error) {
- const statusCode = error.statusCode || 500;
- const statusMessage = error.statusMessage || "Request Error";
- return `
-
-
-
-
- ${statusCode} ${statusMessage}
-
-
-
-
-
-
-
-
-`;
-}
-
-const _lazy_u0ICUT = () => Promise.resolve().then(function () { return ____auth_$1; });
-
-const handlers = [
- { route: '/**:auth', handler: _lazy_u0ICUT, lazy: true, middleware: false, method: undefined }
-];
-
-function createNitroApp() {
- const config = useRuntimeConfig();
- const hooks = createHooks();
- const captureError = (error, context = {}) => {
- const promise = hooks.callHookParallel("error", error, context).catch((_err) => {
- console.error("Error while capturing another error", _err);
- });
- if (context.event && isEvent(context.event)) {
- const errors = context.event.context.nitro?.errors;
- if (errors) {
- errors.push({ error, context });
- }
- if (context.event.waitUntil) {
- context.event.waitUntil(promise);
- }
- }
- };
- const h3App = createApp({
- debug: destr(true),
- onError: (error, event) => {
- captureError(error, { event, tags: ["request"] });
- return errorHandler(error, event);
- },
- onRequest: async (event) => {
- await nitroApp.hooks.callHook("request", event).catch((error) => {
- captureError(error, { event, tags: ["request"] });
- });
- },
- onBeforeResponse: async (event, response) => {
- await nitroApp.hooks.callHook("beforeResponse", event, response).catch((error) => {
- captureError(error, { event, tags: ["request", "response"] });
- });
- },
- onAfterResponse: async (event, response) => {
- await nitroApp.hooks.callHook("afterResponse", event, response).catch((error) => {
- captureError(error, { event, tags: ["request", "response"] });
- });
- }
- });
- const router = createRouter$1({
- preemptive: true
- });
- const localCall = createCall(toNodeListener(h3App));
- const _localFetch = createFetch(localCall, globalThis.fetch);
- const localFetch = (input, init) => _localFetch(input, init).then(
- (response) => normalizeFetchResponse(response)
- );
- const $fetch = createFetch$1({
- fetch: localFetch,
- Headers: Headers$1,
- defaults: { baseURL: config.app.baseURL }
- });
- globalThis.$fetch = $fetch;
- h3App.use(createRouteRulesHandler({ localFetch }));
- h3App.use(
- eventHandler((event) => {
- event.context.nitro = event.context.nitro || { errors: [] };
- const envContext = event.node.req?.__unenv__;
- if (envContext) {
- Object.assign(event.context, envContext);
- }
- event.fetch = (req, init) => fetchWithEvent(event, req, init, { fetch: localFetch });
- event.$fetch = (req, init) => fetchWithEvent(event, req, init, {
- fetch: $fetch
- });
- event.waitUntil = (promise) => {
- if (!event.context.nitro._waitUntilPromises) {
- event.context.nitro._waitUntilPromises = [];
- }
- event.context.nitro._waitUntilPromises.push(promise);
- if (envContext?.waitUntil) {
- envContext.waitUntil(promise);
- }
- };
- event.captureError = (error, context) => {
- captureError(error, { event, ...context });
- };
- })
- );
- for (const h of handlers) {
- let handler = h.lazy ? lazyEventHandler(h.handler) : h.handler;
- if (h.middleware || !h.route) {
- const middlewareBase = (config.app.baseURL + (h.route || "/")).replace(
- /\/+/g,
- "/"
- );
- h3App.use(middlewareBase, handler);
- } else {
- const routeRules = getRouteRulesForPath(
- h.route.replace(/:\w+|\*\*/g, "_")
- );
- if (routeRules.cache) {
- handler = cachedEventHandler(handler, {
- group: "nitro/routes",
- ...routeRules.cache
- });
- }
- router.use(h.route, handler, h.method);
- }
- }
- h3App.use(config.app.baseURL, router.handler);
- const app = {
- hooks,
- h3App,
- router,
- localCall,
- localFetch,
- captureError
- };
- for (const plugin of plugins) {
- try {
- plugin(app);
- } catch (err) {
- captureError(err, { tags: ["plugin"] });
- throw err;
- }
- }
- return app;
-}
-const nitroApp = createNitroApp();
-const useNitroApp = () => nitroApp;
-
-const server = new Server(toNodeListener(nitroApp.h3App));
-function getAddress() {
- if (provider === "stackblitz" || process.env.NITRO_NO_UNIX_SOCKET || process.versions.bun) {
- return 0;
- }
- const socketName = `worker-${process.pid}-${threadId}.sock`;
- if (isWindows) {
- return join("\\\\.\\pipe\\nitro", socketName);
- } else {
- const socketDir = join(tmpdir(), "nitro");
- mkdirSync(socketDir, { recursive: true });
- return join(socketDir, socketName);
- }
-}
-const listenAddress = getAddress();
-server.listen(listenAddress, () => {
- const _address = server.address();
- parentPort.postMessage({
- event: "listen",
- address: typeof _address === "string" ? { socketPath: _address } : { host: "localhost", port: _address.port }
- });
-});
-trapUnhandledNodeErrors();
-async function onShutdown(signal) {
- await nitroApp.hooks.callHook("close");
-}
-parentPort.on("message", async (msg) => {
- if (msg && msg.event === "shutdown") {
- await onShutdown();
- parentPort.postMessage({ event: "exit" });
- }
-});
-
-const ____auth_ = eventHandler(
- async (event) => Auth(toWebRequest(event), {
- secret: process.env.AUTH_SECRET,
- trustHost: !!process.env.VERCEL,
- redirectProxyUrl: process.env.AUTH_REDIRECT_PROXY_URL,
- providers: [
- Discord({
- clientId: process.env.AUTH_DISCORD_ID,
- clientSecret: process.env.AUTH_DISCORD_SECRET
- })
- ]
- })
-);
-
-const ____auth_$1 = /*#__PURE__*/Object.freeze({
- __proto__: null,
- default: ____auth_
-});
-//# sourceMappingURL=index.mjs.map
diff --git a/apps/auth-proxy/.nitro/dev/index.mjs.map b/apps/auth-proxy/.nitro/dev/index.mjs.map
deleted file mode 100644
index aa50194d..00000000
--- a/apps/auth-proxy/.nitro/dev/index.mjs.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.mjs","sources":["../../../../node_modules/nitropack/dist/runtime/config.mjs","../../../../node_modules/nitropack/dist/runtime/storage.mjs","../../../../node_modules/nitropack/dist/runtime/cache.mjs","../../../../node_modules/nitropack/dist/runtime/utils.mjs","../../../../node_modules/nitropack/dist/runtime/route-rules.mjs","../../../../node_modules/nitropack/dist/runtime/error.mjs","../../../../node_modules/nitropack/dist/runtime/app.mjs","../../../../node_modules/nitropack/dist/runtime/entries/nitro-dev.mjs","../../routes/[...auth].ts"],"sourcesContent":null,"names":["_inlineAppConfig","createRadixRouter","createRouter","createLocalFetch","createFetch","Headers"],"mappings":"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AA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,EAAE,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAC,CAAC,CAAA,CAAE,aAAa,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
\ No newline at end of file
diff --git a/apps/auth-proxy/.nitro/types/nitro-config.d.ts b/apps/auth-proxy/.nitro/types/nitro-config.d.ts
deleted file mode 100644
index 29f79398..00000000
--- a/apps/auth-proxy/.nitro/types/nitro-config.d.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-// Generated by nitro
-
-// App Config
-import type { Defu } from 'defu'
-
-
-
-type UserAppConfig = Defu<{}, []>
-
-declare module 'nitropack' {
- interface AppConfig extends UserAppConfig {}
-}
-
-export {}
\ No newline at end of file
diff --git a/apps/auth-proxy/.nitro/types/nitro-imports.d.ts b/apps/auth-proxy/.nitro/types/nitro-imports.d.ts
deleted file mode 100644
index 6245ccd4..00000000
--- a/apps/auth-proxy/.nitro/types/nitro-imports.d.ts
+++ /dev/null
@@ -1,116 +0,0 @@
-declare global {
- const appendCorsHeaders: typeof import('../../../../node_modules/h3')['appendCorsHeaders']
- const appendCorsPreflightHeaders: typeof import('../../../../node_modules/h3')['appendCorsPreflightHeaders']
- const appendHeader: typeof import('../../../../node_modules/h3')['appendHeader']
- const appendHeaders: typeof import('../../../../node_modules/h3')['appendHeaders']
- const appendResponseHeader: typeof import('../../../../node_modules/h3')['appendResponseHeader']
- const appendResponseHeaders: typeof import('../../../../node_modules/h3')['appendResponseHeaders']
- const assertMethod: typeof import('../../../../node_modules/h3')['assertMethod']
- const cachedEventHandler: typeof import('../../../../node_modules/nitropack/dist/runtime')['cachedEventHandler']
- const cachedFunction: typeof import('../../../../node_modules/nitropack/dist/runtime')['cachedFunction']
- const callNodeListener: typeof import('../../../../node_modules/h3')['callNodeListener']
- const clearResponseHeaders: typeof import('../../../../node_modules/h3')['clearResponseHeaders']
- const clearSession: typeof import('../../../../node_modules/h3')['clearSession']
- const createApp: typeof import('../../../../node_modules/h3')['createApp']
- const createAppEventHandler: typeof import('../../../../node_modules/h3')['createAppEventHandler']
- const createError: typeof import('../../../../node_modules/h3')['createError']
- const createEvent: typeof import('../../../../node_modules/h3')['createEvent']
- const createRouter: typeof import('../../../../node_modules/h3')['createRouter']
- const defaultContentType: typeof import('../../../../node_modules/h3')['defaultContentType']
- const defineCachedEventHandler: typeof import('../../../../node_modules/nitropack/dist/runtime')['defineCachedEventHandler']
- const defineCachedFunction: typeof import('../../../../node_modules/nitropack/dist/runtime')['defineCachedFunction']
- const defineEventHandler: typeof import('../../../../node_modules/h3')['defineEventHandler']
- const defineLazyEventHandler: typeof import('../../../../node_modules/h3')['defineLazyEventHandler']
- const defineNitroPlugin: typeof import('../../../../node_modules/nitropack/dist/runtime')['defineNitroPlugin']
- const defineNodeListener: typeof import('../../../../node_modules/h3')['defineNodeListener']
- const defineNodeMiddleware: typeof import('../../../../node_modules/h3')['defineNodeMiddleware']
- const defineRenderHandler: typeof import('../../../../node_modules/nitropack/dist/runtime')['defineRenderHandler']
- const defineRequestMiddleware: typeof import('../../../../node_modules/h3')['defineRequestMiddleware']
- const defineResponseMiddleware: typeof import('../../../../node_modules/h3')['defineResponseMiddleware']
- const deleteCookie: typeof import('../../../../node_modules/h3')['deleteCookie']
- const dynamicEventHandler: typeof import('../../../../node_modules/h3')['dynamicEventHandler']
- const eventHandler: typeof import('../../../../node_modules/h3')['eventHandler']
- const fetchWithEvent: typeof import('../../../../node_modules/h3')['fetchWithEvent']
- const fromNodeMiddleware: typeof import('../../../../node_modules/h3')['fromNodeMiddleware']
- const fromPlainHandler: typeof import('../../../../node_modules/h3')['fromPlainHandler']
- const fromWebHandler: typeof import('../../../../node_modules/h3')['fromWebHandler']
- const getCookie: typeof import('../../../../node_modules/h3')['getCookie']
- const getHeader: typeof import('../../../../node_modules/h3')['getHeader']
- const getHeaders: typeof import('../../../../node_modules/h3')['getHeaders']
- const getMethod: typeof import('../../../../node_modules/h3')['getMethod']
- const getProxyRequestHeaders: typeof import('../../../../node_modules/h3')['getProxyRequestHeaders']
- const getQuery: typeof import('../../../../node_modules/h3')['getQuery']
- const getRequestHeader: typeof import('../../../../node_modules/h3')['getRequestHeader']
- const getRequestHeaders: typeof import('../../../../node_modules/h3')['getRequestHeaders']
- const getRequestHost: typeof import('../../../../node_modules/h3')['getRequestHost']
- const getRequestIP: typeof import('../../../../node_modules/h3')['getRequestIP']
- const getRequestPath: typeof import('../../../../node_modules/h3')['getRequestPath']
- const getRequestProtocol: typeof import('../../../../node_modules/h3')['getRequestProtocol']
- const getRequestURL: typeof import('../../../../node_modules/h3')['getRequestURL']
- const getRequestWebStream: typeof import('../../../../node_modules/h3')['getRequestWebStream']
- const getResponseHeader: typeof import('../../../../node_modules/h3')['getResponseHeader']
- const getResponseHeaders: typeof import('../../../../node_modules/h3')['getResponseHeaders']
- const getResponseStatus: typeof import('../../../../node_modules/h3')['getResponseStatus']
- const getResponseStatusText: typeof import('../../../../node_modules/h3')['getResponseStatusText']
- const getRouteRules: typeof import('../../../../node_modules/nitropack/dist/runtime')['getRouteRules']
- const getRouterParam: typeof import('../../../../node_modules/h3')['getRouterParam']
- const getRouterParams: typeof import('../../../../node_modules/h3')['getRouterParams']
- const getSession: typeof import('../../../../node_modules/h3')['getSession']
- const getValidatedQuery: typeof import('../../../../node_modules/h3')['getValidatedQuery']
- const handleCacheHeaders: typeof import('../../../../node_modules/h3')['handleCacheHeaders']
- const handleCors: typeof import('../../../../node_modules/h3')['handleCors']
- const isCorsOriginAllowed: typeof import('../../../../node_modules/h3')['isCorsOriginAllowed']
- const isError: typeof import('../../../../node_modules/h3')['isError']
- const isEvent: typeof import('../../../../node_modules/h3')['isEvent']
- const isEventHandler: typeof import('../../../../node_modules/h3')['isEventHandler']
- const isMethod: typeof import('../../../../node_modules/h3')['isMethod']
- const isPreflightRequest: typeof import('../../../../node_modules/h3')['isPreflightRequest']
- const isStream: typeof import('../../../../node_modules/h3')['isStream']
- const isWebResponse: typeof import('../../../../node_modules/h3')['isWebResponse']
- const lazyEventHandler: typeof import('../../../../node_modules/h3')['lazyEventHandler']
- const nitroPlugin: typeof import('../../../../node_modules/nitropack/dist/runtime')['nitroPlugin']
- const parseCookies: typeof import('../../../../node_modules/h3')['parseCookies']
- const promisifyNodeListener: typeof import('../../../../node_modules/h3')['promisifyNodeListener']
- const proxyRequest: typeof import('../../../../node_modules/h3')['proxyRequest']
- const readBody: typeof import('../../../../node_modules/h3')['readBody']
- const readFormData: typeof import('../../../../node_modules/h3')['readFormData']
- const readMultipartFormData: typeof import('../../../../node_modules/h3')['readMultipartFormData']
- const readRawBody: typeof import('../../../../node_modules/h3')['readRawBody']
- const readValidatedBody: typeof import('../../../../node_modules/h3')['readValidatedBody']
- const removeResponseHeader: typeof import('../../../../node_modules/h3')['removeResponseHeader']
- const sanitizeStatusCode: typeof import('../../../../node_modules/h3')['sanitizeStatusCode']
- const sanitizeStatusMessage: typeof import('../../../../node_modules/h3')['sanitizeStatusMessage']
- const sealSession: typeof import('../../../../node_modules/h3')['sealSession']
- const send: typeof import('../../../../node_modules/h3')['send']
- const sendError: typeof import('../../../../node_modules/h3')['sendError']
- const sendNoContent: typeof import('../../../../node_modules/h3')['sendNoContent']
- const sendProxy: typeof import('../../../../node_modules/h3')['sendProxy']
- const sendRedirect: typeof import('../../../../node_modules/h3')['sendRedirect']
- const sendStream: typeof import('../../../../node_modules/h3')['sendStream']
- const sendWebResponse: typeof import('../../../../node_modules/h3')['sendWebResponse']
- const serveStatic: typeof import('../../../../node_modules/h3')['serveStatic']
- const setCookie: typeof import('../../../../node_modules/h3')['setCookie']
- const setHeader: typeof import('../../../../node_modules/h3')['setHeader']
- const setHeaders: typeof import('../../../../node_modules/h3')['setHeaders']
- const setResponseHeader: typeof import('../../../../node_modules/h3')['setResponseHeader']
- const setResponseHeaders: typeof import('../../../../node_modules/h3')['setResponseHeaders']
- const setResponseStatus: typeof import('../../../../node_modules/h3')['setResponseStatus']
- const splitCookiesString: typeof import('../../../../node_modules/h3')['splitCookiesString']
- const toEventHandler: typeof import('../../../../node_modules/h3')['toEventHandler']
- const toNodeListener: typeof import('../../../../node_modules/h3')['toNodeListener']
- const toPlainHandler: typeof import('../../../../node_modules/h3')['toPlainHandler']
- const toWebHandler: typeof import('../../../../node_modules/h3')['toWebHandler']
- const toWebRequest: typeof import('../../../../node_modules/h3')['toWebRequest']
- const unsealSession: typeof import('../../../../node_modules/h3')['unsealSession']
- const updateSession: typeof import('../../../../node_modules/h3')['updateSession']
- const useAppConfig: typeof import('../../../../node_modules/nitropack/dist/runtime')['useAppConfig']
- const useBase: typeof import('../../../../node_modules/h3')['useBase']
- const useEvent: typeof import('../../../../node_modules/nitropack/dist/runtime')['useEvent']
- const useNitroApp: typeof import('../../../../node_modules/nitropack/dist/runtime')['useNitroApp']
- const useRuntimeConfig: typeof import('../../../../node_modules/nitropack/dist/runtime')['useRuntimeConfig']
- const useSession: typeof import('../../../../node_modules/h3')['useSession']
- const useStorage: typeof import('../../../../node_modules/nitropack/dist/runtime')['useStorage']
- const writeEarlyHints: typeof import('../../../../node_modules/h3')['writeEarlyHints']
-}
-export { defineCachedFunction, defineCachedEventHandler, cachedFunction, cachedEventHandler, useRuntimeConfig, useStorage, useNitroApp, defineNitroPlugin, nitroPlugin, defineRenderHandler, getRouteRules, useAppConfig, useEvent } from '../../../../node_modules/nitropack/dist/runtime';
-export { appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, useBase, useSession, writeEarlyHints } from 'h3';
\ No newline at end of file
diff --git a/apps/auth-proxy/.nitro/types/nitro-routes.d.ts b/apps/auth-proxy/.nitro/types/nitro-routes.d.ts
deleted file mode 100644
index dc274261..00000000
--- a/apps/auth-proxy/.nitro/types/nitro-routes.d.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-// Generated by nitro
-import type { Serialize, Simplify } from 'nitropack'
-declare module 'nitropack' {
- type Awaited = T extends PromiseLike ? Awaited : T
- interface InternalApi {
- '/**:auth': {
- 'default': Simplify>>>
- }
- }
-}
-export {}
\ No newline at end of file
diff --git a/apps/auth-proxy/.nitro/types/nitro.d.ts b/apps/auth-proxy/.nitro/types/nitro.d.ts
deleted file mode 100644
index bf09bd4d..00000000
--- a/apps/auth-proxy/.nitro/types/nitro.d.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-///
-///
-///
\ No newline at end of file
diff --git a/apps/auth-proxy/.nitro/types/tsconfig.json b/apps/auth-proxy/.nitro/types/tsconfig.json
deleted file mode 100644
index 609f859b..00000000
--- a/apps/auth-proxy/.nitro/types/tsconfig.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "compilerOptions": {
- "forceConsistentCasingInFileNames": true,
- "strict": false,
- "target": "ESNext",
- "module": "ESNext",
- "moduleResolution": "Node",
- "allowJs": true,
- "resolveJsonModule": true,
- "jsx": "preserve",
- "allowSyntheticDefaultImports": true,
- "jsxFactory": "h",
- "jsxFragmentFactory": "Fragment",
- "paths": {
- "#imports": [
- "./nitro-imports"
- ]
- }
- },
- "include": [
- "./nitro.d.ts",
- "../../**/*"
- ]
-}
\ No newline at end of file
diff --git a/apps/auth-proxy/package.json b/apps/auth-proxy/package.json
index 8716875f..0fa5916c 100644
--- a/apps/auth-proxy/package.json
+++ b/apps/auth-proxy/package.json
@@ -11,17 +11,17 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@auth/core": "^0.18.1"
+ "@auth/core": "^0.18.3"
},
"devDependencies": {
"@realms-world/eslint-config": "workspace:*",
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tailwind-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "eslint": "^8.53.0",
- "nitropack": "^2.7.2",
- "prettier": "^3.0.3",
- "typescript": "^5.2.2"
+ "eslint": "^8.54.0",
+ "nitropack": "^2.8.0",
+ "prettier": "^3.1.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/apps/expo/package.json b/apps/expo/package.json
index e9f975d5..c033612d 100644
--- a/apps/expo/package.json
+++ b/apps/expo/package.json
@@ -17,9 +17,9 @@
"@expo/metro-config": "^0.10.7",
"@shopify/flash-list": "1.6.1",
"@tanstack/react-query": "4.35.7",
- "@trpc/client": "^10.43.3",
- "@trpc/react-query": "^10.43.3",
- "@trpc/server": "^10.43.3",
+ "@trpc/client": "^10.44.1",
+ "@trpc/react-query": "^10.44.1",
+ "@trpc/server": "^10.44.1",
"expo": "^49.0.13",
"expo-constants": "~14.4.2",
"expo-linking": "~6.0.0",
@@ -41,16 +41,16 @@
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tailwind-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "@babel/core": "^7.23.2",
- "@babel/preset-env": "^7.23.2",
- "@babel/runtime": "^7.23.2",
+ "@babel/core": "^7.23.3",
+ "@babel/preset-env": "^7.23.3",
+ "@babel/runtime": "^7.23.4",
"@expo/config-plugins": "^7.2.5",
- "@types/babel__core": "^7.20.3",
- "@types/react": "^18.2.37",
- "eslint": "^8.53.0",
- "prettier": "^3.0.3",
+ "@types/babel__core": "^7.20.5",
+ "@types/react": "^18.2.38",
+ "eslint": "^8.54.0",
+ "prettier": "^3.1.0",
"tailwindcss": "3.3.5",
- "typescript": "^5.2.2"
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/apps/homepages/realms-adventurers/page.tsx b/apps/homepages/realms-adventurers/page.tsx
index 0e461481..e4a7ecc6 100644
--- a/apps/homepages/realms-adventurers/page.tsx
+++ b/apps/homepages/realms-adventurers/page.tsx
@@ -12,7 +12,7 @@ export const metadata = {
};
export default function HomePage() {
- const game = games.find((game) => game.id === "realms-adventurers");
+ const game = games.find((game) => game.id === "realms-eternum");
if (!game) {
return;
diff --git a/apps/nextjs/config.yml b/apps/nextjs/config.yml
index 3674edd5..4d294e4b 100644
--- a/apps/nextjs/config.yml
+++ b/apps/nextjs/config.yml
@@ -1,8 +1,6 @@
schema:
- "https://dev-indexer-gu226.ondigitalocean.app/graphql"
documents:
- - "./src/app/utilities/realms-adventurers/graphql/**/*.graphql"
+ - "./src/app/utilities/realms-eternum/graphql/**/*.graphql"
generates:
- './src/generated/': {
- preset: 'client'
- }
\ No newline at end of file
+ "./src/generated/": { preset: "client" }
diff --git a/apps/nextjs/next.config.mjs b/apps/nextjs/next.config.mjs
index 2ee5e1b3..303e6a9f 100644
--- a/apps/nextjs/next.config.mjs
+++ b/apps/nextjs/next.config.mjs
@@ -59,7 +59,7 @@ const config = {
remotePatterns: [
{ protocol: "https", hostname: "loot-survivor.vercel.app" },
{ protocol: "https", hostname: "*.seadn.io" },
- { protocol: "https", hostname: "api.reservoir.tools" },
+ { protocol: "https", hostname: "*.reservoir.tools" },
{ protocol: "https", hostname: "raw.githubusercontent.com" },
{ protocol: "https", hostname: "blur.io" },
{ protocol: "https", hostname: "www.loot.exchange" },
diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json
index 6b735ee5..ddef8319 100644
--- a/apps/nextjs/package.json
+++ b/apps/nextjs/package.json
@@ -18,9 +18,9 @@
"@emotion/styled": "^11.11.0",
"@mdx-js/loader": "^3.0.0",
"@mdx-js/react": "^3.0.0",
- "@mui/material": "^5.14.17",
- "@mui/styles": "^5.14.17",
- "@next/mdx": "^14.0.2",
+ "@mui/material": "^5.14.18",
+ "@mui/styles": "^5.14.18",
+ "@next/mdx": "^14.0.3",
"@radix-ui/react-accessible-icon": "^1.0.3",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
@@ -51,9 +51,10 @@
"@radix-ui/react-tooltip": "^1.0.7",
"@realms-world/api": "workspace:*",
"@realms-world/auth": "workspace:*",
+ "@realms-world/constants": "workspace:*",
"@realms-world/db": "workspace:*",
"@realms-world/graphql-server": "workspace:*",
- "@reservoir0x/reservoir-kit-ui": "^1.18.4",
+ "@reservoir0x/reservoir-kit-ui": "^1.19.3",
"@starknet-react/chains": "next",
"@starknet-react/core": "next",
"@starkware-industries/commons-js-enums": "^1.2.0",
@@ -63,29 +64,29 @@
"@tailwindcss/typography": "^0.5.10",
"@tanstack/react-query": "4.35.7",
"@tanstack/react-query-devtools": "4.35.7",
- "@tanstack/react-query-next-experimental": "5.8.2",
- "@trpc/client": "^10.43.3",
- "@trpc/next": "^10.43.3",
- "@trpc/react-query": "^10.43.3",
- "@trpc/server": "^10.43.3",
+ "@tanstack/react-query-next-experimental": "5.8.7",
+ "@trpc/client": "^10.44.1",
+ "@trpc/next": "^10.44.1",
+ "@trpc/react-query": "^10.44.1",
+ "@trpc/server": "^10.44.1",
"class-variance-authority": "^0.7.0",
"cmdk": "^0.2.0",
"connectkit": "^1.5.3",
"embla-carousel-autoplay": "8.0.0-rc14",
"embla-carousel-react": "8.0.0-rc14",
- "framer-motion": "^10.16.4",
- "inngest": "^3.6.0",
+ "framer-motion": "^10.16.5",
+ "inngest": "^3.6.1",
"lodash": "4.17.21",
- "lucide-react": "^0.292.0",
- "next": "^14.0.2",
+ "lucide-react": "^0.293.0",
+ "next": "^14.0.3",
"react": "18.2.0",
"react-dom": "18.2.0",
- "starknet": "^5.19.5",
- "starknetkit": "^1.0.12",
+ "starknet": "^5.24.3",
+ "starknetkit": "^1.0.21",
"superjson": "2.2.1",
"tailwind-merge": "^2.0.0",
- "viem": "^1.19.0",
- "wagmi": "1.4.6",
+ "viem": "^1.19.9",
+ "wagmi": "1.4.7",
"zod": "^3.22.4"
},
"devDependencies": {
@@ -94,14 +95,14 @@
"@realms-world/tailwind-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
"@types/mdx": "^2.0.10",
- "@types/node": "^20.9.0",
- "@types/react": "^18.2.37",
- "@types/react-dom": "^18.2.15",
+ "@types/node": "^20.10.0",
+ "@types/react": "^18.2.38",
+ "@types/react-dom": "^18.2.17",
"dotenv-cli": "^7.3.0",
- "eslint": "^8.53.0",
- "prettier": "^3.0.3",
+ "eslint": "^8.54.0",
+ "prettier": "^3.1.0",
"tailwindcss": "3.3.5",
- "typescript": "^5.2.2"
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/apps/nextjs/public/games/realms-adventurers/background.png b/apps/nextjs/public/games/realms-eternum/background.png
similarity index 100%
rename from apps/nextjs/public/games/realms-adventurers/background.png
rename to apps/nextjs/public/games/realms-eternum/background.png
diff --git a/apps/nextjs/public/games/realms-adventurers/background.webp b/apps/nextjs/public/games/realms-eternum/background.webp
similarity index 100%
rename from apps/nextjs/public/games/realms-adventurers/background.webp
rename to apps/nextjs/public/games/realms-eternum/background.webp
diff --git a/apps/nextjs/public/games/realms-adventurers/cover.webp b/apps/nextjs/public/games/realms-eternum/cover.webp
similarity index 100%
rename from apps/nextjs/public/games/realms-adventurers/cover.webp
rename to apps/nextjs/public/games/realms-eternum/cover.webp
diff --git a/apps/nextjs/public/games/realms-adventurers/icon.png b/apps/nextjs/public/games/realms-eternum/icon.png
similarity index 100%
rename from apps/nextjs/public/games/realms-adventurers/icon.png
rename to apps/nextjs/public/games/realms-eternum/icon.png
diff --git a/apps/nextjs/public/games/realms-adventurers/screenshots/1.png b/apps/nextjs/public/games/realms-eternum/screenshots/1.png
similarity index 100%
rename from apps/nextjs/public/games/realms-adventurers/screenshots/1.png
rename to apps/nextjs/public/games/realms-eternum/screenshots/1.png
diff --git a/apps/nextjs/src/app/_components/Footer.tsx b/apps/nextjs/src/app/_components/Footer.tsx
index 72d2b498..0090832a 100644
--- a/apps/nextjs/src/app/_components/Footer.tsx
+++ b/apps/nextjs/src/app/_components/Footer.tsx
@@ -22,7 +22,7 @@ export const Footer = () => {
];
return (
-
+
Realms.World
diff --git a/apps/nextjs/src/app/_components/NumberSelect.tsx b/apps/nextjs/src/app/_components/NumberSelect.tsx
index dcf8ece4..4071812b 100644
--- a/apps/nextjs/src/app/_components/NumberSelect.tsx
+++ b/apps/nextjs/src/app/_components/NumberSelect.tsx
@@ -23,7 +23,7 @@ const NumberSelect = ({ onChange, min, max }: Props) => {
max={max}
onChange={handleNumber1Change}
placeholder="Enter a number"
- className="mt-1 block w-full rounded-md bg-black/60 p-2 focus:outline-none focus:ring-2 focus:ring-blue-100"
+ className="bg-dark-green focus:ring-bright-yellow/70 block w-full rounded-md border p-2 focus:outline-none focus:ring-2"
/>
);
};
diff --git a/apps/nextjs/src/app/_components/SideMenu.tsx b/apps/nextjs/src/app/_components/SideMenu.tsx
index 6924dabb..3f046d0a 100644
--- a/apps/nextjs/src/app/_components/SideMenu.tsx
+++ b/apps/nextjs/src/app/_components/SideMenu.tsx
@@ -2,45 +2,45 @@
import Link from "next/link";
import { useRouter } from "next/navigation";
+import Album from "@/icons/album.svg";
+import Bridge from "@/icons/bridge.svg";
+import Coins from "@/icons/coins.svg";
+import Crown from "@/icons/crown.svg";
import Discord from "@/icons/discord.svg";
+import Gamepad from "@/icons/gamepad.svg";
import RWLogo from "@/icons/rw-logo.svg";
-import {
- Backpack,
- Coins,
- DoorOpen,
- Github,
- Map,
- Twitter,
- X,
-} from "lucide-react";
+import SideHeaderImg from "@/icons/side-header.svg";
+import { Github, Twitter, X } from "lucide-react";
import { useUIContext } from "../providers/UIProvider";
import { Button } from "./ui/button";
+import { ScrollArea } from "./ui/scroll-area";
+import { WalletSheet } from "./wallet/WalletSheet";
const Sidebar = () => {
const { isSidebarOpen, toggleSidebar } = useUIContext();
const router = useRouter();
const menu = [
- {
- name: "Collections",
- href: "/collection",
- icon:
,
- },
{
name: "Games",
href: "/games",
- icon:
,
+ icon:
,
+ },
+ {
+ name: "Collections",
+ href: "/collection",
+ icon:
,
},
{
name: "Bridge",
href: "/bridge",
- icon:
,
+ icon:
,
},
{
name: "Staking",
href: "/staking",
- icon:
,
+ icon:
,
},
];
@@ -70,53 +70,76 @@ const Sidebar = () => {
-
+
-
-
+
+
+
+
+
+
+
+
+ {menu.map((item, index) => {
+ return (
+
- );
- })}
-
-
- {social.map((item, index) => {
- return (
-
- {item.icon}
-
- );
- })}
+
+
+
+
+ {social.map((item, index) => {
+ return (
+
+ {item.icon}
+
+ );
+ })}
+
+
+
+
+
+
+ Connect Wallet
+
+
+
+
+
+
+
);
diff --git a/apps/nextjs/src/app/_components/TopNav.tsx b/apps/nextjs/src/app/_components/TopNav.tsx
index 3e6d372b..ce17116e 100644
--- a/apps/nextjs/src/app/_components/TopNav.tsx
+++ b/apps/nextjs/src/app/_components/TopNav.tsx
@@ -1,11 +1,11 @@
"use client";
-import { Button } from "./ui/button";
-import { useMotionValueEvent, useScroll } from "framer-motion";
import { useState } from "react";
+import { useMotionValueEvent, useScroll } from "framer-motion";
import { Menu } from "lucide-react";
+
import { useUIContext } from "../providers/UIProvider";
-import { WalletSheet } from "./wallet/WalletSheet";
+import { Button } from "./ui/button";
export const TopNav = () => {
const { scrollY } = useScroll();
@@ -20,15 +20,12 @@ export const TopNav = () => {
return (
-
);
diff --git a/apps/nextjs/src/app/_components/modal/stepper.tsx b/apps/nextjs/src/app/_components/modal/stepper.tsx
index 98ff7261..3f76f9cc 100644
--- a/apps/nextjs/src/app/_components/modal/stepper.tsx
+++ b/apps/nextjs/src/app/_components/modal/stepper.tsx
@@ -1,10 +1,10 @@
"use client";
-import { Step, StepLabel, Stepper as MuiStepper } from "@mui/material";
-import PropTypes from "prop-types";
-import React from "react";
+import React from "react";
+import { Stepper as MuiStepper, Step, StepLabel } from "@mui/material";
+import { blue, blueGrey, lightBlue } from "@mui/material/colors";
import { createTheme, ThemeProvider } from "@mui/material/styles";
-import { blue, lightBlue, blueGrey } from "@mui/material/colors";
+import PropTypes from "prop-types";
export interface StepperProps {
children: React.ReactNode;
@@ -18,10 +18,14 @@ export const StepperTheme: React.FC
= ({
styleOverrides: {
root: {
".MuiSvgIcon-root": {
- color: blueGrey,
+ color: "#4D4E46",
fontSize: "32px",
+
"&.Mui-completed, &.Mui-active": {
- color: blueGrey,
+ color: "#FBE1BB",
+ },
+ ".MuiStepIcon-text": {
+ fill: blueGrey,
},
},
},
@@ -45,7 +49,7 @@ export const StepperTheme: React.FC = ({
"&.MuiStepLabel-alternativeLabel": {
marginTop: "8px",
fontWeight: "900",
- color: "white",
+ color: "#FBE1BB",
},
},
},
diff --git a/apps/nextjs/src/app/_components/ui/button.tsx b/apps/nextjs/src/app/_components/ui/button.tsx
index 8ed47efa..6206c8a2 100644
--- a/apps/nextjs/src/app/_components/ui/button.tsx
+++ b/apps/nextjs/src/app/_components/ui/button.tsx
@@ -7,7 +7,7 @@ import type { VariantProps } from "class-variance-authority";
import { cva } from "class-variance-authority";
const buttonVariants = cva(
- "active:scale-95 inline-flex items-center justify-center rounded-md transition-colors disabled:opacity-50 dark:focus:ring-slate-400 disabled:pointer-events-none dark:focus:ring-offset-slate-900 data-[state=open]:bg-bright-yellow/60 dark:data-[state=open]:bg-medium-dark-green uppercase border border-transparent ",
+ "active:scale-95 inline-flex items-center justify-center rounded-md transition-colors disabled:opacity-50 dark:focus:ring-slate-400 disabled:pointer-events-none dark:focus:ring-offset-slate-900 data-[state=open]:text-bright-yellow/60 data-[state=open]:bg-medium-dark-green uppercase border border-transparent ",
{
variants: {
variant: {
@@ -19,8 +19,7 @@ const buttonVariants = cva(
"bg-transparent border hover:bg-bright-yellow/50 border-medium-dark-green",
subtle:
"bg-slate-100 text-slate-900 hover:bg-slate-200 dark:bg-gray-700 dark:text-slate-100 border",
- ghost:
- "bg-transparent hover:bg-gray-700 dark:text-bright-yellow dark:hover:text-slate-100 data-[state=open]:bg-transparent dark:data-[state=open]:bg-transparent hover:border",
+ ghost: "bg-transparent hover:text-flamingo hover:border",
link: "bg-transparent dark:bg-transparent underline-offset-4 hover:underline text-slate-900 dark:text-slate-100 hover:bg-transparent dark:hover:bg-transparent",
},
size: {
diff --git a/apps/nextjs/src/app/_components/ui/dialog.tsx b/apps/nextjs/src/app/_components/ui/dialog.tsx
index 4f793fde..883f37b5 100644
--- a/apps/nextjs/src/app/_components/ui/dialog.tsx
+++ b/apps/nextjs/src/app/_components/ui/dialog.tsx
@@ -39,7 +39,7 @@ const DialogOverlay = React.forwardRef<
asChild
>
diff --git a/apps/nextjs/src/app/_components/ui/scroll-area.tsx b/apps/nextjs/src/app/_components/ui/scroll-area.tsx
index d16a334a..744b4d4e 100644
--- a/apps/nextjs/src/app/_components/ui/scroll-area.tsx
+++ b/apps/nextjs/src/app/_components/ui/scroll-area.tsx
@@ -39,7 +39,7 @@ const ScrollBar = React.forwardRef<
)}
{...props}
>
-
+
));
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
diff --git a/apps/nextjs/src/app/_components/ui/switch.tsx b/apps/nextjs/src/app/_components/ui/switch.tsx
index 6e761747..d444bdb1 100644
--- a/apps/nextjs/src/app/_components/ui/switch.tsx
+++ b/apps/nextjs/src/app/_components/ui/switch.tsx
@@ -10,7 +10,7 @@ const Switch = React.forwardRef<
>(({ className, ...props }, ref) => (
["variant"];
+ textClass?: string;
+ buttonClass?: string;
}) => {
const { connectors, isLoading } = useConnect();
const modal = useModal({
@@ -31,32 +35,38 @@ export const EthereumLoginButton = ({
{({ show, isConnected, isConnecting, truncatedAddress, ensName }) => (
(isConnected ? toggleAccount() : show?.())}
>
-
- {isConnected ? (
- ensName ?? truncatedAddress
- ) : (
- <>
- Connect Ethereum
- {isConnecting ||
- (isLoading && (
-
-
-
- ))}
- >
- )}
+
+
+ {isConnected ? (
+ ensName ?? truncatedAddress
+ ) : (
+ <>
+ Ethereum
+ {isConnecting ||
+ (isLoading && (
+
+
+
+ ))}
+ >
+ )}
+
)}
diff --git a/apps/nextjs/src/app/_components/wallet/StarknetLoginButton.tsx b/apps/nextjs/src/app/_components/wallet/StarknetLoginButton.tsx
index 96b1892e..ec1bbae2 100644
--- a/apps/nextjs/src/app/_components/wallet/StarknetLoginButton.tsx
+++ b/apps/nextjs/src/app/_components/wallet/StarknetLoginButton.tsx
@@ -3,13 +3,21 @@ import { useUIContext } from "@/app/providers/UIProvider";
import StarknetLogo from "@/icons/starknet.svg";
import { shortenHex } from "@/utils/utils";
import { useAccount as useL2Account } from "@starknet-react/core";
+import type { VariantProps } from "class-variance-authority";
+import type { buttonVariants } from "../ui/button";
import { Button } from "../ui/button";
export const StarknetLoginButton = ({
openAccount = false,
+ variant,
+ textClass,
+ buttonClass,
}: {
openAccount?: boolean;
+ variant?: VariantProps["variant"];
+ textClass?: string;
+ buttonClass?: string;
}) => {
const { address, isConnected } = useL2Account();
const { isAccountOpen, toggleAccount, toggleStarknetLogin } = useUIContext();
@@ -22,19 +30,20 @@ export const StarknetLoginButton = ({
return (
-
-
- {address && isConnected ? (
- <>{shortenHex(address, 8)}>
- ) : (
- Connect Starknet
- )}
+
+
+ {address && isConnected ? <>{shortenHex(address, 8)}> : "Starknet"}
+
);
diff --git a/apps/nextjs/src/app/_components/wallet/WalletSheet.tsx b/apps/nextjs/src/app/_components/wallet/WalletSheet.tsx
index f0d20290..6184ea96 100644
--- a/apps/nextjs/src/app/_components/wallet/WalletSheet.tsx
+++ b/apps/nextjs/src/app/_components/wallet/WalletSheet.tsx
@@ -104,14 +104,24 @@ export const WalletSheet = () => {
];
return (
<>
-
-
-
+
+
+
-
+
{
networkName: string,
networkLogo: JSX.Element,
isWithdraw: boolean,
+ isL2?: boolean,
) => {
return (
<>
@@ -57,7 +58,7 @@ export const Transfer = ({ action }: { action: string }) => {
{
);
};
- const renderL1Network = () => {
+ const renderL1Network = (action) => {
return renderNetwork(
"Ethereum",
,
- false,
+ action != "withdraw",
);
};
- const renderL2Network = () => {
+ const renderL2Network = (action) => {
return renderNetwork(
"Starknet",
,
+ action == "withdraw",
true,
);
};
@@ -107,7 +109,9 @@ export const Transfer = ({ action }: { action: string }) => {
<>
- {action == "withdraw" ? renderL2Network() : renderL1Network()}
+ {action == "withdraw"
+ ? renderL2Network(action)
+ : renderL1Network(action)}
{renderTokenInput()}
{/*allowance: {allowance?.toString()}*/}
@@ -128,26 +132,29 @@ export const Transfer = ({ action }: { action: string }) => {
- {action == "withdraw" ? renderL1Network() : renderL2Network()}
+ {action == "withdraw"
+ ? renderL1Network(action)
+ : renderL2Network(action)}
+
+
+ {!l1Account && }
+ {!l2Account && }
+ {l1Account && l2Account && (
+ onTransferClick()}
+ size={"lg"}
+ disabled={amount == "0"}
+ variant={"default"}
+ >
+ {amount == "0"
+ ? "Please Enter Amount"
+ : action == "deposit"
+ ? "Transfer to L2"
+ : "Transfer to L1"}
+
+ )}
-
- {!l1Account &&
}
- {!l2Account &&
}
- {l1Account && l2Account && (
-
onTransferClick()}
- size={"lg"}
- disabled={amount == "0"}
- variant={"default"}
- >
- {!amount
- ? "Please Enter Amount"
- : action == "deposit"
- ? "Transfer to L2"
- : "Transfer to L1"}
-
- )}
>
);
diff --git a/apps/nextjs/src/app/collection/AttributesDropdown.tsx b/apps/nextjs/src/app/collection/AttributesDropdown.tsx
index c1aca7fc..b1ac7d0d 100644
--- a/apps/nextjs/src/app/collection/AttributesDropdown.tsx
+++ b/apps/nextjs/src/app/collection/AttributesDropdown.tsx
@@ -37,54 +37,56 @@ export const AttributesDropdown = ({ address, attributes }: any) => {
{attribute.key}
- {attribute.kind === "string" && (
-
- {attribute.values.map((a: any, i: any) => {
- return (
-
- handleAttributeClick(
- attribute.key,
- a.value,
- attribute.key == "Resource",
- )
- }
- className="my-1 mr-1"
- >
- {a.value}
-
- );
- })}
-
- )}
+
+ {attribute.kind === "string" && (
+
+ {attribute.values.map((a: any, i: any) => {
+ return (
+
+ handleAttributeClick(
+ attribute.key,
+ a.value,
+ attribute.key == "Resource",
+ )
+ }
+ className="my-1 mr-1"
+ >
+ {a.value}
+
+ );
+ })}
+
+ )}
- {attribute.kind === "number" && (
-
-
- handleAttributeClick(attribute.key, value)
- }
- />
-
- handleAttributeClick(attribute.key, "")
- }
- >
- clear
-
-
- )}
+ {attribute.kind === "number" && (
+
+
+ handleAttributeClick(attribute.key, value)
+ }
+ />
+
+ handleAttributeClick(attribute.key, "")
+ }
+ >
+ clear
+
+
+ )}
+
diff --git a/apps/nextjs/src/app/collection/CollectionSummary.tsx b/apps/nextjs/src/app/collection/CollectionSummary.tsx
index 9b27dd37..b9fea2ac 100644
--- a/apps/nextjs/src/app/collection/CollectionSummary.tsx
+++ b/apps/nextjs/src/app/collection/CollectionSummary.tsx
@@ -1,7 +1,6 @@
import Image from "next/image";
import Link from "next/link";
import type { erc721Tokens } from "@/constants";
-import { games } from "@/constants";
import Discord from "@/icons/discord.svg";
import { getCollections } from "@/lib/reservoir/getCollections";
import { getGamesByContract } from "@/utils/getters";
@@ -9,6 +8,8 @@ import { getTokenContractAddresses } from "@/utils/utils";
import { ExternalLink, Globe, Twitter } from "lucide-react";
import { formatEther } from "viem";
+import { games } from "@realms-world/constants";
+
import L2CollectionSummary from "./L2CollectionSummary";
export default async function CollectionSummary({
diff --git a/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Card.tsx b/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Card.tsx
index 24e52d7d..03612275 100644
--- a/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Card.tsx
+++ b/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Card.tsx
@@ -36,7 +36,8 @@ export const L2ERC721Card = (props: TokenCardProps) => {
if(!token.name) {
}*/
- const starkName = useStarkDisplayName(token.owner);
+ const tokenOwner = token.transfers[0]?.toAddress ?? token.minter;
+ const starkName = useStarkDisplayName(tokenOwner ?? undefined);
function renderAttribute(token: typeof props.token, traitType: string) {
const attribute = token.metadata?.attributes.find(
diff --git a/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Table.tsx b/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Table.tsx
index 1f43fce9..afa8dffa 100644
--- a/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Table.tsx
+++ b/apps/nextjs/src/app/collection/[id]/(list)/L2ERC721Table.tsx
@@ -29,7 +29,7 @@ export const L2ERC721Table = ({
const sortDirection = searchParams.get("sortDirection");
const filters = {
- limit: 10,
+ limit: 20,
contractAddress,
direction: sortDirection,
};
@@ -47,7 +47,7 @@ export const L2ERC721Table = ({
useEffect(() => {
console.log("Element is in view: ", isInView);
if (isInView) {
- !isFetching && fetchNextPage();
+ fetchNextPage();
}
}, [fetchNextPage, isInView]);
@@ -73,7 +73,7 @@ export const L2ERC721Table = ({
ref={ref}
className="mt-6 grid grid-cols-1 gap-4 sm:pl-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5"
>
- {Array.from({ length: 5 }).map((_, index) => (
+ {Array.from({ length: 10 }).map((_, index) => (
))}
diff --git a/apps/nextjs/src/app/collection/[id]/(list)/analytics/OwnerDistribution.tsx b/apps/nextjs/src/app/collection/[id]/(list)/analytics/OwnerDistribution.tsx
index a5a2deb0..b328ec9c 100644
--- a/apps/nextjs/src/app/collection/[id]/(list)/analytics/OwnerDistribution.tsx
+++ b/apps/nextjs/src/app/collection/[id]/(list)/analytics/OwnerDistribution.tsx
@@ -2,7 +2,7 @@
import { Progress } from "@/app/_components/ui/progress";
-//import PieChart from "@/homepages/realms-adventurers/components/PieChart";
+//import PieChart from "@/homepages/realms-eternum/components/PieChart";
export const OwnerDistribution = ({
ownersDistribution,
diff --git a/apps/nextjs/src/app/collection/[id]/(list)/analytics/TopOwners.tsx b/apps/nextjs/src/app/collection/[id]/(list)/analytics/TopOwners.tsx
index fd29385e..97a29b30 100644
--- a/apps/nextjs/src/app/collection/[id]/(list)/analytics/TopOwners.tsx
+++ b/apps/nextjs/src/app/collection/[id]/(list)/analytics/TopOwners.tsx
@@ -1,12 +1,12 @@
"use client";
import Link from "next/link";
+import { ScrollArea } from "@/app/_components/ui/scroll-area";
import { NETWORK_NAME } from "@/constants/env";
import { stakingAddresses } from "@/constants/staking";
//import { Progress } from "@/app/_components/ui/progress";
-//import Table from "@/app/homepages/realms-adventurers/components/Table";
+//import Table from "@/app/homepages/realms-eternum/components/Table";
import { shortenHex } from "@/utils/utils";
-import * as ScrollArea from "@radix-ui/react-scroll-area";
//import { useOwnerListings } from "@reservoir0x/reservoir-kit-ui";
@@ -30,42 +30,25 @@ export const TopOwners = ({
On Sale
% Owned
-
-
- {owners?.map((owner) => (
-
-
-
- {owner.address === stakingAddresses[NETWORK_NAME].v1Galleon
- ? "Galleon Staking"
- : owner.address ===
+
+ {owners?.map((owner) => (
+
+
+
+ {owner.address === stakingAddresses[NETWORK_NAME].v1Galleon
+ ? "Galleon Staking"
+ : owner.address ===
stakingAddresses[NETWORK_NAME].v2Carrack.toLowerCase()
? "Carrack Staking"
: shortenHex(owner.address, 8)}
-
-
-
{owner.ownership.tokenCount}
-
{owner.ownership.onSaleCount}
-
- {((owner.ownership.tokenCount / 8000) * 100).toFixed(2)}
-
+
- ))}
-
-
-
-
-
-
-
-
-
+ {owner.ownership.tokenCount}
+ {owner.ownership.onSaleCount}
+ {((owner.ownership.tokenCount / 8000) * 100).toFixed(2)}
+
+ ))}
+
);
};
diff --git a/apps/nextjs/src/app/collection/[id]/(list)/analytics/page.tsx b/apps/nextjs/src/app/collection/[id]/(list)/analytics/page.tsx
index ca362776..5c723c89 100644
--- a/apps/nextjs/src/app/collection/[id]/(list)/analytics/page.tsx
+++ b/apps/nextjs/src/app/collection/[id]/(list)/analytics/page.tsx
@@ -27,7 +27,10 @@ export default async function Page({ params }: { params: { id: string } }) {
return (
{cards.map((card, index) => (
-
+
{card.component}
))}
diff --git a/apps/nextjs/src/app/collection/[id]/(list)/layout.tsx b/apps/nextjs/src/app/collection/[id]/(list)/layout.tsx
index 5d266268..86016056 100644
--- a/apps/nextjs/src/app/collection/[id]/(list)/layout.tsx
+++ b/apps/nextjs/src/app/collection/[id]/(list)/layout.tsx
@@ -72,6 +72,7 @@ export default function RootLayout({
{
+export const GameCard = async ({ game }: GameCardProps) => {
+ const gameIconPng = `/games/${game.id}/icon.png`;
+
+ const isImageFound = async (imageName: string) => {
+ return await fetch(
+ (process.env.VERCEL_URL
+ ? "https://" + process.env.VERCEL_URL
+ : "http://localhost:3000") + imageName,
+ {
+ method: "HEAD",
+ },
+ );
+ };
+ let imageName;
+ const result = await isImageFound(gameIconPng);
+ if (result.status === 200) {
+ imageName = gameIconPng;
+ } else {
+ imageName = `/games/${game.id}/icon.svg`;
+ }
+
return (
-
-
{game.name}
-
{game.description}
+
-
*/}
);
};
diff --git a/apps/nextjs/src/app/games/[id]/GameScreenshots.tsx b/apps/nextjs/src/app/games/[id]/GameScreenshots.tsx
new file mode 100644
index 00000000..4ca905ad
--- /dev/null
+++ b/apps/nextjs/src/app/games/[id]/GameScreenshots.tsx
@@ -0,0 +1,39 @@
+"use client";
+
+import { promises as fs } from "fs";
+import path from "path";
+import { useEffect, useState } from "react";
+import { Carousel } from "@/app/_components/ui/carousel";
+
+export const GameScreenshots = async ({ id }: { id: string }) => {
+ const [screenshotList, setScreenshotList] =
+ useState<{ src: string; alt: string }[]>();
+ useEffect(() => {
+ const fetchData = async () => {
+ const data = await fs.readdir(path.join(dir));
+ setScreenshotList(
+ data.map((image, index) => ({
+ src: `/games/${id}/screenshots/${image}`,
+ alt: `${id} Screenshot ${index}`,
+ })),
+ );
+ };
+
+ const dirRelativeToPublicFolder = `games/${id}/screenshots`;
+ const dir = path.resolve("public", dirRelativeToPublicFolder);
+ fetchData();
+ //TODO not working in Vercel production
+ }, []);
+ return (
+ <>
+ {screenshotList && (
+
+ )}
+ >
+ );
+};
diff --git a/apps/nextjs/src/app/games/[id]/page.tsx b/apps/nextjs/src/app/games/[id]/page.tsx
index 9b8b9a3e..3d7d8c92 100644
--- a/apps/nextjs/src/app/games/[id]/page.tsx
+++ b/apps/nextjs/src/app/games/[id]/page.tsx
@@ -9,7 +9,8 @@ import {
TabsList,
TabsTrigger,
} from "@/app/_components/ui/tabs";
-import { games } from "@/constants/games";
+
+import { CHAIN_IDS_TO_NAMES, games } from "@realms-world/constants";
export async function generateMetadata({
params,
@@ -25,13 +26,19 @@ export async function generateMetadata({
export default async function Page({ params }: { params: { id: string } }) {
const game = games.find((game) => game.id === params.id);
- /* const dirRelativeToPublicFolder = `games/${params.id}/screenshots`;
+ /*const dirRelativeToPublicFolder = `games/${params.id}/screenshots`;
const dir = path.resolve("public", dirRelativeToPublicFolder);
const screenshotFiles = await fs.readdir(path.join(dir));
const screenshotList = screenshotFiles.map((image, index) => ({
src: `/games/${params.id}/screenshots/${image}`,
alt: `${game?.name} Screenshot ${index}`,
- }));*/ //TODO not working in Vercel production
+ })); */ //TODO not working in Vercel production
+
+ const screenshotList = new Array(game?.screenshotLength);
+ const list = [...screenshotList].map((image, index) => ({
+ src: `/games/${params.id}/screenshots/${index + 1}.png`,
+ alt: `${game?.name} Screenshot ${index + 1}`,
+ }));
const tabs = [
{
@@ -40,13 +47,18 @@ export default async function Page({ params }: { params: { id: string } }) {
},
{
- name: "Tokens",
+ name: "Assets",
content: (
- {game?.compatibleTokens?.map((token, index) => (
-
- {token.name}
+ {game?.tokens?.map((token, index) => (
+
+ {token}
+
+ ))}
+ {game?.collections?.map((collection, index) => (
+
+ {collection}
))}
@@ -60,17 +72,16 @@ export default async function Page({ params }: { params: { id: string } }) {
{game && (
<>
- {game.screenshots && (
-
+ {game.screenshotLength && (
+
)}
- {game?.chains.map((a, i) =>
chain: {a}
)}
+ {game?.chains.map((a, i) => (
+
+ chain: {CHAIN_IDS_TO_NAMES[a].replace(/_/g, " ")}
+
+ ))}
|
status: {game?.status}
@@ -86,11 +97,11 @@ export default async function Page({ params }: { params: { id: string } }) {
White paper
)}
- {game?.links.website && (
+ {game?.links.homepage && (
Website
diff --git a/apps/nextjs/src/app/games/page.tsx b/apps/nextjs/src/app/games/page.tsx
index a33b6cc8..8347fda8 100644
--- a/apps/nextjs/src/app/games/page.tsx
+++ b/apps/nextjs/src/app/games/page.tsx
@@ -1,6 +1,7 @@
import { GameCard } from "@/app/games/GameCard";
-import { games } from "@/constants";
-import type { Game } from "@/types";
+
+import type { Game } from "@realms-world/constants";
+import { games } from "@realms-world/constants";
export const metadata = {
title: "Games of the Realms",
diff --git a/apps/nextjs/src/app/layout.tsx b/apps/nextjs/src/app/layout.tsx
index edc161d8..78104b8d 100644
--- a/apps/nextjs/src/app/layout.tsx
+++ b/apps/nextjs/src/app/layout.tsx
@@ -17,7 +17,7 @@ import { WalletsProvider } from "./providers/WalletsProvider";
const baiJamjuree = Bai_Jamjuree({
subsets: ["latin"],
variable: "--font-bai-jamjuree",
- weight: ["500", "700"],
+ weight: ["500", "600", "700"],
display: "swap",
});
diff --git a/apps/nextjs/src/app/page.tsx b/apps/nextjs/src/app/page.tsx
index eda8f95b..a100de7b 100644
--- a/apps/nextjs/src/app/page.tsx
+++ b/apps/nextjs/src/app/page.tsx
@@ -3,12 +3,14 @@ import Link from "next/link";
import { CollectionCard } from "@/app/_components/CollectionCard";
import { Carousel } from "@/app/_components/ui/carousel";
import { GameCard } from "@/app/games/GameCard";
-import { games } from "@/constants";
import DojoDark from "@/icons/mark-dark.svg";
import RWLogo from "@/icons/rw-logo.svg";
import Starknet from "@/icons/starknet.svg";
import { getCollections } from "@/lib/reservoir/getCollections";
-import type { Collection, Game } from "@/types";
+import type { Collection } from "@/types";
+
+import type { Game } from "@realms-world/constants";
+import { games } from "@realms-world/constants";
import CollectionsList from "./collection/CollectionsList";
@@ -32,7 +34,7 @@ export default async function Home() {
};*/
return (
-
+
diff --git a/apps/nextjs/src/app/providers/TransferLogProvider/transfer-log-hooks.ts b/apps/nextjs/src/app/providers/TransferLogProvider/transfer-log-hooks.ts
index a7a8dcce..1f2d7a78 100644
--- a/apps/nextjs/src/app/providers/TransferLogProvider/transfer-log-hooks.ts
+++ b/apps/nextjs/src/app/providers/TransferLogProvider/transfer-log-hooks.ts
@@ -5,7 +5,7 @@ import { isDeposit } from "@/types/bridge";
import { TransferLogContext } from "./transfer-log-context";
-export const useTransferLog = (isL1: boolean = true) => {
+export const useTransferLog = (isL1 = true) => {
const { transfersQueryL1, transfersQueryL2 } = useContext(TransferLogContext);
const query = isL1 ? transfersQueryL1 : transfersQueryL2;
return useMemo(() => {
@@ -75,7 +75,6 @@ function isIterable(input) {
}
const flattenPages = (data: any) => {
- console.log(data);
return data?.pages.length
? [
...(data?.pages?.[0]?.data.withdrawals || []),
diff --git a/apps/nextjs/src/app/providers/WalletsProvider/WalletsProvider.tsx b/apps/nextjs/src/app/providers/WalletsProvider/WalletsProvider.tsx
index 48ecce41..8837614c 100644
--- a/apps/nextjs/src/app/providers/WalletsProvider/WalletsProvider.tsx
+++ b/apps/nextjs/src/app/providers/WalletsProvider/WalletsProvider.tsx
@@ -82,7 +82,7 @@ export const WalletsProvider: React.FC
= ({
abi: L2_C1ERC20,
functionName: "balance_of",
enabled: !!l2Account,
- args: [l2Account],
+ args: l2Account ? [l2Account] : undefined,
watch: true,
});
@@ -91,7 +91,7 @@ export const WalletsProvider: React.FC = ({
abi: L2_ERC20,
functionName: "balanceOf",
enabled: !!l2Account,
- args: [l2Account],
+ args: l2Account ? [l2Account] : undefined,
watch: true,
});
diff --git a/apps/nextjs/src/app/staking/RealmsTable.tsx b/apps/nextjs/src/app/staking/RealmsTable.tsx
index 9697390c..7b0c1ac2 100644
--- a/apps/nextjs/src/app/staking/RealmsTable.tsx
+++ b/apps/nextjs/src/app/staking/RealmsTable.tsx
@@ -1,6 +1,13 @@
import * as React from "react";
-import { ThemeProvider, alpha, createTheme } from "@mui/material/styles";
+import type { Realm } from "@/.graphclient";
+import { UsersRealmsQuery } from "@/.graphclient";
import Box from "@mui/material/Box";
+import Checkbox from "@mui/material/Checkbox";
+import { blueGrey, grey } from "@mui/material/colors";
+import FormControlLabel from "@mui/material/FormControlLabel";
+import IconButton from "@mui/material/IconButton";
+import Paper from "@mui/material/Paper";
+import { alpha, createTheme, ThemeProvider } from "@mui/material/styles";
import Table from "@mui/material/Table";
import TableBody from "@mui/material/TableBody";
import TableCell from "@mui/material/TableCell";
@@ -10,17 +17,12 @@ import TablePagination from "@mui/material/TablePagination";
import TableRow from "@mui/material/TableRow";
import TableSortLabel from "@mui/material/TableSortLabel";
import Toolbar from "@mui/material/Toolbar";
-import Typography from "@mui/material/Typography";
-import Paper from "@mui/material/Paper";
-import Checkbox from "@mui/material/Checkbox";
-import IconButton from "@mui/material/IconButton";
import Tooltip from "@mui/material/Tooltip";
-import FormControlLabel from "@mui/material/FormControlLabel";
-import Switch from "@mui/material/Switch";
-import { Trash, ListFilter } from "lucide-react";
+import Typography from "@mui/material/Typography";
import { visuallyHidden } from "@mui/utils";
-import { Realm, UsersRealmsQuery } from "@/.graphclient";
-import { blueGrey, grey } from "@mui/material/colors";
+import { ListFilter, Trash } from "lucide-react";
+
+import { Switch } from "../_components/ui/switch";
function descendingComparator(a: T, b: T, orderBy: keyof T) {
if (b[orderBy] < a[orderBy]) {
@@ -36,7 +38,7 @@ type Order = "asc" | "desc";
function getComparator>(
order: Order,
- orderBy: Key
+ orderBy: Key,
): (a: Pick, b: Pick) => number {
return order === "desc"
? (a, b) => descendingComparator(a, b, orderBy)
@@ -49,7 +51,7 @@ function getComparator>(
// with exampleArray.slice().sort(exampleComparator)
function stableSort(
array: readonly T[],
- comparator: (a: T, b: T) => number
+ comparator: (a: T, b: T) => number,
) {
const stabilizedThis = array.map((el, index) => [el, index] as [T, number]);
stabilizedThis.sort((a, b) => {
@@ -88,7 +90,7 @@ interface EnhancedTableProps {
numSelected: number;
onRequestSort: (
event: React.MouseEvent,
- property: keyof Pick
+ property: keyof Pick,
) => void;
onSelectAllClick: (event: React.ChangeEvent) => void;
order: Order;
@@ -115,12 +117,11 @@ function EnhancedTableHead(props: EnhancedTableProps) {
0 && numSelected < rowCount}
checked={rowCount > 0 && numSelected === rowCount}
onChange={onSelectAllClick}
@@ -133,8 +134,8 @@ function EnhancedTableHead(props: EnhancedTableProps) {
@@ -182,7 +183,7 @@ function EnhancedTableToolbar(props: EnhancedTableToolbarProps) {
bgcolor: (theme) =>
alpha(
theme.palette.primary.main,
- theme.palette.action.activatedOpacity
+ theme.palette.action.activatedOpacity,
),
}),
}}
@@ -236,7 +237,7 @@ export default function RealmsTable({
const handleRequestSort = (
event: React.MouseEvent,
- property: keyof Pick
+ property: keyof Pick,
) => {
const isAsc = orderBy === property && order === "asc";
setOrder(isAsc ? "desc" : "asc");
@@ -265,7 +266,7 @@ export default function RealmsTable({
} else if (selectedIndex > 0) {
newSelected = newSelected.concat(
selectedRealms.slice(0, selectedIndex),
- selectedRealms.slice(selectedIndex + 1)
+ selectedRealms.slice(selectedIndex + 1),
);
}
@@ -277,14 +278,14 @@ export default function RealmsTable({
};
const handleChangeRowsPerPage = (
- event: React.ChangeEvent
+ event: React.ChangeEvent,
) => {
setRowsPerPage(parseInt(event.target.value, 10));
setPage(0);
};
- const handleChangeDense = (event: React.ChangeEvent) => {
- setDense(event.target.checked);
+ const handleChangeDense = (event: boolean) => {
+ setDense(event);
};
const isSelected = (name: string) => selectedRealms.indexOf(name) !== -1;
@@ -298,7 +299,7 @@ export default function RealmsTable({
rows
.sort(getComparator(order, orderBy))
.slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage),
- [order, orderBy, page, rowsPerPage, rows]
+ [order, orderBy, page, rowsPerPage, rows],
);
return (
@@ -349,7 +350,7 @@ export default function RealmsTable({
- {row.id}
+ {row.id}
- {row.name}
+ {row.name}
);
@@ -386,9 +387,15 @@ export default function RealmsTable({
}
- label="Dense padding"
+ className="!sm:min-h-[25px] -top-20 [&>*]:!text-sm"
+ control={
+
handleChangeDense(event)}
+ className="mr-2 w-[39px]"
+ />
+ }
+ label="Dense view"
/>
diff --git a/apps/nextjs/src/app/staking/StakingContainer.tsx b/apps/nextjs/src/app/staking/StakingContainer.tsx
index 83f68a0e..c56e650a 100644
--- a/apps/nextjs/src/app/staking/StakingContainer.tsx
+++ b/apps/nextjs/src/app/staking/StakingContainer.tsx
@@ -42,18 +42,18 @@ export const StakingContainer = () => {
const [hexProof, setHexProof] = useState();
const [poolTotal, setPoolTotal] = useState(0n);
const [poolClaimAmount, setPoolClaimAmount] = useState();
- /*const sdk = getBuiltGraphSDK({
- realmsSubgraph: process.env.NEXT_PUBLIC_REALMS_SUBGRAPH_NAME,
- });*/
+
const address = addressL1 ? addressL1.toLowerCase() : "0x";
useEffect(() => {
- fetch(`/api/staking/${addressL1}`)
- .then((res) => res.json())
- .then((data) => {
- setHexProof(data.proof);
- setPoolTotal(parseEther(data.amount.toString()));
- });
+ if (addressL1) {
+ fetch(`/api/staking/${addressL1}`)
+ .then((res) => res.json())
+ .then((data) => {
+ setHexProof(data.proof);
+ setPoolTotal(parseEther(data.amount.toString()));
+ });
+ }
}, [addressL1]);
const { data: realmsData, isLoading: realmsDataIsLoading } = useQuery({
@@ -68,13 +68,7 @@ export const StakingContainer = () => {
}),
enabled: !!addressL1,
refetchInterval: 10000,
- }); /*
- const { data: totalStakedRealmsData } = useQuery({
- queryKey: ["StakedRealmsTotal"],
- queryFn: () =>
- sdk.WalletsRealms({ addresses: [galleonAddress, carrackAddress] }),
- enabled: !!addressL1,
- });*/
+ });
const {
data: lordsAvailableData,
diff --git a/apps/nextjs/src/constants/games.ts b/apps/nextjs/src/constants/games.ts
deleted file mode 100644
index ce9c776c..00000000
--- a/apps/nextjs/src/constants/games.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-export const games = [
- {
- name: "Realms: Eternum",
- id: "realms-adventurers",
- image: "/backgrounds/dummy_background.png",
- color: "#f5f5f5",
- status: "alpha",
- chains: ["Starknet"],
- description: "Conquer the Realms",
- longform:
- "Eternum is a strategy game that is built on StarkNet. It is a game of management and conquest, where players must build and defend their Realm to thrive. The game is governed by a set of rules that are enforced by the game's smart contracts.",
- links: {
- website: "https://eternum.realms.world/",
- discord: "https://discord.gg/uQnjZhZPfu",
- twitter: "https://twitter.com/LootRealms",
- whitepaper: "https://scroll.bibliothecadao.xyz/",
- },
- compatibleTokens: [
- {
- name: "Realms",
- contract: "realms",
- icon: "realms.png",
- image: "/backgrounds/warRoom.png",
- },
- ],
- screenshots: [
- {
- src: "/screenshots/eternum.png",
- alt: "Realms: Eternum",
- },
- ],
- homepage: "/homepages/realms-adventurers",
- },
- {
- name: "Loot Survivor",
- id: "loot-survivor",
- image: "/backgrounds/dragon.png",
- color: "#f5f5f5",
- status: "beta",
- chains: ["Starknet"],
- description: "Play to Die",
- longform:
- "Survivors is the first Loot adventure game exploring the Play2Die mechanic. It is a game of onchain survival where you must defeat beasts and collect gear in the fight to stay alive and make it to the top of the leaderboard.",
- links: {
- mainnet: "https://survivor.realms.world/",
- testnet: "https://beta-survivor.realms.world/",
- discord: "https://discord.gg/realmsworld",
- twitter: "https://twitter.com/LootRealms",
- },
- compatibleTokens: [
- {
- name: "Golden Token",
- contract: "goldenToken",
- icon: "realms.png",
- image: "/backgrounds/warRoom.png",
- },
- ],
- screenshots: [
- {
- src: "/screenshots/LS.png",
- alt: "Survivors",
- },
- {
- src: "/screenshots/LS3.png",
- alt: "Survivors",
- },
- {
- src: "/screenshots/LS7.png",
- alt: "Survivors",
- },
- {
- src: "/screenshots/LS8.png",
- alt: "Survivors",
- },
- ],
- homepage: "/homepages/realms-adventurers",
- },
-];
diff --git a/apps/nextjs/src/constants/index.ts b/apps/nextjs/src/constants/index.ts
index 994deb7b..46bb1bae 100644
--- a/apps/nextjs/src/constants/index.ts
+++ b/apps/nextjs/src/constants/index.ts
@@ -1,5 +1,4 @@
-import { games } from './games';
-import { sortOptions, sortDirection } from './filters';
-import { erc721Tokens } from './erc721Tokens';
+import { erc721Tokens } from "./erc721Tokens";
+import { sortDirection, sortOptions } from "./filters";
-export { games, sortOptions, sortDirection, erc721Tokens }
\ No newline at end of file
+export { sortOptions, sortDirection, erc721Tokens };
diff --git a/apps/nextjs/src/hooks/useTransferToL2.ts b/apps/nextjs/src/hooks/useTransferToL2.ts
index aa665c7b..c37ea24b 100644
--- a/apps/nextjs/src/hooks/useTransferToL2.ts
+++ b/apps/nextjs/src/hooks/useTransferToL2.ts
@@ -1,149 +1,192 @@
-
-import { useCallback, useEffect, useState } from 'react';
-//import { constants } from 'starknet';
-import { EventName } from '@starkware-industries/commons-js-enums';
-import { useAccount as useL2Account } from "@starknet-react/core";
-import { useAccount as useL1Account, useWaitForTransaction } from "wagmi";
-
-//import { useSelectedToken } from '../providers/TransferProvider';
-import { useBridgeContract } from './useBridgeContract';
-import { useTokenContractAPI } from './useTokenContract';
+import { useCallback, useEffect, useState } from "react";
+import { useTransferLog } from "@/app/providers/TransferLogProvider";
/*import { useTransferToL2Tracking } from './useTracking';
import { useTransfer } from './useTransfer';
import { useIsMaxTotalBalanceExceeded } from './useIsMaxTotalBalanceExceeded';
import { useTransfersLog } from '../providers/TransfersLogProvider';*/
-import { ChainType, tokens } from '@/constants/tokens';
-import { TransferStep, TransferToL2Steps, ActionType } from '@/constants/transferSteps';
-import { useTransfer } from './useTransfer';
-import { useTransferProgress } from './useTransferProgress';
-import { useTransferLog } from '@/app/providers/TransferLogProvider';
-import { formatEther, parseGwei, parseUnits } from 'viem';
+import { ChainType, tokens } from "@/constants/tokens";
+import {
+ ActionType,
+ TransferStep,
+ TransferToL2Steps,
+} from "@/constants/transferSteps";
+import { useAccount as useL2Account } from "@starknet-react/core";
+//import { constants } from 'starknet';
+import { EventName } from "@starkware-industries/commons-js-enums";
+import { formatEther, parseEther, parseGwei, parseUnits } from "viem";
+import { useAccount as useL1Account, useWaitForTransaction } from "wagmi";
+
+//import { useSelectedToken } from '../providers/TransferProvider';
+import { useBridgeContract } from "./useBridgeContract";
+import { useTokenContractAPI } from "./useTokenContract";
+import { useTransfer } from "./useTransfer";
+import { useTransferProgress } from "./useTransferProgress";
export const TransferError = {
- TRANSACTION_ERROR: 0,
- MAX_TOTAL_BALANCE_ERROR: 1
+ TRANSACTION_ERROR: 0,
+ MAX_TOTAL_BALANCE_ERROR: 1,
};
export const stepOf = (step: any, steps: any) => {
- return steps.indexOf(step);
+ return steps.indexOf(step);
};
export const useTransferToL2 = () => {
- const [amount, setAmount] = useState('')
- //onst [trackInitiated, trackSuccess, trackError, trackReject] = useTransferToL2Tracking();
- const { deposit, depositIsSuccess, error: depositError, depositTxStatus, depositReceipt } = useBridgeContract();
-
-
- const { allowance, approve, approveHash } = useTokenContractAPI("LORDS", true);
- const { data, isError, isSuccess: approveIsSuccess } = useWaitForTransaction({
- hash: approveHash?.hash
- })
-
- const { address: l1Account, connector } = useL1Account();
- const { address: l2Account } = useL2Account();
- const { handleProgress, handleData, handleError } = useTransfer(TransferToL2Steps);
- const progressOptions = useTransferProgress();
-
- const { refetch } = useTransferLog();
- const network =
- process.env.NEXT_PUBLIC_IS_TESTNET === "true" ? "GOERLI" : "MAIN";
- const tokenAddressL2 = tokens.L2.LORDS.tokenAddress?.[ChainType.L2[network]]
- const l1BridgeAddress = tokens.L1.LORDS.bridgeAddress?.[ChainType.L1[network]] as `0x${string}`
-
- const onTransactionHash = (error: any, transactionHash: string, amount: string) => {
- if (!error) {
- console.log('Tx signed', { transactionHash, amount });
- handleProgress(
- progressOptions.deposit(amount, 'Lords', stepOf(TransferStep.DEPOSIT, TransferToL2Steps))
- );
- }
+ const [amount, setAmount] = useState("");
+ //onst [trackInitiated, trackSuccess, trackError, trackReject] = useTransferToL2Tracking();
+ const {
+ deposit,
+ depositIsSuccess,
+ error: depositError,
+ depositTxStatus,
+ depositReceipt,
+ } = useBridgeContract();
+
+ const { allowance, approve, approveHash } = useTokenContractAPI(
+ "LORDS",
+ true,
+ );
+ const {
+ data,
+ isError,
+ isSuccess: approveIsSuccess,
+ } = useWaitForTransaction({
+ hash: approveHash?.hash,
+ });
+
+ const { address: l1Account, connector } = useL1Account();
+ const { address: l2Account } = useL2Account();
+ const { handleProgress, handleData, handleError } =
+ useTransfer(TransferToL2Steps);
+ const progressOptions = useTransferProgress();
+
+ const { refetch } = useTransferLog();
+ const network =
+ process.env.NEXT_PUBLIC_IS_TESTNET === "true" ? "GOERLI" : "MAIN";
+ const tokenAddressL2 = tokens.L2.LORDS.tokenAddress?.[ChainType.L2[network]];
+ const l1BridgeAddress = tokens.L1.LORDS.bridgeAddress?.[
+ ChainType.L1[network]
+ ] as `0x${string}`;
+
+ const onTransactionHash = (
+ error: any,
+ transactionHash: string,
+ amount: string,
+ ) => {
+ if (!error) {
+ console.log("Tx signed", { transactionHash, amount });
+ handleProgress(
+ progressOptions.deposit(
+ amount,
+ "Lords",
+ stepOf(TransferStep.DEPOSIT, TransferToL2Steps),
+ ),
+ );
+ }
+ };
+
+ const toObject = (object: any) => {
+ return JSON.parse(
+ JSON.stringify(
+ object,
+ (key, value) => (typeof value === "bigint" ? value.toString() : value), // return everything else unchanged
+ ),
+ );
+ };
+
+ const onDeposit = (event: any) => {
+ console.log("Deposit event dispatched", event);
+ //trackSuccess(event.transactionHash);
+ const transferData = {
+ type: ActionType.TRANSFER_TO_L2,
+ sender: l1Account,
+ recipient: l2Account,
+ l1hash: event.transactionHash,
+ name: "Lords",
+ symbol: "LORDS",
+ amount: amount.toString(),
+ event,
};
+ //addTransfer(toObject(transferData));
+ refetch();
+ handleData(transferData);
+ };
+ useEffect(() => {
+ if (depositError) {
+ handleError(
+ progressOptions.error(TransferError.TRANSACTION_ERROR, depositError),
+ );
+ }
+ }, [depositError]);
+
+ const sendDeposit = async (amount: any) => {
+ handleProgress(
+ progressOptions.waitForConfirm(
+ connector?.name || "Wallet",
+ stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps),
+ ),
+ );
+ const { hash } = await deposit({
+ args: [parseUnits(amount, 18), BigInt(l2Account || "0x"), BigInt(1)],
+ value: BigInt(1),
+ });
+ onTransactionHash(depositError, hash, amount);
+ };
+
+ useEffect(() => {
+ if (approveIsSuccess) {
+ sendDeposit(amount);
+ }
+ }, [approveIsSuccess]);
- const toObject = (object: any) => {
- return JSON.parse(JSON.stringify(object, (key, value) =>
- typeof value === 'bigint'
- ? value.toString()
- : value // return everything else unchanged
- ));
+ useEffect(() => {
+ if (depositIsSuccess) {
+ onDeposit(depositReceipt);
}
+ }, [depositIsSuccess]);
- const onDeposit = (event: any) => {
- console.log('Deposit event dispatched', event);
- //trackSuccess(event.transactionHash);
- const transferData = {
- type: ActionType.TRANSFER_TO_L2,
- sender: l1Account,
- recipient: l2Account,
- l1hash: event.transactionHash,
- name: 'Lords',
- symbol: 'LORDS',
- amount: amount.toString(),
- event
- };
- //addTransfer(toObject(transferData));
- refetch()
- handleData(transferData);
- };
- useEffect(() => {
- if (depositError) {
- handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, depositError))
- }
- }, [depositError])
+ return useCallback(
+ async (amount: any) => {
+ setAmount(amount);
+ try {
+ console.log("TransferToL2 called");
- const sendDeposit = async (amount: any) => {
+ console.log("Token needs approval");
handleProgress(
- progressOptions.waitForConfirm(
- connector?.name || 'Wallet',
- stepOf(TransferStep.CONFIRM_TX, TransferToL2Steps)
- )
+ progressOptions.approval(
+ "Lords",
+ stepOf(TransferStep.APPROVE, TransferToL2Steps),
+ ),
);
- const { hash } = await deposit({
- args: [parseUnits(amount, 18), BigInt(l2Account || "0x"), BigInt(1)],
- value: BigInt(1),
- });
- onTransactionHash(depositError, hash, amount)
- }
-
- useEffect(() => {
- if (approveIsSuccess) {
- sendDeposit(amount)
+ console.log("Current allow value", allowance?.toString());
+ if (Number(formatEther(allowance || BigInt(0))) < Number(amount)) {
+ console.log(
+ "Allow value is smaller then amount, sending approve tx...",
+ { amount, l1BridgeAddress },
+ );
+ approve({
+ args: [l1BridgeAddress, parseEther(amount)],
+ });
}
- }, [approveIsSuccess])
-
- useEffect(() => {
- if (depositIsSuccess) {
- onDeposit(depositReceipt)
+ if (allowance && Number(formatEther(allowance)) >= Number(amount)) {
+ console.log("Calling deposit");
+ sendDeposit(amount);
}
- }, [depositIsSuccess])
-
- return useCallback(
- async (amount: any) => {
- setAmount(amount)
- try {
- console.log('TransferToL2 called');
-
- console.log('Token needs approval');
- handleProgress(
- progressOptions.approval('Lords', stepOf(TransferStep.APPROVE, TransferToL2Steps))
- );
- console.log('Current allow value', allowance?.toString());
- if (Number(formatEther(allowance || BigInt(0))) < Number(amount)) {
- console.log('Allow value is smaller then amount, sending approve tx...', { amount, l1BridgeAddress });
- approve({
- args: [l1BridgeAddress, parseGwei(amount)],
- })
- }
- if (allowance && Number(formatEther(allowance)) >= Number(amount)) {
- console.log('Calling deposit');
- sendDeposit(amount)
- }
- } catch (ex: any) {
- //trackError(ex);
- console.error(ex?.message, ex);
- handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
- }
- },
- [deposit, l2Account, progressOptions, l1Account, allowance, approve, l1BridgeAddress]
- );
-};
\ No newline at end of file
+ } catch (ex: any) {
+ //trackError(ex);
+ console.error(ex?.message, ex);
+ handleError(progressOptions.error(TransferError.TRANSACTION_ERROR, ex));
+ }
+ },
+ [
+ deposit,
+ l2Account,
+ progressOptions,
+ l1Account,
+ allowance,
+ approve,
+ l1BridgeAddress,
+ ],
+ );
+};
diff --git a/apps/nextjs/src/icons/album.svg b/apps/nextjs/src/icons/album.svg
new file mode 100644
index 00000000..9654d2a3
--- /dev/null
+++ b/apps/nextjs/src/icons/album.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/nextjs/src/icons/argent.svgr b/apps/nextjs/src/icons/argent.svgr
deleted file mode 100644
index bdccf9aa..00000000
--- a/apps/nextjs/src/icons/argent.svgr
+++ /dev/null
@@ -1,8 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/nextjs/src/icons/braavos.svgr b/apps/nextjs/src/icons/braavos.svgr
deleted file mode 100644
index a4cb59f3..00000000
--- a/apps/nextjs/src/icons/braavos.svgr
+++ /dev/null
@@ -1,9 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/nextjs/src/icons/bridge.svg b/apps/nextjs/src/icons/bridge.svg
new file mode 100644
index 00000000..a8b0b7cf
--- /dev/null
+++ b/apps/nextjs/src/icons/bridge.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/nextjs/src/icons/coins.svg b/apps/nextjs/src/icons/coins.svg
new file mode 100644
index 00000000..743368b1
--- /dev/null
+++ b/apps/nextjs/src/icons/coins.svg
@@ -0,0 +1,10 @@
+
diff --git a/apps/nextjs/src/icons/crown.svg b/apps/nextjs/src/icons/crown.svg
new file mode 100644
index 00000000..a0cd45ca
--- /dev/null
+++ b/apps/nextjs/src/icons/crown.svg
@@ -0,0 +1,3 @@
+
diff --git a/apps/nextjs/src/icons/discord.svgr b/apps/nextjs/src/icons/discord.svgr
deleted file mode 100644
index 662a89da..00000000
--- a/apps/nextjs/src/icons/discord.svgr
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/nextjs/src/icons/ethereum.svgr b/apps/nextjs/src/icons/ethereum.svgr
deleted file mode 100644
index 2ee78aa7..00000000
--- a/apps/nextjs/src/icons/ethereum.svgr
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/apps/nextjs/src/icons/gamepad.svg b/apps/nextjs/src/icons/gamepad.svg
new file mode 100644
index 00000000..4a89a3d4
--- /dev/null
+++ b/apps/nextjs/src/icons/gamepad.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/apps/nextjs/src/icons/lords.svgr b/apps/nextjs/src/icons/lords.svgr
deleted file mode 100644
index 44165263..00000000
--- a/apps/nextjs/src/icons/lords.svgr
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/apps/nextjs/src/icons/mark-dark.svgr b/apps/nextjs/src/icons/mark-dark.svgr
deleted file mode 100644
index a42691d4..00000000
--- a/apps/nextjs/src/icons/mark-dark.svgr
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/apps/nextjs/src/icons/side-header.svg b/apps/nextjs/src/icons/side-header.svg
new file mode 100644
index 00000000..c9634cff
--- /dev/null
+++ b/apps/nextjs/src/icons/side-header.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/apps/nextjs/src/icons/starknet.svgr b/apps/nextjs/src/icons/starknet.svgr
deleted file mode 100644
index 5fa1b2b2..00000000
--- a/apps/nextjs/src/icons/starknet.svgr
+++ /dev/null
@@ -1,17 +0,0 @@
-
diff --git a/apps/nextjs/src/types/index.ts b/apps/nextjs/src/types/index.ts
index 734d7857..9d8dfc82 100644
--- a/apps/nextjs/src/types/index.ts
+++ b/apps/nextjs/src/types/index.ts
@@ -282,7 +282,6 @@ interface ScreenShot {
export interface Game {
name: string;
id: string;
- icon: string;
status: string;
image: string;
color: string;
diff --git a/apps/nextjs/src/utils/getters.ts b/apps/nextjs/src/utils/getters.ts
index 661d7ab3..8b27f39f 100644
--- a/apps/nextjs/src/utils/getters.ts
+++ b/apps/nextjs/src/utils/getters.ts
@@ -1,5 +1,9 @@
-export const getGamesByContract = (games: any, contractAddress: string) => {
- return games.filter((game: any) => {
- return game.compatibleTokens.some((token: any) => token.contract === contractAddress);
- });
-};
\ No newline at end of file
+import type { Collections, Game } from "@realms-world/constants";
+
+export const getGamesByContract = (games: Game[], contractAddress: string) => {
+ return games.filter((game: any) => {
+ return game.collections.some(
+ (collection: Collections) => collection === contractAddress,
+ );
+ });
+};
diff --git a/bun.lockb b/bun.lockb
index d5e08215..ac1d4511 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/package.json b/package.json
index 699103df..54bb251f 100644
--- a/package.json
+++ b/package.json
@@ -28,11 +28,11 @@
"devDependencies": {
"@manypkg/cli": "^0.21.0",
"@turbo/gen": "^1.10.16",
- "npm-check-updates": "^16.14.6",
- "prettier": "^3.0.3",
+ "npm-check-updates": "^16.14.11",
+ "prettier": "^3.1.0",
"tsup": "^7.2.0",
"turbo": "^1.10.16",
- "typescript": "^5.2.2"
+ "typescript": "^5.3.2"
},
"overrides": {
"@tanstack/react-query": "4.35.7",
diff --git a/packages/api/package.json b/packages/api/package.json
index 39486419..15d4d5d8 100644
--- a/packages/api/package.json
+++ b/packages/api/package.json
@@ -14,8 +14,8 @@
"dependencies": {
"@realms-world/auth": "workspace:*",
"@realms-world/db": "workspace:*",
- "@trpc/client": "^10.43.3",
- "@trpc/server": "^10.43.3",
+ "@trpc/client": "^10.44.1",
+ "@trpc/server": "^10.44.1",
"superjson": "2.2.1",
"zod": "^3.22.4"
},
@@ -23,9 +23,9 @@
"@realms-world/eslint-config": "workspace:*",
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "eslint": "^8.53.0",
- "prettier": "^3.0.3",
- "typescript": "^5.2.2"
+ "eslint": "^8.54.0",
+ "prettier": "^3.1.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/packages/api/src/router/erc721Tokens.ts b/packages/api/src/router/erc721Tokens.ts
index 3b4aff43..7b78a0dc 100644
--- a/packages/api/src/router/erc721Tokens.ts
+++ b/packages/api/src/router/erc721Tokens.ts
@@ -1,3 +1,4 @@
+import { sql } from "drizzle-orm";
import { z } from "zod";
import type { SQL } from "@realms-world/db";
@@ -15,12 +16,14 @@ export const erc721TokensRouter = createTRPCRouter({
owner: z.string().nullish(),
orderBy: z.string().nullish(),
direction: z.string().nullish(),
+ block: z.number().nullish(),
}),
)
.query(async ({ ctx, input }) => {
const limit = input.limit ?? 50;
//TODO add orderBy conditions
- const { cursor, contractAddress, owner, orderBy, direction } = input;
+ const { cursor, contractAddress, owner, orderBy, block, direction } =
+ input;
const whereFilter: SQL[] = [];
const orderByFilter: SQL[] = [];
if (direction === "asc") {
@@ -49,10 +52,18 @@ export const erc721TokensRouter = createTRPCRouter({
} /* else {
whereFilter.push(lte(schema.erc721Tokens.token_id, cursor));
}*/
+ if (!block) {
+ whereFilter.push(sql`upper_inf(_cursor)`);
+ }
const items = await ctx.db.query.erc721Tokens.findMany({
limit: limit + 1,
where: and(...whereFilter),
orderBy: orderByFilter,
+ with: {
+ transfers: {
+ orderBy: (transfers, { desc }) => [desc(transfers._cursor)],
+ },
+ },
});
let nextCursor: typeof cursor | undefined = undefined;
if (items.length > limit) {
diff --git a/packages/apibara/Dockerfile.metadata b/packages/apibara/Dockerfile.metadata
index 11af427f..2ba55b9b 100644
--- a/packages/apibara/Dockerfile.metadata
+++ b/packages/apibara/Dockerfile.metadata
@@ -1,4 +1,4 @@
-FROM quay.io/apibara/sink-webhook:0.3.3
+FROM quay.io/apibara/sink-webhook:0.3.7
ARG NETWORK_NAME
ENV ENVFILE=${NETWORK_NAME}.env
diff --git a/packages/apibara/Dockerfile.tokens b/packages/apibara/Dockerfile.tokens
new file mode 100644
index 00000000..b1d697b2
--- /dev/null
+++ b/packages/apibara/Dockerfile.tokens
@@ -0,0 +1,11 @@
+FROM quay.io/apibara/sink-postgres:0.4.9
+
+ARG NETWORK_NAME
+ENV ENVFILE=${NETWORK_NAME}.env
+
+COPY src ./data/src
+COPY $ENVFILE ./data/.env
+
+ENV AUTH_TOKEN=dna_FCqLW4vWwpveLSLpp16V
+
+CMD ["run", "--allow-env=/data/.env", "/data/src/erc721_tokens.ts", "-A=dna_FCqLW4vWwpveLSLpp16V", "--persist-to-etcd=decent-respect.railway.internal:2379", "--sink-id=erc721_tokens"]
\ No newline at end of file
diff --git a/packages/apibara/Dockerfile.transfers b/packages/apibara/Dockerfile.transfers
index cd280a09..7ee542f3 100644
--- a/packages/apibara/Dockerfile.transfers
+++ b/packages/apibara/Dockerfile.transfers
@@ -1,4 +1,4 @@
-FROM quay.io/apibara/sink-postgres:0.4.3
+FROM quay.io/apibara/sink-postgres:0.4.9
ARG NETWORK_NAME
ENV ENVFILE=${NETWORK_NAME}.env
diff --git a/packages/apibara/goerli.env b/packages/apibara/goerli.env
index c5037030..f7702f0a 100644
--- a/packages/apibara/goerli.env
+++ b/packages/apibara/goerli.env
@@ -1,7 +1,8 @@
-STREAM_URL = 'https://goerli.starknet.a5a.ch'
-POSTGRES_CONNECTION_STRING="postgres://RedBeardEth:1mbJAUqlo5NS@ep-frosty-sea-90384545.us-east-2.aws.neon.tech/goerli?sslmode=require"
+STREAM_URL='https://goerli.starknet.a5a.ch'
+POSTGRES_CONNECTION_STRING='postgres://RedBeardEth:1mbJAUqlo5NS@ep-frosty-sea-90384545.us-east-2.aws.neon.tech/goerli?sslmode=require'
PERSIST_TO_ETCD='decent-respect.railway.internal:2379'
+AUTH_TOKEN=dna_FCqLW4vWwpveLSLpp16V
BRIDGE_STARTING_BLOCK=819244
BRIDGE_CONTRACT='0x042331a29c53f6084f08964cbd83b94c1a141e6d14009052d55b03793b21d5b3'
diff --git a/packages/apibara/local.env b/packages/apibara/local.env
index 033ab689..87573249 100644
--- a/packages/apibara/local.env
+++ b/packages/apibara/local.env
@@ -6,7 +6,7 @@ BRIDGE_STARTING_BLOCK=819244
BRIDGE_CONTRACT='0x042331a29c53f6084f08964cbd83b94c1a141e6d14009052d55b03793b21d5b3'
ERC721_STARTING_BLOCK=892903
-BEASTS_CONTRACT='0x071f603af70d1570600de027af3edae09a5869b7b6d38e27315a77d9db79f45e'
+BEASTS_CONTRACT='0x05c909139dbef784180eef8ce7a2f5bf52afe567aa73aaa77b8d8243ad5b6b96'
GOLDEN_TOKEN_CONTRACT='0x003583470A8943479F8609192Da4427caC45BdF66a58C84043c7Ab2FC722C0C0'
INNGEST_EVENT_KEY='AAsyCjec-tEzHLvJ8m9f8t9_N2tnPNcpls5YA_CHKUD1hll64X9cw1Le4UbY2qp5IVyiPsNHMiG57V7-3701CQ'
\ No newline at end of file
diff --git a/packages/apibara/mainnet.env b/packages/apibara/mainnet.env
index c7a7aec1..f5cd53af 100644
--- a/packages/apibara/mainnet.env
+++ b/packages/apibara/mainnet.env
@@ -2,6 +2,7 @@ STREAM_URL = 'https://mainnet.starknet.a5a.ch'
POSTGRES_CONNECTION_STRING="postgres://RedBeardEth:1mbJAUqlo5NS@ep-frosty-sea-90384545.us-east-2.aws.neon.tech/mainnet?sslmode=require"
PERSIST_TO_ETCD='decent-respect.railway.internal:2379'
+AUTH_TOKEN=dna_FCqLW4vWwpveLSLpp16V
BRIDGE_STARTING_BLOCK=819244
BRIDGE_CONTRACT='0x042331a29c53f6084f08964cbd83b94c1a141e6d14009052d55b03793b21d5b3'
diff --git a/packages/apibara/src/erc721_metadata.ts b/packages/apibara/src/erc721_metadata.ts
index 933a7432..67091919 100644
--- a/packages/apibara/src/erc721_metadata.ts
+++ b/packages/apibara/src/erc721_metadata.ts
@@ -6,7 +6,7 @@ import type {
EventWithTransaction,
Starknet,
} from "https://esm.sh/@apibara/indexer/starknet";
-import { uint256 } from "https://esm.sh/starknet@5.19.5";
+import { uint256 } from "https://esm.sh/starknet";
import { erc721ContractEvents } from "./utils.ts";
@@ -24,7 +24,10 @@ export const config: Config = {
sinkOptions: {
targetUrl: "https://inn.gs/e/" + Deno.env.get("INNGEST_EVENT_KEY"),
raw: true,
- header: ["x-inngest-env: content-mdx"],
+ header: [
+ Deno.env.get("STREAM_URL") == "https://goerli.starknet.a5a.ch" &&
+ "x-inngest-env: testnet",
+ ],
},
};
diff --git a/packages/apibara/src/erc721_tokens.ts b/packages/apibara/src/erc721_tokens.ts
new file mode 100644
index 00000000..b3aa8e6c
--- /dev/null
+++ b/packages/apibara/src/erc721_tokens.ts
@@ -0,0 +1,62 @@
+import type { Config } from "https://esm.sh/@apibara/indexer";
+import type { Postgres } from "https://esm.sh/@apibara/indexer/sink/postgres";
+//import type { Console } from "https://esm.sh/@apibara/indexer/sink/console";
+import type {
+ Block,
+ BlockHeader,
+ EventWithTransaction,
+ Starknet,
+} from "https://esm.sh/@apibara/indexer/starknet";
+import { uint256 } from "https://esm.sh/starknet";
+
+import { erc721ContractEvents } from "./utils.ts";
+
+export const config: Config = {
+ streamUrl: Deno.env.get("STREAM_URL"),
+ startingBlock: Number(Deno.env.get("ERC721_STARTING_BLOCK")),
+ network: "starknet",
+ finality: "DATA_STATUS_PENDING",
+ filter: {
+ header: {
+ weak: true,
+ },
+ events: erc721ContractEvents,
+ },
+ sinkType: "postgres",
+ sinkOptions: {
+ connectionString: Deno.env.get("POSTGRES_CONNECTION_STRING"),
+ tableName: "rw_erc721_tokens",
+ entityMode: true,
+ },
+};
+
+export default function transform({ header, events }: Block) {
+ return events?.flatMap((event) => transferToTask(header!, event));
+}
+
+function transferToTask(_header: BlockHeader, { event }: EventWithTransaction) {
+ const from = BigInt(event.data[0]);
+ const token_id = parseInt(
+ uint256.uint256ToBN({ low: event.data[2], high: event.data[3] }).toString(),
+ );
+ if (from == 0n) {
+ return {
+ insert: {
+ id: event.fromAddress + ":" + token_id,
+ contract_address: event.fromAddress,
+ token_id,
+ minter: event.data[1],
+ owner: event.data[1],
+ },
+ };
+ } else {
+ return {
+ entity: {
+ id: event.fromAddress + ":" + token_id,
+ },
+ update: {
+ owner: event.data[1],
+ },
+ };
+ }
+}
diff --git a/packages/apibara/src/erc721_transfers.ts b/packages/apibara/src/erc721_transfers.ts
index 3471c6bb..45f96fed 100644
--- a/packages/apibara/src/erc721_transfers.ts
+++ b/packages/apibara/src/erc721_transfers.ts
@@ -1,13 +1,13 @@
-import type { Config } from "https://esm.sh/@apibara/indexer";
-import type { Console } from "https://esm.sh/@apibara/indexer/sink/console";
-import type { Postgres } from "https://esm.sh/@apibara/indexer/sink/postgres";
+import type { Config } from "https://esm.sh/@apibara/indexer@0.2.2";
+import type { Postgres } from "https://esm.sh/@apibara/indexer@0.2.2/sink/postgres";
+//import type { Console } from "https://esm.sh/@apibara/indexer/sink/console";
import type {
Block,
BlockHeader,
EventWithTransaction,
Starknet,
} from "https://esm.sh/@apibara/indexer/starknet";
-import { uint256 } from "https://esm.sh/starknet@5.19.5";
+import { uint256 } from "https://esm.sh/starknet";
import { erc721ContractEvents } from "./utils.ts";
@@ -25,7 +25,8 @@ export const config: Config = {
sinkType: "postgres",
sinkOptions: {
connectionString: Deno.env.get("POSTGRES_CONNECTION_STRING"),
- tableName: "rw_erc721_tokens",
+ tableName: "rw_erc721_transfers",
+ entityMode: false,
},
};
@@ -33,9 +34,12 @@ export default function transform({ header, events }: Block) {
return events?.flatMap((event) => transferToTask(header!, event));
}
-function transferToTask(_header: BlockHeader, { event }: EventWithTransaction) {
+function transferToTask(
+ _header: BlockHeader,
+ { event, transaction }: EventWithTransaction,
+) {
const from = BigInt(event.data[0]);
- if (from !== 0n) {
+ if (from == 0n) {
return [];
}
const token_id = parseInt(
@@ -43,9 +47,11 @@ function transferToTask(_header: BlockHeader, { event }: EventWithTransaction) {
);
return {
- id: event.fromAddress + ":" + token_id,
+ id: transaction.meta.hash,
+ token_key: event.fromAddress + ":" + token_id,
contract_address: event.fromAddress,
token_id,
- owner: event.data[1],
+ fromAddress: event.data[0],
+ toAddress: event.data[1],
};
}
diff --git a/packages/apibara/src/utils.ts b/packages/apibara/src/utils.ts
index c6875c4a..c84aa16d 100644
--- a/packages/apibara/src/utils.ts
+++ b/packages/apibara/src/utils.ts
@@ -1,4 +1,4 @@
-import { hash } from "https://esm.sh/starknet@5.19.5";
+import { hash } from "https://esm.sh/starknet";
export const whitelistedContracts = [
Deno.env.get("BEASTS_CONTRACT") as `0x${string}`,
@@ -9,5 +9,7 @@ export const erc721ContractEvents = whitelistedContracts.map((contract) => {
return {
fromAddress: contract,
keys: [hash.getSelectorFromName("Transfer") as `0x${string}`],
+ includeTransaction: true,
+ includeReceipt: false,
};
});
diff --git a/packages/auth/package.json b/packages/auth/package.json
index 596d4187..e459e734 100644
--- a/packages/auth/package.json
+++ b/packages/auth/package.json
@@ -13,10 +13,10 @@
},
"dependencies": {
"@realms-world/db": "workspace:*",
- "@auth/core": "^0.18.1",
- "@auth/drizzle-adapter": "^0.3.6",
+ "@auth/core": "^0.18.3",
+ "@auth/drizzle-adapter": "^0.3.8",
"@t3-oss/env-nextjs": "^0.7.1",
- "next": "^14.0.2",
+ "next": "^14.0.3",
"next-auth": "5.0.0-beta.3",
"react": "18.2.0",
"react-dom": "18.2.0",
@@ -26,9 +26,9 @@
"@realms-world/eslint-config": "workspace:*",
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "eslint": "^8.53.0",
- "prettier": "^3.0.3",
- "typescript": "^5.2.2"
+ "eslint": "^8.54.0",
+ "prettier": "^3.1.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/packages/constants/package.json b/packages/constants/package.json
index 0a4171ca..c44e3024 100644
--- a/packages/constants/package.json
+++ b/packages/constants/package.json
@@ -1,18 +1,13 @@
{
"name": "@realms-world/constants",
- "private": true,
- "version": "workspace:*",
- "exports": {
- ".": "./index.ts"
- },
- "typesVersions": {
- "*": {
- "*": [
- "src/*"
- ]
- }
- },
+ "version": "0.1.0",
+ "types": "./src/index.ts",
"license": "MIT",
+ "main": "./src/index.ts",
+ "files": [
+ "dist/**",
+ "src/**"
+ ],
"scripts": {
"build": "tsup",
"clean": "rm -rf .turbo node_modules",
@@ -30,8 +25,8 @@
"@realms-world/eslint-config": "workspace:*",
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "eslint": "^8.53.0",
- "typescript": "^5.1.6"
+ "eslint": "^8.54.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"extends": [
diff --git a/packages/constants/src/Games.ts b/packages/constants/src/Games.ts
index 7c0e2926..c28978de 100644
--- a/packages/constants/src/Games.ts
+++ b/packages/constants/src/Games.ts
@@ -25,12 +25,13 @@ export interface Game {
chains: ChainId[];
collections?: Collections[];
tokens?: Tokens[];
+ screenshotLength: number;
}
export const games: Game[] = [
{
name: "Realms: Eternum",
- id: "realms-adventurers",
+ id: "realms-eternum",
developer: "BiblioDAO",
genres: ["Economic Strategy", "PvP", "Raiding"],
color: "#f5f5f5",
@@ -46,9 +47,10 @@ export const games: Game[] = [
},
operatingSystems: ["Web Browser"],
lords: "Trade for resources",
- chains: [ChainId.SN_MAIN],
+ chains: [ChainId.SN_GOERLI],
collections: [Collections.REALMS],
tokens: [Tokens.LORDS],
+ screenshotLength: 1,
},
{
name: "Loot Survivor",
@@ -71,5 +73,6 @@ export const games: Game[] = [
chains: [ChainId.SN_MAIN],
collections: [Collections.GOLDEN_TOKEN],
tokens: [Tokens.LORDS],
+ screenshotLength: 4,
},
];
diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts
index a985bbc8..a07a6ed4 100644
--- a/packages/constants/src/index.ts
+++ b/packages/constants/src/index.ts
@@ -1,3 +1,5 @@
export { Collections } from "./Collections";
export { games } from "./Games";
+export type { Game } from "./Games";
export { Tokens } from "./Tokens";
+export { CHAIN_IDS_TO_NAMES } from "./Chains";
diff --git a/packages/constants/tsconfig.json b/packages/constants/tsconfig.json
index a1c4f478..1ac81bc9 100644
--- a/packages/constants/tsconfig.json
+++ b/packages/constants/tsconfig.json
@@ -1,8 +1,9 @@
{
"extends": "@realms-world/tsconfig/base.json",
"compilerOptions": {
- "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json"
+ "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json",
+ "outDir": "./dist"
},
"include": ["*.ts", "src"],
- "exclude": ["node_modules"]
+ "exclude": ["dist", "build", "node_modules"]
}
diff --git a/packages/constants/turbo.json b/packages/constants/turbo.json
new file mode 100644
index 00000000..c0be4526
--- /dev/null
+++ b/packages/constants/turbo.json
@@ -0,0 +1,19 @@
+{
+ "$schema": "https://turbo.build/schema.json",
+ "extends": ["//"],
+ "pipeline": {
+ "build": {
+ "dependsOn": ["^build"],
+ "env": ["NODE_ENV"],
+ "inputs": ["src/**"],
+ "outputs": ["dist/**"]
+ },
+ "clean": {
+ "cache": false
+ },
+ "dev": {
+ "cache": false,
+ "persistent": true
+ }
+ }
+}
diff --git a/packages/db/index.ts b/packages/db/index.ts
index a29b79b6..b3248ba6 100644
--- a/packages/db/index.ts
+++ b/packages/db/index.ts
@@ -12,6 +12,7 @@ export const schema = { ...auth, ...erc721Tokens, ...bridge };
export { pgSqlTable as tableCreator } from "./schema/_table";
export * from "drizzle-orm";
+export { Int8Range } from "./int8range";
if (!process.env.VERCEL_ENV) {
neonConfig.wsProxy = (/*host*/) => `127.0.0.1/v1`;
diff --git a/packages/db/int8range.ts b/packages/db/int8range.ts
new file mode 100644
index 00000000..a842b97c
--- /dev/null
+++ b/packages/db/int8range.ts
@@ -0,0 +1,63 @@
+import { customType } from "drizzle-orm/pg-core";
+import type { Range } from "postgres-range";
+import {
+ RANGE_LB_INC,
+ parse as rangeParse,
+ serialize as rangeSerialize,
+} from "postgres-range";
+
+interface TimeRangeInput {
+ endMs: number;
+ startMs: number;
+}
+type Comparable = string | number;
+
+type RangeBound =
+ | T
+ | {
+ value: T;
+ inclusive: boolean;
+ };
+
+export class Int8Range {
+ constructor(public readonly range: Range) {}
+
+ get start(): RangeBound | null {
+ return this.range.lower != null
+ ? {
+ value: this.range.lower,
+ inclusive: this.range.isLowerBoundClosed(),
+ }
+ : null;
+ }
+
+ get end(): RangeBound | null {
+ return this.range.upper != null
+ ? {
+ value: this.range.upper,
+ inclusive: this.range.isUpperBoundClosed(),
+ }
+ : null;
+ }
+
+ /*static fromInput(input: TimeRangeInput): Int8Range {
+ const range = new Range(input.startMs, input.endMs, RANGE_LB_INC);
+
+ return new Int8Range(range);
+ }*/
+}
+
+export const int8range = customType<{
+ data: Int8Range;
+}>({
+ dataType: () => "int8range",
+ fromDriver: (value: unknown): Int8Range => {
+ if (typeof value !== "string") {
+ throw new Error("Expected string");
+ }
+
+ const parsed = rangeParse(value, (val) => parseInt(val, 10));
+ return new Int8Range(parsed);
+ },
+ toDriver: (value: Int8Range): string => rangeSerialize(value.range),
+});
diff --git a/packages/db/package.json b/packages/db/package.json
index 17f147fc..a90c75c9 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -22,10 +22,11 @@
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
"dotenv-cli": "^7.3.0",
- "drizzle-kit": "^0.20.2",
- "eslint": "^8.53.0",
- "prettier": "^3.0.3",
- "typescript": "^5.2.2"
+ "drizzle-kit": "^0.20.4",
+ "eslint": "^8.54.0",
+ "postgres-range": "^1.1.3",
+ "prettier": "^3.1.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/packages/db/schema/erc721_tokens.ts b/packages/db/schema/erc721_tokens.ts
index 1832c349..747cc2ca 100644
--- a/packages/db/schema/erc721_tokens.ts
+++ b/packages/db/schema/erc721_tokens.ts
@@ -1,19 +1,50 @@
+import { relations } from "drizzle-orm";
import { bigint, integer, json, text } from "drizzle-orm/pg-core";
+import { int8range } from "../int8range";
import { pgSqlTable } from "./_table";
export const erc721Tokens = pgSqlTable("erc721_tokens", {
- _cursor: bigint("_cursor", { mode: "number" }),
- id: text("id").primaryKey(),
- token_id: integer("token_id"),
+ _cursor: int8range("_cursor"),
+ id: text("id").notNull(),
+ token_id: integer("token_id").notNull(),
contract_address: text("contract_address"),
+ minter: text("minter"),
owner: text("owner"),
image: text("image"),
name: text("name"),
metadata: json("metadata").$type<{
- attributes: {
- trait_type?: string;
- value: string | number;
- }[];
+ attributes:
+ | {
+ trait_type: string;
+ value: string;
+ }[]
+ | {
+ trait_type: string;
+ value: number;
+ }[];
}>(),
});
+export const erc721TokensRelations = relations(erc721Tokens, ({ many }) => ({
+ transfers: many(erc721Transfers),
+}));
+
+export const erc721Transfers = pgSqlTable("erc721_transfers", {
+ _cursor: bigint("_cursor", { mode: "number" }),
+ id: text("id").primaryKey(),
+ token_key: text("token_key"),
+ token_id: integer("token_id"),
+ contract_address: text("contract_address"),
+ fromAddress: text("fromAddress"),
+ toAddress: text("toAddress"),
+});
+
+export const erc721TransfersRelations = relations(
+ erc721Transfers,
+ ({ one }) => ({
+ token: one(erc721Tokens, {
+ fields: [erc721Transfers.token_key],
+ references: [erc721Tokens.id],
+ }),
+ }),
+);
diff --git a/packages/graphql-server/package.json b/packages/graphql-server/package.json
index f4a69b87..284794cb 100644
--- a/packages/graphql-server/package.json
+++ b/packages/graphql-server/package.json
@@ -20,16 +20,17 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "garph": "^0.6.3",
+ "garph": "^0.6.4",
"graphql-yoga": "^5.0.0",
- "graphql": "^16.8.1"
+ "graphql": "^16.8.1",
+ "@realms-world/db": "workspace:*"
},
"devDependencies": {
"@realms-world/eslint-config": "workspace:*",
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "eslint": "^8.53.0",
- "typescript": "^5.2.2"
+ "eslint": "^8.54.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"extends": [
diff --git a/packages/graphql-server/src/resolvers.ts b/packages/graphql-server/src/resolvers.ts
index 1beb4a0e..7b109cd8 100644
--- a/packages/graphql-server/src/resolvers.ts
+++ b/packages/graphql-server/src/resolvers.ts
@@ -1,3 +1,4 @@
+import { sql } from "drizzle-orm";
import type { InferResolvers } from "garph";
import type { YogaInitialContext } from "graphql-yoga";
@@ -13,7 +14,11 @@ type Resolvers = InferResolvers<
export const resolvers: Resolvers = {
Query: {
- getERC721Tokens: (_, { limit, cursor, contract_address, owner }, ctx) => {
+ getERC721Tokens: async (
+ _,
+ { limit, cursor, contract_address, owner, block },
+ ctx,
+ ) => {
const where: SQL[] = [];
if (contract_address) {
where.push(
@@ -26,10 +31,18 @@ export const resolvers: Resolvers = {
if (owner) {
where.push(eq(schema.erc721Tokens.owner, owner));
}
- return db.query.erc721Tokens.findMany({
+ if (!block) {
+ where.push(sql`upper_inf(_cursor)`);
+ }
+ return await db.query.erc721Tokens.findMany({
limit: limit + 1,
where: and(gt(schema.erc721Tokens.token_id, cursor), ...where),
orderBy: asc(schema.erc721Tokens.token_id),
+ with: {
+ transfers: {
+ orderBy: (transfers, { desc }) => [desc(transfers._cursor)],
+ },
+ },
});
},
},
diff --git a/packages/graphql-server/src/schema.ts b/packages/graphql-server/src/schema.ts
index 70b8209c..52b93b25 100644
--- a/packages/graphql-server/src/schema.ts
+++ b/packages/graphql-server/src/schema.ts
@@ -1,23 +1,56 @@
import { GarphSchema } from "garph";
+import { Range } from "postgres-range";
+
+import { Int8Range } from "@realms-world/db";
export const g = new GarphSchema();
-const metadataAttributesType = g.type("MetadataAttributes", {
+const stringMetadataAttributesType = g.type("StringMetadataAttributes", {
trait_type: g.string(),
value: g.string(),
});
+const numberMetadataAttributesType = g.type("NumberMetadataAttributes", {
+ trait_type: g.string(),
+ value: g.int(),
+});
+const metadataAttributesType = g.unionType("MetadataAttributes", {
+ stringMetadataAttributesType,
+ numberMetadataAttributesType,
+});
const metadataType = g.type("Metadata", {
attributes: g.ref(metadataAttributesType).list().optional(),
});
-export const ERC721TokensGQL = g.type("ERC721Tokens", {
+
+//type RangeType = Int8Range
+
+const RangeType = g.type("RangeType", {
+ range: g.type("Range", {
+ lower: g.int().optional(),
+ upper: g.int().optional(),
+ }),
+});
+
+export const ERC721TranfersGQL = g.type("ERC721Transfers", {
_cursor: g.int().optional(),
id: g.string(),
token_id: g.int().optional(),
contract_address: g.string().optional(),
+ token_key: g.string().optional(),
+ fromAddress: g.string().optional(),
+ toAddress: g.string().optional(),
+});
+
+export const ERC721TokensGQL = g.type("ERC721Tokens", {
+ _cursor: g.ref(() => RangeType).optional(),
+ id: g.string(),
+ token_id: g.int(),
+ contract_address: g.string().optional(),
+ minter: g.string().optional(),
owner: g.string().optional(),
image: g.string().optional(),
name: g.id().optional(),
metadata: g.ref(metadataType).optional(),
+ transfers: g.ref(ERC721TranfersGQL).list().optional(),
});
export const queryType = g.type("Query", {
@@ -29,6 +62,7 @@ export const queryType = g.type("Query", {
limit: g.int().default(20),
cursor: g.int().default(0),
owner: g.string().optional(),
+ block: g.int().optional(),
})
.description("Gets an a list of ERC721 Tokens"),
});
diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json
index 9eab0c13..be2e35c4 100644
--- a/tooling/eslint/package.json
+++ b/tooling/eslint/package.json
@@ -15,9 +15,9 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
- "@next/eslint-plugin-next": "^14.0.2",
- "@typescript-eslint/eslint-plugin": "^6.10.0",
- "@typescript-eslint/parser": "^6.10.0",
+ "@next/eslint-plugin-next": "^14.0.3",
+ "@typescript-eslint/eslint-plugin": "^6.12.0",
+ "@typescript-eslint/parser": "^6.12.0",
"eslint-config-prettier": "^9.0.0",
"eslint-config-turbo": "^1.10.16",
"eslint-plugin-import": "^2.29.0",
@@ -29,8 +29,8 @@
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
"@types/eslint": "^8.44.7",
- "eslint": "^8.53.0",
- "typescript": "^5.2.2"
+ "eslint": "^8.54.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,
diff --git a/tooling/prettier/package.json b/tooling/prettier/package.json
index 3ad3c1e8..82c5ada7 100644
--- a/tooling/prettier/package.json
+++ b/tooling/prettier/package.json
@@ -10,12 +10,12 @@
},
"dependencies": {
"@ianvs/prettier-plugin-sort-imports": "^4.1.1",
- "prettier": "^3.0.3",
+ "prettier": "^3.1.0",
"prettier-plugin-tailwindcss": "^0.5.7"
},
"devDependencies": {
"@realms-world/tsconfig": "workspace:*",
- "typescript": "^5.2.2"
+ "typescript": "^5.3.2"
},
"prettier": "@realms-world/prettier-config"
}
diff --git a/tooling/tailwind/package.json b/tooling/tailwind/package.json
index 42987618..f6448ade 100644
--- a/tooling/tailwind/package.json
+++ b/tooling/tailwind/package.json
@@ -23,9 +23,9 @@
"@realms-world/eslint-config": "workspace:*",
"@realms-world/prettier-config": "workspace:*",
"@realms-world/tsconfig": "workspace:*",
- "eslint": "^8.53.0",
- "prettier": "^3.0.3",
- "typescript": "^5.2.2"
+ "eslint": "^8.54.0",
+ "prettier": "^3.1.0",
+ "typescript": "^5.3.2"
},
"eslintConfig": {
"root": true,