@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/dist/index.js CHANGED
@@ -1,3 +1,9 @@
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
+ */
6
+
1
7
  // src/short-names.ts
2
8
  var ShortNames = {
3
9
  SONIC: "SONIC",
@@ -171,14 +177,6 @@ function getCanonicalTarget(environment) {
171
177
  return { environment, role, networkKey, network, chainId: network.chainId };
172
178
  }
173
179
 
174
- // src/media/sonic-logo.avif
175
- var sonic_logo_default = "data:image/avif;base64,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";
176
-
177
- // src/branding.ts
178
- var BRAND_LOGOS = {
179
- SONIC: sonic_logo_default
180
- };
181
-
182
180
  // src/sites.ts
183
181
  var SITE_CONTACTS = {
184
182
  "dsafe.us": { domain: "dsafe.us", websiteUrl: "https://dsafe.us", contactEmail: "hello@dsafe.us" },
@@ -352,16 +350,16 @@ var DEPLOYMENTS = {
352
350
  "stagingDeployed": true,
353
351
  "addressRegistry": "0x0bBe33489bF3d5b027851C2D488f70DcCf13733c",
354
352
  "stagingAddressRegistry": "0x0bBe33489bF3d5b027851C2D488f70DcCf13733c",
355
- "factory": "0x68A80A3422B21bCe61808CF1E3ED9601Ad958b09",
356
- "stagingFactory": "0x68A80A3422B21bCe61808CF1E3ED9601Ad958b09",
353
+ "factory": "0x0c37eac7119b33674816E11645CD5002Dd2E8599",
354
+ "stagingFactory": "0x0c37eac7119b33674816E11645CD5002Dd2E8599",
357
355
  "backupStorage": "0x9D3F50977b83f5795CC21c7C590a464be63686Cd",
358
356
  "stagingBackupStorage": "0x9D3F50977b83f5795CC21c7C590a464be63686Cd",
359
- "bouncerStorage": "0x45fA65bADC2d1185284614D61f99273Eea7A9510",
360
- "stagingBouncerStorage": "0x45fA65bADC2d1185284614D61f99273Eea7A9510",
357
+ "bouncerStorage": "0x1805579afCb1581886B94f060Fa24D2d56b1B133",
358
+ "stagingBouncerStorage": "0x1805579afCb1581886B94f060Fa24D2d56b1B133",
361
359
  "scientistStorage": "0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713",
362
360
  "stagingScientistStorage": "0xa975e9C546BAd16fFFd7Aa2Fa659d8750aA69713",
363
- "projectManagerStorage": "0xD12431217cd1F8b41f29C608400119F97c6d37F1",
364
- "stagingProjectManagerStorage": "0xD12431217cd1F8b41f29C608400119F97c6d37F1",
361
+ "projectManagerStorage": "0x127Cb07b710808cc5D4CB1DA65436ebA84A8a361",
362
+ "stagingProjectManagerStorage": "0x127Cb07b710808cc5D4CB1DA65436ebA84A8a361",
365
363
  "subscriptionManager": "0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb",
366
364
  "stagingSubscriptionManager": "0x65818AEF65a2475af09c4B2C7EeBE7c474877Adb",
367
365
  "libraryRegistryStorage": "0x500d1e6b5B36D4cbc077684F32e98D0a0FFCF56E",
@@ -376,8 +374,8 @@ var DEPLOYMENTS = {
376
374
  "stagingRelationshipIndexerStorage": "0xF9d92B41124F0bAB0Ea8334B258D3952bAdBC0a3",
377
375
  "emailRecoveryManager": "0x613DB14219Ea366041381C6cCF9c09968aD7F43E",
378
376
  "stagingEmailRecoveryManager": "0x613DB14219Ea366041381C6cCF9c09968aD7F43E",
379
- "accountManager": "0xc5e5EfAFBa46B0dBcF0c57ea63B3BD2d615E853c",
380
- "stagingAccountManager": "0xc5e5EfAFBa46B0dBcF0c57ea63B3BD2d615E853c"
377
+ "accountManager": "0x623191Ccb8C8FD81369713219424792C36cA0Fbe",
378
+ "stagingAccountManager": "0x623191Ccb8C8FD81369713219424792C36cA0Fbe"
381
379
  },
382
380
  "14601": {
383
381
  "deployed": true,
@@ -433,8 +431,6 @@ function toChainConfig(data) {
433
431
  website: data.website,
434
432
  main: data.main,
435
433
  brand: data.brand,
436
- // A brand without its own logo shows the production network's ('' if that has none either).
437
- logo: BRAND_LOGOS[data.brand] ?? BRAND_LOGOS[NETWORKS[CANONICAL.production].brand] ?? "",
438
434
  price,
439
435
  memberFundingTarget: data.memberFundingTarget,
440
436
  staffFundingTarget: data.staffFundingTarget,
@@ -478,7 +474,6 @@ var DEFAULT_DEV_CHAIN_ID = CANONICAL_CHAIN_IDS.staging;
478
474
  export {
479
475
  APPLICATION_ENVIRONMENTS,
480
476
  BACKEND_ENVIRONMENTS,
481
- BRAND_LOGOS,
482
477
  CANONICAL,
483
478
  CANONICAL_CHAIN_IDS,
484
479
  DEFAULT_CHAIN_ID,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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","../src/index.ts"],"sourcesContent":["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","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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/short-names.ts","../src/networks.ts","../src/sites.ts","../src/backend.ts","../src/stripe.ts","../src/deployments.generated.ts","../src/chains.ts","../src/index.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 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","/*\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"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@the_library/network-config",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
+ "license": "SEE LICENSE IN LICENSE",
4
5
  "description": "Pure, side-effect-free EVM network registry (chain IDs, RPCs, explorers, Pyth oracles, canonical role assignments) shared by Node deploy tooling and the browser-facing SDK. No secrets — see config/networks.js at the repo root for the private-key/treasury-address overlay.",
5
6
  "type": "module",
6
7
  "main": "./dist/index.cjs",
@@ -19,14 +20,16 @@
19
20
  }
20
21
  }
21
22
  },
22
- "files": ["dist"],
23
- "scripts": {
24
- "build": "tsup",
25
- "prepare": "tsup",
26
- "typecheck": "tsc --noEmit -p tsconfig.json"
27
- },
23
+ "files": [
24
+ "dist",
25
+ "THIRD_PARTY_NOTICES"
26
+ ],
28
27
  "devDependencies": {
29
28
  "typescript": "^6.0.3",
30
29
  "tsup": "^8.0.1"
30
+ },
31
+ "scripts": {
32
+ "build": "tsup",
33
+ "typecheck": "tsc --noEmit -p tsconfig.json"
31
34
  }
32
- }
35
+ }