Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
8b4a859
fix: added private ipcheck before api call to bypass dnsrebinding [SP…
Astitva877 Aug 28, 2025
89c267e
fix: resolved merge conflicts [SPRW-1794]
Astitva877 Aug 28, 2025
ebe0e22
Merge pull request #23 from Astitva877/astitva/ip-restrictions
LordNayan Aug 28, 2025
1e6cae3
build: added selfhost workflow
jatinlodhi2002 Sep 3, 2025
1211abb
build: added selfhost workflow
jatinlodhi2002 Sep 3, 2025
13210f0
Merge pull request #24 from sparrowapp-dev/build/selfhost-build
Astitva877 Sep 3, 2025
a19eb19
fix: edit the image tag
jatinlodhi2002 Sep 3, 2025
6b86d88
fix: edit the image tag
jatinlodhi2002 Sep 3, 2025
96bd4bf
fix: edit the image tag
jatinlodhi2002 Sep 3, 2025
a89e8d7
update the workflow to get branch name
jatinlodhi2002 Sep 4, 2025
199c74c
ci: introduce self-host docker publish workflow (auto tag from packag…
jatinlodhi2002 Sep 4, 2025
790699e
ci: give version in package.json []
jatinlodhi2002 Sep 4, 2025
34db9f0
Merge pull request #25 from sparrowapp-dev/build/selfhost-build
LordNayan Sep 8, 2025
a6b7d65
feat: setup to test the apis for testflow
aakashreddy-p Sep 25, 2025
68837d2
feat: setup to test the apis for testflow
aakashreddy-p Sep 25, 2025
943aeb5
feat: added nodes running based on edges
aakashreddy-p Sep 26, 2025
3b647b0
Merge pull request #26 from aakashreddy-p/aakash/feat/testflow-setup-…
itsmdasifraza Sep 26, 2025
a850025
feat: testflow response added
aakashreddy-p Oct 1, 2025
86693ac
Merge pull request #27 from aakashreddy-p/aakash/feat/testflow-schedu…
itsmdasifraza Oct 1, 2025
4f5792e
feat: removed unwanted prasing
aakashreddy-p Oct 3, 2025
bb6b189
feat: upgrade app version to 2.32.1
itsmdasifraza Oct 3, 2025
4133807
Merge pull request #29 from sparrowapp-dev/feat/upgrade-app-version-t…
Astitva877 Oct 3, 2025
1ee29ab
Merge pull request #28 from aakashreddy-p/aakash/feat/testflow-schedu…
itsmdasifraza Oct 3, 2025
d4805b2
Merge pull request #30 from sparrowapp-dev/release/2.33.0
aakashreddy-p Oct 6, 2025
0359ccd
fix: converting into string
aakashreddy-p Oct 9, 2025
e0d34d8
Merge pull request #31 from aakashreddy-p/aakash/feat/testflow-schedu…
itsmdasifraza Oct 9, 2025
6e84212
feat: version upgrade to 2.33.0
itsmdasifraza Oct 15, 2025
aa50089
Merge pull request #33 from sparrowapp-dev/feat/version-upgrade-to-2.…
Astitva877 Oct 15, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/sparrowproxy-selfhost.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Self-host Docker Image
on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read

jobs:
build:
runs-on: ubuntu-latest
environment: self-host

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Read version from package.json
id: version
run: |
if ! command -v jq >/dev/null 2>&1; then
echo "jq not found"; exit 1
fi
V=$(jq -r '.version' package.json)
if [ -z "$V" ] || [ "$V" = "null" ]; then
echo "Version not found in package.json"; exit 1
fi
if ! [[ "$V" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Version $V is not valid semver (expected X.Y.Z)"; exit 1
fi
echo "full=$V" >> "$GITHUB_OUTPUT"


- name: Set up QEMU
uses: docker/setup-qemu-action@v3

- name: Set up Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Build and push (multi-arch)
run: |
set -euo pipefail
VERSION='${{ steps.version.outputs.full }}'
echo "Building image tag: $VERSION"
docker buildx build \
--platform linux/amd64,linux/arm64 \
-t $DOCKER_IMAGE_NAME:$VERSION \
-t sparrowapi/sparrow-proxy:latest \
--push .
8 changes: 7 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "sparrow-proxy",
"version": "0.0.1",
"version": "2.33.0",
"description": "",
"author": "",
"private": true,
Expand All @@ -24,14 +24,20 @@
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
"@nestjs/platform-express": "^10.0.0",
"@nestjs/platform-fastify": "^11.1.6",
"@nestjs/platform-socket.io": "^10.4.8",
"@nestjs/platform-ws": "^10.4.8",
"@nestjs/swagger": "^8.0.7",
"@nestjs/websockets": "^10.4.8",
"@types/ws": "^8.5.13",
"axios": "^1.7.7",
"class-transformer": "0.5.1",
"class-transformer-validator": "^0.9.1",
"class-validator": "^0.14.0",
"fastify": "4.28.1",
"form-data": "^4.0.1",
"ipaddr.js": "^2.2.0",
"json5": "^2.2.3",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.1",
"socket.io-client": "^4.8.1"
Expand Down
12 changes: 12 additions & 0 deletions src/Types/http-client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
export interface HttpClientResponseInterface<T> {
status: "success" | "error";
isSuccessful: boolean;
message: string;
data: T;
}

export interface HttpClientBackendResponseInterface<T> {
data: T;
message: string;
statusCode: number;
}
33 changes: 33 additions & 0 deletions src/enum/httpRequest.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
export interface KeyWrapper {
key: string;
}

export interface ValueWrapper {
value: string;
}

export enum RequestDataTypeEnum {
JSON = "JSON",
XML = "XML",
HTML = "HTML",
TEXT = "Text",
JAVASCRIPT = "JavaScript",
IMAGE = "Image",
}

export enum ResponseStatusCode {
OK = "200 OK",
CREATED = "201 Created",
ACCEPTED = "202 Accepted",
NO_CONTENT = "204 No Content",
BAD_REQUEST = "400 Bad Request",
UNAUTHORIZED = "401 Unauthorized",
FORBIDDEN = "403 Forbidden",
NOT_FOUND = "404 Not Found",
METHOD_NOT_ALLOWED = "405 Method Not Allowed",
INTERNAL_SERVER_ERROR = "500 Internal Server Error",
SERVICE_UNAVAILABLE = "503 Service Unavailable",
ERROR = "Not Found",
}

export interface KeyValue extends KeyWrapper, ValueWrapper {}
25 changes: 25 additions & 0 deletions src/enum/httpResponseFormat.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import type { HttpClientResponseInterface } from "src/Types/http-client";

export const success = <T>(data: T): HttpClientResponseInterface<T> => {
return {
status: "success",
isSuccessful: true,
message: "",
data,
};
};

export const error = <T>(
error: string,
data?: T,
tabId: string = "",
): HttpClientResponseInterface<T> => {
return {
status: "error",
isSuccessful: false,
message: error,
data,
};
};


59 changes: 59 additions & 0 deletions src/enum/testflow.enum.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
export enum BodyModeEnum {
"none" = "none",
"application/json" = "application/json",
"application/xml" = "application/xml",
"application/yaml" = "application/yaml",
"application/x-www-form-urlencoded" = "application/x-www-form-urlencoded",
"multipart/form-data" = "multipart/form-data",
"application/javascript" = "application/javascript",
"text/plain" = "text/plain",
"text/html" = "text/html",
}

export enum AuthModeEnum {
"No Auth" = "No Auth",
"Inherit Auth" = "Inherit Auth",
"API Key" = "API Key",
"Bearer Token" = "Bearer Token",
"Basic Auth" = "Basic Auth",
}


export enum AddTo {
Header = "Header",
QueryParameter = "Query Parameter",
}

export class Auth {
bearerToken?: string;
basicAuth?: {
username: string;
password: string;
};
apiKey?: {
authKey: string;
authValue: string | unknown;
addTo: AddTo;
};
}

export type TFKeyValueStoreType = {
key: string;
value: string;
checked?: boolean;
};

export interface TFAPIResponseType {
body?: string;
headers?: object;
status?: string;
}

export enum RequestDataTypeEnum {
JSON = "JSON",
XML = "XML",
HTML = "HTML",
TEXT = "Text",
JAVASCRIPT = "JavaScript",
IMAGE = "Image",
}
Loading
Loading