Skip to content
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36,556 changes: 11,553 additions & 25,003 deletions package-lock.json

Large diffs are not rendered by default.

9 changes: 9 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -147,5 +147,14 @@
"twemoji": "^14.0.2",
"zod": "^4.1.12"
},
"overrides": {
"cookie": "^0.7.0",
"elliptic": "^6.6.1",
"nanoid": "^3.3.11",
"serialize-javascript": "^6.0.2",
"tmp": "^0.2.4",
"uuid": "^9.0.1 || ^11.1.1",
"ws": "^8.18.0"
},
"type": "module"
}
4 changes: 3 additions & 1 deletion src/hooks.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ export const handle = async ({ event, resolve }) => {
for (const str of setCookieParser.splitCookiesString(
res.headers.get('set-cookie') ?? '',
)) {
const { name, value, ...options } = setCookieParser.parseString(str);
const parsed = setCookieParser.parseString(str);
if (!parsed) continue;
const { name, value, ...options } = parsed;

if (name === 'wave_refresh_token' || name === 'wave_access_token') {
event.cookies.set(name, value, {
Expand Down
12 changes: 11 additions & 1 deletion src/lib/components/stepper/stepper.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import { cubicInOut } from 'svelte/easing';
import AwaitStep, { type Result } from './components/await-step.svelte';
import AwaitErrorStep from './components/await-error-step.svelte';
import type { derived, Writable } from 'svelte/store';
import type { Writable } from 'svelte/store';
import modal from '$lib/stores/modal';
import { browser } from '$app/environment';
import TransactStep from './components/transact-step.svelte';
Expand Down Expand Up @@ -46,6 +46,7 @@
let resolvedSteps = $derived(internalSteps.map((someStep) => someStep((i) => i)));
let currentStep = $derived(resolvedSteps[currentStepIndex]);

// eslint-disable-next-line svelte/prefer-writable-derived
let prevStepIndex = $state(0);

let direction = $derived.by(() => {
Expand Down Expand Up @@ -138,12 +139,21 @@
let resizeObserver = browser ? new ResizeObserver(() => updateContainerHeight()) : undefined;
let observedElement: HTMLDivElement | undefined;

let lastStepElement: HTMLDivElement | undefined;
$effect(() => {
if (!resizeObserver) return;

resizeObserver.disconnect();

if (stepElement) {
// Svelte 5 mounts the new {#key} block element and re-runs this effect
// before the old element's outro fires `onoutrostart`. Without this,
// updateContainerHeight() would run with transitioning=false and snap
// wrapperHeight instantly. Flip transitioning ourselves on rebind only —
// effect re-runs from any other reactive dep change must not touch it.
if (lastStepElement && lastStepElement !== stepElement) transitioning = true;
lastStepElement = stepElement;

observedElement = stepElement;
resizeObserver.observe(observedElement);
updateContainerHeight();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@
}

let { context }: Props = $props();
let projectSource = $derived($context.project?.source ?? unreachable());

async function checkProjectInExpectedStateForClaiming() {
const checkProjectVerificationStatusQuery = gql`
Expand Down Expand Up @@ -76,7 +75,7 @@
CheckProjectVerificationStatusQuery,
CheckProjectVerificationStatusQueryVariables
>(checkProjectVerificationStatusQuery, {
projectUrl: projectSource.url,
projectUrl: $context.project?.source.url ?? unreachable(),
chains: [network.gqlName],
});

Expand Down
18 changes: 14 additions & 4 deletions src/lib/flows/create-stream-flow/input-details.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,14 @@
);

function submit() {
// Snapshot derived values now — once we dispatch, this component unmounts
// and Svelte 5 returns an inert sentinel for `$derived` reads.
const snap = {
amountPerSecond,
combinedStartDate,
combinedEndDate,
};

dispatch(
'transact',
makeTransactPayload({
Expand Down Expand Up @@ -265,13 +273,15 @@

const { batch, newHash } = await buildStreamCreateBatchTx(signer, {
tokenAddress: $context.selectedTokenAddress?.[0] ?? unreachable(),
amountPerSecond: amountPerSecond ?? unreachable(),
amountPerSecond: snap.amountPerSecond ?? unreachable(),
recipientAccountId,
name: $context.streamNameValue,
startAt: shouldSchedule ? combinedStartDate : undefined,
startAt: shouldSchedule ? snap.combinedStartDate : undefined,
durationSeconds:
shouldSchedule && combinedEndDate && combinedStartDate
? Math.floor((combinedEndDate.getTime() - combinedStartDate.getTime()) / 1000)
shouldSchedule && snap.combinedEndDate && snap.combinedStartDate
? Math.floor(
(snap.combinedEndDate.getTime() - snap.combinedStartDate.getTime()) / 1000,
)
: undefined,
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@
function submit() {
const metadataManager = new RepoDriverMetadataManager();

// Snapshot derived values now — once we dispatch, this component unmounts
// and `$projectDataWritable` (a $derived) returns Svelte's inert sentinel.
const projectDataSnapshot = $projectDataWritable;

dispatch(
'transact',
makeTransactPayload({
Expand All @@ -84,17 +88,17 @@
const newMetadata: LatestVersion<typeof repoDriverAccountMetadataParser> = {
...upgraded,
avatar:
$projectDataWritable.avatar.__typename === 'EmojiAvatar'
projectDataSnapshot.avatar.__typename === 'EmojiAvatar'
? {
type: 'emoji',
emoji: $projectDataWritable.avatar.emoji,
emoji: projectDataSnapshot.avatar.emoji,
}
: {
type: 'image',
cid: $projectDataWritable.avatar.cid,
cid: projectDataSnapshot.avatar.cid,
},
color: $projectDataWritable.color,
isVisible: $projectDataWritable.isProjectVisible,
color: projectDataSnapshot.color,
isVisible: projectDataSnapshot.isProjectVisible,
};

const ipfsHash = await metadataManager.pinAccountMetadata(newMetadata);
Expand Down
21 changes: 16 additions & 5 deletions src/lib/flows/edit-stream-flow/enter-new-details.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -142,22 +142,33 @@
);

function updateStream() {
// Snapshot derived values now — once we dispatch, this component unmounts
// and Svelte 5 returns an inert sentinel for `$derived` reads.
const snap = {
nameUpdated,
amountUpdated,
endDateUpdated,
newAmountPerSecond,
combinedEndDate,
actualStartDate,
};

dispatch(
'transact',
makeTransactPayload({
headline: 'Edit stream',
before: async () => {
const { newHash, batch } = await buildEditStreamBatch(stream.id, {
name: nameUpdated ? $context.newName : undefined,
amountPerSecond: amountUpdated ? newAmountPerSecond : undefined,
newEndDate: endDateUpdated ? combinedEndDate : undefined,
actualStartDate: endDateUpdated ? actualStartDate : undefined,
name: snap.nameUpdated ? $context.newName : undefined,
amountPerSecond: snap.amountUpdated ? snap.newAmountPerSecond : undefined,
newEndDate: snap.endDateUpdated ? snap.combinedEndDate : undefined,
actualStartDate: snap.endDateUpdated ? snap.actualStartDate : undefined,
});

return {
batch,
newHash,
needGasBuffer: amountUpdated || endDateUpdated,
needGasBuffer: snap.amountUpdated || snap.endDateUpdated,
};
},

Expand Down
Loading