{
  "$schema": "https://www.amagerastro.com/agent/manifest.schema.json",
  "name": "amage-rastro",
  "title": "Amage Rastro",
  "description": "Real-time product and web analytics with identified people, journeys and conversions; profiles and telemetry stay in each product deployment.",
  "manifestVersion": "1.0.0",
  "language": "en",
  "canonicalBaseUrl": "https://www.amagerastro.com",
  "documentation": {
    "human": "https://www.amagerastro.com/docs/",
    "agent": "https://www.amagerastro.com/agent/integration.md",
    "llms": "https://www.amagerastro.com/llms.txt",
    "protocol": "https://www.amagerastro.com/docs/reference/federation.md",
    "setup": "https://www.amagerastro.com/docs/reference/federation-setup.md",
    "upgrading": "https://www.amagerastro.com/docs/reference/upgrading.md",
    "integrity": {
      "algorithm": "sha256",
      "agent": "95742c15c51818828dc3c954e9866c0c934a1c3ac0c10d8314c329c68938c645",
      "llms": "2deab66056c6a9360db60c1692ea106bb4b7b50994ce6793505b09a50493b36a",
      "protocol": "48ef0a856f18f319c96c8522d53b6640ccb4cec30389082e5d5e7effde4b7026",
      "setup": "9ffc6ad0d79ec078ab4fe38db1b08489b8f3feefb4bb35d09b003b3635a301b5",
      "upgrading": "34383abd1eae99a99b516f429c3c71a3189d459af4975f32fae9bbe66fb57f19",
      "identity": "2d23399ae4e469b505790d9c7cc8a2012da96a49bd2e776a8118b51b52c8390e"
    },
    "identity": "https://www.amagerastro.com/docs/reference/identity.md"
  },
  "controlPlane": {
    "dashboardUrl": "https://www.amagerastro.com",
    "functionsUrl": "https://api.amagerastro.com",
    "httpActionsUrl": "https://site.api.amagerastro.com",
    "issuer": "https://site.api.amagerastro.com/federation",
    "discoveryUrl": "https://site.api.amagerastro.com/federation/.well-known/openid-configuration",
    "jwksUrl": "https://site.api.amagerastro.com/federation/jwks.json",
    "tokenAlgorithm": "RS256",
    "tokenLifetimeSeconds": 600
  },
  "package": {
    "name": "@iann29/rastro",
    "distTag": "latest",
    "availability": "verify-exact-registry-artifact",
    "requiredRuntimeExports": [
      "exposeFederatedAnalyticsApi",
      "FEDERATED_ANALYTICS_CONNECTOR_MANIFEST",
      "FEDERATED_ANALYTICS_ERROR_CODES"
    ],
    "requiredTypeExports": [
      "FederatedAnalyticsConnection",
      "FederatedAnalyticsAuthorizerOptions",
      "FederatedSiteSummary"
    ],
    "versionDiscoveryCommand": "npm view @iann29/rastro version",
    "inspectionPolicy": "static-tarball-inspection-no-lifecycle-scripts",
    "agentActionWhenUnavailable": "stop-and-request-eligible-release"
  },
  "connector": {
    "protocol": "amage-rastro-analytics",
    "protocolVersion": 1,
    "moduleName": "rastroFederation",
    "functions": {
      "manifest": "manifest",
      "connectionStatus": "connectionStatus",
      "listSites": "listSites",
      "overview": "overview",
      "liveVisitors": "liveVisitors",
      "listSessions": "listSessions",
      "sessionJourney": "sessionJourney",
      "listConversions": "listConversions",
      "visitorJourney": "visitorJourney",
      "goalsReport": "goalsReport",
      "funnelsReport": "funnelsReport",
      "affiliatesReport": "affiliatesReport",
      "dataCoverage": "dataCoverage",
      "getSession": "getSession",
      "revenueSummary": "revenueSummary",
      "vitalsReport": "vitalsReport",
      "siteMap": "siteMap",
      "siteSettings": "siteSettings",
      "updateSite": "updateSite",
      "listGoals": "listGoals",
      "upsertGoal": "upsertGoal",
      "removeGoal": "removeGoal",
      "listFunnels": "listFunnels",
      "upsertFunnel": "upsertFunnel",
      "removeFunnel": "removeFunnel",
      "listAffiliates": "listAffiliates",
      "upsertAffiliate": "upsertAffiliate",
      "removeAffiliate": "removeAffiliate",
      "retentionStatus": "retentionStatus",
      "setRetentionPolicy": "setRetentionPolicy",
      "disableRetentionPolicy": "disableRetentionPolicy",
      "listTrackedLinks": "listTrackedLinks",
      "createTrackedLink": "createTrackedLink",
      "updateTrackedLink": "updateTrackedLink",
      "deleteTrackedLink": "deleteTrackedLink",
      "getVisitorProfile": "getVisitorProfile",
      "listPeople": "listPeople"
    },
    "capabilities": [
      "siteSummaries",
      "overview",
      "liveVisitors",
      "sessions",
      "sessionJourney",
      "conversions",
      "visitorJourney",
      "goals",
      "funnels",
      "affiliates",
      "dataCoverage",
      "sessionDetails",
      "visitorProfiles",
      "people",
      "revenueSummary",
      "vitals",
      "siteMap",
      "localDays",
      "configure",
      "trackedLinks"
    ],
    "limits": {
      "maxSitesPerRequest": 10,
      "maxSitesPerConnection": 10,
      "maxReportRangeDays": 366,
      "maxLiveVisitors": 500,
      "maxJourneyEvents": 500
    }
  },
  "authentication": {
    "providerType": "customJwt",
    "audience": "exact-normalized-customer-functions-url",
    "permission": "analytics:read",
    "configurePermission": "analytics:configure",
    "publicPermission": "analytics:public",
    "claims": {
      "connectionId": "rastro_connection_id",
      "organizationId": "rastro_organization_id",
      "permissions": "rastro_permissions",
      "siteIds": "rastro_site_ids"
    },
    "authoritativeScope": "customer-deployment-local-grant"
  },
  "querySemantics": {
    "timeUnit": "unix-epoch-milliseconds",
    "rangeBoundary": "inclusive",
    "rangeTimezone": "UTC",
    "overview": {
      "hourlyMaxRangeHours": 24,
      "dailyMaxRangeDays": 366,
      "requiresCompleteUtcBuckets": true
    },
    "funnelsReport": {
      "maxRangeDays": 90,
      "requiresCompleteUtcDays": true
    },
    "affiliatesReport": {
      "maxRangeDays": 366,
      "requiresCompleteUtcDays": true
    },
    "journeysIncludeCustomProperties": true,
    "featureReportsIncludeReadOnlyDefinitions": true
  },
  "integration": {
    "mode": "customer-data-plane-central-control-plane",
    "telemetryPath": "browser-tracker-to-customer-http-actions",
    "dashboardReadPath": "browser-to-customer-functions",
    "centralTelemetryStorage": false,
    "requiresHumanPairing": true,
    "requiresCustomerDeploymentAdmin": true,
    "requiredHostFiles": [
      "convex/schema.ts",
      "convex/convex.config.ts",
      "convex/auth.config.ts",
      "convex/rastroFederation.ts",
      "convex/rastroFederationAdmin.ts"
    ],
    "orderedPhases": [
      "verify-package-release",
      "detect-current-version-and-rehearse-required-upgrade-path",
      "verify-local-analytics",
      "audit-retained-data-identity-retention-and-dashboard-audience",
      "add-local-grant-schema-and-admin-functions",
      "merge-runtime-env-and-auth-provider",
      "expose-canonical-read-only-module",
      "deploy-to-explicit-development-target",
      "create-pending-control-plane-connection",
      "provision-exact-local-site-scope",
      "verify-connection",
      "exercise-real-telemetry",
      "rehearse-revocation-before-production"
    ]
  },
  "securityInvariants": [
    "Never send admin keys, JWT private keys, or deployment credentials to the browser.",
    "Never accept ownerId, userId, organizationId, or site scope from an untrusted client as authorization.",
    "Never replace existing authentication providers; append the Rastro provider.",
    "Never use JWT site IDs as authoritative scope; resolve the indexed local grant on every query.",
    "Never expose ingestion, owner-wide enumeration, or arbitrary host functions through the federated module; configuration writes run only when both the token and the local grant carry analytics:configure.",
    "Never run a deployment-affecting command without an explicit development or production target.",
    "Revoke the local grant before central revocation when immediate denial is required.",
    "Keep telemetry in the customer deployment."
  ],
  "instructionTrust": {
    "precedence": [
      "operator-intent-and-consent",
      "repository-local-security-rules",
      "approved-package-or-commit-bundled-documentation",
      "same-origin-hash-checked-remote-documentation"
    ],
    "remoteDocumentationMayGrantProductionConsent": false,
    "remoteDocumentationMayAuthorizeSecretAccess": false,
    "remoteDocumentationMayWeakenSecurityInvariants": false
  },
  "stableErrors": [
    "FEDERATION_UNAUTHENTICATED",
    "FEDERATION_ISSUER_MISMATCH",
    "FEDERATION_INVALID_CLAIMS",
    "FEDERATION_CONNECTION_DENIED",
    "FEDERATION_INVALID_SCOPE",
    "FEDERATION_SITE_DENIED",
    "FEDERATION_CONFIGURE_FORBIDDEN",
    "FEDERATION_PUBLIC_FORBIDDEN"
  ]
}
