@glyphteck/veyl 0.55.1 → 0.56.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/account.js CHANGED
@@ -6219,6 +6219,7 @@ var SATS_PER_BITCOIN = 100000000n;
6219
6219
  var USERNAME_MAX_CHARS = 12;
6220
6220
  var PASSWORD_MIN_CHARS = 12;
6221
6221
  var PASSWORD_MAX_CHARS = 64;
6222
+ var PASSWORD_MAX_BYTES = 4 * 1024;
6222
6223
  var LOCAL_MEDIA_CACHE_MAX_BYTES = 512 * MIB_BYTES;
6223
6224
  var LOCAL_PROFILE_CACHE_MAX_ITEMS = 500;
6224
6225
  var LOCAL_PROFILE_CACHE_MAX_AGE_MS = 30 * DAY_MS;
@@ -6327,9 +6328,10 @@ var WALLET_TRANSFER_CACHE_WRITE_DELAY_MS = 3 * MS_PER_SECOND;
6327
6328
  var MIN_PASSWORD = PASSWORD_MIN_CHARS;
6328
6329
  var MAX_PASSWORD = PASSWORD_MAX_CHARS;
6329
6330
  var rules = [
6330
- `Use ${MIN_PASSWORD} to ${MAX_PASSWORD} characters.`,
6331
- "Most visible letters, numbers, symbols, and emoji are allowed.",
6332
- "Spaces are allowed, but tabs, newlines, and other invisible or control characters are not."
6331
+ `use ${MIN_PASSWORD} to ${MAX_PASSWORD} visible characters; emoji sequences count as one`,
6332
+ "common passwords, names, dates, repeats, sequences, and predictable substitutions are rejected",
6333
+ "most visible letters, numbers, symbols, spaces, and emoji are allowed",
6334
+ "tabs, newlines, and other invisible or control characters are not allowed"
6333
6335
  ];
6334
6336
  function normalizePassword(value = "") {
6335
6337
  return String(value ?? "").normalize("NFC");
@@ -6337,19 +6339,28 @@ function normalizePassword(value = "") {
6337
6339
 
6338
6340
  // ../../core/origins.js
6339
6341
  var ROOT_DOMAIN = "glyphteck.com";
6342
+ var VEYL_DEV_WEB_PORT_MIN = 3000;
6343
+ var VEYL_DEV_WEB_PORT_MAX = 3015;
6340
6344
  var domains = Object.freeze({
6341
6345
  root: ROOT_DOMAIN,
6342
6346
  rootDev: `dev.${ROOT_DOMAIN}`,
6343
6347
  veyl: `veyl.${ROOT_DOMAIN}`,
6344
6348
  veylDev: `dev.veyl.${ROOT_DOMAIN}`
6345
6349
  });
6350
+ function getVeylDevWebOrigin(port) {
6351
+ const value = Number(port);
6352
+ if (!Number.isInteger(value) || value < VEYL_DEV_WEB_PORT_MIN || value > VEYL_DEV_WEB_PORT_MAX) {
6353
+ throw new Error(`Invalid Veyl development web port: ${port}`);
6354
+ }
6355
+ return `https://${domains.veylDev}:${value}`;
6356
+ }
6357
+ var veylDevWebOrigins = Object.freeze(Array.from({ length: VEYL_DEV_WEB_PORT_MAX - VEYL_DEV_WEB_PORT_MIN + 1 }, (_, index) => getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN + index)));
6346
6358
  var origins = Object.freeze({
6347
6359
  root: `https://${domains.root}`,
6348
6360
  rootDev: `https://${domains.rootDev}`,
6349
6361
  veyl: `https://${domains.veyl}`,
6350
6362
  veylDev: `https://${domains.veylDev}`,
6351
- veylDevWeb: `https://${domains.veylDev}:3000`,
6352
- veylDevFeatureWeb: `https://${domains.veylDev}:3001`
6363
+ veylDevWeb: getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN)
6353
6364
  });
6354
6365
  var appDomains = Object.freeze([
6355
6366
  domains.veyl
package/dist/auth.js CHANGED
@@ -85,19 +85,28 @@ function normalizePasskeyRegisterError(error, options = {}) {
85
85
 
86
86
  // ../../core/origins.js
87
87
  var ROOT_DOMAIN = "glyphteck.com";
88
+ var VEYL_DEV_WEB_PORT_MIN = 3000;
89
+ var VEYL_DEV_WEB_PORT_MAX = 3015;
88
90
  var domains = Object.freeze({
89
91
  root: ROOT_DOMAIN,
90
92
  rootDev: `dev.${ROOT_DOMAIN}`,
91
93
  veyl: `veyl.${ROOT_DOMAIN}`,
92
94
  veylDev: `dev.veyl.${ROOT_DOMAIN}`
93
95
  });
96
+ function getVeylDevWebOrigin(port) {
97
+ const value = Number(port);
98
+ if (!Number.isInteger(value) || value < VEYL_DEV_WEB_PORT_MIN || value > VEYL_DEV_WEB_PORT_MAX) {
99
+ throw new Error(`Invalid Veyl development web port: ${port}`);
100
+ }
101
+ return `https://${domains.veylDev}:${value}`;
102
+ }
103
+ var veylDevWebOrigins = Object.freeze(Array.from({ length: VEYL_DEV_WEB_PORT_MAX - VEYL_DEV_WEB_PORT_MIN + 1 }, (_, index) => getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN + index)));
94
104
  var origins = Object.freeze({
95
105
  root: `https://${domains.root}`,
96
106
  rootDev: `https://${domains.rootDev}`,
97
107
  veyl: `https://${domains.veyl}`,
98
108
  veylDev: `https://${domains.veylDev}`,
99
- veylDevWeb: `https://${domains.veylDev}:3000`,
100
- veylDevFeatureWeb: `https://${domains.veylDev}:3001`
109
+ veylDevWeb: getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN)
101
110
  });
102
111
  var appDomains = Object.freeze([
103
112
  domains.veyl
@@ -114,7 +123,6 @@ var links = Object.freeze({
114
123
  veyl: origins.veyl,
115
124
  veylDev: origins.veylDev,
116
125
  veylDevWeb: origins.veylDevWeb,
117
- veylDevFeatureWeb: origins.veylDevFeatureWeb,
118
126
  terms: `${origins.veyl}/legal#terms`,
119
127
  communityRules: `${origins.veyl}/community-rules`,
120
128
  contact: `mailto:contact@${ROOT_DOMAIN}`,
@@ -130,8 +138,7 @@ var prodPasskeyOrigins = Object.freeze([
130
138
  ]);
131
139
  var devPasskeyOrigins = Object.freeze([
132
140
  origins.veylDev,
133
- origins.veylDevWeb,
134
- origins.veylDevFeatureWeb
141
+ ...veylDevWebOrigins
135
142
  ]);
136
143
  var allowedPasskeyOrigins = Object.freeze([
137
144
  ...prodPasskeyOrigins,
@@ -142,8 +149,7 @@ var storageCorsOrigins = Object.freeze([
142
149
  ]);
143
150
  var devStorageCorsOrigins = Object.freeze([
144
151
  origins.veylDev,
145
- origins.veylDevWeb,
146
- origins.veylDevFeatureWeb
152
+ ...veylDevWebOrigins
147
153
  ]);
148
154
  var webApps = Object.freeze({
149
155
  veyl: Object.freeze({
package/dist/cli.js CHANGED
@@ -6404,12 +6404,13 @@ var init_notifications = __esm(() => {
6404
6404
  });
6405
6405
 
6406
6406
  // ../../core/config.js
6407
- var MS_PER_SECOND = 1000, MINUTE_MS, HOUR_MS, DAY_MS, KIB_BYTES = 1024, MIB_BYTES, SATS_PER_BITCOIN = 100000000n, USERNAME_MAX_CHARS = 12, PASSWORD_MIN_CHARS = 12, PASSWORD_MAX_CHARS = 64, AUTOLOCK_MIN_MINUTES = 1, AUTOLOCK_MAX_MINUTES = 60, LOCAL_CACHE_WRITE_DELAY_MS = 350, LOCAL_MEDIA_CACHE_MAX_BYTES, LOCAL_MEDIA_CACHE_MAX_ITEMS = 1000, LOCAL_MEDIA_ACCESS_TOUCH_MIN_MS, LOCAL_PROFILE_CACHE_MAX_ITEMS = 500, LOCAL_PROFILE_CACHE_MAX_AGE_MS, LOCAL_CHAT_CACHE_MAX_ITEMS = 1000, LOCAL_CHAT_MESSAGE_CACHE_MAX_VISIBLE = 1000, LOCAL_CHAT_MESSAGE_CACHE_WRITE_DELAY_MS = 2500, LOCAL_AVATAR_CACHE_MAX_BYTES, LOCAL_AVATAR_CACHE_MAX_AGE_MS, AVATAR_IMAGE_MAX_BYTES, CHAT_READY_DOWNLOAD_MAX_BYTES, CHAT_MESSAGE_FILE_CACHE_MAX_BYTES, IDLE_CALLBACK_MIN_TIMEOUT_MS = 50, ATTACHMENT_CACHE_IDLE_TIMEOUT_MS = 2500, ATTACHMENT_CACHE_FALLBACK_DELAY_MS = 250, CHAT_UNSAVED_TTL_DAYS = 21, CHAT_UNSAVED_TTL_MS, CHAT_AFTER_SEEN_MS, CHAT_MEDIA_TTL_DAYS, CHAT_MEDIA_TTL_MS, CHAT_UPLOAD_MAX_BYTES, CHAT_AUDIO_TRANSCODE_BITRATE_BPS = 128000, CHAT_VIDEO_TRANSCODE_VIDEO_BITRATE_BPS = 3000000, CHAT_VIDEO_TRANSCODE_AUDIO_BITRATE_BPS, CHAT_MESSAGE_BATCH_SIZE = 40, CHAT_MESSAGE_QUERY_MAX_DOCS = 120, CHAT_TTL_CLIENT_DELETE_GRACE_MS, CHAT_TTL_DELETE_CHUNK_SIZE = 40, CHAT_DELETE_SCAN_BATCH_SIZE = 200, CHAT_TTL_WRITE_BATCH_SIZE = 400, CHAT_DELETE_WRITE_BATCH_SIZE = 400, CHAT_BATCH_CLEANUP_IDLE_TIMEOUT_MS = 1500, CHAT_BATCH_CLEANUP_IDLE_DELAY_MS = 250, CHAT_LIST_PAGE_SIZE = 20, CHAT_LIST_LIVE_COUNT, CHAT_INBOX_PING_PAGE_SIZE = 25, CHAT_LIST_CACHE_WRITE_DELAY_MS = 1500, CHAT_LIST_SNAPSHOT_COALESCE_MS = 80, CHAT_LIST_STATUS_CACHE_MS, CHAT_LIST_LISTENER_RETRY_MS = 1000, CHAT_TOP_WARM_COUNT = 0, CHAT_EAGER_WARM_COUNT = 0, CHAT_WARM_DELAY_MS = 3000, CHAT_WARM_BATCH_SIZE, CHAT_MESSAGE_VIEW_CACHE_SIZE = 30, CHAT_MEDIA_WARM_MESSAGES_PER_CHAT, CHAT_MEDIA_WARM_START_DELAY_MS = 600, CHAT_MEDIA_WARM_STEP_DELAY_MS = 120, CHAT_MEDIA_WARM_TYPES, CHAT_MEDIA_WARM_MAX_BYTES = 0, CHAT_READ_WRITE_INTERVAL_MS, CHAT_SEND_QUEUE_RATE_LIMIT_COUNT = 12, CHAT_SEND_QUEUE_RATE_LIMIT_WINDOW_MS, CHAT_MESSAGE_BODY_MAX_BYTES, CHAT_LAST_MESSAGE_BODY_MAX_BYTES, CHAT_SETTINGS_BODY_MAX_BYTES, BOT_WALLET_CLAIM_POLL_MS, BOT_WALLET_IDLE_CLAIM_POLL_MS, CHAT_MAX_TEXT_CHARS = 2048, CHAT_MAX_REACTIONS = 2, CHAT_PAIR_CACHE_LIMIT = 256, SEARCH_DEBOUNCE_MS = 300, SEARCH_USERNAME_LIMIT = 15, SEARCH_ROLE_LIMIT = 15, RECENT_PEER_REFRESH_LIMIT = 50, RECENT_PEER_REFRESH_DELAY_MS = 250, RECENT_PEER_REFRESH_INTERVAL_MS, RECENT_PEER_REFRESH_THROTTLE_MS = 120, BAN_REFRESH_GRACE_MS = 50, REQUEST_MONEY_MAX_SATS, WALLET_TRANSFER_POLL_MS, WALLET_ACTIVE_TRANSFER_REFRESH_MS, WALLET_IDLE_ACTIVE_TRANSFER_REFRESH_MS, WALLET_VISIBLE_TRANSFER_DISCOVERY_WINDOW_MS, WALLET_ACTIVE_TRANSFER_EMPTY_SCAN_LIMIT = 8, WALLET_CACHE_HYDRATE_DELAY_MS = 0, WALLET_BOOT_REFRESH_DELAY_MS = 500, WALLET_BOOT_CACHED_REFRESH_DELAY_MS = 2500, WALLET_REGTEST_DEPOSIT_CLAIM_POLL_MS, WALLET_MAINNET_DEPOSIT_CLAIM_POLL_MS, WALLET_BALANCE_EVENT_COALESCE_MS, WALLET_INCOMING_UPDATE_COALESCE_MS = 250, WALLET_AUTO_CLAIM_MAX_FEE_SATS = 5000, WALLET_CLAIM_PAGE_SIZE = 100, WALLET_PENDING_TRANSFER_CLAIM_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_STATUS_BATCH_SIZE = 2, WALLET_PENDING_TRANSFER_COLD_REFRESH_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_COLD_REFRESH_INTERVAL_MS, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_QUEUE = 3, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_QUEUE = 10, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_SIZE = 2, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_SIZE = 3, WALLET_PENDING_TRANSFER_SLOW_CLAIM_MS, WALLET_PENDING_TRANSFER_CLAIM_COOLDOWN_MS, WALLET_SDK_BACKGROUND_QUIET_MS, WALLET_RECENT_TRANSFER_LIMIT = 100, WALLET_TRANSFER_CACHE_LIMIT = 1e4, WALLET_TRANSFER_PAGE_LIMIT = 100, WALLET_TRANSFER_FETCH_THROTTLE_MS = 150, WALLET_PENDING_TRANSFER_CLAIM_RETRY_MS, WALLET_SENT_TRANSFER_REFRESH_DELAY_MS, WALLET_PENDING_TRANSFER_BOOT_GRACE_MS, WALLET_PENDING_TRANSFER_HOT_AGE_MS, WALLET_PENDING_TRANSFER_WARM_AGE_MS, WALLET_PENDING_TRANSFER_WARM_RETRY_MS, WALLET_PENDING_TRANSFER_STALE_RETRY_MS, WALLET_PENDING_TRANSFER_STUCK_RETRY_MS, WALLET_PENDING_TRANSFER_DORMANT_RETRY_MS, WALLET_TRANSFER_CACHE_WRITE_DELAY_MS;
6407
+ var MS_PER_SECOND = 1000, MINUTE_MS, HOUR_MS, DAY_MS, KIB_BYTES = 1024, MIB_BYTES, SATS_PER_BITCOIN = 100000000n, USERNAME_MAX_CHARS = 12, PASSWORD_MIN_CHARS = 12, PASSWORD_MAX_CHARS = 64, PASSWORD_MAX_BYTES, AUTOLOCK_MIN_MINUTES = 1, AUTOLOCK_MAX_MINUTES = 60, LOCAL_CACHE_WRITE_DELAY_MS = 350, LOCAL_MEDIA_CACHE_MAX_BYTES, LOCAL_MEDIA_CACHE_MAX_ITEMS = 1000, LOCAL_MEDIA_ACCESS_TOUCH_MIN_MS, LOCAL_PROFILE_CACHE_MAX_ITEMS = 500, LOCAL_PROFILE_CACHE_MAX_AGE_MS, LOCAL_CHAT_CACHE_MAX_ITEMS = 1000, LOCAL_CHAT_MESSAGE_CACHE_MAX_VISIBLE = 1000, LOCAL_CHAT_MESSAGE_CACHE_WRITE_DELAY_MS = 2500, LOCAL_AVATAR_CACHE_MAX_BYTES, LOCAL_AVATAR_CACHE_MAX_AGE_MS, AVATAR_IMAGE_MAX_BYTES, CHAT_READY_DOWNLOAD_MAX_BYTES, CHAT_MESSAGE_FILE_CACHE_MAX_BYTES, IDLE_CALLBACK_MIN_TIMEOUT_MS = 50, ATTACHMENT_CACHE_IDLE_TIMEOUT_MS = 2500, ATTACHMENT_CACHE_FALLBACK_DELAY_MS = 250, CHAT_UNSAVED_TTL_DAYS = 21, CHAT_UNSAVED_TTL_MS, CHAT_AFTER_SEEN_MS, CHAT_MEDIA_TTL_DAYS, CHAT_MEDIA_TTL_MS, CHAT_UPLOAD_MAX_BYTES, CHAT_AUDIO_TRANSCODE_BITRATE_BPS = 128000, CHAT_VIDEO_TRANSCODE_VIDEO_BITRATE_BPS = 3000000, CHAT_VIDEO_TRANSCODE_AUDIO_BITRATE_BPS, CHAT_MESSAGE_BATCH_SIZE = 40, CHAT_MESSAGE_QUERY_MAX_DOCS = 120, CHAT_TTL_CLIENT_DELETE_GRACE_MS, CHAT_TTL_DELETE_CHUNK_SIZE = 40, CHAT_DELETE_SCAN_BATCH_SIZE = 200, CHAT_TTL_WRITE_BATCH_SIZE = 400, CHAT_DELETE_WRITE_BATCH_SIZE = 400, CHAT_BATCH_CLEANUP_IDLE_TIMEOUT_MS = 1500, CHAT_BATCH_CLEANUP_IDLE_DELAY_MS = 250, CHAT_LIST_PAGE_SIZE = 20, CHAT_LIST_LIVE_COUNT, CHAT_INBOX_PING_PAGE_SIZE = 25, CHAT_LIST_CACHE_WRITE_DELAY_MS = 1500, CHAT_LIST_SNAPSHOT_COALESCE_MS = 80, CHAT_LIST_STATUS_CACHE_MS, CHAT_LIST_LISTENER_RETRY_MS = 1000, CHAT_TOP_WARM_COUNT = 0, CHAT_EAGER_WARM_COUNT = 0, CHAT_WARM_DELAY_MS = 3000, CHAT_WARM_BATCH_SIZE, CHAT_MESSAGE_VIEW_CACHE_SIZE = 30, CHAT_MEDIA_WARM_MESSAGES_PER_CHAT, CHAT_MEDIA_WARM_START_DELAY_MS = 600, CHAT_MEDIA_WARM_STEP_DELAY_MS = 120, CHAT_MEDIA_WARM_TYPES, CHAT_MEDIA_WARM_MAX_BYTES = 0, CHAT_READ_WRITE_INTERVAL_MS, CHAT_SEND_QUEUE_RATE_LIMIT_COUNT = 12, CHAT_SEND_QUEUE_RATE_LIMIT_WINDOW_MS, CHAT_MESSAGE_BODY_MAX_BYTES, CHAT_LAST_MESSAGE_BODY_MAX_BYTES, CHAT_SETTINGS_BODY_MAX_BYTES, BOT_WALLET_CLAIM_POLL_MS, BOT_WALLET_IDLE_CLAIM_POLL_MS, CHAT_MAX_TEXT_CHARS = 2048, CHAT_MAX_REACTIONS = 2, CHAT_PAIR_CACHE_LIMIT = 256, SEARCH_DEBOUNCE_MS = 300, SEARCH_USERNAME_LIMIT = 15, SEARCH_ROLE_LIMIT = 15, RECENT_PEER_REFRESH_LIMIT = 50, RECENT_PEER_REFRESH_DELAY_MS = 250, RECENT_PEER_REFRESH_INTERVAL_MS, RECENT_PEER_REFRESH_THROTTLE_MS = 120, BAN_REFRESH_GRACE_MS = 50, REQUEST_MONEY_MAX_SATS, WALLET_TRANSFER_POLL_MS, WALLET_ACTIVE_TRANSFER_REFRESH_MS, WALLET_IDLE_ACTIVE_TRANSFER_REFRESH_MS, WALLET_VISIBLE_TRANSFER_DISCOVERY_WINDOW_MS, WALLET_ACTIVE_TRANSFER_EMPTY_SCAN_LIMIT = 8, WALLET_CACHE_HYDRATE_DELAY_MS = 0, WALLET_BOOT_REFRESH_DELAY_MS = 500, WALLET_BOOT_CACHED_REFRESH_DELAY_MS = 2500, WALLET_REGTEST_DEPOSIT_CLAIM_POLL_MS, WALLET_MAINNET_DEPOSIT_CLAIM_POLL_MS, WALLET_BALANCE_EVENT_COALESCE_MS, WALLET_INCOMING_UPDATE_COALESCE_MS = 250, WALLET_AUTO_CLAIM_MAX_FEE_SATS = 5000, WALLET_CLAIM_PAGE_SIZE = 100, WALLET_PENDING_TRANSFER_CLAIM_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_STATUS_BATCH_SIZE = 2, WALLET_PENDING_TRANSFER_COLD_REFRESH_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_COLD_REFRESH_INTERVAL_MS, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_QUEUE = 3, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_QUEUE = 10, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_SIZE = 2, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_SIZE = 3, WALLET_PENDING_TRANSFER_SLOW_CLAIM_MS, WALLET_PENDING_TRANSFER_CLAIM_COOLDOWN_MS, WALLET_SDK_BACKGROUND_QUIET_MS, WALLET_RECENT_TRANSFER_LIMIT = 100, WALLET_TRANSFER_CACHE_LIMIT = 1e4, WALLET_TRANSFER_PAGE_LIMIT = 100, WALLET_TRANSFER_FETCH_THROTTLE_MS = 150, WALLET_PENDING_TRANSFER_CLAIM_RETRY_MS, WALLET_SENT_TRANSFER_REFRESH_DELAY_MS, WALLET_PENDING_TRANSFER_BOOT_GRACE_MS, WALLET_PENDING_TRANSFER_HOT_AGE_MS, WALLET_PENDING_TRANSFER_WARM_AGE_MS, WALLET_PENDING_TRANSFER_WARM_RETRY_MS, WALLET_PENDING_TRANSFER_STALE_RETRY_MS, WALLET_PENDING_TRANSFER_STUCK_RETRY_MS, WALLET_PENDING_TRANSFER_DORMANT_RETRY_MS, WALLET_TRANSFER_CACHE_WRITE_DELAY_MS;
6408
6408
  var init_config = __esm(() => {
6409
6409
  MINUTE_MS = 60 * MS_PER_SECOND;
6410
6410
  HOUR_MS = 60 * MINUTE_MS;
6411
6411
  DAY_MS = 24 * HOUR_MS;
6412
6412
  MIB_BYTES = 1024 * 1024;
6413
+ PASSWORD_MAX_BYTES = 4 * 1024;
6413
6414
  LOCAL_MEDIA_CACHE_MAX_BYTES = 512 * MIB_BYTES;
6414
6415
  LOCAL_MEDIA_ACCESS_TOUCH_MIN_MS = MINUTE_MS;
6415
6416
  LOCAL_PROFILE_CACHE_MAX_AGE_MS = 30 * DAY_MS;
@@ -6472,9 +6473,10 @@ var init_password = __esm(() => {
6472
6473
  MIN_PASSWORD = PASSWORD_MIN_CHARS;
6473
6474
  MAX_PASSWORD = PASSWORD_MAX_CHARS;
6474
6475
  rules = [
6475
- `Use ${MIN_PASSWORD} to ${MAX_PASSWORD} characters.`,
6476
- "Most visible letters, numbers, symbols, and emoji are allowed.",
6477
- "Spaces are allowed, but tabs, newlines, and other invisible or control characters are not."
6476
+ `use ${MIN_PASSWORD} to ${MAX_PASSWORD} visible characters; emoji sequences count as one`,
6477
+ "common passwords, names, dates, repeats, sequences, and predictable substitutions are rejected",
6478
+ "most visible letters, numbers, symbols, spaces, and emoji are allowed",
6479
+ "tabs, newlines, and other invisible or control characters are not allowed"
6478
6480
  ];
6479
6481
  });
6480
6482
 
@@ -6488,7 +6490,14 @@ var init_money = __esm(() => {
6488
6490
  });
6489
6491
 
6490
6492
  // ../../core/origins.js
6491
- var ROOT_DOMAIN = "glyphteck.com", domains, origins, appDomains, appLinkDomains;
6493
+ function getVeylDevWebOrigin(port) {
6494
+ const value = Number(port);
6495
+ if (!Number.isInteger(value) || value < VEYL_DEV_WEB_PORT_MIN || value > VEYL_DEV_WEB_PORT_MAX) {
6496
+ throw new Error(`Invalid Veyl development web port: ${port}`);
6497
+ }
6498
+ return `https://${domains.veylDev}:${value}`;
6499
+ }
6500
+ var ROOT_DOMAIN = "glyphteck.com", VEYL_DEV_WEB_PORT_MIN = 3000, VEYL_DEV_WEB_PORT_MAX = 3015, domains, veylDevWebOrigins, origins, appDomains, appLinkDomains;
6492
6501
  var init_origins = __esm(() => {
6493
6502
  domains = Object.freeze({
6494
6503
  root: ROOT_DOMAIN,
@@ -6496,13 +6505,13 @@ var init_origins = __esm(() => {
6496
6505
  veyl: `veyl.${ROOT_DOMAIN}`,
6497
6506
  veylDev: `dev.veyl.${ROOT_DOMAIN}`
6498
6507
  });
6508
+ veylDevWebOrigins = Object.freeze(Array.from({ length: VEYL_DEV_WEB_PORT_MAX - VEYL_DEV_WEB_PORT_MIN + 1 }, (_, index) => getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN + index)));
6499
6509
  origins = Object.freeze({
6500
6510
  root: `https://${domains.root}`,
6501
6511
  rootDev: `https://${domains.rootDev}`,
6502
6512
  veyl: `https://${domains.veyl}`,
6503
6513
  veylDev: `https://${domains.veylDev}`,
6504
- veylDevWeb: `https://${domains.veylDev}:3000`,
6505
- veylDevFeatureWeb: `https://${domains.veylDev}:3001`
6514
+ veylDevWeb: getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN)
6506
6515
  });
6507
6516
  appDomains = Object.freeze([
6508
6517
  domains.veyl
@@ -31664,7 +31673,6 @@ var init_links = __esm(() => {
31664
31673
  veyl: origins.veyl,
31665
31674
  veylDev: origins.veylDev,
31666
31675
  veylDevWeb: origins.veylDevWeb,
31667
- veylDevFeatureWeb: origins.veylDevFeatureWeb,
31668
31676
  terms: `${origins.veyl}/legal#terms`,
31669
31677
  communityRules: `${origins.veyl}/community-rules`,
31670
31678
  contact: `mailto:contact@${ROOT_DOMAIN}`,
@@ -31680,8 +31688,7 @@ var init_links = __esm(() => {
31680
31688
  ]);
31681
31689
  devPasskeyOrigins = Object.freeze([
31682
31690
  origins.veylDev,
31683
- origins.veylDevWeb,
31684
- origins.veylDevFeatureWeb
31691
+ ...veylDevWebOrigins
31685
31692
  ]);
31686
31693
  allowedPasskeyOrigins = Object.freeze([
31687
31694
  ...prodPasskeyOrigins,
@@ -31692,8 +31699,7 @@ var init_links = __esm(() => {
31692
31699
  ]);
31693
31700
  devStorageCorsOrigins = Object.freeze([
31694
31701
  origins.veylDev,
31695
- origins.veylDevWeb,
31696
- origins.veylDevFeatureWeb
31702
+ ...veylDevWebOrigins
31697
31703
  ]);
31698
31704
  webApps = Object.freeze({
31699
31705
  veyl: Object.freeze({
@@ -41126,7 +41132,7 @@ var package_default;
41126
41132
  var init_package = __esm(() => {
41127
41133
  package_default = {
41128
41134
  name: "veyl",
41129
- version: "0.55.1",
41135
+ version: "0.56.0",
41130
41136
  private: true,
41131
41137
  license: "UNLICENSED",
41132
41138
  workspaces: {
package/dist/index.js CHANGED
@@ -6403,12 +6403,13 @@ var init_notifications = __esm(() => {
6403
6403
  });
6404
6404
 
6405
6405
  // ../../core/config.js
6406
- var MS_PER_SECOND = 1000, MINUTE_MS, HOUR_MS, DAY_MS, KIB_BYTES = 1024, MIB_BYTES, SATS_PER_BITCOIN = 100000000n, USERNAME_MAX_CHARS = 12, PASSWORD_MIN_CHARS = 12, PASSWORD_MAX_CHARS = 64, AUTOLOCK_MIN_MINUTES = 1, AUTOLOCK_MAX_MINUTES = 60, LOCAL_CACHE_WRITE_DELAY_MS = 350, LOCAL_MEDIA_CACHE_MAX_BYTES, LOCAL_MEDIA_CACHE_MAX_ITEMS = 1000, LOCAL_MEDIA_ACCESS_TOUCH_MIN_MS, LOCAL_PROFILE_CACHE_MAX_ITEMS = 500, LOCAL_PROFILE_CACHE_MAX_AGE_MS, LOCAL_CHAT_CACHE_MAX_ITEMS = 1000, LOCAL_CHAT_MESSAGE_CACHE_MAX_VISIBLE = 1000, LOCAL_CHAT_MESSAGE_CACHE_WRITE_DELAY_MS = 2500, LOCAL_AVATAR_CACHE_MAX_BYTES, LOCAL_AVATAR_CACHE_MAX_AGE_MS, AVATAR_IMAGE_MAX_BYTES, CHAT_READY_DOWNLOAD_MAX_BYTES, CHAT_MESSAGE_FILE_CACHE_MAX_BYTES, IDLE_CALLBACK_MIN_TIMEOUT_MS = 50, ATTACHMENT_CACHE_IDLE_TIMEOUT_MS = 2500, ATTACHMENT_CACHE_FALLBACK_DELAY_MS = 250, CHAT_UNSAVED_TTL_DAYS = 21, CHAT_UNSAVED_TTL_MS, CHAT_AFTER_SEEN_MS, CHAT_MEDIA_TTL_DAYS, CHAT_MEDIA_TTL_MS, CHAT_UPLOAD_MAX_BYTES, CHAT_AUDIO_TRANSCODE_BITRATE_BPS = 128000, CHAT_VIDEO_TRANSCODE_VIDEO_BITRATE_BPS = 3000000, CHAT_VIDEO_TRANSCODE_AUDIO_BITRATE_BPS, CHAT_MESSAGE_BATCH_SIZE = 40, CHAT_MESSAGE_QUERY_MAX_DOCS = 120, CHAT_TTL_CLIENT_DELETE_GRACE_MS, CHAT_TTL_DELETE_CHUNK_SIZE = 40, CHAT_DELETE_SCAN_BATCH_SIZE = 200, CHAT_TTL_WRITE_BATCH_SIZE = 400, CHAT_DELETE_WRITE_BATCH_SIZE = 400, CHAT_BATCH_CLEANUP_IDLE_TIMEOUT_MS = 1500, CHAT_BATCH_CLEANUP_IDLE_DELAY_MS = 250, CHAT_LIST_PAGE_SIZE = 20, CHAT_LIST_LIVE_COUNT, CHAT_INBOX_PING_PAGE_SIZE = 25, CHAT_LIST_CACHE_WRITE_DELAY_MS = 1500, CHAT_LIST_SNAPSHOT_COALESCE_MS = 80, CHAT_LIST_STATUS_CACHE_MS, CHAT_LIST_LISTENER_RETRY_MS = 1000, CHAT_TOP_WARM_COUNT = 0, CHAT_EAGER_WARM_COUNT = 0, CHAT_WARM_DELAY_MS = 3000, CHAT_WARM_BATCH_SIZE, CHAT_MESSAGE_VIEW_CACHE_SIZE = 30, CHAT_MEDIA_WARM_MESSAGES_PER_CHAT, CHAT_MEDIA_WARM_START_DELAY_MS = 600, CHAT_MEDIA_WARM_STEP_DELAY_MS = 120, CHAT_MEDIA_WARM_TYPES, CHAT_MEDIA_WARM_MAX_BYTES = 0, CHAT_READ_WRITE_INTERVAL_MS, CHAT_SEND_QUEUE_RATE_LIMIT_COUNT = 12, CHAT_SEND_QUEUE_RATE_LIMIT_WINDOW_MS, CHAT_MESSAGE_BODY_MAX_BYTES, CHAT_LAST_MESSAGE_BODY_MAX_BYTES, CHAT_SETTINGS_BODY_MAX_BYTES, BOT_WALLET_CLAIM_POLL_MS, BOT_WALLET_IDLE_CLAIM_POLL_MS, CHAT_MAX_TEXT_CHARS = 2048, CHAT_MAX_REACTIONS = 2, CHAT_PAIR_CACHE_LIMIT = 256, SEARCH_DEBOUNCE_MS = 300, SEARCH_USERNAME_LIMIT = 15, SEARCH_ROLE_LIMIT = 15, RECENT_PEER_REFRESH_LIMIT = 50, RECENT_PEER_REFRESH_DELAY_MS = 250, RECENT_PEER_REFRESH_INTERVAL_MS, RECENT_PEER_REFRESH_THROTTLE_MS = 120, BAN_REFRESH_GRACE_MS = 50, REQUEST_MONEY_MAX_SATS, WALLET_TRANSFER_POLL_MS, WALLET_ACTIVE_TRANSFER_REFRESH_MS, WALLET_IDLE_ACTIVE_TRANSFER_REFRESH_MS, WALLET_VISIBLE_TRANSFER_DISCOVERY_WINDOW_MS, WALLET_ACTIVE_TRANSFER_EMPTY_SCAN_LIMIT = 8, WALLET_CACHE_HYDRATE_DELAY_MS = 0, WALLET_BOOT_REFRESH_DELAY_MS = 500, WALLET_BOOT_CACHED_REFRESH_DELAY_MS = 2500, WALLET_REGTEST_DEPOSIT_CLAIM_POLL_MS, WALLET_MAINNET_DEPOSIT_CLAIM_POLL_MS, WALLET_BALANCE_EVENT_COALESCE_MS, WALLET_INCOMING_UPDATE_COALESCE_MS = 250, WALLET_AUTO_CLAIM_MAX_FEE_SATS = 5000, WALLET_CLAIM_PAGE_SIZE = 100, WALLET_PENDING_TRANSFER_CLAIM_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_STATUS_BATCH_SIZE = 2, WALLET_PENDING_TRANSFER_COLD_REFRESH_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_COLD_REFRESH_INTERVAL_MS, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_QUEUE = 3, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_QUEUE = 10, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_SIZE = 2, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_SIZE = 3, WALLET_PENDING_TRANSFER_SLOW_CLAIM_MS, WALLET_PENDING_TRANSFER_CLAIM_COOLDOWN_MS, WALLET_SDK_BACKGROUND_QUIET_MS, WALLET_RECENT_TRANSFER_LIMIT = 100, WALLET_TRANSFER_CACHE_LIMIT = 1e4, WALLET_TRANSFER_PAGE_LIMIT = 100, WALLET_TRANSFER_FETCH_THROTTLE_MS = 150, WALLET_PENDING_TRANSFER_CLAIM_RETRY_MS, WALLET_SENT_TRANSFER_REFRESH_DELAY_MS, WALLET_PENDING_TRANSFER_BOOT_GRACE_MS, WALLET_PENDING_TRANSFER_HOT_AGE_MS, WALLET_PENDING_TRANSFER_WARM_AGE_MS, WALLET_PENDING_TRANSFER_WARM_RETRY_MS, WALLET_PENDING_TRANSFER_STALE_RETRY_MS, WALLET_PENDING_TRANSFER_STUCK_RETRY_MS, WALLET_PENDING_TRANSFER_DORMANT_RETRY_MS, WALLET_TRANSFER_CACHE_WRITE_DELAY_MS;
6406
+ var MS_PER_SECOND = 1000, MINUTE_MS, HOUR_MS, DAY_MS, KIB_BYTES = 1024, MIB_BYTES, SATS_PER_BITCOIN = 100000000n, USERNAME_MAX_CHARS = 12, PASSWORD_MIN_CHARS = 12, PASSWORD_MAX_CHARS = 64, PASSWORD_MAX_BYTES, AUTOLOCK_MIN_MINUTES = 1, AUTOLOCK_MAX_MINUTES = 60, LOCAL_CACHE_WRITE_DELAY_MS = 350, LOCAL_MEDIA_CACHE_MAX_BYTES, LOCAL_MEDIA_CACHE_MAX_ITEMS = 1000, LOCAL_MEDIA_ACCESS_TOUCH_MIN_MS, LOCAL_PROFILE_CACHE_MAX_ITEMS = 500, LOCAL_PROFILE_CACHE_MAX_AGE_MS, LOCAL_CHAT_CACHE_MAX_ITEMS = 1000, LOCAL_CHAT_MESSAGE_CACHE_MAX_VISIBLE = 1000, LOCAL_CHAT_MESSAGE_CACHE_WRITE_DELAY_MS = 2500, LOCAL_AVATAR_CACHE_MAX_BYTES, LOCAL_AVATAR_CACHE_MAX_AGE_MS, AVATAR_IMAGE_MAX_BYTES, CHAT_READY_DOWNLOAD_MAX_BYTES, CHAT_MESSAGE_FILE_CACHE_MAX_BYTES, IDLE_CALLBACK_MIN_TIMEOUT_MS = 50, ATTACHMENT_CACHE_IDLE_TIMEOUT_MS = 2500, ATTACHMENT_CACHE_FALLBACK_DELAY_MS = 250, CHAT_UNSAVED_TTL_DAYS = 21, CHAT_UNSAVED_TTL_MS, CHAT_AFTER_SEEN_MS, CHAT_MEDIA_TTL_DAYS, CHAT_MEDIA_TTL_MS, CHAT_UPLOAD_MAX_BYTES, CHAT_AUDIO_TRANSCODE_BITRATE_BPS = 128000, CHAT_VIDEO_TRANSCODE_VIDEO_BITRATE_BPS = 3000000, CHAT_VIDEO_TRANSCODE_AUDIO_BITRATE_BPS, CHAT_MESSAGE_BATCH_SIZE = 40, CHAT_MESSAGE_QUERY_MAX_DOCS = 120, CHAT_TTL_CLIENT_DELETE_GRACE_MS, CHAT_TTL_DELETE_CHUNK_SIZE = 40, CHAT_DELETE_SCAN_BATCH_SIZE = 200, CHAT_TTL_WRITE_BATCH_SIZE = 400, CHAT_DELETE_WRITE_BATCH_SIZE = 400, CHAT_BATCH_CLEANUP_IDLE_TIMEOUT_MS = 1500, CHAT_BATCH_CLEANUP_IDLE_DELAY_MS = 250, CHAT_LIST_PAGE_SIZE = 20, CHAT_LIST_LIVE_COUNT, CHAT_INBOX_PING_PAGE_SIZE = 25, CHAT_LIST_CACHE_WRITE_DELAY_MS = 1500, CHAT_LIST_SNAPSHOT_COALESCE_MS = 80, CHAT_LIST_STATUS_CACHE_MS, CHAT_LIST_LISTENER_RETRY_MS = 1000, CHAT_TOP_WARM_COUNT = 0, CHAT_EAGER_WARM_COUNT = 0, CHAT_WARM_DELAY_MS = 3000, CHAT_WARM_BATCH_SIZE, CHAT_MESSAGE_VIEW_CACHE_SIZE = 30, CHAT_MEDIA_WARM_MESSAGES_PER_CHAT, CHAT_MEDIA_WARM_START_DELAY_MS = 600, CHAT_MEDIA_WARM_STEP_DELAY_MS = 120, CHAT_MEDIA_WARM_TYPES, CHAT_MEDIA_WARM_MAX_BYTES = 0, CHAT_READ_WRITE_INTERVAL_MS, CHAT_SEND_QUEUE_RATE_LIMIT_COUNT = 12, CHAT_SEND_QUEUE_RATE_LIMIT_WINDOW_MS, CHAT_MESSAGE_BODY_MAX_BYTES, CHAT_LAST_MESSAGE_BODY_MAX_BYTES, CHAT_SETTINGS_BODY_MAX_BYTES, BOT_WALLET_CLAIM_POLL_MS, BOT_WALLET_IDLE_CLAIM_POLL_MS, CHAT_MAX_TEXT_CHARS = 2048, CHAT_MAX_REACTIONS = 2, CHAT_PAIR_CACHE_LIMIT = 256, SEARCH_DEBOUNCE_MS = 300, SEARCH_USERNAME_LIMIT = 15, SEARCH_ROLE_LIMIT = 15, RECENT_PEER_REFRESH_LIMIT = 50, RECENT_PEER_REFRESH_DELAY_MS = 250, RECENT_PEER_REFRESH_INTERVAL_MS, RECENT_PEER_REFRESH_THROTTLE_MS = 120, BAN_REFRESH_GRACE_MS = 50, REQUEST_MONEY_MAX_SATS, WALLET_TRANSFER_POLL_MS, WALLET_ACTIVE_TRANSFER_REFRESH_MS, WALLET_IDLE_ACTIVE_TRANSFER_REFRESH_MS, WALLET_VISIBLE_TRANSFER_DISCOVERY_WINDOW_MS, WALLET_ACTIVE_TRANSFER_EMPTY_SCAN_LIMIT = 8, WALLET_CACHE_HYDRATE_DELAY_MS = 0, WALLET_BOOT_REFRESH_DELAY_MS = 500, WALLET_BOOT_CACHED_REFRESH_DELAY_MS = 2500, WALLET_REGTEST_DEPOSIT_CLAIM_POLL_MS, WALLET_MAINNET_DEPOSIT_CLAIM_POLL_MS, WALLET_BALANCE_EVENT_COALESCE_MS, WALLET_INCOMING_UPDATE_COALESCE_MS = 250, WALLET_AUTO_CLAIM_MAX_FEE_SATS = 5000, WALLET_CLAIM_PAGE_SIZE = 100, WALLET_PENDING_TRANSFER_CLAIM_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_STATUS_BATCH_SIZE = 2, WALLET_PENDING_TRANSFER_COLD_REFRESH_BATCH_SIZE = 50, WALLET_PENDING_TRANSFER_COLD_REFRESH_INTERVAL_MS, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_QUEUE = 3, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_QUEUE = 10, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_SMALL_SIZE = 2, WALLET_PENDING_TRANSFER_ADAPTIVE_BATCH_LARGE_SIZE = 3, WALLET_PENDING_TRANSFER_SLOW_CLAIM_MS, WALLET_PENDING_TRANSFER_CLAIM_COOLDOWN_MS, WALLET_SDK_BACKGROUND_QUIET_MS, WALLET_RECENT_TRANSFER_LIMIT = 100, WALLET_TRANSFER_CACHE_LIMIT = 1e4, WALLET_TRANSFER_PAGE_LIMIT = 100, WALLET_TRANSFER_FETCH_THROTTLE_MS = 150, WALLET_PENDING_TRANSFER_CLAIM_RETRY_MS, WALLET_SENT_TRANSFER_REFRESH_DELAY_MS, WALLET_PENDING_TRANSFER_BOOT_GRACE_MS, WALLET_PENDING_TRANSFER_HOT_AGE_MS, WALLET_PENDING_TRANSFER_WARM_AGE_MS, WALLET_PENDING_TRANSFER_WARM_RETRY_MS, WALLET_PENDING_TRANSFER_STALE_RETRY_MS, WALLET_PENDING_TRANSFER_STUCK_RETRY_MS, WALLET_PENDING_TRANSFER_DORMANT_RETRY_MS, WALLET_TRANSFER_CACHE_WRITE_DELAY_MS;
6407
6407
  var init_config = __esm(() => {
6408
6408
  MINUTE_MS = 60 * MS_PER_SECOND;
6409
6409
  HOUR_MS = 60 * MINUTE_MS;
6410
6410
  DAY_MS = 24 * HOUR_MS;
6411
6411
  MIB_BYTES = 1024 * 1024;
6412
+ PASSWORD_MAX_BYTES = 4 * 1024;
6412
6413
  LOCAL_MEDIA_CACHE_MAX_BYTES = 512 * MIB_BYTES;
6413
6414
  LOCAL_MEDIA_ACCESS_TOUCH_MIN_MS = MINUTE_MS;
6414
6415
  LOCAL_PROFILE_CACHE_MAX_AGE_MS = 30 * DAY_MS;
@@ -6471,9 +6472,10 @@ var init_password = __esm(() => {
6471
6472
  MIN_PASSWORD = PASSWORD_MIN_CHARS;
6472
6473
  MAX_PASSWORD = PASSWORD_MAX_CHARS;
6473
6474
  rules = [
6474
- `Use ${MIN_PASSWORD} to ${MAX_PASSWORD} characters.`,
6475
- "Most visible letters, numbers, symbols, and emoji are allowed.",
6476
- "Spaces are allowed, but tabs, newlines, and other invisible or control characters are not."
6475
+ `use ${MIN_PASSWORD} to ${MAX_PASSWORD} visible characters; emoji sequences count as one`,
6476
+ "common passwords, names, dates, repeats, sequences, and predictable substitutions are rejected",
6477
+ "most visible letters, numbers, symbols, spaces, and emoji are allowed",
6478
+ "tabs, newlines, and other invisible or control characters are not allowed"
6477
6479
  ];
6478
6480
  });
6479
6481
 
@@ -6487,7 +6489,14 @@ var init_money = __esm(() => {
6487
6489
  });
6488
6490
 
6489
6491
  // ../../core/origins.js
6490
- var ROOT_DOMAIN = "glyphteck.com", domains, origins, appDomains, appLinkDomains;
6492
+ function getVeylDevWebOrigin(port) {
6493
+ const value = Number(port);
6494
+ if (!Number.isInteger(value) || value < VEYL_DEV_WEB_PORT_MIN || value > VEYL_DEV_WEB_PORT_MAX) {
6495
+ throw new Error(`Invalid Veyl development web port: ${port}`);
6496
+ }
6497
+ return `https://${domains.veylDev}:${value}`;
6498
+ }
6499
+ var ROOT_DOMAIN = "glyphteck.com", VEYL_DEV_WEB_PORT_MIN = 3000, VEYL_DEV_WEB_PORT_MAX = 3015, domains, veylDevWebOrigins, origins, appDomains, appLinkDomains;
6491
6500
  var init_origins = __esm(() => {
6492
6501
  domains = Object.freeze({
6493
6502
  root: ROOT_DOMAIN,
@@ -6495,13 +6504,13 @@ var init_origins = __esm(() => {
6495
6504
  veyl: `veyl.${ROOT_DOMAIN}`,
6496
6505
  veylDev: `dev.veyl.${ROOT_DOMAIN}`
6497
6506
  });
6507
+ veylDevWebOrigins = Object.freeze(Array.from({ length: VEYL_DEV_WEB_PORT_MAX - VEYL_DEV_WEB_PORT_MIN + 1 }, (_, index) => getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN + index)));
6498
6508
  origins = Object.freeze({
6499
6509
  root: `https://${domains.root}`,
6500
6510
  rootDev: `https://${domains.rootDev}`,
6501
6511
  veyl: `https://${domains.veyl}`,
6502
6512
  veylDev: `https://${domains.veylDev}`,
6503
- veylDevWeb: `https://${domains.veylDev}:3000`,
6504
- veylDevFeatureWeb: `https://${domains.veylDev}:3001`
6513
+ veylDevWeb: getVeylDevWebOrigin(VEYL_DEV_WEB_PORT_MIN)
6505
6514
  });
6506
6515
  appDomains = Object.freeze([
6507
6516
  domains.veyl
@@ -31663,7 +31672,6 @@ var init_links = __esm(() => {
31663
31672
  veyl: origins.veyl,
31664
31673
  veylDev: origins.veylDev,
31665
31674
  veylDevWeb: origins.veylDevWeb,
31666
- veylDevFeatureWeb: origins.veylDevFeatureWeb,
31667
31675
  terms: `${origins.veyl}/legal#terms`,
31668
31676
  communityRules: `${origins.veyl}/community-rules`,
31669
31677
  contact: `mailto:contact@${ROOT_DOMAIN}`,
@@ -31679,8 +31687,7 @@ var init_links = __esm(() => {
31679
31687
  ]);
31680
31688
  devPasskeyOrigins = Object.freeze([
31681
31689
  origins.veylDev,
31682
- origins.veylDevWeb,
31683
- origins.veylDevFeatureWeb
31690
+ ...veylDevWebOrigins
31684
31691
  ]);
31685
31692
  allowedPasskeyOrigins = Object.freeze([
31686
31693
  ...prodPasskeyOrigins,
@@ -31691,8 +31698,7 @@ var init_links = __esm(() => {
31691
31698
  ]);
31692
31699
  devStorageCorsOrigins = Object.freeze([
31693
31700
  origins.veylDev,
31694
- origins.veylDevWeb,
31695
- origins.veylDevFeatureWeb
31701
+ ...veylDevWebOrigins
31696
31702
  ]);
31697
31703
  webApps = Object.freeze({
31698
31704
  veyl: Object.freeze({
@@ -41125,7 +41131,7 @@ var package_default;
41125
41131
  var init_package = __esm(() => {
41126
41132
  package_default = {
41127
41133
  name: "veyl",
41128
- version: "0.55.1",
41134
+ version: "0.56.0",
41129
41135
  private: true,
41130
41136
  license: "UNLICENSED",
41131
41137
  workspaces: {
package/package.json CHANGED
@@ -41,5 +41,5 @@
41
41
  "start": "node src/cli.js",
42
42
  "lint": "eslint src --quiet"
43
43
  },
44
- "version": "0.55.1"
44
+ "version": "0.56.0"
45
45
  }