@the_library/network-config 1.0.0 → 1.1.0
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.
- package/LICENSE +684 -0
- package/README.md +74 -0
- package/THIRD_PARTY_NOTICES +3 -0
- package/dist/index.cjs +13 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -18
- package/dist/index.d.ts +7 -18
- package/dist/index.js +14 -19
- package/dist/index.js.map +1 -1
- package/package.json +11 -8
package/README.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# `@the_library/network-config`
|
|
2
|
+
|
|
3
|
+
The World Library's network registry, as plain data: the EVM chains (IDs, RPCs, explorers, price oracles, funding amounts), which chain holds each role (production, staging), the application environments, and a few other public settings shared by the SDK, the apps, the Lambdas and the deploy tooling.
|
|
4
|
+
|
|
5
|
+
It holds **no secrets** and has **no dependencies**, so the same file loads in a browser, in Node and in Hardhat (ESM `import` and CommonJS `require`).
|
|
6
|
+
|
|
7
|
+
Most apps never install it directly: it comes with [`@the_library/public`](https://www.npmjs.com/package/@the_library/public), whose README explains [the design](https://www.npmjs.com/package/@the_library/public#why-it-is-designed-this-way) behind it.
|
|
8
|
+
|
|
9
|
+
**Licence:** D-Open Code Sovereign Licence — [full text](https://registry.worldbibliotech.com/licence).
|
|
10
|
+
|
|
11
|
+
## Install
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install @the_library/network-config
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## The one rule: never hard-code a network
|
|
18
|
+
|
|
19
|
+
The chain behind a role can change; production moved from Sonic to Gnosis in October 2026. Code that takes its chain from this package by role follows such a move without changes. Code with a literal chain ID doesn't.
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { DEFAULT_CHAIN_ID, DEFAULT_STAGING_CHAIN_ID, CANONICAL, getChain } from '@the_library/network-config';
|
|
23
|
+
|
|
24
|
+
DEFAULT_CHAIN_ID; // the production chain (CANONICAL.production)
|
|
25
|
+
DEFAULT_STAGING_CHAIN_ID; // the staging chain, a testnet (CANONICAL.staging)
|
|
26
|
+
CANONICAL; // { production: 'GNOSIS', staging: 'CHIADO' }
|
|
27
|
+
|
|
28
|
+
const chain = getChain(DEFAULT_CHAIN_ID);
|
|
29
|
+
chain.name; // 'Gnosis Mainnet'
|
|
30
|
+
chain.rpc; // 'https://rpc.gnosischain.com'
|
|
31
|
+
chain.memberFundingTarget; // native amount a member wallet is topped up to
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Networks
|
|
35
|
+
|
|
36
|
+
| Key | Chain ID | Mainnet | Role | Enabled |
|
|
37
|
+
|---|---|---|---|---|
|
|
38
|
+
| `GNOSIS` | 100 | yes | production | yes |
|
|
39
|
+
| `CHIADO` | 10200 | no (Gnosis testnet) | staging | yes |
|
|
40
|
+
| `SONIC` | 146 | yes | — (was production) | no |
|
|
41
|
+
| `SONIC_BLAZE` | 14601 | no | — (was staging) | no |
|
|
42
|
+
|
|
43
|
+
The disabled Sonic entries stay defined so that older registry manifests and app builds keep resolving them. Gnosis has no price oracle: its native coin, xDAI, is a $1 stablecoin, so `getChain(100).price` is `{ stable: true }`.
|
|
44
|
+
|
|
45
|
+
## Deployed addresses: a bootstrap copy only
|
|
46
|
+
|
|
47
|
+
`getChain(id).addresses` (and `deployed` / `stagingDeployed`) are generated from the deploy cache by the monorepo's `sync:registry` step. They are a **bootstrap copy**, used only to reach the chain when the registry manifest can't be loaded. The source of truth for contract addresses and ABIs is the published registry manifest, `https://registry.worldbibliotech.com/<env>/manifest.json`, which the SDK reads (`addressLoader` in `@the_library/public/web3`).
|
|
48
|
+
|
|
49
|
+
## What it exports
|
|
50
|
+
|
|
51
|
+
**Chains**
|
|
52
|
+
- `EVM_CHAINS: Record<chainId, EvmChainConfig>` — every defined network, enabled or not.
|
|
53
|
+
- `getChain(chainId)` — one chain's config; throws `Chain <id> not configured` for an unknown ID.
|
|
54
|
+
- `NETWORKS`, `ShortNames` — the same networks keyed by short name (`GNOSIS`, `CHIADO`, …), including the deploy-tooling flags (`enabled`, Pyth oracle and price ID, explorer API).
|
|
55
|
+
|
|
56
|
+
**Roles and environments**
|
|
57
|
+
- `CANONICAL`, `CANONICAL_CHAIN_IDS` — the one chain per role: `{ production: 100, staging: 10200 }`.
|
|
58
|
+
- `DEFAULT_CHAIN_ID`, `DEFAULT_STAGING_CHAIN_ID`, `DEFAULT_DEV_CHAIN_ID` — production, staging, and development (which reuses staging).
|
|
59
|
+
- `APPLICATION_ENVIRONMENTS`, `getApplicationEnvironmentConfig(env)` — per environment: its role, network key, maintenance flag and public API Gateway URL.
|
|
60
|
+
- `resolveApplicationEnvironment(mode?, override?)` — maps a Vite-style mode to `'production' | 'staging'`. An explicit `override` wins over `mode`; `development`, and anything unrecognised, resolves to staging.
|
|
61
|
+
- `getCanonicalRole(env)`, `getCanonicalTarget(env)`, `getCanonicalChainId(env)` — an environment's role, its full target network and its chain ID.
|
|
62
|
+
- `getDeploymentEnvironment(chainId, env)`, `isChainDeployedForRole(chainId, env)` — which deployment (production or staging) an environment uses on a given chain, and whether that chain has it. Testnets always use their staging deployment.
|
|
63
|
+
|
|
64
|
+
**Other public settings**
|
|
65
|
+
- `MEMBERSHIP_TIERS` — the membership tiers and their prices (`account` $2, `supporter` $10, `pioneer` $20, `visionary` $50), with the votes each includes.
|
|
66
|
+
- `STRIPE_ENVIRONMENTS`, `getStripeConfig(env)` — public Stripe payment links and price IDs (no keys).
|
|
67
|
+
- `SITE_CONTACTS`, `getSiteContact(domainOrUrl)` — each website's public contact email and home page.
|
|
68
|
+
- `BACKEND_ENVIRONMENTS`, `getBackendConfig(env)` — identifiers of each environment's AWS resources (secret IDs, table names), never secret values.
|
|
69
|
+
|
|
70
|
+
## Related packages
|
|
71
|
+
|
|
72
|
+
| Package | Role |
|
|
73
|
+
|---|---|
|
|
74
|
+
| [`@the_library/public`](https://www.npmjs.com/package/@the_library/public) | The SDK; depends on this package, and adds `toViemChain()` to turn an `EvmChainConfig` into a viem `Chain` |
|
package/dist/index.cjs
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1
|
|
3
|
+
Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).
|
|
4
|
+
Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com
|
|
5
|
+
*/
|
|
1
6
|
"use strict";
|
|
2
7
|
var __defProp = Object.defineProperty;
|
|
3
8
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -22,7 +27,6 @@ var src_exports = {};
|
|
|
22
27
|
__export(src_exports, {
|
|
23
28
|
APPLICATION_ENVIRONMENTS: () => APPLICATION_ENVIRONMENTS,
|
|
24
29
|
BACKEND_ENVIRONMENTS: () => BACKEND_ENVIRONMENTS,
|
|
25
|
-
BRAND_LOGOS: () => BRAND_LOGOS,
|
|
26
30
|
CANONICAL: () => CANONICAL,
|
|
27
31
|
CANONICAL_CHAIN_IDS: () => CANONICAL_CHAIN_IDS,
|
|
28
32
|
DEFAULT_CHAIN_ID: () => DEFAULT_CHAIN_ID,
|
|
@@ -221,14 +225,6 @@ function getCanonicalTarget(environment) {
|
|
|
221
225
|
return { environment, role, networkKey, network, chainId: network.chainId };
|
|
222
226
|
}
|
|
223
227
|
|
|
224
|
-
// src/media/sonic-logo.avif
|
|
225
|
-
var sonic_logo_default = "data:image/avif;base64,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";
|
|
226
|
-
|
|
227
|
-
// src/branding.ts
|
|
228
|
-
var BRAND_LOGOS = {
|
|
229
|
-
SONIC: sonic_logo_default
|
|
230
|
-
};
|
|
231
|
-
|
|
232
228
|
// src/sites.ts
|
|
233
229
|
var SITE_CONTACTS = {
|
|
234
230
|
"dsafe.us": { domain: "dsafe.us", websiteUrl: "https://dsafe.us", contactEmail: "hello@dsafe.us" },
|
|
@@ -402,16 +398,16 @@ var DEPLOYMENTS = {
|
|
|
402
398
|
"stagingDeployed": true,
|
|
403
399
|
"addressRegistry": "0x0bBe33489bF3d5b027851C2D488f70DcCf13733c",
|
|
404
400
|
"stagingAddressRegistry": "0x0bBe33489bF3d5b027851C2D488f70DcCf13733c",
|
|
405
|
-
"factory": "
|
|
406
|
-
"stagingFactory": "
|
|
401
|
+
"factory": "0x0c37eac7119b33674816E11645CD5002Dd2E8599",
|
|
402
|
+
"stagingFactory": "0x0c37eac7119b33674816E11645CD5002Dd2E8599",
|
|
407
403
|
"backupStorage": "0x9D3F50977b83f5795CC21c7C590a464be63686Cd",
|
|
408
404
|
"stagingBackupStorage": "0x9D3F50977b83f5795CC21c7C590a464be63686Cd",
|
|
409
|
-
"bouncerStorage": "
|
|
410
|
-
"stagingBouncerStorage": "
|
|
405
|
+
"bouncerStorage": "0x1805579afCb1581886B94f060Fa24D2d56b1B133",
|
|
406
|
+
"stagingBouncerStorage": "0x1805579afCb1581886B94f060Fa24D2d56b1B133",
|
|
411
407
|
"scientistStorage": "0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713",
|
|
412
408
|
"stagingScientistStorage": "0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713",
|
|
413
|
-
"projectManagerStorage": "
|
|
414
|
-
"stagingProjectManagerStorage": "
|
|
409
|
+
"projectManagerStorage": "0x127Cb07b710808cc5D4CB1DA65436ebA84A8a361",
|
|
410
|
+
"stagingProjectManagerStorage": "0x127Cb07b710808cc5D4CB1DA65436ebA84A8a361",
|
|
415
411
|
"subscriptionManager": "0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb",
|
|
416
412
|
"stagingSubscriptionManager": "0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb",
|
|
417
413
|
"libraryRegistryStorage": "0x500d1e6b5B36D4cbc077684F32e98D0a0FFCF56E",
|
|
@@ -426,8 +422,8 @@ var DEPLOYMENTS = {
|
|
|
426
422
|
"stagingRelationshipIndexerStorage": "0xF9d92B41124F0bAB0Ea8334B258D3952bAdBC0a3",
|
|
427
423
|
"emailRecoveryManager": "0x613DB14219Ea366041381C6cCF9c09968aD7F43E",
|
|
428
424
|
"stagingEmailRecoveryManager": "0x613DB14219Ea366041381C6cCF9c09968aD7F43E",
|
|
429
|
-
"accountManager": "
|
|
430
|
-
"stagingAccountManager": "
|
|
425
|
+
"accountManager": "0x623191Ccb8C8FD81369713219424792C36cA0Fbe",
|
|
426
|
+
"stagingAccountManager": "0x623191Ccb8C8FD81369713219424792C36cA0Fbe"
|
|
431
427
|
},
|
|
432
428
|
"14601": {
|
|
433
429
|
"deployed": true,
|
|
@@ -483,8 +479,6 @@ function toChainConfig(data) {
|
|
|
483
479
|
website: data.website,
|
|
484
480
|
main: data.main,
|
|
485
481
|
brand: data.brand,
|
|
486
|
-
// A brand without its own logo shows the production network's ('' if that has none either).
|
|
487
|
-
logo: BRAND_LOGOS[data.brand] ?? BRAND_LOGOS[NETWORKS[CANONICAL.production].brand] ?? "",
|
|
488
482
|
price,
|
|
489
483
|
memberFundingTarget: data.memberFundingTarget,
|
|
490
484
|
staffFundingTarget: data.staffFundingTarget,
|
|
@@ -529,7 +523,6 @@ var DEFAULT_DEV_CHAIN_ID = CANONICAL_CHAIN_IDS.staging;
|
|
|
529
523
|
0 && (module.exports = {
|
|
530
524
|
APPLICATION_ENVIRONMENTS,
|
|
531
525
|
BACKEND_ENVIRONMENTS,
|
|
532
|
-
BRAND_LOGOS,
|
|
533
526
|
CANONICAL,
|
|
534
527
|
CANONICAL_CHAIN_IDS,
|
|
535
528
|
DEFAULT_CHAIN_ID,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/short-names.ts","../src/networks.ts","../src/branding.ts","../src/sites.ts","../src/backend.ts","../src/stripe.ts","../src/deployments.generated.ts","../src/chains.ts"],"sourcesContent":["export { ShortNames, type ShortName } from './short-names.ts';\nexport {\n NETWORKS,\n CANONICAL,\n APPLICATION_ENVIRONMENTS,\n getApplicationEnvironmentConfig,\n getCanonicalRole,\n getCanonicalTarget,\n resolveApplicationEnvironment,\n type PublicNetworkConfig,\n type CanonicalRole,\n type AvailableEnvironment,\n type CanonicalTarget,\n} from './networks.ts';\nexport { BRAND_LOGOS } from './branding.ts';\nexport { SITE_CONTACTS, getSiteContact, type SiteContact, type SiteDomain } from './sites.ts';\nexport { BACKEND_ENVIRONMENTS, getBackendConfig, type BackendConfig } from './backend.ts';\nexport {\n MEMBERSHIP_TIERS,\n STRIPE_ENVIRONMENTS,\n getStripeConfig,\n type MembershipTier,\n type StripeEnvironmentConfig,\n} from './stripe.ts';\nexport {\n EVM_CHAINS,\n getChain,\n getDeploymentEnvironment,\n isChainDeployedForRole,\n type EvmChainConfig,\n type ChainPrice,\n} from './chains.ts';\n\nimport { getCanonicalTarget, type AvailableEnvironment, type CanonicalRole } from './networks.ts';\n\n/** Resolves a canonical role (e.g. \"production\") to its chain ID. Throws if\n * the role is unknown or references a network missing from NETWORKS. */\nexport function getCanonicalChainId(environment: AvailableEnvironment): number {\n return getCanonicalTarget(environment).chainId;\n}\n\n/**\n * Chain ID per canonical role — pure data derived from CANONICAL + NETWORKS,\n * no viem/browser-SDK dependency required. Re-exported by @the_library/public/web3\n * (packages/public/src/web3/network/chains.ts) for convenience alongside\n * EVM_CHAINS/getChain, but defined here so any Node-only consumer (a CLI\n * script, a Lambda) can get \"the canonical chain ID\" without depending on the\n * full web3 SDK (viem, ethers, wallet adapters) for one number.\n */\nexport const CANONICAL_CHAIN_IDS: Record<CanonicalRole, number> = {\n production: getCanonicalChainId('production'),\n staging: getCanonicalChainId('staging')\n};\n\nexport const DEFAULT_CHAIN_ID = CANONICAL_CHAIN_IDS.production;\nexport const DEFAULT_STAGING_CHAIN_ID = CANONICAL_CHAIN_IDS.staging;\nexport const DEFAULT_DEV_CHAIN_ID = CANONICAL_CHAIN_IDS.staging;\n","export const ShortNames = {\n SONIC: 'SONIC',\n SONIC_BLAZE: 'SONIC_BLAZE',\n GNOSIS: 'GNOSIS',\n CHIADO: 'CHIADO',\n} as const;\n\nexport type ShortName = (typeof ShortNames)[keyof typeof ShortNames];\n","import { ShortNames, type ShortName } from './short-names.ts';\n\nexport interface PublicNetworkConfig {\n /** Deploy-tooling target flag — consumed only by tools/deploy-manager.js and\n * Hardhat configs. Unrelated to whether a chain is user-facing; see `CANONICAL`. */\n enabled: boolean;\n chainId: number;\n main: boolean;\n symbol: string;\n shortName: string;\n original: string;\n faucet?: string;\n faucetAmount?: number;\n decimals: number;\n brand: string;\n /** Pyth oracle for the native coin's USD price. '' when the native coin is itself a $1\n * stablecoin (xDAI): no oracle — Factory is deployed with address(0) and Accountant.getPrice()\n * returns 1 coin per dollar; the SDK sees `price: { stable: true }` (chains.ts). */\n pyth: string;\n /** Pyth price-feed id, required when `pyth` is set ('' otherwise). */\n pythUsdPriceId: string;\n website: string;\n rpc: string;\n explorer: string;\n name: string;\n /** Native amount (decimal string) each member wallet is topped up to so it can save to the\n * chain on its own: the Lambdas' gas gift (packages/lambda/src/utils/funding.ts) and the\n * app's \"full tank\" gauge. In this chain's own coin, so it differs per chain. */\n memberFundingTarget: string;\n /** Native amount (decimal string) book-manager sends a new library-staff wallet, for its\n * admin transactions. In this chain's own coin, so it differs per chain. */\n staffFundingTarget: string;\n /** Explorer API for `hardhat verify` (hardhat.config.js); omit if there is none.\n * `etherscan` needs an Etherscan API key; `blockscout` needs none. */\n verifyApi?: { kind: 'etherscan' | 'blockscout'; url: string };\n}\n\nexport const NETWORKS: Record<ShortName, PublicNetworkConfig> = {\n [ShortNames.SONIC_BLAZE]: {\n enabled: false,\n chainId: 14601,\n main: false,\n symbol: 'S',\n shortName: 'WATER', // testnet shorthand\n original: 'Sonic TestNet',\n faucet: 'https://testnet.soniclabs.com/account',\n faucetAmount: 1,\n decimals: 18,\n brand: 'SONIC',\n pyth: '0x2880aB155794e7179c9eE2e38200202908C17B43',\n pythUsdPriceId: '0xf490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d',\n website: 'https://soniclabs.com/',\n rpc: 'https://rpc.testnet.soniclabs.com/',\n explorer: 'https://testnet.sonicscan.org',\n name: 'Sonic Blaze',\n memberFundingTarget: '1',\n staffFundingTarget: '0.5',\n verifyApi: { kind: 'etherscan', url: 'https://api.testnet.sonicscan.org/api' },\n },\n [ShortNames.SONIC]: {\n enabled: false,\n chainId: 146,\n main: true,\n symbol: 'S',\n shortName: 'TREE', // mainnet shorthand\n original: 'Sonic MainNet',\n decimals: 18,\n brand: 'SONIC',\n pyth: '0x2b9Bb0042dB2F30650d73BB83CBAE584807d2FE4',\n pythUsdPriceId: '0xf490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d',\n website: 'https://soniclabs.com/',\n rpc: 'https://rpc.soniclabs.com',\n explorer: 'https://sonicscan.org',\n name: 'Sonic',\n // 1 S: one save() of ~25 new actions cost ~0.084 S at the 50 gwei base-fee floor.\n memberFundingTarget: '1',\n staffFundingTarget: '0.5',\n verifyApi: { kind: 'etherscan', url: 'https://api.sonicscan.org/api' },\n },\n [ShortNames.GNOSIS]: {\n enabled: true,\n chainId: 100,\n main: true,\n symbol: 'XDAI',\n brand: 'GNOSIS',\n decimals: 18,\n explorer: 'https://gnosisscan.io',\n name: 'Gnosis',\n original: 'Gnosis Mainnet',\n pyth: '',\n pythUsdPriceId: '',\n rpc: 'https://rpc.gnosischain.com',\n shortName: 'TREE',\n website: 'https://www.gnosis.io/',\n // ~29 saves of ~0.69M gas at a busy 1 gwei (suggested 2026-10-17 — confirm before launch).\n memberFundingTarget: '0.02',\n // The same 10M gas as Sonic's 0.5 S at its 50 gwei floor, at a busy 1 gwei (suggested).\n staffFundingTarget: '0.01',\n verifyApi: { kind: 'blockscout', url: 'https://gnosisscan.io/api' },\n },\n [ShortNames.CHIADO]: {\n enabled: true,\n chainId: 10200,\n main: false,\n symbol: 'XDAI',\n brand: 'GNOSIS',\n decimals: 18,\n explorer: 'https://gnosis-chiado.blockscout.com',\n name: 'Gnosis Chiado',\n original: 'Gnosis Chiado',\n pyth: '',\n pythUsdPriceId: '',\n rpc: 'https://rpc.chiadochain.net',\n shortName: 'WATER',\n website: 'https://www.gnosis.io/',\n // Testnet: fees stay ~14 wei per gas and the faucet is small, so 0.0001 still covers\n // thousands of saves (user's choice, 2026-10-18).\n memberFundingTarget: '0.0001',\n staffFundingTarget: '0.0001',\n verifyApi: { kind: 'blockscout', url: 'https://gnosis-chiado.blockscout.com/api' },\n },\n //\n // [ShortNames.tCORE2]: {\n // enabled: false,\n // chainId: 1114,\n // main: false,\n // symbol: 'tCORE2',\n // shortName: 'SUN',\n // original: 'Core Blockchain TestNet',\n // faucet: 'https://scan.test2.btcs.network/faucet',\n // faucetAmount: 1,\n // decimals: 18,\n // brand: 'CORE',\n // pyth: '0x2880aB155794e7179c9eE2e38200202908C17B43',\n // pythUsdPriceId: '0x9b4503710cc8c53f75c30e6e4fda1a7064680ef2e0ee97acd2e3a7c37b3c830c',\n // website: 'https://coredao.org/',\n // rpc: 'https://rpc.test2.btcs.network',\n // explorer: 'https://scan.test2.btcs.network',\n // name: 'Core Test',\n // },\n // [ShortNames.CORE]: {\n // enabled: true,\n // chainId: 1116,\n // main: true,\n // symbol: 'CORE',\n // shortName: 'TREE',\n // decimals: 18,\n // brand: 'CORE',\n // pyth: '0xA2aa501b19aff244D90cc15a4Cf739D2725B5729',\n // pythUsdPriceId: '0x9b4503710cc8c53f75c30e6e4fda1a7064680ef2e0ee97acd2e3a7c37b3c830c',\n // website: 'https://coredao.org/',\n // rpc: 'https://rpc.coredao.org',\n // explorer: 'https://scan.coredao.org',\n // name: 'Main',\n // original: 'Core Blockchain MainNet',\n // },\n};\n\n/**\n * Application environments and their shared flags. `dev` deliberately reuses\n * the staging corpus/registry role instead of creating a third persisted\n * environment. `apiUrl` is the environment's AWS API Gateway base URL (no\n * trailing slash) serving the packages/lambda routes (/auth/*, /tracker/*,\n * /recover/*, /bulkUserCreation) — public, called from the browser apps.\n */\nexport const APPLICATION_ENVIRONMENTS = {\n production: {\n canonicalRole: 'production',\n networkKey: ShortNames.GNOSIS,\n maintenanceMode: false,\n apiUrl: 'https://aj1bg165gc.execute-api.ap-southeast-2.amazonaws.com/prod',\n },\n staging: {\n canonicalRole: 'staging',\n networkKey: ShortNames.CHIADO,\n maintenanceMode: false,\n apiUrl: 'https://udpkacwxd0.execute-api.ap-southeast-2.amazonaws.com/prod',\n },\n} as const;\n\nexport type AvailableEnvironment = keyof typeof APPLICATION_ENVIRONMENTS;\nexport type CanonicalRole =\n (typeof APPLICATION_ENVIRONMENTS)[AvailableEnvironment]['canonicalRole'];\n\nexport function getApplicationEnvironmentConfig(environment: AvailableEnvironment) {\n return APPLICATION_ENVIRONMENTS[environment];\n}\n\nexport function getCanonicalRole(environment: AvailableEnvironment): CanonicalRole {\n return getApplicationEnvironmentConfig(environment).canonicalRole;\n}\n\n/** Resolves Vite-style mode/override strings to the shared application environment. */\nexport function resolveApplicationEnvironment(\n mode?: string,\n override?: string\n): AvailableEnvironment {\n for (const candidate of [override, mode]) {\n if (candidate === 'production' || candidate === 'staging' ) {\n return candidate;\n }\n if (candidate === 'development') return 'staging';\n }\n return 'staging';\n}\n\n/**\n * The one chain, per role, that is the source of truth for that role — corpus\n * anchoring writes to the chain listed here, and packages/public's EVM_CHAINS\n * registry is the union of every chain referenced across all roles. Exactly\n * one chain per role by design (single-blockchain-per-environment) — this is\n * not an array; a role can never fan out to multiple simultaneously-live\n * chains.\n */\n\nexport const CANONICAL = {\n production: APPLICATION_ENVIRONMENTS.production.networkKey,\n staging: APPLICATION_ENVIRONMENTS.staging.networkKey,\n} as const satisfies Record<CanonicalRole, ShortName>;\n\nexport interface CanonicalTarget {\n environment: AvailableEnvironment;\n role: CanonicalRole;\n networkKey: ShortName;\n network: PublicNetworkConfig;\n chainId: number;\n}\n\n/**\n * Resolves an application environment to its canonical network. An environment\n * is deliberately independent of the chain tier: staging may target a mainnet,\n * and dev aliases the staging role.\n */\nexport function getCanonicalTarget(environment: AvailableEnvironment): CanonicalTarget {\n const applicationConfig = getApplicationEnvironmentConfig(environment);\n const role = applicationConfig.canonicalRole;\n const networkKey = applicationConfig.networkKey;\n\n const network = NETWORKS[networkKey];\n if (!network) throw new Error(`application environment ${environment} references unknown network \"${networkKey}\"`);\n\n return { environment, role, networkKey, network, chainId: network.chainId };\n}\n","// @ts-ignore\n// import coreDaoLogo from './media/core-dao-core-logo.svg';\n// @ts-ignore\nimport sonicLogo from './media/sonic-logo.avif';\n\n/**\n * Brand identity assets, keyed by `PublicNetworkConfig.brand` — not by chain\n * ID, since chains sharing a brand (e.g. CORE mainnet + tCORE2 testnet) share\n * a logo. Lives alongside the brand strings themselves in `networks.ts`\n * rather than in `@the_library/public`'s web3 SDK, which only consumes it.\n */\nexport const BRAND_LOGOS: Record<string, string> = {\n SONIC: sonicLogo,\n};\n","/**\n * Public contact per website, keyed by bare domain — the one place a deck's\n * closing contact block and a website's contact section / form fallback read\n * their email and website link from. Each website shares its deck's config\n * (the deck's `deck.domain`), so the two can't drift apart.\n *\n * Display only: where contact-form submissions are delivered is the contact\n * Lambda's own routing (packages/lambda/src/contact/sites.json).\n */\nexport interface SiteContact {\n /** Bare domain, no scheme or `www.`. */\n domain: string;\n /** The website's home page, shown as the contact link. */\n websiteUrl: string;\n contactEmail: string;\n}\n\nexport const SITE_CONTACTS = {\n 'dsafe.us': { domain: 'dsafe.us', websiteUrl: 'https://dsafe.us', contactEmail: 'hello@dsafe.us' },\n 'worldbibliotech.net': { domain: 'worldbibliotech.net', websiteUrl: 'https://worldbibliotech.net', contactEmail: 'hello@worldbibliotech.net' },\n 'worldbibliotech.com': { domain: 'worldbibliotech.com', websiteUrl: 'https://worldbibliotech.com', contactEmail: 'hello@worldbibliotech.com' },\n 'worldbibliotech.org': { domain: 'worldbibliotech.org', websiteUrl: 'https://worldbibliotech.org', contactEmail: 'hello@worldbibliotech.org' },\n 'datapond.earth': { domain: 'datapond.earth', websiteUrl: 'https://datapond.earth', contactEmail: 'data@datapond.earth' },\n 'pondenterprise.com': { domain: 'pondenterprise.com', websiteUrl: 'https://pondenterprise.com', contactEmail: 'hello@pondenterprise.com' },\n} as const satisfies Record<string, SiteContact>;\n\nexport type SiteDomain = keyof typeof SITE_CONTACTS;\n\n/** Looks a website up by domain or URL (case, scheme, `www.` and path ignored). Throws on an unknown site, so nothing renders a contact it doesn't have. */\nexport function getSiteContact(domainOrUrl: string): SiteContact {\n const host = domainOrUrl.trim().toLowerCase().replace(/^[a-z]+:\\/\\//, '').replace(/[/:?#].*$/, '').replace(/^www\\./, '');\n if (!Object.prototype.hasOwnProperty.call(SITE_CONTACTS, host)) {\n throw new Error(`No site contact configured for \"${domainOrUrl}\". Add it to SITE_CONTACTS in @the_library/network-config (src/sites.ts).`);\n }\n return SITE_CONTACTS[host as SiteDomain];\n}\n","import type { AvailableEnvironment } from './networks.ts';\n\n/**\n * Per-environment backend (AWS Lambda) configuration — the one place that\n * says which Secrets Manager secret, DynamoDB tables and frontend URL a\n * `production` or `staging` Lambda build uses. The chain/RPC for the same\n * environment comes from APPLICATION_ENVIRONMENTS/NETWORKS (networks.ts), so\n * a Lambda build selects everything by environment name alone.\n *\n * Kept as its own export rather than nested in APPLICATION_ENVIRONMENTS\n * (which the browser app imports) so AWS resource names tree-shake out of\n * the frontend bundle. Values here are identifiers, never secrets — they are\n * compiled into each Lambda bundle at build time; only the secret values\n * themselves live in Secrets Manager, under `secretId`.\n */\nexport interface BackendConfig {\n /** Artifact suffix: dist/<lambda>-<stage>.zip, AWS Handler `<lambda>-<stage>.handler`. */\n stage: 'prod' | 'staging';\n awsRegion: string;\n /** Secrets Manager secret id (a path, not a secret value). */\n secretId: string;\n tables: {\n /** Stripe webhook failure audit log (partition key: paymentIntentId). */\n paymentsLog: string;\n /** /auth/login magic-link rate limit (partition key: hash); also the\n * /contact form's rate counters, under `contact:` keys. */\n loginRateLimit: string;\n /** Email-recovery requests (partition key: hash). */\n emailRecovery: string;\n /** Persistent recovery retry history (emailHash + firstRetryTimestamp). No TTL. */\n recoveryAnomalies: string;\n /** Tracker lead capture (pk: email, sk: ISO timestamp). */\n trackerLeads: string;\n };\n /** Frontend (Vue app) base URL, no trailing slash; magic links open\n * `${frontendUrl}/#/restore?...` (hash routing). */\n frontendUrl: string;\n}\n\nexport const BACKEND_ENVIRONMENTS = {\n production: {\n stage: 'prod',\n awsRegion: 'ap-southeast-2',\n secretId: '/prod/d-library/keys',\n tables: {\n paymentsLog: 'BookCollective-Payments-Log',\n loginRateLimit: 'EmailRecoveryRequests',\n emailRecovery: 'BookCollective-EmailRecovery',\n recoveryAnomalies: 'anomalies',\n trackerLeads: 'PondEnterprise-AdLeads',\n },\n frontendUrl: 'https://worldbibliotech.com',\n },\n staging: {\n stage: 'staging',\n awsRegion: 'ap-southeast-2',\n secretId: '/staging/d-library/keys',\n tables: {\n paymentsLog: 'BookCollective-Payments-Log-staging',\n loginRateLimit: 'EmailRecoveryRequests-staging',\n emailRecovery: 'BookCollective-EmailRecovery-staging',\n recoveryAnomalies: 'anomalies-staging',\n trackerLeads: 'PondEnterprise-AdLeads-staging',\n },\n // No hosted staging frontend: `pnpm run dev:staging` (Vite, :3000).\n frontendUrl: 'http://localhost:3000',\n },\n} as const satisfies Record<AvailableEnvironment, BackendConfig>;\n\nexport function getBackendConfig(environment: AvailableEnvironment): BackendConfig {\n return BACKEND_ENVIRONMENTS[environment];\n}\n","import type { AvailableEnvironment } from './networks.ts';\n\n/**\n * Public Stripe configuration for each application environment.\n *\n * Payment Link URLs and Price IDs are public identifiers and can safely live\n * here. Secret API keys and webhook signing secrets must remain in AWS Secrets\n * Manager and must never be added to this package.\n *\n * This configuration is keyed by application environment rather than EVM\n * network because Stripe resources belong to the production/staging\n * deployment, not to a particular blockchain.\n */\n\nexport const MEMBERSHIP_TIERS = {\n account: {\n usd: 2,\n votes: 0,\n },\n supporter: {\n usd: 10,\n votes: 8,\n },\n pioneer: {\n usd: 20,\n votes: 18,\n },\n visionary: {\n usd: 50,\n votes: 48,\n },\n} as const;\n\nexport type MembershipTier = keyof typeof MEMBERSHIP_TIERS;\n\nexport interface StripeEnvironmentConfig {\n /** Whether Stripe checkout is available in this application environment. */\n readonly enabled: boolean;\n /** Price IDs used by webhook fulfillment to identify purchased line items. */\n readonly prices: {\n readonly memberAccount: string | null;\n readonly voteCredit: string | null;\n };\n /** @deprecated Membership purchases use verified, server-created Checkout\n * Sessions. Kept null to prevent reuse of legacy public Payment Links.\n * Disable those links separately in Stripe; see the Lambda rotation guide. */\n readonly paymentLinks: Readonly<Record<MembershipTier, string | null>>;\n}\n\nexport const STRIPE_ENVIRONMENTS = {\n production: {\n enabled: true,\n prices: {\n memberAccount: 'price_1UK1qXQeGVzwKmoGyaR44j8l',\n voteCredit: 'price_1UK2ZWQeGVzwKmoG5dgc3qrX',\n },\n paymentLinks: {\n account: null,\n supporter: null,\n pioneer: null,\n visionary: null,\n },\n },\n staging: {\n enabled: true,\n prices: {\n memberAccount: 'price_1UK1qXQeGVzwKmoGyaR44j8l',\n voteCredit: 'price_1UK2ZWQeGVzwKmoG5dgc3qrX',\n },\n paymentLinks: {\n account: null,\n supporter: null,\n pioneer: null,\n visionary: null,\n },\n },\n} as const satisfies Record<AvailableEnvironment, StripeEnvironmentConfig>;\n\nexport function getStripeConfig(\n environment: AvailableEnvironment\n): StripeEnvironmentConfig {\n return STRIPE_ENVIRONMENTS[environment];\n}\n","// AUTO-GENERATED by tools/generate_registry_manifest.js — run `pnpm run sync:registry` to rebuild.\n// Source: deploy/d-code/evm/<network>/AddressRegistry[_staging].json and\n// deploy/cache/evm/<network>/Deployed<Contract>[_staging].json for every\n// contract in CACHE_FILE_TO_CONTRACT, for every network referenced by\n// @the_library/network-config's `CANONICAL` block.\n\nexport interface ChainDeployment {\n deployed?: boolean;\n stagingDeployed?: boolean;\n [contractField: string]: boolean | string | undefined;\n}\n\nexport const DEPLOYMENTS: Record<number, ChainDeployment> = {\n \"100\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0xC121FB1A294A52D4175E5D937A3e6D717B98FEc7\",\n \"stagingAddressRegistry\": \"0xC121FB1A294A52D4175E5D937A3e6D717B98FEc7\",\n \"factory\": \"0x938dcbA1aD805BE0e585f3b4d06cA210CeDE8629\",\n \"stagingFactory\": \"0x938dcbA1aD805BE0e585f3b4d06cA210CeDE8629\",\n \"backupStorage\": \"0x8f25eBA09b1188ae571DE3BA0fc62893c40C9B55\",\n \"stagingBackupStorage\": \"0x8f25eBA09b1188ae571DE3BA0fc62893c40C9B55\",\n \"bouncerStorage\": \"0x669766fD75368659B78e61BD82CB55405F3e7Aae\",\n \"stagingBouncerStorage\": \"0x669766fD75368659B78e61BD82CB55405F3e7Aae\",\n \"scientistStorage\": \"0x9cCdb8E4a979AeF7bd56d485aB2B7cA1404F25C5\",\n \"stagingScientistStorage\": \"0x9cCdb8E4a979AeF7bd56d485aB2B7cA1404F25C5\",\n \"projectManagerStorage\": \"0x83e1f5f0a799Bf154BF78e4a37CB66Dd1E1d7F2b\",\n \"stagingProjectManagerStorage\": \"0x83e1f5f0a799Bf154BF78e4a37CB66Dd1E1d7F2b\",\n \"subscriptionManager\": \"0xAc47559D305d2ACA094B51E879E25cbB3D9C3Ed8\",\n \"stagingSubscriptionManager\": \"0xAc47559D305d2ACA094B51E879E25cbB3D9C3Ed8\",\n \"libraryRegistryStorage\": \"0x8e613b6D564803a8Cdc71cB8CE7F3EB205981462\",\n \"stagingLibraryRegistryStorage\": \"0x8e613b6D564803a8Cdc71cB8CE7F3EB205981462\",\n \"publicLibraryStorage\": \"0x2647f241d8Fa1E3C11a8d424109aE9A8D9624e21\",\n \"stagingPublicLibraryStorage\": \"0x2647f241d8Fa1E3C11a8d424109aE9A8D9624e21\",\n \"dSafeHRStorage\": \"0x7d1437158aE169A1E5C4188872888d622Ef7F6FA\",\n \"stagingDSafeHRStorage\": \"0x7d1437158aE169A1E5C4188872888d622Ef7F6FA\",\n \"statsPivotStorage\": \"0x57778210bf8De1B24707874957eB6De5cbCEEcfA\",\n \"stagingStatsPivotStorage\": \"0x57778210bf8De1B24707874957eB6De5cbCEEcfA\",\n \"relationshipIndexerStorage\": \"0x4749aed97EDf0502D6416C1d71502001E153181a\",\n \"stagingRelationshipIndexerStorage\": \"0x4749aed97EDf0502D6416C1d71502001E153181a\",\n \"emailRecoveryManager\": \"0x3F18c8a9473097B2bF4aA3D0C3eD808AEDFd17A5\",\n \"stagingEmailRecoveryManager\": \"0x3F18c8a9473097B2bF4aA3D0C3eD808AEDFd17A5\",\n \"accountManager\": \"0xEBD7fC6BAfFBF97782CdDBaBB3564c996eE22ab7\",\n \"stagingAccountManager\": \"0xEBD7fC6BAfFBF97782CdDBaBB3564c996eE22ab7\"\n },\n \"146\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0x96233a42a809ECDb14D3bd44b23a0e70F75E8519\",\n \"stagingAddressRegistry\": \"0x96233a42a809ECDb14D3bd44b23a0e70F75E8519\",\n \"factory\": \"0x98ed1705270730299079C5D9137416445FFAd7a7\",\n \"stagingFactory\": \"0x98ed1705270730299079C5D9137416445FFAd7a7\",\n \"backupStorage\": \"0xB936Cb4A1007Ee179f65C75eC62f986F040df913\",\n \"stagingBackupStorage\": \"0xB936Cb4A1007Ee179f65C75eC62f986F040df913\",\n \"bouncerStorage\": \"0xb2A80025fB10a1F238e72077cD3695AEFd3C9A03\",\n \"stagingBouncerStorage\": \"0xb2A80025fB10a1F238e72077cD3695AEFd3C9A03\",\n \"scientistStorage\": \"0x4689C7639c21cc615Fa92Cefa48ed0FFf130902C\",\n \"stagingScientistStorage\": \"0x4689C7639c21cc615Fa92Cefa48ed0FFf130902C\",\n \"projectManagerStorage\": \"0x82c9638AAF614070BA2427Af1691c38b8a973740\",\n \"stagingProjectManagerStorage\": \"0x82c9638AAF614070BA2427Af1691c38b8a973740\",\n \"subscriptionManager\": \"0x909B28aF430280C0D3b784EC14Df8fd22Db61066\",\n \"stagingSubscriptionManager\": \"0x909B28aF430280C0D3b784EC14Df8fd22Db61066\",\n \"libraryRegistryStorage\": \"0x40F33095Ac9fbf0c24bfE9642809E9A835978392\",\n \"stagingLibraryRegistryStorage\": \"0x40F33095Ac9fbf0c24bfE9642809E9A835978392\",\n \"publicLibraryStorage\": \"0x7fa224B1f0CFBA68701888C50Dc168A298792db8\",\n \"stagingPublicLibraryStorage\": \"0x7fa224B1f0CFBA68701888C50Dc168A298792db8\",\n \"dSafeHRStorage\": \"0xE4926FA79f41Ba0630d6734299F236b190387D2F\",\n \"stagingDSafeHRStorage\": \"0xE4926FA79f41Ba0630d6734299F236b190387D2F\",\n \"statsPivotStorage\": \"0x834a04670d8c343658Fe182710897fe306E955E4\",\n \"stagingStatsPivotStorage\": \"0x834a04670d8c343658Fe182710897fe306E955E4\",\n \"relationshipIndexerStorage\": \"0xEe52c2814A6a5F400ed8318752DF3CD37168c480\",\n \"stagingRelationshipIndexerStorage\": \"0xEe52c2814A6a5F400ed8318752DF3CD37168c480\",\n \"emailRecoveryManager\": \"0x4B7b5cDD0aCCad89931f3282Cd0FF73729221AC9\",\n \"stagingEmailRecoveryManager\": \"0x4B7b5cDD0aCCad89931f3282Cd0FF73729221AC9\",\n \"accountManager\": \"0xF62388AE786977B6F6113693eEFF1926596EF5Ac\",\n \"stagingAccountManager\": \"0xF62388AE786977B6F6113693eEFF1926596EF5Ac\"\n },\n \"10200\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0x0bBe33489bF3d5b027851C2D488f70DcCf13733c\",\n \"stagingAddressRegistry\": \"0x0bBe33489bF3d5b027851C2D488f70DcCf13733c\",\n \"factory\": \"0x68A80A3422B21bCe61808CF1E3ED9601Ad958b09\",\n \"stagingFactory\": \"0x68A80A3422B21bCe61808CF1E3ED9601Ad958b09\",\n \"backupStorage\": \"0x9D3F50977b83f5795CC21c7C590a464be63686Cd\",\n \"stagingBackupStorage\": \"0x9D3F50977b83f5795CC21c7C590a464be63686Cd\",\n \"bouncerStorage\": \"0x45fA65bADC2d1185284614D61f99273Eea7A9510\",\n \"stagingBouncerStorage\": \"0x45fA65bADC2d1185284614D61f99273Eea7A9510\",\n \"scientistStorage\": \"0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713\",\n \"stagingScientistStorage\": \"0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713\",\n \"projectManagerStorage\": \"0xD12431217cd1F8b41f29C608400119F97c6d37F1\",\n \"stagingProjectManagerStorage\": \"0xD12431217cd1F8b41f29C608400119F97c6d37F1\",\n \"subscriptionManager\": \"0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb\",\n \"stagingSubscriptionManager\": \"0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb\",\n \"libraryRegistryStorage\": \"0x500d1e6b5B36D4cbc077684F32e98D0a0FFCF56E\",\n \"stagingLibraryRegistryStorage\": \"0x500d1e6b5B36D4cbc077684F32e98D0a0FFCF56E\",\n \"publicLibraryStorage\": \"0x5293599e4d67d4f18137FDc3818E1e7b7306C926\",\n \"stagingPublicLibraryStorage\": \"0x5293599e4d67d4f18137FDc3818E1e7b7306C926\",\n \"dSafeHRStorage\": \"0x8fdA91F4547227e50Ef448332fA8E1D5e01f0524\",\n \"stagingDSafeHRStorage\": \"0x8fdA91F4547227e50Ef448332fA8E1D5e01f0524\",\n \"statsPivotStorage\": \"0x7a4602175f6beA4393BF886037b36E2EeC261bcE\",\n \"stagingStatsPivotStorage\": \"0x7a4602175f6beA4393BF886037b36E2EeC261bcE\",\n \"relationshipIndexerStorage\": \"0xF9d92B41124F0bAB0Ea8334B258D3952bAdBC0a3\",\n \"stagingRelationshipIndexerStorage\": \"0xF9d92B41124F0bAB0Ea8334B258D3952bAdBC0a3\",\n \"emailRecoveryManager\": \"0x613DB14219Ea366041381C6cCF9c09968aD7F43E\",\n \"stagingEmailRecoveryManager\": \"0x613DB14219Ea366041381C6cCF9c09968aD7F43E\",\n \"accountManager\": \"0xc5e5EfAFBa46B0dBcF0c57ea63B3BD2d615E853c\",\n \"stagingAccountManager\": \"0xc5e5EfAFBa46B0dBcF0c57ea63B3BD2d615E853c\"\n },\n \"14601\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0x9D53A99A60BaA5eEB071833bAE07058F5846D668\",\n \"stagingAddressRegistry\": \"0x9D53A99A60BaA5eEB071833bAE07058F5846D668\",\n \"factory\": \"0xdF29cBC8CDf9bf25c5a135011d89857F18b9C5E5\",\n \"stagingFactory\": \"0xdF29cBC8CDf9bf25c5a135011d89857F18b9C5E5\",\n \"backupStorage\": \"0x0998409E88362d76E6B703AfEE938C5fBa2196d8\",\n \"stagingBackupStorage\": \"0x0998409E88362d76E6B703AfEE938C5fBa2196d8\",\n \"bouncerStorage\": \"0xC947fe2638Db4fB3A0a6be8B8588571a1f874ADA\",\n \"stagingBouncerStorage\": \"0xC947fe2638Db4fB3A0a6be8B8588571a1f874ADA\",\n \"scientistStorage\": \"0x29215Aa0Fd5CF12EbCF77C0f754f4B2B9320f57e\",\n \"stagingScientistStorage\": \"0x29215Aa0Fd5CF12EbCF77C0f754f4B2B9320f57e\",\n \"projectManagerStorage\": \"0x3879c30284F4ddcBa634F1E8AE977420fc24c9Af\",\n \"stagingProjectManagerStorage\": \"0x3879c30284F4ddcBa634F1E8AE977420fc24c9Af\",\n \"subscriptionManager\": \"0xDcD683c8c774adBEc63e353182E6Feb172EFD4b6\",\n \"stagingSubscriptionManager\": \"0xDcD683c8c774adBEc63e353182E6Feb172EFD4b6\",\n \"libraryRegistryStorage\": \"0x4Cbc2AeE051680C40C3A97DA0BF3da0660Aa192c\",\n \"stagingLibraryRegistryStorage\": \"0x4Cbc2AeE051680C40C3A97DA0BF3da0660Aa192c\",\n \"publicLibraryStorage\": \"0x95Ad7E48123dFEc03E338617fc5747E646a177f7\",\n \"stagingPublicLibraryStorage\": \"0x95Ad7E48123dFEc03E338617fc5747E646a177f7\",\n \"dSafeHRStorage\": \"0x1Dd9B351F7Db00cdf1148343022B05e3D5b8578F\",\n \"stagingDSafeHRStorage\": \"0x1Dd9B351F7Db00cdf1148343022B05e3D5b8578F\",\n \"statsPivotStorage\": \"0xb01cE8E906BeCb24341d8Fe3EB5950826D96f7F8\",\n \"stagingStatsPivotStorage\": \"0xb01cE8E906BeCb24341d8Fe3EB5950826D96f7F8\",\n \"relationshipIndexerStorage\": \"0x29e4f99400Bc77CD4CaE155F355BbE8520eA2367\",\n \"stagingRelationshipIndexerStorage\": \"0x29e4f99400Bc77CD4CaE155F355BbE8520eA2367\",\n \"emailRecoveryManager\": \"0x5D9581b8867a71CDD34Fc5C4F90c8f92bAEd56D5\",\n \"stagingEmailRecoveryManager\": \"0x5D9581b8867a71CDD34Fc5C4F90c8f92bAEd56D5\",\n \"accountManager\": \"0xfc77749ED8794C5d9Cf7b73C506f94DC45C3e379\",\n \"stagingAccountManager\": \"0xfc77749ED8794C5d9Cf7b73C506f94DC45C3e379\"\n }\n};\n","import {\n CANONICAL,\n NETWORKS,\n getCanonicalRole,\n getCanonicalTarget,\n type AvailableEnvironment,\n type CanonicalRole,\n type PublicNetworkConfig,\n} from './networks.ts';\nimport { BRAND_LOGOS } from './branding.ts';\nimport { DEPLOYMENTS } from './deployments.generated.ts';\n\nexport type ChainPrice =\n | { stable: true }\n | { stable?: false; pythOracle: string; usdPriceId: string };\n\n/**\n * The full public chain-identity shape: `PublicNetworkConfig` (this package's\n * own hand-authored data) plus everything derivable from it without a\n * bundler-specific runtime dependency — `price` (from `pyth`/`pythUsdPriceId`),\n * `logo` (from `BRAND_LOGOS`), and `addresses`/`deployed`/`stagingDeployed`\n * (from `deployments.generated.ts`). Deliberately does NOT include a viem\n * `Chain` object — that needs the `viem` package, which this package avoids\n * as a dependency so it stays `require()`-able by plain Node tooling\n * (`hardhat.config.js`, `deploy/*.js`, `tools/*.js`). `@the_library/public`'s\n * `toViemChain()` builds one from this shape when a consumer needs it.\n */\nexport interface EvmChainConfig {\n chainId: number;\n name: string;\n symbol: string;\n shortName: string;\n decimals: number;\n explorer: string;\n rpc: string;\n website: string;\n main: boolean;\n brand: string;\n logo: string;\n price: ChainPrice;\n /** See PublicNetworkConfig.memberFundingTarget. */\n memberFundingTarget: string;\n /** See PublicNetworkConfig.staffFundingTarget. */\n staffFundingTarget: string;\n addresses?: {\n addressRegistry?: string;\n stagingAddressRegistry?: string;\n // Every other deployed contract (bouncerStorage, backupStorage,\n // emailRecoveryManager, ...) also lands here, camelCased, via the index\n // signature — see ChainDeployment in deployments.generated.ts, which\n // tools/generate_registry_manifest.js populates generically for whatever\n // it finds deployed, not just these two.\n [contract: string]: string | undefined;\n };\n deployed?: boolean;\n stagingDeployed?: boolean;\n}\n\nfunction toChainConfig(data: PublicNetworkConfig): EvmChainConfig {\n const price: ChainPrice = data.pyth\n ? { pythOracle: data.pyth, usdPriceId: data.pythUsdPriceId || '' }\n : { stable: true };\n\n const deployment = DEPLOYMENTS[data.chainId] || {};\n const addresses: EvmChainConfig['addresses'] = {};\n for (const [field, value] of Object.entries(deployment)) {\n if (field === 'deployed' || field === 'stagingDeployed') continue;\n if (typeof value === 'string') addresses[field] = value;\n }\n\n return {\n chainId: data.chainId,\n name: data.original,\n symbol: data.symbol,\n shortName: data.shortName,\n decimals: data.decimals,\n explorer: data.explorer,\n rpc: data.rpc,\n website: data.website,\n main: data.main,\n brand: data.brand,\n // A brand without its own logo shows the production network's ('' if that has none either).\n logo: BRAND_LOGOS[data.brand] ?? BRAND_LOGOS[NETWORKS[CANONICAL.production].brand] ?? '',\n price,\n memberFundingTarget: data.memberFundingTarget,\n staffFundingTarget: data.staffFundingTarget,\n deployed: deployment.deployed,\n stagingDeployed: deployment.stagingDeployed,\n addresses: Object.keys(addresses).length ? addresses : undefined,\n };\n}\n\n// EVM_CHAINS covers every network in NETWORKS, full stop — not filtered by\n// `canonical` or `enabled`. NETWORKS is already hand-curated to exactly the\n// chains this system cares about (deleting a chain there is how you remove it\n// from consideration entirely); layering a canonical- or enabled-based filter\n// on top of that only hides chains someone deliberately kept, which is exactly\n// backwards — e.g. a chain's own testnet should stay reachable even while it\n// holds no canonical role and isn't a deploy target. tools/generate_registry_manifest.js's\n// public manifest uses this same unfiltered set (its own \"no deployed\n// contracts\" check already excludes anything that isn't actually live).\nexport const EVM_CHAINS: Record<number, EvmChainConfig> = Object.fromEntries(\n Object.values(NETWORKS).map((data) => [data.chainId, toChainConfig(data)])\n);\n\nexport function getChain(chainId: number | string): EvmChainConfig {\n const id = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;\n const chain = EVM_CHAINS[id];\n if (!chain) throw new Error(`Chain ${chainId} not configured`);\n return chain;\n}\n\n/**\n * Resolves the existing production/staging deployment convention without\n * introducing another environment-like type. A canonical mainnet (including a\n * mainnet that holds the staging role) uses its production/unsuffixed deployment; legacy\n * non-mainnet deployments use their staging-suffixed deployment.\n */\nexport function getDeploymentEnvironment(\n chainId: number | string,\n environment: AvailableEnvironment\n): CanonicalRole {\n const chain = getChain(chainId);\n const role = getCanonicalRole(environment);\n const isCanonicalChain = getCanonicalTarget(environment).chainId === chain.chainId;\n\n if (isCanonicalChain) return chain.main ? 'production' : 'staging';\n // Non-canonical chains (testnets) always use staging deployment\n return chain.main ? role : 'staging';\n}\n\n/** Whether a chain has the deployment selected for an application environment. */\nexport function isChainDeployedForRole(\n chainId: number | string,\n environment: AvailableEnvironment\n): boolean {\n const chain = getChain(chainId);\n return getDeploymentEnvironment(chain.chainId, environment) === 'staging'\n ? chain.stagingDeployed === true\n : chain.deployed === true;\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/short-names.ts","../src/networks.ts","../src/sites.ts","../src/backend.ts","../src/stripe.ts","../src/deployments.generated.ts","../src/chains.ts"],"sourcesContent":["/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\nexport { ShortNames, type ShortName } from './short-names.ts';\nexport {\n NETWORKS,\n CANONICAL,\n APPLICATION_ENVIRONMENTS,\n getApplicationEnvironmentConfig,\n getCanonicalRole,\n getCanonicalTarget,\n resolveApplicationEnvironment,\n type PublicNetworkConfig,\n type CanonicalRole,\n type AvailableEnvironment,\n type CanonicalTarget,\n} from './networks.ts';\nexport { SITE_CONTACTS, getSiteContact, type SiteContact, type SiteDomain } from './sites.ts';\nexport { BACKEND_ENVIRONMENTS, getBackendConfig, type BackendConfig } from './backend.ts';\nexport {\n MEMBERSHIP_TIERS,\n STRIPE_ENVIRONMENTS,\n getStripeConfig,\n type MembershipTier,\n type StripeEnvironmentConfig,\n} from './stripe.ts';\nexport {\n EVM_CHAINS,\n getChain,\n getDeploymentEnvironment,\n isChainDeployedForRole,\n type EvmChainConfig,\n type ChainPrice,\n} from './chains.ts';\n\nimport { getCanonicalTarget, type AvailableEnvironment, type CanonicalRole } from './networks.ts';\n\n/** Resolves a canonical role (e.g. \"production\") to its chain ID. Throws if\n * the role is unknown or references a network missing from NETWORKS. */\nexport function getCanonicalChainId(environment: AvailableEnvironment): number {\n return getCanonicalTarget(environment).chainId;\n}\n\n/**\n * Chain ID per canonical role — pure data derived from CANONICAL + NETWORKS,\n * no viem/browser-SDK dependency required, so any consumer (the SDK, a CLI\n * script, a Lambda) imports it from here without depending on the full web3\n * SDK (viem, ethers, wallet adapters) for one number. @the_library/public does\n * not re-export it.\n */\nexport const CANONICAL_CHAIN_IDS: Record<CanonicalRole, number> = {\n production: getCanonicalChainId('production'),\n staging: getCanonicalChainId('staging')\n};\n\nexport const DEFAULT_CHAIN_ID = CANONICAL_CHAIN_IDS.production;\nexport const DEFAULT_STAGING_CHAIN_ID = CANONICAL_CHAIN_IDS.staging;\nexport const DEFAULT_DEV_CHAIN_ID = CANONICAL_CHAIN_IDS.staging;\n","/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\nexport const ShortNames = {\n SONIC: 'SONIC',\n SONIC_BLAZE: 'SONIC_BLAZE',\n GNOSIS: 'GNOSIS',\n CHIADO: 'CHIADO',\n} as const;\n\nexport type ShortName = (typeof ShortNames)[keyof typeof ShortNames];\n","/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\nimport { ShortNames, type ShortName } from './short-names.ts';\n\nexport interface PublicNetworkConfig {\n /** Deploy-tooling target flag — consumed only by tools/deploy-manager.js and\n * Hardhat configs. Unrelated to whether a chain is user-facing; see `CANONICAL`. */\n enabled: boolean;\n chainId: number;\n main: boolean;\n symbol: string;\n shortName: string;\n original: string;\n faucet?: string;\n faucetAmount?: number;\n decimals: number;\n brand: string;\n /** Pyth oracle for the native coin's USD price. '' when the native coin is itself a $1\n * stablecoin (xDAI): no oracle — Factory is deployed with address(0) and Accountant.getPrice()\n * returns 1 coin per dollar; the SDK sees `price: { stable: true }` (chains.ts). */\n pyth: string;\n /** Pyth price-feed id, required when `pyth` is set ('' otherwise). */\n pythUsdPriceId: string;\n website: string;\n rpc: string;\n explorer: string;\n name: string;\n /** Native amount (decimal string) each member wallet is topped up to so it can save to the\n * chain on its own: the Lambdas' gas gift (packages/lambda/src/utils/funding.ts) and the\n * app's \"full tank\" gauge. In this chain's own coin, so it differs per chain. */\n memberFundingTarget: string;\n /** Native amount (decimal string) book-manager sends a new library-staff wallet, for its\n * admin transactions. In this chain's own coin, so it differs per chain. */\n staffFundingTarget: string;\n /** Explorer API for `hardhat verify` (hardhat.config.js); omit if there is none.\n * `etherscan` needs an Etherscan API key; `blockscout` needs none. */\n verifyApi?: { kind: 'etherscan' | 'blockscout'; url: string };\n}\n\nexport const NETWORKS: Record<ShortName, PublicNetworkConfig> = {\n [ShortNames.SONIC_BLAZE]: {\n enabled: false,\n chainId: 14601,\n main: false,\n symbol: 'S',\n shortName: 'WATER', // testnet shorthand\n original: 'Sonic TestNet',\n faucet: 'https://testnet.soniclabs.com/account',\n faucetAmount: 1,\n decimals: 18,\n brand: 'SONIC',\n pyth: '0x2880aB155794e7179c9eE2e38200202908C17B43',\n pythUsdPriceId: '0xf490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d',\n website: 'https://soniclabs.com/',\n rpc: 'https://rpc.testnet.soniclabs.com/',\n explorer: 'https://testnet.sonicscan.org',\n name: 'Sonic Blaze',\n memberFundingTarget: '1',\n staffFundingTarget: '0.5',\n verifyApi: { kind: 'etherscan', url: 'https://api.testnet.sonicscan.org/api' },\n },\n [ShortNames.SONIC]: {\n enabled: false,\n chainId: 146,\n main: true,\n symbol: 'S',\n shortName: 'TREE', // mainnet shorthand\n original: 'Sonic MainNet',\n decimals: 18,\n brand: 'SONIC',\n pyth: '0x2b9Bb0042dB2F30650d73BB83CBAE584807d2FE4',\n pythUsdPriceId: '0xf490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d',\n website: 'https://soniclabs.com/',\n rpc: 'https://rpc.soniclabs.com',\n explorer: 'https://sonicscan.org',\n name: 'Sonic',\n // 1 S: one save() of ~25 new actions cost ~0.084 S at the 50 gwei base-fee floor.\n memberFundingTarget: '1',\n staffFundingTarget: '0.5',\n verifyApi: { kind: 'etherscan', url: 'https://api.sonicscan.org/api' },\n },\n [ShortNames.GNOSIS]: {\n enabled: true,\n chainId: 100,\n main: true,\n symbol: 'XDAI',\n brand: 'GNOSIS',\n decimals: 18,\n explorer: 'https://gnosisscan.io',\n name: 'Gnosis',\n original: 'Gnosis Mainnet',\n pyth: '',\n pythUsdPriceId: '',\n rpc: 'https://rpc.gnosischain.com',\n shortName: 'TREE',\n website: 'https://www.gnosis.io/',\n // ~29 saves of ~0.69M gas at a busy 1 gwei (suggested 2026-10-17 — confirm before launch).\n memberFundingTarget: '0.02',\n // The same 10M gas as Sonic's 0.5 S at its 50 gwei floor, at a busy 1 gwei (suggested).\n staffFundingTarget: '0.01',\n verifyApi: { kind: 'blockscout', url: 'https://gnosisscan.io/api' },\n },\n [ShortNames.CHIADO]: {\n enabled: true,\n chainId: 10200,\n main: false,\n symbol: 'XDAI',\n brand: 'GNOSIS',\n decimals: 18,\n explorer: 'https://gnosis-chiado.blockscout.com',\n name: 'Gnosis Chiado',\n original: 'Gnosis Chiado',\n pyth: '',\n pythUsdPriceId: '',\n rpc: 'https://rpc.chiadochain.net',\n shortName: 'WATER',\n website: 'https://www.gnosis.io/',\n // Testnet: fees stay ~14 wei per gas and the faucet is small, so 0.0001 still covers\n // thousands of saves (user's choice, 2026-10-18).\n memberFundingTarget: '0.0001',\n staffFundingTarget: '0.0001',\n verifyApi: { kind: 'blockscout', url: 'https://gnosis-chiado.blockscout.com/api' },\n },\n //\n // [ShortNames.tCORE2]: {\n // enabled: false,\n // chainId: 1114,\n // main: false,\n // symbol: 'tCORE2',\n // shortName: 'SUN',\n // original: 'Core Blockchain TestNet',\n // faucet: 'https://scan.test2.btcs.network/faucet',\n // faucetAmount: 1,\n // decimals: 18,\n // brand: 'CORE',\n // pyth: '0x2880aB155794e7179c9eE2e38200202908C17B43',\n // pythUsdPriceId: '0x9b4503710cc8c53f75c30e6e4fda1a7064680ef2e0ee97acd2e3a7c37b3c830c',\n // website: 'https://coredao.org/',\n // rpc: 'https://rpc.test2.btcs.network',\n // explorer: 'https://scan.test2.btcs.network',\n // name: 'Core Test',\n // },\n // [ShortNames.CORE]: {\n // enabled: true,\n // chainId: 1116,\n // main: true,\n // symbol: 'CORE',\n // shortName: 'TREE',\n // decimals: 18,\n // brand: 'CORE',\n // pyth: '0xA2aa501b19aff244D90cc15a4Cf739D2725B5729',\n // pythUsdPriceId: '0x9b4503710cc8c53f75c30e6e4fda1a7064680ef2e0ee97acd2e3a7c37b3c830c',\n // website: 'https://coredao.org/',\n // rpc: 'https://rpc.coredao.org',\n // explorer: 'https://scan.coredao.org',\n // name: 'Main',\n // original: 'Core Blockchain MainNet',\n // },\n};\n\n/**\n * Application environments and their shared flags. `dev` deliberately reuses\n * the staging corpus/registry role instead of creating a third persisted\n * environment. `apiUrl` is the environment's AWS API Gateway base URL (no\n * trailing slash) serving the packages/lambda routes (/auth/*, /tracker/*,\n * /recover/*, /bulkUserCreation) — public, called from the browser apps.\n */\nexport const APPLICATION_ENVIRONMENTS = {\n production: {\n canonicalRole: 'production',\n networkKey: ShortNames.GNOSIS,\n maintenanceMode: false,\n apiUrl: 'https://aj1bg165gc.execute-api.ap-southeast-2.amazonaws.com/prod',\n },\n staging: {\n canonicalRole: 'staging',\n networkKey: ShortNames.CHIADO,\n maintenanceMode: false,\n apiUrl: 'https://udpkacwxd0.execute-api.ap-southeast-2.amazonaws.com/prod',\n },\n} as const;\n\nexport type AvailableEnvironment = keyof typeof APPLICATION_ENVIRONMENTS;\nexport type CanonicalRole =\n (typeof APPLICATION_ENVIRONMENTS)[AvailableEnvironment]['canonicalRole'];\n\nexport function getApplicationEnvironmentConfig(environment: AvailableEnvironment) {\n return APPLICATION_ENVIRONMENTS[environment];\n}\n\nexport function getCanonicalRole(environment: AvailableEnvironment): CanonicalRole {\n return getApplicationEnvironmentConfig(environment).canonicalRole;\n}\n\n/** Resolves Vite-style mode/override strings to the shared application environment. */\nexport function resolveApplicationEnvironment(\n mode?: string,\n override?: string\n): AvailableEnvironment {\n for (const candidate of [override, mode]) {\n if (candidate === 'production' || candidate === 'staging' ) {\n return candidate;\n }\n if (candidate === 'development') return 'staging';\n }\n return 'staging';\n}\n\n/**\n * The one chain, per role, that is the source of truth for that role — corpus\n * anchoring writes to the chain listed here, and packages/public's EVM_CHAINS\n * registry is the union of every chain referenced across all roles. Exactly\n * one chain per role by design (single-blockchain-per-environment) — this is\n * not an array; a role can never fan out to multiple simultaneously-live\n * chains.\n */\n\nexport const CANONICAL = {\n production: APPLICATION_ENVIRONMENTS.production.networkKey,\n staging: APPLICATION_ENVIRONMENTS.staging.networkKey,\n} as const satisfies Record<CanonicalRole, ShortName>;\n\nexport interface CanonicalTarget {\n environment: AvailableEnvironment;\n role: CanonicalRole;\n networkKey: ShortName;\n network: PublicNetworkConfig;\n chainId: number;\n}\n\n/**\n * Resolves an application environment to its canonical network. An environment\n * is deliberately independent of the chain tier: staging may target a mainnet,\n * and dev aliases the staging role.\n */\nexport function getCanonicalTarget(environment: AvailableEnvironment): CanonicalTarget {\n const applicationConfig = getApplicationEnvironmentConfig(environment);\n const role = applicationConfig.canonicalRole;\n const networkKey = applicationConfig.networkKey;\n\n const network = NETWORKS[networkKey];\n if (!network) throw new Error(`application environment ${environment} references unknown network \"${networkKey}\"`);\n\n return { environment, role, networkKey, network, chainId: network.chainId };\n}\n","/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\n/**\n * Public contact per website, keyed by bare domain — the one place a deck's\n * closing contact block and a website's contact section / form fallback read\n * their email and website link from. Each website shares its deck's config\n * (the deck's `deck.domain`), so the two can't drift apart.\n *\n * Display only: where contact-form submissions are delivered is the contact\n * Lambda's own routing (packages/lambda/src/contact/sites.json).\n */\nexport interface SiteContact {\n /** Bare domain, no scheme or `www.`. */\n domain: string;\n /** The website's home page, shown as the contact link. */\n websiteUrl: string;\n contactEmail: string;\n}\n\nexport const SITE_CONTACTS = {\n 'dsafe.us': { domain: 'dsafe.us', websiteUrl: 'https://dsafe.us', contactEmail: 'hello@dsafe.us' },\n 'worldbibliotech.net': { domain: 'worldbibliotech.net', websiteUrl: 'https://worldbibliotech.net', contactEmail: 'hello@worldbibliotech.net' },\n 'worldbibliotech.com': { domain: 'worldbibliotech.com', websiteUrl: 'https://worldbibliotech.com', contactEmail: 'hello@worldbibliotech.com' },\n 'worldbibliotech.org': { domain: 'worldbibliotech.org', websiteUrl: 'https://worldbibliotech.org', contactEmail: 'hello@worldbibliotech.org' },\n 'datapond.earth': { domain: 'datapond.earth', websiteUrl: 'https://datapond.earth', contactEmail: 'data@datapond.earth' },\n 'pondenterprise.com': { domain: 'pondenterprise.com', websiteUrl: 'https://pondenterprise.com', contactEmail: 'hello@pondenterprise.com' },\n} as const satisfies Record<string, SiteContact>;\n\nexport type SiteDomain = keyof typeof SITE_CONTACTS;\n\n/** Looks a website up by domain or URL (case, scheme, `www.` and path ignored). Throws on an unknown site, so nothing renders a contact it doesn't have. */\nexport function getSiteContact(domainOrUrl: string): SiteContact {\n const host = domainOrUrl.trim().toLowerCase().replace(/^[a-z]+:\\/\\//, '').replace(/[/:?#].*$/, '').replace(/^www\\./, '');\n if (!Object.prototype.hasOwnProperty.call(SITE_CONTACTS, host)) {\n throw new Error(`No site contact configured for \"${domainOrUrl}\". Add it to SITE_CONTACTS in @the_library/network-config (src/sites.ts).`);\n }\n return SITE_CONTACTS[host as SiteDomain];\n}\n","/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\nimport type { AvailableEnvironment } from './networks.ts';\n\n/**\n * Per-environment backend (AWS Lambda) configuration — the one place that\n * says which Secrets Manager secret, DynamoDB tables and frontend URL a\n * `production` or `staging` Lambda build uses. The chain/RPC for the same\n * environment comes from APPLICATION_ENVIRONMENTS/NETWORKS (networks.ts), so\n * a Lambda build selects everything by environment name alone.\n *\n * Kept as its own export rather than nested in APPLICATION_ENVIRONMENTS\n * (which the browser app imports) so AWS resource names tree-shake out of\n * the frontend bundle. Values here are identifiers, never secrets — they are\n * compiled into each Lambda bundle at build time; only the secret values\n * themselves live in Secrets Manager, under `secretId`.\n */\nexport interface BackendConfig {\n /** Artifact suffix: dist/<lambda>-<stage>.zip, AWS Handler `<lambda>-<stage>.handler`. */\n stage: 'prod' | 'staging';\n awsRegion: string;\n /** Secrets Manager secret id (a path, not a secret value). */\n secretId: string;\n tables: {\n /** Stripe webhook failure audit log (partition key: paymentIntentId). */\n paymentsLog: string;\n /** /auth/login magic-link rate limit (partition key: hash); also the\n * /contact form's rate counters, under `contact:` keys. */\n loginRateLimit: string;\n /** Email-recovery requests (partition key: hash). */\n emailRecovery: string;\n /** Persistent recovery retry history (emailHash + firstRetryTimestamp). No TTL. */\n recoveryAnomalies: string;\n /** Tracker lead capture (pk: email, sk: ISO timestamp). */\n trackerLeads: string;\n };\n /** Frontend (Vue app) base URL, no trailing slash; magic links open\n * `${frontendUrl}/#/restore?...` (hash routing). */\n frontendUrl: string;\n}\n\nexport const BACKEND_ENVIRONMENTS = {\n production: {\n stage: 'prod',\n awsRegion: 'ap-southeast-2',\n secretId: '/prod/d-library/keys',\n tables: {\n paymentsLog: 'BookCollective-Payments-Log',\n loginRateLimit: 'EmailRecoveryRequests',\n emailRecovery: 'BookCollective-EmailRecovery',\n recoveryAnomalies: 'anomalies',\n trackerLeads: 'PondEnterprise-AdLeads',\n },\n frontendUrl: 'https://worldbibliotech.com',\n },\n staging: {\n stage: 'staging',\n awsRegion: 'ap-southeast-2',\n secretId: '/staging/d-library/keys',\n tables: {\n paymentsLog: 'BookCollective-Payments-Log-staging',\n loginRateLimit: 'EmailRecoveryRequests-staging',\n emailRecovery: 'BookCollective-EmailRecovery-staging',\n recoveryAnomalies: 'anomalies-staging',\n trackerLeads: 'PondEnterprise-AdLeads-staging',\n },\n // No hosted staging frontend: `pnpm run dev:staging` (Vite, :3000).\n frontendUrl: 'http://localhost:3000',\n },\n} as const satisfies Record<AvailableEnvironment, BackendConfig>;\n\nexport function getBackendConfig(environment: AvailableEnvironment): BackendConfig {\n return BACKEND_ENVIRONMENTS[environment];\n}\n","/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\nimport type { AvailableEnvironment } from './networks.ts';\n\n/**\n * Public Stripe configuration for each application environment.\n *\n * Payment Link URLs and Price IDs are public identifiers and can safely live\n * here. Secret API keys and webhook signing secrets must remain in AWS Secrets\n * Manager and must never be added to this package.\n *\n * This configuration is keyed by application environment rather than EVM\n * network because Stripe resources belong to the production/staging\n * deployment, not to a particular blockchain.\n */\n\nexport const MEMBERSHIP_TIERS = {\n account: {\n usd: 2,\n votes: 0,\n },\n supporter: {\n usd: 10,\n votes: 8,\n },\n pioneer: {\n usd: 20,\n votes: 18,\n },\n visionary: {\n usd: 50,\n votes: 48,\n },\n} as const;\n\nexport type MembershipTier = keyof typeof MEMBERSHIP_TIERS;\n\nexport interface StripeEnvironmentConfig {\n /** Whether Stripe checkout is available in this application environment. */\n readonly enabled: boolean;\n /** Price IDs used by webhook fulfillment to identify purchased line items. */\n readonly prices: {\n readonly memberAccount: string | null;\n readonly voteCredit: string | null;\n };\n /** @deprecated Membership purchases use verified, server-created Checkout\n * Sessions. Kept null to prevent reuse of legacy public Payment Links.\n * Disable those links separately in Stripe; see the Lambda rotation guide. */\n readonly paymentLinks: Readonly<Record<MembershipTier, string | null>>;\n}\n\nexport const STRIPE_ENVIRONMENTS = {\n production: {\n enabled: true,\n prices: {\n memberAccount: 'price_1UK1qXQeGVzwKmoGyaR44j8l',\n voteCredit: 'price_1UK2ZWQeGVzwKmoG5dgc3qrX',\n },\n paymentLinks: {\n account: null,\n supporter: null,\n pioneer: null,\n visionary: null,\n },\n },\n staging: {\n enabled: true,\n prices: {\n memberAccount: 'price_1UK1qXQeGVzwKmoGyaR44j8l',\n voteCredit: 'price_1UK2ZWQeGVzwKmoG5dgc3qrX',\n },\n paymentLinks: {\n account: null,\n supporter: null,\n pioneer: null,\n visionary: null,\n },\n },\n} as const satisfies Record<AvailableEnvironment, StripeEnvironmentConfig>;\n\nexport function getStripeConfig(\n environment: AvailableEnvironment\n): StripeEnvironmentConfig {\n return STRIPE_ENVIRONMENTS[environment];\n}\n","// AUTO-GENERATED by tools/generate_registry_manifest.js — run `pnpm run sync:registry` to rebuild.\n// Source: deploy/d-code/evm/<network>/AddressRegistry[_staging].json and\n// deploy/cache/evm/<network>/Deployed<Contract>[_staging].json for every\n// contract in CACHE_FILE_TO_CONTRACT, for every network referenced by\n// @the_library/network-config's `CANONICAL` block.\n\nexport interface ChainDeployment {\n deployed?: boolean;\n stagingDeployed?: boolean;\n [contractField: string]: boolean | string | undefined;\n}\n\nexport const DEPLOYMENTS: Record<number, ChainDeployment> = {\n \"100\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0xC121FB1A294A52D4175E5D937A3e6D717B98FEc7\",\n \"stagingAddressRegistry\": \"0xC121FB1A294A52D4175E5D937A3e6D717B98FEc7\",\n \"factory\": \"0x938dcbA1aD805BE0e585f3b4d06cA210CeDE8629\",\n \"stagingFactory\": \"0x938dcbA1aD805BE0e585f3b4d06cA210CeDE8629\",\n \"backupStorage\": \"0x8f25eBA09b1188ae571DE3BA0fc62893c40C9B55\",\n \"stagingBackupStorage\": \"0x8f25eBA09b1188ae571DE3BA0fc62893c40C9B55\",\n \"bouncerStorage\": \"0x669766fD75368659B78e61BD82CB55405F3e7Aae\",\n \"stagingBouncerStorage\": \"0x669766fD75368659B78e61BD82CB55405F3e7Aae\",\n \"scientistStorage\": \"0x9cCdb8E4a979AeF7bd56d485aB2B7cA1404F25C5\",\n \"stagingScientistStorage\": \"0x9cCdb8E4a979AeF7bd56d485aB2B7cA1404F25C5\",\n \"projectManagerStorage\": \"0x83e1f5f0a799Bf154BF78e4a37CB66Dd1E1d7F2b\",\n \"stagingProjectManagerStorage\": \"0x83e1f5f0a799Bf154BF78e4a37CB66Dd1E1d7F2b\",\n \"subscriptionManager\": \"0xAc47559D305d2ACA094B51E879E25cbB3D9C3Ed8\",\n \"stagingSubscriptionManager\": \"0xAc47559D305d2ACA094B51E879E25cbB3D9C3Ed8\",\n \"libraryRegistryStorage\": \"0x8e613b6D564803a8Cdc71cB8CE7F3EB205981462\",\n \"stagingLibraryRegistryStorage\": \"0x8e613b6D564803a8Cdc71cB8CE7F3EB205981462\",\n \"publicLibraryStorage\": \"0x2647f241d8Fa1E3C11a8d424109aE9A8D9624e21\",\n \"stagingPublicLibraryStorage\": \"0x2647f241d8Fa1E3C11a8d424109aE9A8D9624e21\",\n \"dSafeHRStorage\": \"0x7d1437158aE169A1E5C4188872888d622Ef7F6FA\",\n \"stagingDSafeHRStorage\": \"0x7d1437158aE169A1E5C4188872888d622Ef7F6FA\",\n \"statsPivotStorage\": \"0x57778210bf8De1B24707874957eB6De5cbCEEcfA\",\n \"stagingStatsPivotStorage\": \"0x57778210bf8De1B24707874957eB6De5cbCEEcfA\",\n \"relationshipIndexerStorage\": \"0x4749aed97EDf0502D6416C1d71502001E153181a\",\n \"stagingRelationshipIndexerStorage\": \"0x4749aed97EDf0502D6416C1d71502001E153181a\",\n \"emailRecoveryManager\": \"0x3F18c8a9473097B2bF4aA3D0C3eD808AEDFd17A5\",\n \"stagingEmailRecoveryManager\": \"0x3F18c8a9473097B2bF4aA3D0C3eD808AEDFd17A5\",\n \"accountManager\": \"0xEBD7fC6BAfFBF97782CdDBaBB3564c996eE22ab7\",\n \"stagingAccountManager\": \"0xEBD7fC6BAfFBF97782CdDBaBB3564c996eE22ab7\"\n },\n \"146\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0x96233a42a809ECDb14D3bd44b23a0e70F75E8519\",\n \"stagingAddressRegistry\": \"0x96233a42a809ECDb14D3bd44b23a0e70F75E8519\",\n \"factory\": \"0x98ed1705270730299079C5D9137416445FFAd7a7\",\n \"stagingFactory\": \"0x98ed1705270730299079C5D9137416445FFAd7a7\",\n \"backupStorage\": \"0xB936Cb4A1007Ee179f65C75eC62f986F040df913\",\n \"stagingBackupStorage\": \"0xB936Cb4A1007Ee179f65C75eC62f986F040df913\",\n \"bouncerStorage\": \"0xb2A80025fB10a1F238e72077cD3695AEFd3C9A03\",\n \"stagingBouncerStorage\": \"0xb2A80025fB10a1F238e72077cD3695AEFd3C9A03\",\n \"scientistStorage\": \"0x4689C7639c21cc615Fa92Cefa48ed0FFf130902C\",\n \"stagingScientistStorage\": \"0x4689C7639c21cc615Fa92Cefa48ed0FFf130902C\",\n \"projectManagerStorage\": \"0x82c9638AAF614070BA2427Af1691c38b8a973740\",\n \"stagingProjectManagerStorage\": \"0x82c9638AAF614070BA2427Af1691c38b8a973740\",\n \"subscriptionManager\": \"0x909B28aF430280C0D3b784EC14Df8fd22Db61066\",\n \"stagingSubscriptionManager\": \"0x909B28aF430280C0D3b784EC14Df8fd22Db61066\",\n \"libraryRegistryStorage\": \"0x40F33095Ac9fbf0c24bfE9642809E9A835978392\",\n \"stagingLibraryRegistryStorage\": \"0x40F33095Ac9fbf0c24bfE9642809E9A835978392\",\n \"publicLibraryStorage\": \"0x7fa224B1f0CFBA68701888C50Dc168A298792db8\",\n \"stagingPublicLibraryStorage\": \"0x7fa224B1f0CFBA68701888C50Dc168A298792db8\",\n \"dSafeHRStorage\": \"0xE4926FA79f41Ba0630d6734299F236b190387D2F\",\n \"stagingDSafeHRStorage\": \"0xE4926FA79f41Ba0630d6734299F236b190387D2F\",\n \"statsPivotStorage\": \"0x834a04670d8c343658Fe182710897fe306E955E4\",\n \"stagingStatsPivotStorage\": \"0x834a04670d8c343658Fe182710897fe306E955E4\",\n \"relationshipIndexerStorage\": \"0xEe52c2814A6a5F400ed8318752DF3CD37168c480\",\n \"stagingRelationshipIndexerStorage\": \"0xEe52c2814A6a5F400ed8318752DF3CD37168c480\",\n \"emailRecoveryManager\": \"0x4B7b5cDD0aCCad89931f3282Cd0FF73729221AC9\",\n \"stagingEmailRecoveryManager\": \"0x4B7b5cDD0aCCad89931f3282Cd0FF73729221AC9\",\n \"accountManager\": \"0xF62388AE786977B6F6113693eEFF1926596EF5Ac\",\n \"stagingAccountManager\": \"0xF62388AE786977B6F6113693eEFF1926596EF5Ac\"\n },\n \"10200\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0x0bBe33489bF3d5b027851C2D488f70DcCf13733c\",\n \"stagingAddressRegistry\": \"0x0bBe33489bF3d5b027851C2D488f70DcCf13733c\",\n \"factory\": \"0x0c37eac7119b33674816E11645CD5002Dd2E8599\",\n \"stagingFactory\": \"0x0c37eac7119b33674816E11645CD5002Dd2E8599\",\n \"backupStorage\": \"0x9D3F50977b83f5795CC21c7C590a464be63686Cd\",\n \"stagingBackupStorage\": \"0x9D3F50977b83f5795CC21c7C590a464be63686Cd\",\n \"bouncerStorage\": \"0x1805579afCb1581886B94f060Fa24D2d56b1B133\",\n \"stagingBouncerStorage\": \"0x1805579afCb1581886B94f060Fa24D2d56b1B133\",\n \"scientistStorage\": \"0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713\",\n \"stagingScientistStorage\": \"0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713\",\n \"projectManagerStorage\": \"0x127Cb07b710808cc5D4CB1DA65436ebA84A8a361\",\n \"stagingProjectManagerStorage\": \"0x127Cb07b710808cc5D4CB1DA65436ebA84A8a361\",\n \"subscriptionManager\": \"0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb\",\n \"stagingSubscriptionManager\": \"0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb\",\n \"libraryRegistryStorage\": \"0x500d1e6b5B36D4cbc077684F32e98D0a0FFCF56E\",\n \"stagingLibraryRegistryStorage\": \"0x500d1e6b5B36D4cbc077684F32e98D0a0FFCF56E\",\n \"publicLibraryStorage\": \"0x5293599e4d67d4f18137FDc3818E1e7b7306C926\",\n \"stagingPublicLibraryStorage\": \"0x5293599e4d67d4f18137FDc3818E1e7b7306C926\",\n \"dSafeHRStorage\": \"0x8fdA91F4547227e50Ef448332fA8E1D5e01f0524\",\n \"stagingDSafeHRStorage\": \"0x8fdA91F4547227e50Ef448332fA8E1D5e01f0524\",\n \"statsPivotStorage\": \"0x7a4602175f6beA4393BF886037b36E2EeC261bcE\",\n \"stagingStatsPivotStorage\": \"0x7a4602175f6beA4393BF886037b36E2EeC261bcE\",\n \"relationshipIndexerStorage\": \"0xF9d92B41124F0bAB0Ea8334B258D3952bAdBC0a3\",\n \"stagingRelationshipIndexerStorage\": \"0xF9d92B41124F0bAB0Ea8334B258D3952bAdBC0a3\",\n \"emailRecoveryManager\": \"0x613DB14219Ea366041381C6cCF9c09968aD7F43E\",\n \"stagingEmailRecoveryManager\": \"0x613DB14219Ea366041381C6cCF9c09968aD7F43E\",\n \"accountManager\": \"0x623191Ccb8C8FD81369713219424792C36cA0Fbe\",\n \"stagingAccountManager\": \"0x623191Ccb8C8FD81369713219424792C36cA0Fbe\"\n },\n \"14601\": {\n \"deployed\": true,\n \"stagingDeployed\": true,\n \"addressRegistry\": \"0x9D53A99A60BaA5eEB071833bAE07058F5846D668\",\n \"stagingAddressRegistry\": \"0x9D53A99A60BaA5eEB071833bAE07058F5846D668\",\n \"factory\": \"0xdF29cBC8CDf9bf25c5a135011d89857F18b9C5E5\",\n \"stagingFactory\": \"0xdF29cBC8CDf9bf25c5a135011d89857F18b9C5E5\",\n \"backupStorage\": \"0x0998409E88362d76E6B703AfEE938C5fBa2196d8\",\n \"stagingBackupStorage\": \"0x0998409E88362d76E6B703AfEE938C5fBa2196d8\",\n \"bouncerStorage\": \"0xC947fe2638Db4fB3A0a6be8B8588571a1f874ADA\",\n \"stagingBouncerStorage\": \"0xC947fe2638Db4fB3A0a6be8B8588571a1f874ADA\",\n \"scientistStorage\": \"0x29215Aa0Fd5CF12EbCF77C0f754f4B2B9320f57e\",\n \"stagingScientistStorage\": \"0x29215Aa0Fd5CF12EbCF77C0f754f4B2B9320f57e\",\n \"projectManagerStorage\": \"0x3879c30284F4ddcBa634F1E8AE977420fc24c9Af\",\n \"stagingProjectManagerStorage\": \"0x3879c30284F4ddcBa634F1E8AE977420fc24c9Af\",\n \"subscriptionManager\": \"0xDcD683c8c774adBEc63e353182E6Feb172EFD4b6\",\n \"stagingSubscriptionManager\": \"0xDcD683c8c774adBEc63e353182E6Feb172EFD4b6\",\n \"libraryRegistryStorage\": \"0x4Cbc2AeE051680C40C3A97DA0BF3da0660Aa192c\",\n \"stagingLibraryRegistryStorage\": \"0x4Cbc2AeE051680C40C3A97DA0BF3da0660Aa192c\",\n \"publicLibraryStorage\": \"0x95Ad7E48123dFEc03E338617fc5747E646a177f7\",\n \"stagingPublicLibraryStorage\": \"0x95Ad7E48123dFEc03E338617fc5747E646a177f7\",\n \"dSafeHRStorage\": \"0x1Dd9B351F7Db00cdf1148343022B05e3D5b8578F\",\n \"stagingDSafeHRStorage\": \"0x1Dd9B351F7Db00cdf1148343022B05e3D5b8578F\",\n \"statsPivotStorage\": \"0xb01cE8E906BeCb24341d8Fe3EB5950826D96f7F8\",\n \"stagingStatsPivotStorage\": \"0xb01cE8E906BeCb24341d8Fe3EB5950826D96f7F8\",\n \"relationshipIndexerStorage\": \"0x29e4f99400Bc77CD4CaE155F355BbE8520eA2367\",\n \"stagingRelationshipIndexerStorage\": \"0x29e4f99400Bc77CD4CaE155F355BbE8520eA2367\",\n \"emailRecoveryManager\": \"0x5D9581b8867a71CDD34Fc5C4F90c8f92bAEd56D5\",\n \"stagingEmailRecoveryManager\": \"0x5D9581b8867a71CDD34Fc5C4F90c8f92bAEd56D5\",\n \"accountManager\": \"0xfc77749ED8794C5d9Cf7b73C506f94DC45C3e379\",\n \"stagingAccountManager\": \"0xfc77749ED8794C5d9Cf7b73C506f94DC45C3e379\"\n }\n};\n","/*\n * D-Open Code Sovereign Licence 1.1 · © 2026 Antoine LUCAS · SPDX-License-Identifier: LicenseRef-DOCSL-1.1\n * Non-commercial use of unmodified copies only. By using this file you accept the Licence, incl. USD 50M liquidated damages (s 16.4).\n * Full text: https://registry.worldbibliotech.com/licence and the LICENSE file · Contact: admin@pondenterprise.com\n */\n\nimport {\n NETWORKS,\n getCanonicalRole,\n getCanonicalTarget,\n type AvailableEnvironment,\n type CanonicalRole,\n type PublicNetworkConfig,\n} from './networks.ts';\nimport { DEPLOYMENTS } from './deployments.generated.ts';\n\nexport type ChainPrice =\n | { stable: true }\n | { stable?: false; pythOracle: string; usdPriceId: string };\n\n/**\n * The full public chain-identity shape: `PublicNetworkConfig` (this package's\n * own hand-authored data) plus everything derivable from it without a\n * bundler-specific runtime dependency — `price` (from `pyth`/`pythUsdPriceId`)\n * and `addresses`/`deployed`/`stagingDeployed` (from `deployments.generated.ts`). Deliberately does NOT include a viem\n * `Chain` object — that needs the `viem` package, which this package avoids\n * as a dependency so it stays `require()`-able by plain Node tooling\n * (`hardhat.config.js`, `deploy/*.js`, `tools/*.js`). `@the_library/public`'s\n * `toViemChain()` builds one from this shape when a consumer needs it.\n */\nexport interface EvmChainConfig {\n chainId: number;\n name: string;\n symbol: string;\n shortName: string;\n decimals: number;\n explorer: string;\n rpc: string;\n website: string;\n main: boolean;\n brand: string;\n price: ChainPrice;\n /** See PublicNetworkConfig.memberFundingTarget. */\n memberFundingTarget: string;\n /** See PublicNetworkConfig.staffFundingTarget. */\n staffFundingTarget: string;\n addresses?: {\n addressRegistry?: string;\n stagingAddressRegistry?: string;\n // Every other deployed contract (bouncerStorage, backupStorage,\n // emailRecoveryManager, ...) also lands here, camelCased, via the index\n // signature — see ChainDeployment in deployments.generated.ts, which\n // tools/generate_registry_manifest.js populates generically for whatever\n // it finds deployed, not just these two.\n [contract: string]: string | undefined;\n };\n deployed?: boolean;\n stagingDeployed?: boolean;\n}\n\nfunction toChainConfig(data: PublicNetworkConfig): EvmChainConfig {\n const price: ChainPrice = data.pyth\n ? { pythOracle: data.pyth, usdPriceId: data.pythUsdPriceId || '' }\n : { stable: true };\n\n const deployment = DEPLOYMENTS[data.chainId] || {};\n const addresses: EvmChainConfig['addresses'] = {};\n for (const [field, value] of Object.entries(deployment)) {\n if (field === 'deployed' || field === 'stagingDeployed') continue;\n if (typeof value === 'string') addresses[field] = value;\n }\n\n return {\n chainId: data.chainId,\n name: data.original,\n symbol: data.symbol,\n shortName: data.shortName,\n decimals: data.decimals,\n explorer: data.explorer,\n rpc: data.rpc,\n website: data.website,\n main: data.main,\n brand: data.brand,\n price,\n memberFundingTarget: data.memberFundingTarget,\n staffFundingTarget: data.staffFundingTarget,\n deployed: deployment.deployed,\n stagingDeployed: deployment.stagingDeployed,\n addresses: Object.keys(addresses).length ? addresses : undefined,\n };\n}\n\n// EVM_CHAINS covers every network in NETWORKS, full stop — not filtered by\n// `canonical` or `enabled`. NETWORKS is already hand-curated to exactly the\n// chains this system cares about (deleting a chain there is how you remove it\n// from consideration entirely); layering a canonical- or enabled-based filter\n// on top of that only hides chains someone deliberately kept, which is exactly\n// backwards — e.g. a chain's own testnet should stay reachable even while it\n// holds no canonical role and isn't a deploy target. tools/generate_registry_manifest.js's\n// public manifest uses this same unfiltered set (its own \"no deployed\n// contracts\" check already excludes anything that isn't actually live).\nexport const EVM_CHAINS: Record<number, EvmChainConfig> = Object.fromEntries(\n Object.values(NETWORKS).map((data) => [data.chainId, toChainConfig(data)])\n);\n\nexport function getChain(chainId: number | string): EvmChainConfig {\n const id = typeof chainId === 'string' ? parseInt(chainId, 10) : chainId;\n const chain = EVM_CHAINS[id];\n if (!chain) throw new Error(`Chain ${chainId} not configured`);\n return chain;\n}\n\n/**\n * Resolves the existing production/staging deployment convention without\n * introducing another environment-like type. A canonical mainnet (including a\n * mainnet that holds the staging role) uses its production/unsuffixed deployment; legacy\n * non-mainnet deployments use their staging-suffixed deployment.\n */\nexport function getDeploymentEnvironment(\n chainId: number | string,\n environment: AvailableEnvironment\n): CanonicalRole {\n const chain = getChain(chainId);\n const role = getCanonicalRole(environment);\n const isCanonicalChain = getCanonicalTarget(environment).chainId === chain.chainId;\n\n if (isCanonicalChain) return chain.main ? 'production' : 'staging';\n // Non-canonical chains (testnets) always use staging deployment\n return chain.main ? role : 'staging';\n}\n\n/** Whether a chain has the deployment selected for an application environment. */\nexport function isChainDeployedForRole(\n chainId: number | string,\n environment: AvailableEnvironment\n): boolean {\n const chain = getChain(chainId);\n return getDeploymentEnvironment(chain.chainId, environment) === 'staging'\n ? chain.stagingDeployed === true\n : chain.deployed === true;\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -107,14 +107,6 @@ interface CanonicalTarget {
|
|
|
107
107
|
*/
|
|
108
108
|
declare function getCanonicalTarget(environment: AvailableEnvironment): CanonicalTarget;
|
|
109
109
|
|
|
110
|
-
/**
|
|
111
|
-
* Brand identity assets, keyed by `PublicNetworkConfig.brand` — not by chain
|
|
112
|
-
* ID, since chains sharing a brand (e.g. CORE mainnet + tCORE2 testnet) share
|
|
113
|
-
* a logo. Lives alongside the brand strings themselves in `networks.ts`
|
|
114
|
-
* rather than in `@the_library/public`'s web3 SDK, which only consumes it.
|
|
115
|
-
*/
|
|
116
|
-
declare const BRAND_LOGOS: Record<string, string>;
|
|
117
|
-
|
|
118
110
|
/**
|
|
119
111
|
* Public contact per website, keyed by bare domain — the one place a deck's
|
|
120
112
|
* closing contact block and a website's contact section / form fallback read
|
|
@@ -316,9 +308,8 @@ type ChainPrice = {
|
|
|
316
308
|
/**
|
|
317
309
|
* The full public chain-identity shape: `PublicNetworkConfig` (this package's
|
|
318
310
|
* own hand-authored data) plus everything derivable from it without a
|
|
319
|
-
* bundler-specific runtime dependency — `price` (from `pyth`/`pythUsdPriceId`)
|
|
320
|
-
* `
|
|
321
|
-
* (from `deployments.generated.ts`). Deliberately does NOT include a viem
|
|
311
|
+
* bundler-specific runtime dependency — `price` (from `pyth`/`pythUsdPriceId`)
|
|
312
|
+
* and `addresses`/`deployed`/`stagingDeployed` (from `deployments.generated.ts`). Deliberately does NOT include a viem
|
|
322
313
|
* `Chain` object — that needs the `viem` package, which this package avoids
|
|
323
314
|
* as a dependency so it stays `require()`-able by plain Node tooling
|
|
324
315
|
* (`hardhat.config.js`, `deploy/*.js`, `tools/*.js`). `@the_library/public`'s
|
|
@@ -335,7 +326,6 @@ interface EvmChainConfig {
|
|
|
335
326
|
website: string;
|
|
336
327
|
main: boolean;
|
|
337
328
|
brand: string;
|
|
338
|
-
logo: string;
|
|
339
329
|
price: ChainPrice;
|
|
340
330
|
/** See PublicNetworkConfig.memberFundingTarget. */
|
|
341
331
|
memberFundingTarget: string;
|
|
@@ -366,15 +356,14 @@ declare function isChainDeployedForRole(chainId: number | string, environment: A
|
|
|
366
356
|
declare function getCanonicalChainId(environment: AvailableEnvironment): number;
|
|
367
357
|
/**
|
|
368
358
|
* Chain ID per canonical role — pure data derived from CANONICAL + NETWORKS,
|
|
369
|
-
* no viem/browser-SDK dependency required
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
* full web3 SDK (viem, ethers, wallet adapters) for one number.
|
|
359
|
+
* no viem/browser-SDK dependency required, so any consumer (the SDK, a CLI
|
|
360
|
+
* script, a Lambda) imports it from here without depending on the full web3
|
|
361
|
+
* SDK (viem, ethers, wallet adapters) for one number. @the_library/public does
|
|
362
|
+
* not re-export it.
|
|
374
363
|
*/
|
|
375
364
|
declare const CANONICAL_CHAIN_IDS: Record<CanonicalRole, number>;
|
|
376
365
|
declare const DEFAULT_CHAIN_ID: number;
|
|
377
366
|
declare const DEFAULT_STAGING_CHAIN_ID: number;
|
|
378
367
|
declare const DEFAULT_DEV_CHAIN_ID: number;
|
|
379
368
|
|
|
380
|
-
export { APPLICATION_ENVIRONMENTS, type AvailableEnvironment, BACKEND_ENVIRONMENTS,
|
|
369
|
+
export { APPLICATION_ENVIRONMENTS, type AvailableEnvironment, BACKEND_ENVIRONMENTS, type BackendConfig, CANONICAL, CANONICAL_CHAIN_IDS, type CanonicalRole, type CanonicalTarget, type ChainPrice, DEFAULT_CHAIN_ID, DEFAULT_DEV_CHAIN_ID, DEFAULT_STAGING_CHAIN_ID, EVM_CHAINS, type EvmChainConfig, MEMBERSHIP_TIERS, type MembershipTier, NETWORKS, type PublicNetworkConfig, SITE_CONTACTS, STRIPE_ENVIRONMENTS, type ShortName, ShortNames, type SiteContact, type SiteDomain, type StripeEnvironmentConfig, getApplicationEnvironmentConfig, getBackendConfig, getCanonicalChainId, getCanonicalRole, getCanonicalTarget, getChain, getDeploymentEnvironment, getSiteContact, getStripeConfig, isChainDeployedForRole, resolveApplicationEnvironment };
|
package/dist/index.d.ts
CHANGED
|
@@ -107,14 +107,6 @@ interface CanonicalTarget {
|
|
|
107
107
|
*/
|
|
108
108
|
declare function getCanonicalTarget(environment: AvailableEnvironment): CanonicalTarget;
|
|
109
109
|
|
|
110
|
-
/**
|
|
111
|
-
* Brand identity assets, keyed by `PublicNetworkConfig.brand` — not by chain
|
|
112
|
-
* ID, since chains sharing a brand (e.g. CORE mainnet + tCORE2 testnet) share
|
|
113
|
-
* a logo. Lives alongside the brand strings themselves in `networks.ts`
|
|
114
|
-
* rather than in `@the_library/public`'s web3 SDK, which only consumes it.
|
|
115
|
-
*/
|
|
116
|
-
declare const BRAND_LOGOS: Record<string, string>;
|
|
117
|
-
|
|
118
110
|
/**
|
|
119
111
|
* Public contact per website, keyed by bare domain — the one place a deck's
|
|
120
112
|
* closing contact block and a website's contact section / form fallback read
|
|
@@ -316,9 +308,8 @@ type ChainPrice = {
|
|
|
316
308
|
/**
|
|
317
309
|
* The full public chain-identity shape: `PublicNetworkConfig` (this package's
|
|
318
310
|
* own hand-authored data) plus everything derivable from it without a
|
|
319
|
-
* bundler-specific runtime dependency — `price` (from `pyth`/`pythUsdPriceId`)
|
|
320
|
-
* `
|
|
321
|
-
* (from `deployments.generated.ts`). Deliberately does NOT include a viem
|
|
311
|
+
* bundler-specific runtime dependency — `price` (from `pyth`/`pythUsdPriceId`)
|
|
312
|
+
* and `addresses`/`deployed`/`stagingDeployed` (from `deployments.generated.ts`). Deliberately does NOT include a viem
|
|
322
313
|
* `Chain` object — that needs the `viem` package, which this package avoids
|
|
323
314
|
* as a dependency so it stays `require()`-able by plain Node tooling
|
|
324
315
|
* (`hardhat.config.js`, `deploy/*.js`, `tools/*.js`). `@the_library/public`'s
|
|
@@ -335,7 +326,6 @@ interface EvmChainConfig {
|
|
|
335
326
|
website: string;
|
|
336
327
|
main: boolean;
|
|
337
328
|
brand: string;
|
|
338
|
-
logo: string;
|
|
339
329
|
price: ChainPrice;
|
|
340
330
|
/** See PublicNetworkConfig.memberFundingTarget. */
|
|
341
331
|
memberFundingTarget: string;
|
|
@@ -366,15 +356,14 @@ declare function isChainDeployedForRole(chainId: number | string, environment: A
|
|
|
366
356
|
declare function getCanonicalChainId(environment: AvailableEnvironment): number;
|
|
367
357
|
/**
|
|
368
358
|
* Chain ID per canonical role — pure data derived from CANONICAL + NETWORKS,
|
|
369
|
-
* no viem/browser-SDK dependency required
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
* full web3 SDK (viem, ethers, wallet adapters) for one number.
|
|
359
|
+
* no viem/browser-SDK dependency required, so any consumer (the SDK, a CLI
|
|
360
|
+
* script, a Lambda) imports it from here without depending on the full web3
|
|
361
|
+
* SDK (viem, ethers, wallet adapters) for one number. @the_library/public does
|
|
362
|
+
* not re-export it.
|
|
374
363
|
*/
|
|
375
364
|
declare const CANONICAL_CHAIN_IDS: Record<CanonicalRole, number>;
|
|
376
365
|
declare const DEFAULT_CHAIN_ID: number;
|
|
377
366
|
declare const DEFAULT_STAGING_CHAIN_ID: number;
|
|
378
367
|
declare const DEFAULT_DEV_CHAIN_ID: number;
|
|
379
368
|
|
|
380
|
-
export { APPLICATION_ENVIRONMENTS, type AvailableEnvironment, BACKEND_ENVIRONMENTS,
|
|
369
|
+
export { APPLICATION_ENVIRONMENTS, type AvailableEnvironment, BACKEND_ENVIRONMENTS, type BackendConfig, CANONICAL, CANONICAL_CHAIN_IDS, type CanonicalRole, type CanonicalTarget, type ChainPrice, DEFAULT_CHAIN_ID, DEFAULT_DEV_CHAIN_ID, DEFAULT_STAGING_CHAIN_ID, EVM_CHAINS, type EvmChainConfig, MEMBERSHIP_TIERS, type MembershipTier, NETWORKS, type PublicNetworkConfig, SITE_CONTACTS, STRIPE_ENVIRONMENTS, type ShortName, ShortNames, type SiteContact, type SiteDomain, type StripeEnvironmentConfig, getApplicationEnvironmentConfig, getBackendConfig, getCanonicalChainId, getCanonicalRole, getCanonicalTarget, getChain, getDeploymentEnvironment, getSiteContact, getStripeConfig, isChainDeployedForRole, resolveApplicationEnvironment };
|