apiVersion: v1 kind: ConfigMap metadata: name: unrip-config namespace: unrip data: PROJECT_NAME: unrip PROJECT_NAMESPACE: unrip NEAR_INTENTS_WS_URL: wss://solver-relay-v2.chaindefuser.com/ws NEAR_INTENTS_RPC_URL: https://solver-relay-v2.chaindefuser.com/rpc NEAR_INTENTS_BRIDGE_RPC_URL: https://bridge.chaindefuser.com/rpc NEAR_INTENTS_VERIFIER_CONTRACT: intents.near NEAR_RPC_URL: https://near.lava.build NEAR_INTENTS_STATUS_POLL_MS: "60000" NEAR_INTENTS_ACCOUNT_ID: unrip-dev.near NEAR_INTENTS_CONTROL_API_ENABLED: "true" NEAR_INTENTS_CONTROL_HOST: 0.0.0.0 NEAR_INTENTS_CONTROL_PORT: "8081" MARKET_REFERENCE_CONTROL_HOST: 0.0.0.0 MARKET_REFERENCE_CONTROL_PORT: "8082" INVENTORY_SYNC_CONTROL_HOST: 0.0.0.0 INVENTORY_SYNC_CONTROL_PORT: "8083" LIQUIDITY_MANAGER_CONTROL_HOST: 0.0.0.0 LIQUIDITY_MANAGER_CONTROL_PORT: "8084" HISTORY_WRITER_CONTROL_HOST: 0.0.0.0 HISTORY_WRITER_CONTROL_PORT: "8085" STRATEGY_ENGINE_CONTROL_HOST: 0.0.0.0 STRATEGY_ENGINE_CONTROL_PORT: "8086" TRADE_EXECUTOR_CONTROL_HOST: 0.0.0.0 TRADE_EXECUTOR_CONTROL_PORT: "8087" OPS_SENTINEL_CONTROL_HOST: 0.0.0.0 OPS_SENTINEL_CONTROL_PORT: "8088" OPERATOR_DASHBOARD_CONTROL_HOST: 0.0.0.0 OPERATOR_DASHBOARD_CONTROL_PORT: "8090" NEAR_INTENTS_CONTROL_BASE_URL: http://near-intents-ingest.unrip.svc.cluster.local:8081 MARKET_REFERENCE_CONTROL_BASE_URL: http://market-reference-ingest.unrip.svc.cluster.local:8082 INVENTORY_SYNC_CONTROL_BASE_URL: http://inventory-sync.unrip.svc.cluster.local:8083 LIQUIDITY_MANAGER_CONTROL_BASE_URL: http://liquidity-manager.unrip.svc.cluster.local:8084 HISTORY_WRITER_CONTROL_BASE_URL: http://history-writer.unrip.svc.cluster.local:8085 STRATEGY_ENGINE_CONTROL_BASE_URL: http://strategy-engine.unrip.svc.cluster.local:8086 TRADE_EXECUTOR_CONTROL_BASE_URL: http://trade-executor.unrip.svc.cluster.local:8087 OPS_SENTINEL_CONTROL_BASE_URL: http://ops-sentinel.unrip.svc.cluster.local:8088 OPERATOR_DASHBOARD_CONTROL_BASE_URL: http://operator-dashboard.unrip.svc.cluster.local:8090 NOTIFICATION_NTFY_BASE_URL: http://ntfy.utility.svc.cluster.local NOTIFICATION_NTFY_TOPIC: unrip NOTIFICATION_NTFY_TIMEOUT_MS: "5000" KAFKA_BROKERS: redpanda.unrip.svc.cluster.local:9092 KAFKA_CLIENT_ID: unrip KAFKA_TOPIC_RAW_NEAR_INTENTS_QUOTE: raw.near_intents.quote KAFKA_TOPIC_NORM_SWAP_DEMAND: norm.swap_demand KAFKA_TOPIC_REF_MARKET_PRICE: ref.market_price KAFKA_TOPIC_STATE_INTENT_INVENTORY: state.intent_inventory KAFKA_TOPIC_OPS_LIQUIDITY_ACTION: ops.liquidity_action KAFKA_TOPIC_OPS_FUNDING_OBSERVATION: ops.funding_observation KAFKA_TOPIC_OPS_ALERT: ops.alert KAFKA_TOPIC_OPS_ENVIRONMENT_STATUS: ops.environment_status KAFKA_TOPIC_DECISION_TRADE_DECISION: decision.trade_decision KAFKA_TOPIC_CMD_EXECUTE_TRADE: cmd.execute_trade KAFKA_TOPIC_EXEC_TRADE_RESULT: exec.trade_result KAFKA_CONSUMER_GROUP_HISTORY: history-writer-v1 KAFKA_CONSUMER_GROUP_INVENTORY: inventory-sync-v1 KAFKA_CONSUMER_GROUP_STRATEGY: strategy-engine-v1 KAFKA_CONSUMER_GROUP_EXECUTOR: trade-executor-v1 KAFKA_CONSUMER_GROUP_OPS_SENTINEL: ops-sentinel-v1 KAFKA_CONSUMER_GROUP_OPERATOR_DASHBOARD: operator-dashboard-v1 HISTORY_WRITER_DERIVED_REFRESH_MAX_EVENT_AGE_MS: "30000" STRATEGY_STATE_DIR: /var/lib/unrip/strategy-state EXECUTOR_STATE_DIR: /var/lib/unrip/executor-state LIQUIDITY_STATE_DIR: /var/lib/unrip/liquidity-state MARKET_REFERENCE_REFRESH_MS: "5000" MARKET_REFERENCE_COINGECKO_REFRESH_MS: "15000" MARKET_REFERENCE_MAX_AGE_MS: "30000" MARKET_REFERENCE_KRAKEN_TICKER_URL: https://api.kraken.com/0/public/Ticker?pair=XBTEUR MARKET_REFERENCE_COINGECKO_URL: https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur INVENTORY_SYNC_REFRESH_MS: "15000" LIQUIDITY_REFRESH_MS: "30000" STRATEGY_INITIAL_ARMED: "false" EXECUTOR_INITIAL_ARMED: "false" EXECUTOR_RESPONSE_TIMEOUT_MS: "10000" INTENT_REQUEST_QUOTE_TIMEOUT_MS: "10000" INTENT_REQUEST_PUBLISH_TIMEOUT_MS: "10000" INTENT_REQUEST_STATUS_TIMEOUT_MS: "10000" LIQUIDITY_WITHDRAWALS_FROZEN: "true" BTC_FUNDING_OBSERVER_ENABLED: "true" BTC_FUNDING_OBSERVER_BASE_URL: https://mempool.space/api FUNDING_OBSERVATION_STUCK_MS: "3600000" OPS_SENTINEL_EVALUATION_MS: "5000" OPS_SENTINEL_PRICE_STALE_MS: "30000" OPS_SENTINEL_INVENTORY_STALE_MS: "30000" OPS_SENTINEL_FUNDING_CREDIT_PENDING_MS: "300000" OPS_SENTINEL_FUNDING_STUCK_MS: "3600000" OPERATOR_DASHBOARD_AUTH_MODE: basic OPERATOR_DASHBOARD_AUTH_USERNAME: admin OPERATOR_DASHBOARD_QUOTE_LIMIT: "10" OPERATOR_DASHBOARD_TRADE_PAGE_SIZE: "20" OPERATOR_DASHBOARD_UPSTREAM_TIMEOUT_MS: "3000" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: strategy-state namespace: unrip spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 5Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: executor-state namespace: unrip spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 5Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: liquidity-state namespace: unrip spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 5Gi --- apiVersion: v1 kind: Service metadata: name: near-intents-ingest namespace: unrip spec: selector: app: near-intents-ingest ports: - name: control-api port: 8081 targetPort: 8081 --- apiVersion: v1 kind: Service metadata: name: market-reference-ingest namespace: unrip spec: selector: app: market-reference-ingest ports: - name: control-api port: 8082 targetPort: 8082 --- apiVersion: v1 kind: Service metadata: name: inventory-sync namespace: unrip spec: selector: app: inventory-sync ports: - name: control-api port: 8083 targetPort: 8083 --- apiVersion: v1 kind: Service metadata: name: liquidity-manager namespace: unrip spec: selector: app: liquidity-manager ports: - name: control-api port: 8084 targetPort: 8084 --- apiVersion: v1 kind: Service metadata: name: history-writer namespace: unrip spec: selector: app: history-writer ports: - name: control-api port: 8085 targetPort: 8085 --- apiVersion: v1 kind: Service metadata: name: strategy-engine namespace: unrip spec: selector: app: strategy-engine ports: - name: control-api port: 8086 targetPort: 8086 --- apiVersion: v1 kind: Service metadata: name: trade-executor namespace: unrip spec: selector: app: trade-executor ports: - name: control-api port: 8087 targetPort: 8087 --- apiVersion: v1 kind: Service metadata: name: ops-sentinel namespace: unrip spec: selector: app: ops-sentinel ports: - name: control-api port: 8088 targetPort: 8088 --- apiVersion: v1 kind: Service metadata: name: operator-dashboard namespace: unrip spec: selector: app: operator-dashboard ports: - name: http port: 8090 targetPort: 8090 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: operator-dashboard namespace: unrip annotations: cert-manager.io/cluster-issuer: letsencrypt-production spec: ingressClassName: traefik tls: - hosts: - doran.133011.xyz secretName: operator-dashboard-tls rules: - host: doran.133011.xyz http: paths: - path: / pathType: Prefix backend: service: name: operator-dashboard port: number: 8090 --- apiVersion: apps/v1 kind: Deployment metadata: name: near-intents-ingest namespace: unrip spec: replicas: 1 selector: matchLabels: app: near-intents-ingest template: metadata: labels: app: near-intents-ingest app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/near-intents-ingest.mjs"] env: - name: NODE_OPTIONS value: "--max-old-space-size=896" ports: - name: control-api containerPort: 8081 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets resources: requests: memory: 256Mi limits: memory: 1280Mi --- apiVersion: apps/v1 kind: Deployment metadata: name: market-reference-ingest namespace: unrip spec: replicas: 1 selector: matchLabels: app: market-reference-ingest template: metadata: labels: app: market-reference-ingest app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/market-reference-ingest.mjs"] ports: - name: control-api containerPort: 8082 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets --- apiVersion: apps/v1 kind: Deployment metadata: name: liquidity-manager namespace: unrip spec: replicas: 1 selector: matchLabels: app: liquidity-manager template: metadata: labels: app: liquidity-manager app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/liquidity-manager.mjs"] ports: - name: control-api containerPort: 8084 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets volumeMounts: - name: liquidity-state mountPath: /var/lib/unrip/liquidity-state volumes: - name: liquidity-state persistentVolumeClaim: claimName: liquidity-state --- apiVersion: apps/v1 kind: Deployment metadata: name: inventory-sync namespace: unrip spec: replicas: 1 selector: matchLabels: app: inventory-sync template: metadata: labels: app: inventory-sync app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/inventory-sync.mjs"] ports: - name: control-api containerPort: 8083 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets --- apiVersion: apps/v1 kind: Deployment metadata: name: history-writer namespace: unrip spec: replicas: 1 selector: matchLabels: app: history-writer template: metadata: labels: app: history-writer app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/history-writer.mjs"] env: - name: NODE_OPTIONS value: "--max-old-space-size=896" ports: - name: control-api containerPort: 8085 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets resources: requests: memory: 256Mi limits: memory: 1280Mi --- apiVersion: apps/v1 kind: Deployment metadata: name: ops-sentinel namespace: unrip spec: replicas: 1 selector: matchLabels: app: ops-sentinel template: metadata: labels: app: ops-sentinel app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/ops-sentinel.mjs"] ports: - name: control-api containerPort: 8088 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets --- apiVersion: apps/v1 kind: Deployment metadata: name: strategy-engine namespace: unrip spec: replicas: 1 selector: matchLabels: app: strategy-engine template: metadata: labels: app: strategy-engine app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/strategy-engine.mjs"] ports: - name: control-api containerPort: 8086 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets volumeMounts: - name: strategy-state mountPath: /var/lib/unrip/strategy-state volumes: - name: strategy-state persistentVolumeClaim: claimName: strategy-state --- apiVersion: apps/v1 kind: Deployment metadata: name: trade-executor namespace: unrip spec: replicas: 1 selector: matchLabels: app: trade-executor template: metadata: labels: app: trade-executor app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/trade-executor.mjs"] env: - name: NODE_OPTIONS value: "--max-old-space-size=896" ports: - name: control-api containerPort: 8087 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets resources: requests: memory: 256Mi limits: memory: 1280Mi volumeMounts: - name: executor-state mountPath: /var/lib/unrip/executor-state volumes: - name: executor-state persistentVolumeClaim: claimName: executor-state --- apiVersion: apps/v1 kind: Deployment metadata: name: operator-dashboard namespace: unrip spec: replicas: 1 selector: matchLabels: app: operator-dashboard template: metadata: labels: app: operator-dashboard app.kubernetes.io/part-of: unrip spec: imagePullSecrets: - name: unrip-registry-creds containers: - name: app image: ghcr.io/example/unrip:bootstrap imagePullPolicy: IfNotPresent command: ["node", "src/apps/operator-dashboard.mjs"] env: - name: NODE_OPTIONS value: "--max-old-space-size=896" ports: - name: http containerPort: 8090 envFrom: - configMapRef: name: unrip-config - secretRef: name: unrip-secrets resources: requests: memory: 256Mi limits: memory: 1280Mi