{"_id":"@aimf/edge","_rev":"2-518437630426e1da901d5b10d0c2a313","name":"@aimf/edge","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@aimf/edge","version":"0.1.0","_id":"@aimf/edge@0.1.0","maintainers":[{"name":"vetriselvans","email":"vetriselvans029@gmail.com"}],"dist":{"shasum":"4cadc3d1c781f658debd7fb8a0a2bccda582253f","tarball":"https://registry.npmjs.org/@aimf/edge/-/edge-0.1.0.tgz","fileCount":22,"integrity":"sha512-F2pDsnxk9LakSMwsAoPkPb2bRnbaqdhYpI4jZIwQK00Rb3e3JV7rs4d2FfmltKW8ufv1BGQXv77aBz6aIf6sCQ==","signatures":[{"sig":"MEUCIQDztkv5XmSX0fgY2smi4R8IuLTmYxkR/N42crcQi0TM1AIgE3glrShGYVQkkyEUAOXCUtZAlBjzOimnQCe5E5REbBY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87276},"main":"dist/index.js","type":"module","_from":"file:aimf-edge-0.1.0.tgz","types":"dist/index.d.ts","scripts":{"lint":"eslint src/","test":"vitest run","build":"tsc","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_npmUser":{"name":"vetriselvans","email":"vetriselvans029@gmail.com"},"_resolved":"C:\\Users\\I9159~1.LAP\\AppData\\Local\\Temp\\f02f827c0b3773536e6e2eedb1f3fdc4\\aimf-edge-0.1.0.tgz","_integrity":"sha512-F2pDsnxk9LakSMwsAoPkPb2bRnbaqdhYpI4jZIwQK00Rb3e3JV7rs4d2FfmltKW8ufv1BGQXv77aBz6aIf6sCQ==","_npmVersion":"10.9.0","description":"Multi-Region Edge Distribution for AIMF","directories":{},"_nodeVersion":"22.12.0","dependencies":{"@aimf/shared":"0.1.0","@aimf/event-mesh":"0.1.0"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","vitest":"^2.1.9","typescript":"^5.7.2","@types/node":"^22.10.1"},"_npmOperationalInternal":{"tmp":"tmp/edge_0.1.0_1765129025157_0.7385556464679572","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aimf/edge","version":"0.1.1","description":"Multi-Region Edge Distribution for AIMF","type":"module","main":"dist/index.js","types":"dist/index.d.ts","dependencies":{"@aimf/shared":"0.1.1","@aimf/event-mesh":"0.1.1"},"devDependencies":{"@types/node":"^22.10.1","rimraf":"^6.0.1","typescript":"^5.7.2","vitest":"^2.1.9"},"scripts":{"build":"tsc","test":"vitest run","lint":"eslint src/","clean":"rimraf dist","typecheck":"tsc --noEmit"},"_id":"@aimf/edge@0.1.1","_integrity":"sha512-oMPxwViAIvUY2UwAFiYfHVnCGe5Q6UYtwM9EoelGuQuJa7b/4spCi3g+maonSsoOAemThiefmNX7CaJuvS/SZw==","_resolved":"C:\\Users\\I9159~1.LAP\\AppData\\Local\\Temp\\b9b780745d44c2ba74eb48dad1d102b7\\aimf-edge-0.1.1.tgz","_from":"file:aimf-edge-0.1.1.tgz","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-oMPxwViAIvUY2UwAFiYfHVnCGe5Q6UYtwM9EoelGuQuJa7b/4spCi3g+maonSsoOAemThiefmNX7CaJuvS/SZw==","shasum":"1647643d316322d84e09d589d5d5a32b0487f5ff","tarball":"https://registry.npmjs.org/@aimf/edge/-/edge-0.1.1.tgz","fileCount":22,"unpackedSize":87276,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFOS6YXHimEA5ssAJyFy5+Rqu8X405Y1irAvFqLEyd2eAiA5RO5+UGIBlPYd6HDCMTSom8o25Lo9OzUaXupzAJeE+A=="}]},"_npmUser":{"name":"vetriselvans","email":"vetriselvans029@gmail.com"},"directories":{},"maintainers":[{"name":"vetriselvans","email":"vetriselvans029@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/edge_0.1.1_1765130889804_0.9028522915456931"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-07T17:37:05.081Z","modified":"2025-12-07T18:08:10.157Z","0.1.0":"2025-12-07T17:37:05.291Z","0.1.1":"2025-12-07T18:08:09.948Z"},"description":"Multi-Region Edge Distribution for AIMF","maintainers":[{"name":"vetriselvans","email":"vetriselvans029@gmail.com"}],"readme":"# @aimf/edge\r\n\r\nMulti-Region Edge Distribution module for the AI-MCP Framework (AIMF).\r\n\r\n## Features\r\n\r\n- **Region Manager**: Register and manage geographic regions with endpoints\r\n- **Geographic Router**: Intelligent request routing with multiple strategies\r\n- **Data Replicator**: Cross-region data replication with conflict resolution\r\n- **Health Monitoring**: Automatic endpoint health checks\r\n\r\n## Installation\r\n\r\n```bash\r\npnpm add @aimf/edge\r\n```\r\n\r\n## Quick Start\r\n\r\n### Region Manager\r\n\r\n```typescript\r\nimport { createRegionManager } from \"@aimf/edge\";\r\n\r\nconst manager = createRegionManager();\r\n\r\n// Register a region\r\nmanager.registerRegion(\r\n  \"us-east-1\",\r\n  \"US East\",\r\n  {\r\n    latitude: 39.0438,\r\n    longitude: -77.4874,\r\n    country: \"United States\",\r\n    countryCode: \"US\",\r\n    continent: \"North America\",\r\n    timezone: \"America/New_York\",\r\n  },\r\n  {\r\n    supportedModels: [\"gpt-4\", \"claude-3\"],\r\n    maxConcurrency: 100,\r\n    gpuAvailable: true,\r\n    storageTypes: [\"ssd\"],\r\n    complianceRegimes: [\"gdpr\", \"soc2\"],\r\n  },\r\n  {\r\n    allowedRegions: [\"US\", \"CA\"],\r\n    replicationEnabled: true,\r\n    encryptionRequired: true,\r\n  }\r\n);\r\n\r\n// Add endpoints\r\nmanager.addEndpoint(\"us-east-1\", {\r\n  type: \"gateway\",\r\n  url: \"https://us-east-1.example.com\",\r\n  priority: 1,\r\n  weight: 100,\r\n});\r\n\r\n// Find nearest region\r\nconst nearest = manager.findNearestRegion(50.1109, 8.6821);\r\n\r\n// Start health checks\r\nmanager.startHealthChecks(30000);\r\n```\r\n\r\n### Geographic Router\r\n\r\n```typescript\r\nimport { createRegionManager, createGeoRouter } from \"@aimf/edge\";\r\n\r\nconst manager = createRegionManager();\r\n// ... register regions ...\r\n\r\nconst router = createGeoRouter(manager, {\r\n  strategy: \"latency\",\r\n  stickySession: true,\r\n  sessionTtl: 3600000,\r\n});\r\n\r\n// Route a request\r\nconst decision = await router.route(\r\n  {\r\n    ip: \"192.168.1.1\",\r\n    country: \"Germany\",\r\n    countryCode: \"DE\",\r\n    region: \"Hesse\",\r\n    city: \"Frankfurt\",\r\n    latitude: 50.1109,\r\n    longitude: 8.6821,\r\n    timezone: \"Europe/Berlin\",\r\n  },\r\n  \"gateway\",\r\n  {\r\n    sessionId: \"user-session-123\",\r\n    dataResidencyCountries: [\"EU\", \"DE\"],\r\n  }\r\n);\r\n\r\nconsole.log(`Routed to: ${decision.selectedRegion}`);\r\nconsole.log(`Endpoint: ${decision.selectedEndpoint}`);\r\nconsole.log(`Fallbacks: ${decision.fallbacks.join(\", \")}`);\r\n```\r\n\r\n### Data Replicator\r\n\r\n```typescript\r\nimport { createDataReplicator } from \"@aimf/edge\";\r\n\r\nconst replicator = createDataReplicator(\"us-east-1\", {\r\n  targets: [\"eu-west-1\", \"ap-south-1\"],\r\n  mode: \"async\",\r\n  conflictResolution: \"last-write-wins\",\r\n  maxLag: 5000,\r\n});\r\n\r\n// Set replication handler\r\nreplicator.setReplicateHandler(async (target, key, data) => {\r\n  await sendToRegion(target, key, data);\r\n});\r\n\r\n// Replicate data\r\nawait replicator.replicate(\"user-profile:123\", {\r\n  name: \"John Doe\",\r\n  preferences: { theme: \"dark\" },\r\n});\r\n\r\n// Check replication status\r\nconst statuses = replicator.getStatus();\r\nfor (const status of statuses) {\r\n  console.log(`${status.target}: ${status.status} (lag: ${status.lag}ms)`);\r\n}\r\n```\r\n\r\n## Routing Strategies\r\n\r\n| Strategy | Description |\r\n|----------|-------------|\r\n| `latency` | Routes to lowest latency region (default) |\r\n| `geographic` | Routes to geographically nearest region |\r\n| `round-robin` | Rotates between available regions |\r\n| `weighted` | Routes based on endpoint weights |\r\n| `failover` | Routes to highest priority available region |\r\n| `cost` | Routes to least loaded region |\r\n\r\n## Data Residency\r\n\r\nThe router supports data residency requirements for compliance:\r\n\r\n```typescript\r\nconst decision = await router.route(clientInfo, \"storage\", {\r\n  dataResidencyCountries: [\"EU\", \"DE\", \"FR\"], // Only route to EU regions\r\n});\r\n```\r\n\r\n## Session Affinity\r\n\r\nEnable sticky sessions to maintain consistent routing:\r\n\r\n```typescript\r\nconst router = createGeoRouter(manager, {\r\n  stickySession: true,\r\n  sessionTtl: 3600000, // 1 hour\r\n});\r\n\r\n// Same session always routes to same region\r\nconst decision1 = await router.route(client, \"gateway\", { sessionId: \"sess-1\" });\r\nconst decision2 = await router.route(client, \"gateway\", { sessionId: \"sess-1\" });\r\n// decision1.selectedRegion === decision2.selectedRegion\r\n```\r\n\r\n## Replication Modes\r\n\r\n| Mode | Description |\r\n|------|-------------|\r\n| `sync` | Wait for all replicas before returning |\r\n| `async` | Queue replication and return immediately |\r\n| `eventual` | Best-effort replication with relaxed consistency |\r\n\r\n## Conflict Resolution\r\n\r\n| Strategy | Description |\r\n|----------|-------------|\r\n| `last-write-wins` | Most recent timestamp wins |\r\n| `merge` | Merge object properties (shallow) |\r\n| `manual` | Throw error for manual resolution |\r\n\r\n## API Reference\r\n\r\n### RegionManager\r\n\r\n| Method | Description |\r\n|--------|-------------|\r\n| `registerRegion()` | Register a new region |\r\n| `addEndpoint()` | Add endpoint to region |\r\n| `updateStatus()` | Update region status |\r\n| `updateEndpointHealth()` | Update endpoint health |\r\n| `findNearestRegion()` | Find nearest region by coordinates |\r\n| `findAllowedRegions()` | Find regions matching data residency |\r\n| `startHealthChecks()` | Start automatic health monitoring |\r\n\r\n### GeoRouter\r\n\r\n| Method | Description |\r\n|--------|-------------|\r\n| `route()` | Route request to optimal region |\r\n| `setStrategy()` | Change routing strategy |\r\n| `recordLatency()` | Record measured latency |\r\n| `clearSessionAffinity()` | Clear session affinity |\r\n\r\n### DataReplicator\r\n\r\n| Method | Description |\r\n|--------|-------------|\r\n| `replicate()` | Replicate data to targets |\r\n| `setReplicateHandler()` | Set replication callback |\r\n| `getStatus()` | Get replication status |\r\n| `addTarget()` | Add replication target |\r\n| `removeTarget()` | Remove replication target |\r\n| `resolveConflict()` | Resolve data conflicts |\r\n\r\n## Events\r\n\r\nWhen used with EventBus:\r\n\r\n- `edge.region.registered` - New region registered\r\n- `edge.region.status_changed` - Region status changed\r\n- `edge.routing.decision` - Routing decision made\r\n- `edge.replication.completed` - Replication job completed\r\n- `edge.replication.failed` - Replication job failed\r\n- `edge.health_check.completed` - Health check cycle completed\r\n\r\n## License\r\n\r\nMIT\r\n","readmeFilename":"README.md"}