@antseed/payments 0.1.79 → 0.1.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/dist/free-tier-delegations.d.ts +25 -0
  2. package/dist/free-tier-delegations.js +124 -0
  3. package/dist/free-tier-delegations.js.map +1 -0
  4. package/dist/free-tier-delegations.test.d.ts +1 -0
  5. package/dist/free-tier-delegations.test.js +83 -0
  6. package/dist/free-tier-delegations.test.js.map +1 -0
  7. package/dist/server.js +9 -3
  8. package/dist/server.js.map +1 -1
  9. package/dist/web/assets/{add-BmGLglO7.js → add-BuGrluX1.js} +1 -1
  10. package/dist/web/assets/{all-wallets-Ba8n7B9j.js → all-wallets-fiytzdKy.js} +1 -1
  11. package/dist/web/assets/{app-store-BMdLkEq6.js → app-store-CRM80Dos.js} +1 -1
  12. package/dist/web/assets/{apple-Bw-lMyEP.js → apple-BcIvstxs.js} +1 -1
  13. package/dist/web/assets/{arrow-bottom-B6iO34ZS.js → arrow-bottom-B3DyTgix.js} +1 -1
  14. package/dist/web/assets/{arrow-bottom-circle-DjF6mGXK.js → arrow-bottom-circle-o2xc6Vur.js} +1 -1
  15. package/dist/web/assets/{arrow-left-AI88nzl-.js → arrow-left-_A-KEHwO.js} +1 -1
  16. package/dist/web/assets/{arrow-right-Co7E5DMP.js → arrow-right-CpwiDb-r.js} +1 -1
  17. package/dist/web/assets/{arrow-top-Br1BAEl6.js → arrow-top-BbmzVCEg.js} +1 -1
  18. package/dist/web/assets/{bank-C-iVuIdQ.js → bank-BBfUUmTg.js} +1 -1
  19. package/dist/web/assets/{basic-D6uTDDsg.js → basic-CBpNXBox.js} +1 -1
  20. package/dist/web/assets/{browser-BH1XGLD_.js → browser-DCUUxXFD.js} +1 -1
  21. package/dist/web/assets/{card-Bk7TQeZr.js → card-Dg-VP3Jp.js} +1 -1
  22. package/dist/web/assets/{ccip-FBfaj_JG.js → ccip-Dp_RPrDB.js} +1 -1
  23. package/dist/web/assets/{checkmark-BfD3jUA6.js → checkmark-BlzM29Qx.js} +1 -1
  24. package/dist/web/assets/{checkmark-bold-rC-0R8Tz.js → checkmark-bold-DNJnUEe5.js} +1 -1
  25. package/dist/web/assets/{chevron-bottom-B9aHWtfX.js → chevron-bottom-J7_Wy9sz.js} +1 -1
  26. package/dist/web/assets/{chevron-left-BX6gn0U0.js → chevron-left-ChloRmGq.js} +1 -1
  27. package/dist/web/assets/{chevron-right-D5ryvNP_.js → chevron-right-CmMxLLHf.js} +1 -1
  28. package/dist/web/assets/{chevron-top-BJOZNUdW.js → chevron-top-C195_Z3c.js} +1 -1
  29. package/dist/web/assets/{chrome-store-Cc5Rp7DD.js → chrome-store-CXXA9iFF.js} +1 -1
  30. package/dist/web/assets/{clock-Isck2mmO.js → clock-CaXX8z4F.js} +1 -1
  31. package/dist/web/assets/{close-DRTcCHTJ.js → close-CTDyYwa3.js} +1 -1
  32. package/dist/web/assets/{coinPlaceholder-JxcKr4ll.js → coinPlaceholder-CNtm4br2.js} +1 -1
  33. package/dist/web/assets/{compass-CRrluTA_.js → compass-CQVkzTVA.js} +1 -1
  34. package/dist/web/assets/{copy-C_NXEzpJ.js → copy-B3CUdYJc.js} +1 -1
  35. package/dist/web/assets/{core-B9_TqCAE.js → core-DtBtW8-1.js} +3 -3
  36. package/dist/web/assets/{cursor-CCwDD6UM.js → cursor-BS8yKljr.js} +1 -1
  37. package/dist/web/assets/{cursor-transparent-DAIW5ZfU.js → cursor-transparent-Dwv4JccA.js} +1 -1
  38. package/dist/web/assets/{desktop-BLWyI0Zl.js → desktop-DPEWw6bt.js} +1 -1
  39. package/dist/web/assets/{disconnect-B5uFiIG1.js → disconnect-j57QNckX.js} +1 -1
  40. package/dist/web/assets/{discord-B-pvmlf_.js → discord-uKqS3fOF.js} +1 -1
  41. package/dist/web/assets/{etherscan-D09rivn2.js → etherscan-CKZnjnvC.js} +1 -1
  42. package/dist/web/assets/{exclamation-triangle-CmqiZweA.js → exclamation-triangle-BKyknnCw.js} +1 -1
  43. package/dist/web/assets/{extension-CpitF-2L.js → extension-VU0aJApQ.js} +1 -1
  44. package/dist/web/assets/{external-link-BEvpecPB.js → external-link-rjHfCDPq.js} +1 -1
  45. package/dist/web/assets/{facebook-Bh8XDyr1.js → facebook-BZcH7nAf.js} +1 -1
  46. package/dist/web/assets/{farcaster-4hv7JLYr.js → farcaster-BYk6HVYC.js} +1 -1
  47. package/dist/web/assets/{filters-C4CLQAw1.js → filters-tdgdTci1.js} +1 -1
  48. package/dist/web/assets/{github-iupXe9Hi.js → github-DDWtg5BI.js} +1 -1
  49. package/dist/web/assets/{google-DuLqmlIi.js → google-nuHZ53jx.js} +1 -1
  50. package/dist/web/assets/{help-circle-Dx_15WyK.js → help-circle-hkiv5Uy_.js} +1 -1
  51. package/dist/web/assets/{id-FEup121p.js → id-DNMpZ1pB.js} +1 -1
  52. package/dist/web/assets/{image-D4VdkXGr.js → image-CtGLSXGt.js} +1 -1
  53. package/dist/web/assets/{index-CpI_GhJ4.js → index-CS32ZEaB.js} +3 -3
  54. package/dist/web/assets/{index-Avo4hOlh.js → index-Ck4Xjs9A.js} +67 -67
  55. package/dist/web/assets/{index-D_Oia2rQ.js → index-DAffOnu-.js} +1 -1
  56. package/dist/web/assets/{index-DPrrbgDK.js → index-DD7uAlhH.js} +1 -1
  57. package/dist/web/assets/{index-DtvsHuZD.js → index-Mr-jaPV2.js} +1 -1
  58. package/dist/web/assets/{index.es-4jtvYW5n.js → index.es-Cb6GoQM0.js} +4 -4
  59. package/dist/web/assets/{info-DmGrffKx.js → info-B1qYLssh.js} +1 -1
  60. package/dist/web/assets/{info-circle-cRVJZhm0.js → info-circle-ocp-Jpi9.js} +1 -1
  61. package/dist/web/assets/{lightbulb-DXcgHaY-.js → lightbulb-c9FH_5Rm.js} +1 -1
  62. package/dist/web/assets/{mail-C-o0_3sQ.js → mail-Cqu155VE.js} +1 -1
  63. package/dist/web/assets/{metamask-sdk-CPv8vfWd.js → metamask-sdk-i1CrWVk1.js} +1 -1
  64. package/dist/web/assets/{mobile-DADbQ6PC.js → mobile-B1IpKlKa.js} +1 -1
  65. package/dist/web/assets/{more-BIX8JqDx.js → more-BIWDJ7mc.js} +1 -1
  66. package/dist/web/assets/{network-placeholder-Dm_1io5O.js → network-placeholder-D4Hs9LyZ.js} +1 -1
  67. package/dist/web/assets/{nftPlaceholder-HqtJdD2N.js → nftPlaceholder-DYMfSoZ6.js} +1 -1
  68. package/dist/web/assets/{off-DTH-lXVO.js → off-CU_NlIIT.js} +1 -1
  69. package/dist/web/assets/{play-store-uipYdNTG.js → play-store-CIoxgNs1.js} +1 -1
  70. package/dist/web/assets/{plus-BnkhXJou.js → plus-Do0zsP22.js} +1 -1
  71. package/dist/web/assets/{qr-code-T5yJxcJo.js → qr-code-UXCuS5GG.js} +1 -1
  72. package/dist/web/assets/{recycle-horizontal-DC7ElP7S.js → recycle-horizontal-CXXOyiew.js} +1 -1
  73. package/dist/web/assets/{refresh-TEuCscWV.js → refresh-fod89hf8.js} +1 -1
  74. package/dist/web/assets/{reown-logo-DfR-XktT.js → reown-logo-CHTOcVHN.js} +1 -1
  75. package/dist/web/assets/{search-toStFVmY.js → search-C-9etLr-.js} +1 -1
  76. package/dist/web/assets/{secp256k1-4pFpe3fj.js → secp256k1-Do1cC_MA.js} +1 -1
  77. package/dist/web/assets/{send-ClyDyBO7.js → send-DD9tf6By.js} +1 -1
  78. package/dist/web/assets/{swapHorizontal-CXCJUjUn.js → swapHorizontal-DwUF3NTe.js} +1 -1
  79. package/dist/web/assets/{swapHorizontalBold-Dk7L91xv.js → swapHorizontalBold-DyPkwtbf.js} +1 -1
  80. package/dist/web/assets/{swapHorizontalMedium-CqZa-X1O.js → swapHorizontalMedium-pgmoKKQc.js} +1 -1
  81. package/dist/web/assets/{swapHorizontalRoundedBold-AxS9Ahfo.js → swapHorizontalRoundedBold-DhEu9ydT.js} +1 -1
  82. package/dist/web/assets/{swapVertical-A42Ry_KO.js → swapVertical-CeL6qjtG.js} +1 -1
  83. package/dist/web/assets/{telegram-CC-Q4JVb.js → telegram-YwqiLuim.js} +1 -1
  84. package/dist/web/assets/{three-dots-CIbexbbL.js → three-dots-DYARiZtt.js} +1 -1
  85. package/dist/web/assets/{twitch-uJDw3--F.js → twitch-CxbjfG_J.js} +1 -1
  86. package/dist/web/assets/{twitterIcon-CQrpCxzv.js → twitterIcon-BCL0wspr.js} +1 -1
  87. package/dist/web/assets/{verify-C2awa59E.js → verify-CKYaNBxc.js} +1 -1
  88. package/dist/web/assets/{verify-filled-B9qF1cXp.js → verify-filled-C0VQdTnm.js} +1 -1
  89. package/dist/web/assets/{w3m-modal-DITdZ8xD.js → w3m-modal-Dd38vGmL.js} +1 -1
  90. package/dist/web/assets/{wallet-placeholder-BlUaZ2tK.js → wallet-placeholder-Btyoi8DW.js} +1 -1
  91. package/dist/web/assets/{wallet-DxxiZsDo.js → wallet-tEN9jw7i.js} +1 -1
  92. package/dist/web/assets/{walletconnect-ifsXHNW2.js → walletconnect-DU70qvIG.js} +1 -1
  93. package/dist/web/assets/{warning-circle-BACwffwW.js → warning-circle-BwVSdfIJ.js} +1 -1
  94. package/dist/web/assets/{x-CODHraZc.js → x-bljmw6xn.js} +1 -1
  95. package/dist/web/index.html +1 -1
  96. package/package.json +4 -4
@@ -0,0 +1,25 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ import { type FreeTierDelegation } from '@antseed/node';
3
+ interface FreeTierDelegationRoutesContext {
4
+ configPath: string;
5
+ chainId: number;
6
+ /** The buyer identity this page serves, or null when no identity is loaded. */
7
+ buyerAddress: string | null;
8
+ }
9
+ /** The buyer's saved delegations from config.json (`buyer.freeTierDelegations`). */
10
+ export declare function readFreeTierDelegations(configPath: string): Promise<FreeTierDelegation[]>;
11
+ /**
12
+ * Save `delegation`, replacing an earlier one from the same staker to the
13
+ * same buyer. Other config keys are left untouched. Edits of one config file
14
+ * run one at a time across processes (this page, the CLI and the gateway hold
15
+ * the same lock file), so concurrent edits keep each other's changes; a
16
+ * symlinked config is updated at its target and keeps its permissions.
17
+ */
18
+ export declare function saveFreeTierDelegation(configPath: string, delegation: FreeTierDelegation): Promise<FreeTierDelegation[]>;
19
+ /**
20
+ * Routes for the "Share free tier" page: the staker's wallet signs a
21
+ * delegation in the browser, and the server checks it and saves it for the
22
+ * buyer node to send to sellers.
23
+ */
24
+ export declare function registerFreeTierDelegationRoutes(fastify: FastifyInstance, ctx: FreeTierDelegationRoutesContext): void;
25
+ export {};
@@ -0,0 +1,124 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { chmod, readFile, realpath, rename, rm, stat, writeFile } from 'node:fs/promises';
3
+ import { getAddress, isAddress } from 'ethers';
4
+ import { DEFAULT_FREE_TIER_DELEGATION_DAYS, FREE_TIER_DELEGATION_TYPES, isFreeTierDelegationSigned, makeFreeTierDelegationDomain, withFileLock, withFreeTierDelegation, } from '@antseed/node';
5
+ /** The buyer's saved delegations from config.json (`buyer.freeTierDelegations`). */
6
+ export async function readFreeTierDelegations(configPath) {
7
+ const config = await readConfig(configPath);
8
+ const buyer = (config.buyer ?? {});
9
+ return Array.isArray(buyer.freeTierDelegations) ? buyer.freeTierDelegations : [];
10
+ }
11
+ /**
12
+ * Save `delegation`, replacing an earlier one from the same staker to the
13
+ * same buyer. Other config keys are left untouched. Edits of one config file
14
+ * run one at a time across processes (this page, the CLI and the gateway hold
15
+ * the same lock file), so concurrent edits keep each other's changes; a
16
+ * symlinked config is updated at its target and keeps its permissions.
17
+ */
18
+ export async function saveFreeTierDelegation(configPath, delegation) {
19
+ const target = await realTarget(configPath);
20
+ const save = async () => {
21
+ const config = await readConfig(target);
22
+ const buyer = (config.buyer ?? {});
23
+ const existing = Array.isArray(buyer.freeTierDelegations) ? buyer.freeTierDelegations : [];
24
+ const delegations = withFreeTierDelegation(existing, delegation);
25
+ config.buyer = { ...buyer, freeTierDelegations: delegations };
26
+ const mode = await fileMode(target) ?? 0o600;
27
+ const temp = `${target}.tmp-${process.pid}-${randomUUID()}`;
28
+ try {
29
+ await writeFile(temp, `${JSON.stringify(config, null, 2)}\n`, { encoding: 'utf-8', mode });
30
+ await chmod(temp, mode);
31
+ await rename(temp, target);
32
+ }
33
+ catch (err) {
34
+ await rm(temp, { force: true });
35
+ throw err;
36
+ }
37
+ return delegations;
38
+ };
39
+ return withFileLock(target, save);
40
+ }
41
+ /** The file a config path points to, following symlinks; the path itself when it does not exist yet. */
42
+ async function realTarget(configPath) {
43
+ try {
44
+ return await realpath(configPath);
45
+ }
46
+ catch (err) {
47
+ if (err.code === 'ENOENT')
48
+ return configPath;
49
+ throw err;
50
+ }
51
+ }
52
+ async function fileMode(path) {
53
+ try {
54
+ return (await stat(path)).mode & 0o777;
55
+ }
56
+ catch (err) {
57
+ if (err.code === 'ENOENT')
58
+ return null;
59
+ throw err;
60
+ }
61
+ }
62
+ async function readConfig(configPath) {
63
+ try {
64
+ return JSON.parse(await readFile(configPath, 'utf-8'));
65
+ }
66
+ catch (err) {
67
+ if (err.code === 'ENOENT')
68
+ return {};
69
+ throw err;
70
+ }
71
+ }
72
+ /**
73
+ * Routes for the "Share free tier" page: the staker's wallet signs a
74
+ * delegation in the browser, and the server checks it and saves it for the
75
+ * buyer node to send to sellers.
76
+ */
77
+ export function registerFreeTierDelegationRoutes(fastify, ctx) {
78
+ fastify.get('/api/free-tier/delegations', async (_request, reply) => {
79
+ if (!ctx.buyerAddress)
80
+ return reply.status(503).send({ ok: false, error: 'Identity not configured' });
81
+ const buyer = ctx.buyerAddress.toLowerCase();
82
+ const delegations = (await readFreeTierDelegations(ctx.configPath))
83
+ .filter((delegation) => delegation.buyer.toLowerCase() === buyer);
84
+ return {
85
+ ok: true,
86
+ buyer: ctx.buyerAddress,
87
+ chainId: ctx.chainId,
88
+ defaultDays: DEFAULT_FREE_TIER_DELEGATION_DAYS,
89
+ domain: makeFreeTierDelegationDomain(ctx.chainId),
90
+ types: FREE_TIER_DELEGATION_TYPES,
91
+ delegations,
92
+ };
93
+ });
94
+ fastify.post('/api/free-tier/delegations', async (request, reply) => {
95
+ if (!ctx.buyerAddress)
96
+ return reply.status(503).send({ ok: false, error: 'Identity not configured' });
97
+ const body = request.body;
98
+ const staker = typeof body?.staker === 'string' ? body.staker.trim() : '';
99
+ const expiresAt = typeof body?.expiresAt === 'number' ? body.expiresAt : Number.NaN;
100
+ const signature = typeof body?.signature === 'string' ? body.signature.trim() : '';
101
+ if (!isAddress(staker))
102
+ return reply.status(400).send({ ok: false, error: 'Invalid staker address' });
103
+ if (!Number.isSafeInteger(expiresAt) || expiresAt * 1000 <= Date.now()) {
104
+ return reply.status(400).send({ ok: false, error: 'Expiry must be in the future' });
105
+ }
106
+ const delegation = {
107
+ staker: getAddress(staker),
108
+ buyer: getAddress(ctx.buyerAddress),
109
+ expiresAt,
110
+ signature,
111
+ };
112
+ if (!isFreeTierDelegationSigned(delegation, ctx.chainId)) {
113
+ return reply.status(400).send({ ok: false, error: 'The signature does not match the staker wallet' });
114
+ }
115
+ try {
116
+ await saveFreeTierDelegation(ctx.configPath, delegation);
117
+ return { ok: true, delegation };
118
+ }
119
+ catch (err) {
120
+ return reply.status(409).send({ ok: false, error: err instanceof Error ? err.message : String(err) });
121
+ }
122
+ });
123
+ }
124
+ //# sourceMappingURL=free-tier-delegations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"free-tier-delegations.js","sourceRoot":"","sources":["../src/free-tier-delegations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,83 @@
1
+ import { afterEach, describe, expect, it } from 'vitest';
2
+ import Fastify from 'fastify';
3
+ import { chmodSync, lstatSync, mkdtempSync, readFileSync, rmSync, statSync, symlinkSync, writeFileSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { join } from 'node:path';
6
+ import { Wallet } from 'ethers';
7
+ import { FREE_TIER_DELEGATION_TYPES, freeTierDelegationMessage, makeFreeTierDelegationDomain } from '@antseed/node';
8
+ import { registerFreeTierDelegationRoutes } from './free-tier-delegations.js';
9
+ const CHAIN_ID = 8453;
10
+ const BUYER = Wallet.createRandom().address;
11
+ const dirs = [];
12
+ afterEach(() => {
13
+ for (const dir of dirs.splice(0))
14
+ rmSync(dir, { recursive: true, force: true });
15
+ });
16
+ async function setup() {
17
+ const dir = mkdtempSync(join(tmpdir(), 'antseed-free-tier-'));
18
+ dirs.push(dir);
19
+ const configPath = join(dir, 'config.json');
20
+ writeFileSync(configPath, JSON.stringify({ buyer: { proxyPort: 8377 }, seller: { freeTier: { maxRequestsPerAddress: 5 } } }));
21
+ const app = Fastify();
22
+ registerFreeTierDelegationRoutes(app, { configPath, chainId: CHAIN_ID, buyerAddress: BUYER });
23
+ return { app, configPath };
24
+ }
25
+ async function signed(staker, expiresAt) {
26
+ const signature = await staker.signTypedData(makeFreeTierDelegationDomain(CHAIN_ID), FREE_TIER_DELEGATION_TYPES, freeTierDelegationMessage({ staker: staker.address, buyer: BUYER, expiresAt }));
27
+ return { staker: staker.address, expiresAt, signature };
28
+ }
29
+ describe('free-tier delegation routes', () => {
30
+ it('saves a delegation signed by the staker, keeping the rest of the config', async () => {
31
+ const { app, configPath } = await setup();
32
+ const staker = Wallet.createRandom();
33
+ const expiresAt = Math.floor(Date.now() / 1000) + 86_400;
34
+ const response = await app.inject({ method: 'POST', url: '/api/free-tier/delegations', payload: await signed(staker, expiresAt) });
35
+ expect(response.statusCode).toBe(200);
36
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
37
+ expect(config.buyer.proxyPort).toBe(8377);
38
+ expect(config.seller.freeTier.maxRequestsPerAddress).toBe(5);
39
+ expect(config.buyer.freeTierDelegations).toEqual([expect.objectContaining({ staker: staker.address, buyer: BUYER, expiresAt })]);
40
+ // Signing again replaces the earlier delegation instead of adding another.
41
+ await app.inject({ method: 'POST', url: '/api/free-tier/delegations', payload: await signed(staker, expiresAt + 10) });
42
+ const listed = (await app.inject({ method: 'GET', url: '/api/free-tier/delegations' })).json();
43
+ expect(listed.delegations).toHaveLength(1);
44
+ expect(listed.delegations[0].expiresAt).toBe(expiresAt + 10);
45
+ });
46
+ it('keeps both delegations when two stakers save at the same time', async () => {
47
+ const { app, configPath } = await setup();
48
+ const expiresAt = Math.floor(Date.now() / 1000) + 86_400;
49
+ const [first, second] = [Wallet.createRandom(), Wallet.createRandom()];
50
+ const responses = await Promise.all([first, second].map(async (staker) => app.inject({ method: 'POST', url: '/api/free-tier/delegations', payload: await signed(staker, expiresAt) })));
51
+ expect(responses.map((response) => response.statusCode)).toEqual([200, 200]);
52
+ const config = JSON.parse(readFileSync(configPath, 'utf-8'));
53
+ expect(config.buyer.proxyPort).toBe(8377);
54
+ expect(config.buyer.freeTierDelegations.map((entry) => entry.staker).sort())
55
+ .toEqual([first.address, second.address].sort());
56
+ });
57
+ it('saves through a symlinked config to its target and keeps an owner-only mode', async () => {
58
+ const dir = mkdtempSync(join(tmpdir(), 'antseed-free-tier-'));
59
+ dirs.push(dir);
60
+ const target = join(dir, 'shared.json');
61
+ writeFileSync(target, JSON.stringify({ buyer: { proxyPort: 8377 } }));
62
+ chmodSync(target, 0o600);
63
+ const configPath = join(dir, 'config.json');
64
+ symlinkSync(target, configPath);
65
+ const app = Fastify();
66
+ registerFreeTierDelegationRoutes(app, { configPath, chainId: CHAIN_ID, buyerAddress: BUYER });
67
+ const staker = Wallet.createRandom();
68
+ const payload = await signed(staker, Math.floor(Date.now() / 1000) + 86_400);
69
+ expect((await app.inject({ method: 'POST', url: '/api/free-tier/delegations', payload })).statusCode).toBe(200);
70
+ expect(lstatSync(configPath).isSymbolicLink()).toBe(true);
71
+ expect(statSync(target).mode & 0o777).toBe(0o600);
72
+ expect(JSON.parse(readFileSync(target, 'utf-8')).buyer.freeTierDelegations).toEqual([expect.objectContaining({ staker: staker.address })]);
73
+ });
74
+ it('rejects a signature from a different wallet and expired delegations', async () => {
75
+ const { app } = await setup();
76
+ const staker = Wallet.createRandom();
77
+ const forged = { ...(await signed(Wallet.createRandom(), Math.floor(Date.now() / 1000) + 60)), staker: staker.address };
78
+ expect((await app.inject({ method: 'POST', url: '/api/free-tier/delegations', payload: forged })).statusCode).toBe(400);
79
+ const expired = await signed(staker, Math.floor(Date.now() / 1000) - 1);
80
+ expect((await app.inject({ method: 'POST', url: '/api/free-tier/delegations', payload: expired })).statusCode).toBe(400);
81
+ });
82
+ });
83
+ //# sourceMappingURL=free-tier-delegations.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"free-tier-delegations.test.js","sourceRoot":"","sources":["../src/free-tier-delegations.test.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -8,6 +8,7 @@ import { homedir } from 'node:os';
8
8
  import { readFile } from 'node:fs/promises';
9
9
  import { resolveChainConfig } from '@antseed/node';
10
10
  import { registerRoutes } from './routes.js';
11
+ import { registerFreeTierDelegationRoutes } from './free-tier-delegations.js';
11
12
  import { loadCryptoContext } from './crypto-context.js';
12
13
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
14
  export async function createServer(options) {
@@ -55,10 +56,10 @@ export async function createServer(options) {
55
56
  // Resolve chain config: protocol defaults + user overrides from config.json
56
57
  let userOverrides = {};
57
58
  let proxyPort = 8377;
59
+ const cfgPath = options.configPath ?? (options.dataDir
60
+ ? path.join(options.dataDir, 'config.json')
61
+ : path.join(homedir(), '.antseed', 'config.json'));
58
62
  try {
59
- const cfgPath = options.configPath ?? (options.dataDir
60
- ? path.join(options.dataDir, 'config.json')
61
- : path.join(homedir(), '.antseed', 'config.json'));
62
63
  const raw = await readFile(cfgPath, 'utf-8');
63
64
  const config = JSON.parse(raw);
64
65
  const payments = (config.payments ?? {});
@@ -98,6 +99,11 @@ export async function createServer(options) {
98
99
  usdcContractAddress: chainConfig.usdcContractAddress,
99
100
  };
100
101
  registerRoutes(fastify, { cryptoCtx, cryptoConfig, chainConfig, proxyPort });
102
+ registerFreeTierDelegationRoutes(fastify, {
103
+ configPath: cfgPath,
104
+ chainId: chainConfig.evmChainId,
105
+ buyerAddress: cryptoCtx?.evmAddress ?? null,
106
+ });
101
107
  fastify.post('/api/pay/open-rewards', async (_request, reply) => {
102
108
  if (!options.onOpenRewards)
103
109
  return reply.status(409).send({ ok: false, error: 'Open the ANTS dashboard with antseed ants, using this account’s data directory, then select Rewards.' });
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAgD,MAAM,qBAAqB,CAAC;AAEtG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAyB/D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3C,2EAA2E;IAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,mFAAmF;IACnF,MAAM,YAAY,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAE9D,0FAA0F;IAC1F,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO;QAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,IAAI,KAAK,UAAU,WAAW,EAAE,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;YACpC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;QACH,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IAED,iCAAiC;IACjC,IAAI,SAAS,GAAyB,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,iBAAiB,CAAC;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,4EAA4E;IAC5E,IAAI,aAAa,GAA4B,EAAE,CAAC;IAChD,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO;YACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;YAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;QACpE,aAAa,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;QACnE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;QAC9D,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACnG,CAAC,CAAE,aAAa,CAAC,MAAiB;QAClC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,eAAe,GAAI,aAAa,CAAC,OAA8B,IAAI,cAAc,CAAC;IACxF,yEAAyE;IACzE,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,eAAe,GAAG,UAAU,IAAI,CAAC,eAAe,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/G,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACrC,OAAO,EAAE,aAAa,CAAC,OAA6B;QACpD,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;YAC9C,CAAC,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,eAA2B,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,uBAAuB,EAAE,aAAa,CAAC,uBAA6C;QACpF,uBAAuB,EAAE,aAAa,CAAC,uBAA6C;QACpF,mBAAmB,EAAE,aAAa,CAAC,mBAAyC;KAC7E,CAAC,CAAC;IAEH,MAAM,YAAY,GAAwB;QACxC,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;QAC5D,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;QAC5D,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;KACrD,CAAC;IAEF,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAE7E,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC9D,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sGAAsG,EAAE,CAAC,CAAC;QACxL,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAAC,CAAC;QAC3D,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IAChI,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1E,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,KAAK,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAEA,OAA8C,CAAC,WAAW,GAAG,WAAW,CAAC;IAE1E,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,WAAW,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAgD,MAAM,qBAAqB,CAAC;AAEtG,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAyB/D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA8B;IAC/D,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAE3C,2EAA2E;IAC3E,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEpD,mFAAmF;IACnF,MAAM,YAAY,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;IACxD,MAAM,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAE9D,0FAA0F;IAC1F,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,OAAO;QAC7C,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,OAAO;QAC9E,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,IAAI,KAAK,UAAU,WAAW,EAAE,EAAE,CAAC;YACrC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,QAAQ,CAAC,aAAa,EAAE;YACpC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;QACH,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,wDAAwD;IAC1D,CAAC;IAED,iCAAiC;IACjC,IAAI,SAAS,GAAyB,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,iBAAiB,CAAC;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,2CAA2C,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,4EAA4E;IAC5E,IAAI,aAAa,GAA4B,EAAE,CAAC;IAChD,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,OAAO;QACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC;QAC3C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAC1D,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAA4B,CAAC;QACpE,aAAa,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAA4B,CAAC;QACnE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;QAC9D,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;YACxC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,aAAa,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAChE,MAAM,UAAU,GAAG,OAAO,aAAa,CAAC,MAAM,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;QACnG,CAAC,CAAE,aAAa,CAAC,MAAiB;QAClC,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,eAAe,GAAI,aAAa,CAAC,OAA8B,IAAI,cAAc,CAAC;IACxF,yEAAyE;IACzE,2EAA2E;IAC3E,2DAA2D;IAC3D,MAAM,eAAe,GAAG,UAAU,IAAI,CAAC,eAAe,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/G,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACrC,OAAO,EAAE,aAAa,CAAC,OAA6B;QACpD,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC;YAC9C,CAAC,CAAC,EAAE,eAAe,EAAE,aAAa,CAAC,eAA2B,EAAE;YAChE,CAAC,CAAC,EAAE,CAAC;QACP,uBAAuB,EAAE,aAAa,CAAC,uBAA6C;QACpF,uBAAuB,EAAE,aAAa,CAAC,uBAA6C;QACpF,mBAAmB,EAAE,aAAa,CAAC,mBAAyC;KAC7E,CAAC,CAAC;IAEH,MAAM,YAAY,GAAwB;QACxC,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,GAAG,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;QAC5D,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;QAC5D,mBAAmB,EAAE,WAAW,CAAC,mBAAmB;KACrD,CAAC;IAEF,cAAc,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,gCAAgC,CAAC,OAAO,EAAE;QACxC,UAAU,EAAE,OAAO;QACnB,OAAO,EAAE,WAAW,CAAC,UAAU;QAC/B,YAAY,EAAE,SAAS,EAAE,UAAU,IAAI,IAAI;KAC5C,CAAC,CAAC;IAEH,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC9D,IAAI,CAAC,OAAO,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,sGAAsG,EAAE,CAAC,CAAC;QACxL,IAAI,CAAC;YAAC,MAAM,OAAO,CAAC,aAAa,EAAE,CAAC;YAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAAC,CAAC;QAC3D,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;IAChI,CAAC,CAAC,CAAC;IAEH,2EAA2E;IAC3E,0EAA0E;IAC1E,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC;YACH,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1E,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,KAAK,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAEA,OAA8C,CAAC,WAAW,GAAG,WAAW,CAAC;IAE1E,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const e=o`<svg
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const e=o`<svg
2
2
  width="14"
3
3
  height="14"
4
4
  viewBox="0 0 14 14"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const r=o`<svg fill="none" viewBox="0 0 24 24">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const r=o`<svg fill="none" viewBox="0 0 24 24">
2
2
  <path
3
3
  style="fill: var(--wui-color-accent-100);"
4
4
  d="M10.2 6.6a3.6 3.6 0 1 1-7.2 0 3.6 3.6 0 0 1 7.2 0ZM21 6.6a3.6 3.6 0 1 1-7.2 0 3.6 3.6 0 0 1 7.2 0ZM10.2 17.4a3.6 3.6 0 1 1-7.2 0 3.6 3.6 0 0 1 7.2 0ZM21 17.4a3.6 3.6 0 1 1-7.2 0 3.6 3.6 0 0 1 7.2 0Z"
@@ -1,4 +1,4 @@
1
- import{w as t}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const e=t`
1
+ import{w as t}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const e=t`
2
2
  <svg width="36" height="36">
3
3
  <path
4
4
  d="M28.724 0H7.271A7.269 7.269 0 0 0 0 7.272v21.46A7.268 7.268 0 0 0 7.271 36H28.73A7.272 7.272 0 0 0 36 28.728V7.272A7.275 7.275 0 0 0 28.724 0Z"
@@ -1,4 +1,4 @@
1
- import{w as i}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const c=i`<svg fill="none" viewBox="0 0 40 40">
1
+ import{w as i}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const c=i`<svg fill="none" viewBox="0 0 40 40">
2
2
  <g clip-path="url(#a)">
3
3
  <g clip-path="url(#b)">
4
4
  <circle cx="20" cy="19.89" r="20" fill="#000" />
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const i=o`<svg fill="none" viewBox="0 0 14 15">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const i=o`<svg fill="none" viewBox="0 0 14 15">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as C}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const i=C`<svg
1
+ import{w as C}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const i=C`<svg
2
2
  fill="none"
3
3
  viewBox="0 0 21 20"
4
4
  >
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 14 15">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 14 15">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 14 15">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 14 15">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const p=o`<svg fill="none" viewBox="0 0 14 15">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const p=o`<svg fill="none" viewBox="0 0 14 15">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const l=o`<svg
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const l=o`<svg
2
2
  xmlns="http://www.w3.org/2000/svg"
3
3
  width="12"
4
4
  height="13"
@@ -1,4 +1,4 @@
1
- import{i as N,e as G,r as q,c as O,d as c,k as M,n as z,O as ee,q as k,E as te,R as U,z as Me,g as K,B as j,D as ft,t as Cn,W as pt,C as Zt,h as vi,T as ei,m as Xe,M as on,F as rn,w as Ne,x as yi,f as Rn}from"./core-B9_TqCAE.js";import{n as u,c as B,o as E,r as _,U as he,e as $n,f as _n,a as In}from"./index-CpI_GhJ4.js";import{n as En}from"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const Wn=N`
1
+ import{i as N,e as G,r as q,c as O,d as c,k as M,n as z,O as ee,q as k,E as te,R as U,z as Me,g as K,B as j,D as ft,t as Cn,W as pt,C as Zt,h as vi,T as ei,m as Xe,M as on,F as rn,w as Ne,x as yi,f as Rn}from"./core-DtBtW8-1.js";import{n as u,c as B,o as E,r as _,U as he,e as $n,f as _n,a as In}from"./index-CS32ZEaB.js";import{n as En}from"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const Wn=N`
2
2
  :host {
3
3
  position: relative;
4
4
  background-color: var(--wui-color-gray-glass-002);
@@ -1,4 +1,4 @@
1
- import{w as l}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const c=l`<svg fill="none" viewBox="0 0 20 20">
1
+ import{w as l}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const c=l`<svg fill="none" viewBox="0 0 20 20">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as C}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const i=C`<svg
1
+ import{w as C}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const i=C`<svg
2
2
  xmlns="http://www.w3.org/2000/svg"
3
3
  width="12"
4
4
  height="13"
@@ -1 +1 @@
1
- import{B as p,g as m,s as w,d as k,i as b,l as L,a as O,c as E,b as x,e as R,H as y,f as M}from"./index-Avo4hOlh.js";class S extends p{constructor({callbackSelector:r,cause:a,data:n,extraData:i,sender:f,urls:t}){var o;super(a.shortMessage||"An error occurred while fetching for an offchain result.",{cause:a,metaMessages:[...a.metaMessages||[],(o=a.metaMessages)!=null&&o.length?"":[],"Offchain Gateway Call:",t&&[" Gateway URL(s):",...t.map(d=>` ${m(d)}`)],` Sender: ${f}`,` Data: ${n}`,` Callback selector: ${r}`,` Extra data: ${i}`].flat(),name:"OffchainLookupError"})}}class $ extends p{constructor({result:r,url:a}){super("Offchain gateway response is malformed. Response data must be a hex value.",{metaMessages:[`Gateway URL: ${m(a)}`,`Response: ${w(r)}`],name:"OffchainLookupResponseMalformedError"})}}class q extends p{constructor({sender:r,to:a}){super("Reverted sender address does not match target contract address (`to`).",{metaMessages:[`Contract address: ${a}`,`OffchainLookup sender address: ${r}`],name:"OffchainLookupSenderMismatchError"})}}const A="0x556f1830",T={name:"OffchainLookup",type:"error",inputs:[{name:"sender",type:"address"},{name:"urls",type:"string[]"},{name:"callData",type:"bytes"},{name:"callbackFunction",type:"bytes4"},{name:"extraData",type:"bytes"}]};async function D(c,{blockNumber:r,blockTag:a,data:n,to:i}){const{args:f}=k({data:n,abi:[T]}),[t,o,d,l,s]=f,{ccipRead:e}=c,h=e&&typeof(e==null?void 0:e.request)=="function"?e.request:C;try{if(!b(i,t))throw new q({sender:t,to:i});const u=o.includes(L)?await O({data:d,ccipRequest:h}):await h({data:d,sender:t,urls:o}),{data:g}=await E(c,{blockNumber:r,blockTag:a,data:x([l,R([{type:"bytes"},{type:"bytes"}],[u,s])]),to:i});return g}catch(u){throw new S({callbackSelector:l,cause:u,data:n,extraData:s,sender:t,urls:o})}}async function C({data:c,sender:r,urls:a}){var i;let n=new Error("An unknown error occurred.");for(let f=0;f<a.length;f++){const t=a[f],o=t.includes("{data}")?"GET":"POST",d=o==="POST"?{data:c,sender:r}:void 0,l=o==="POST"?{"Content-Type":"application/json"}:{};try{const s=await fetch(t.replace("{sender}",r.toLowerCase()).replace("{data}",c),{body:JSON.stringify(d),headers:l,method:o});let e;if((i=s.headers.get("Content-Type"))!=null&&i.startsWith("application/json")?e=(await s.json()).data:e=await s.text(),!s.ok){n=new y({body:d,details:e!=null&&e.error?w(e.error):s.statusText,headers:s.headers,status:s.status,url:t});continue}if(!M(e)){n=new $({result:e,url:t});continue}return e}catch(s){n=new y({body:d,details:s.message,url:t})}}throw n}export{C as ccipRequest,D as offchainLookup,T as offchainLookupAbiItem,A as offchainLookupSignature};
1
+ import{B as p,g as m,s as w,d as k,i as b,l as L,a as O,c as E,b as x,e as R,H as y,f as M}from"./index-Ck4Xjs9A.js";class S extends p{constructor({callbackSelector:r,cause:a,data:n,extraData:i,sender:f,urls:t}){var o;super(a.shortMessage||"An error occurred while fetching for an offchain result.",{cause:a,metaMessages:[...a.metaMessages||[],(o=a.metaMessages)!=null&&o.length?"":[],"Offchain Gateway Call:",t&&[" Gateway URL(s):",...t.map(d=>` ${m(d)}`)],` Sender: ${f}`,` Data: ${n}`,` Callback selector: ${r}`,` Extra data: ${i}`].flat(),name:"OffchainLookupError"})}}class $ extends p{constructor({result:r,url:a}){super("Offchain gateway response is malformed. Response data must be a hex value.",{metaMessages:[`Gateway URL: ${m(a)}`,`Response: ${w(r)}`],name:"OffchainLookupResponseMalformedError"})}}class q extends p{constructor({sender:r,to:a}){super("Reverted sender address does not match target contract address (`to`).",{metaMessages:[`Contract address: ${a}`,`OffchainLookup sender address: ${r}`],name:"OffchainLookupSenderMismatchError"})}}const A="0x556f1830",T={name:"OffchainLookup",type:"error",inputs:[{name:"sender",type:"address"},{name:"urls",type:"string[]"},{name:"callData",type:"bytes"},{name:"callbackFunction",type:"bytes4"},{name:"extraData",type:"bytes"}]};async function D(c,{blockNumber:r,blockTag:a,data:n,to:i}){const{args:f}=k({data:n,abi:[T]}),[t,o,d,l,s]=f,{ccipRead:e}=c,h=e&&typeof(e==null?void 0:e.request)=="function"?e.request:C;try{if(!b(i,t))throw new q({sender:t,to:i});const u=o.includes(L)?await O({data:d,ccipRequest:h}):await h({data:d,sender:t,urls:o}),{data:g}=await E(c,{blockNumber:r,blockTag:a,data:x([l,R([{type:"bytes"},{type:"bytes"}],[u,s])]),to:i});return g}catch(u){throw new S({callbackSelector:l,cause:u,data:n,extraData:s,sender:t,urls:o})}}async function C({data:c,sender:r,urls:a}){var i;let n=new Error("An unknown error occurred.");for(let f=0;f<a.length;f++){const t=a[f],o=t.includes("{data}")?"GET":"POST",d=o==="POST"?{data:c,sender:r}:void 0,l=o==="POST"?{"Content-Type":"application/json"}:{};try{const s=await fetch(t.replace("{sender}",r.toLowerCase()).replace("{data}",c),{body:JSON.stringify(d),headers:l,method:o});let e;if((i=s.headers.get("Content-Type"))!=null&&i.startsWith("application/json")?e=(await s.json()).data:e=await s.text(),!s.ok){n=new y({body:d,details:e!=null&&e.error?w(e.error):s.statusText,headers:s.headers,status:s.status,url:t});continue}if(!M(e)){n=new $({result:e,url:t});continue}return e}catch(s){n=new y({body:d,details:s.message,url:t})}}throw n}export{C as ccipRequest,D as offchainLookup,T as offchainLookupAbiItem,A as offchainLookupSignature};
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const l=o`<svg
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const l=o`<svg
2
2
  width="28"
3
3
  height="28"
4
4
  viewBox="0 0 28 28" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 14 14">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 14 14">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const i=o`<svg fill="none" viewBox="0 0 16 16">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const i=o`<svg fill="none" viewBox="0 0 16 16">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 16 16">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 16 16">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 16 16">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 16 16">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const p=o`<svg fill="none" viewBox="0 0 16 16">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const p=o`<svg fill="none" viewBox="0 0 16 16">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as t}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const e=t`<svg width="36" height="36" fill="none">
1
+ import{w as t}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const e=t`<svg width="36" height="36" fill="none">
2
2
  <path
3
3
  fill="#fff"
4
4
  fill-opacity=".05"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const r=o`<svg width="14" height="14" viewBox="0 0 14 14" fill="none">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const r=o`<svg width="14" height="14" viewBox="0 0 14 14" fill="none">
2
2
  <path
3
3
  fill-rule="evenodd"
4
4
  clip-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as l}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=l`<svg fill="none" viewBox="0 0 16 16">
1
+ import{w as l}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=l`<svg fill="none" viewBox="0 0 16 16">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 20 20">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=o`<svg fill="none" viewBox="0 0 20 20">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as o}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const a=o`<svg fill="none" viewBox="0 0 16 16">
1
+ import{w as o}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const a=o`<svg fill="none" viewBox="0 0 16 16">
2
2
  <path
3
3
  fill="currentColor"
4
4
  fill-rule="evenodd"
@@ -1,4 +1,4 @@
1
- import{w as C}from"./core-B9_TqCAE.js";import"./index-Avo4hOlh.js";import"./index.es-4jtvYW5n.js";import"./events-DQ172AOg.js";const t=C`<svg
1
+ import{w as C}from"./core-DtBtW8-1.js";import"./index-Ck4Xjs9A.js";import"./index.es-Cb6GoQM0.js";import"./events-DQ172AOg.js";const t=C`<svg
2
2
  xmlns="http://www.w3.org/2000/svg"
3
3
  width="16"
4
4
  height="16"