@betterportal/tunnels 1.0.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/README.md +76 -0
- package/SPEC.md +524 -0
- package/lib/.bsb/clients/service-tunnel-client-api.d.ts +133 -0
- package/lib/.bsb/clients/service-tunnel-client-api.d.ts.map +1 -0
- package/lib/.bsb/clients/service-tunnel-client-api.js +102 -0
- package/lib/.bsb/clients/service-tunnel-client-api.js.map +1 -0
- package/lib/.bsb/clients/service-tunnel-web.d.ts +43 -0
- package/lib/.bsb/clients/service-tunnel-web.d.ts.map +1 -0
- package/lib/.bsb/clients/service-tunnel-web.js +47 -0
- package/lib/.bsb/clients/service-tunnel-web.js.map +1 -0
- package/lib/auth.d.ts +12 -0
- package/lib/auth.d.ts.map +1 -0
- package/lib/auth.js +59 -0
- package/lib/auth.js.map +1 -0
- package/lib/cli.d.ts +2 -0
- package/lib/cli.d.ts.map +1 -0
- package/lib/cli.js +295 -0
- package/lib/cli.js.map +1 -0
- package/lib/plugins/service-betterportal/.bp-generated/registry.d.ts +3 -0
- package/lib/plugins/service-betterportal/.bp-generated/registry.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/.bp-generated/registry.js +127 -0
- package/lib/plugins/service-betterportal/.bp-generated/registry.js.map +1 -0
- package/lib/plugins/service-betterportal/assets/brand/bettertunnels-horizontal-light.svg +18 -0
- package/lib/plugins/service-betterportal/assets/brand/bettertunnels-square-dark-1024x1024.png +0 -0
- package/lib/plugins/service-betterportal/assets/brand/favicon.svg +12 -0
- package/lib/plugins/service-betterportal/betterportal-logo.png +0 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/_theme.bootstrap1/index.js +6 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/index.d.ts +25 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/index.js +59 -0
- package/lib/plugins/service-betterportal/bp-routes/cli-auth/verify/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/_theme.bootstrap1/index.js +22 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/index.d.ts +40 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/index.js +57 -0
- package/lib/plugins/service-betterportal/bp-routes/dashboard/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/_theme.bootstrap1/index.js +5 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/index.d.ts +30 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/index.js +45 -0
- package/lib/plugins/service-betterportal/bp-routes/downloads/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/_theme.bootstrap1/index.js +5 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/index.d.ts +40 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/index.js +63 -0
- package/lib/plugins/service-betterportal/bp-routes/landing/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/_theme.bootstrap1/index.d.ts +5 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/_theme.bootstrap1/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/_theme.bootstrap1/index.js +5 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/_theme.bootstrap1/index.js.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/index.d.ts +44 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/index.js +59 -0
- package/lib/plugins/service-betterportal/bp-routes/tunnels/index.js.map +1 -0
- package/lib/plugins/service-betterportal/brand-assets.d.ts +7 -0
- package/lib/plugins/service-betterportal/brand-assets.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/brand-assets.js +24 -0
- package/lib/plugins/service-betterportal/brand-assets.js.map +1 -0
- package/lib/plugins/service-betterportal/index.d.ts +57 -0
- package/lib/plugins/service-betterportal/index.d.ts.map +1 -0
- package/lib/plugins/service-betterportal/index.js +108 -0
- package/lib/plugins/service-betterportal/index.js.map +1 -0
- package/lib/plugins/service-tunnel-client-api/ids.d.ts +6 -0
- package/lib/plugins/service-tunnel-client-api/ids.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-client-api/ids.js +17 -0
- package/lib/plugins/service-tunnel-client-api/ids.js.map +1 -0
- package/lib/plugins/service-tunnel-client-api/index.d.ts +158 -0
- package/lib/plugins/service-tunnel-client-api/index.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-client-api/index.js +591 -0
- package/lib/plugins/service-tunnel-client-api/index.js.map +1 -0
- package/lib/plugins/service-tunnel-client-api/registry.d.ts +36 -0
- package/lib/plugins/service-tunnel-client-api/registry.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-client-api/registry.js +14 -0
- package/lib/plugins/service-tunnel-client-api/registry.js.map +1 -0
- package/lib/plugins/service-tunnel-client-api/schemas.d.ts +66 -0
- package/lib/plugins/service-tunnel-client-api/schemas.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-client-api/schemas.js +56 -0
- package/lib/plugins/service-tunnel-client-api/schemas.js.map +1 -0
- package/lib/plugins/service-tunnel-web/http.d.ts +4 -0
- package/lib/plugins/service-tunnel-web/http.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-web/http.js +119 -0
- package/lib/plugins/service-tunnel-web/http.js.map +1 -0
- package/lib/plugins/service-tunnel-web/index.d.ts +79 -0
- package/lib/plugins/service-tunnel-web/index.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-web/index.js +278 -0
- package/lib/plugins/service-tunnel-web/index.js.map +1 -0
- package/lib/plugins/service-tunnel-web/verification.d.ts +27 -0
- package/lib/plugins/service-tunnel-web/verification.d.ts.map +1 -0
- package/lib/plugins/service-tunnel-web/verification.js +209 -0
- package/lib/plugins/service-tunnel-web/verification.js.map +1 -0
- package/lib/prisma.d.ts +6 -0
- package/lib/prisma.d.ts.map +1 -0
- package/lib/prisma.js +10 -0
- package/lib/prisma.js.map +1 -0
- package/lib/schemas/service-betterportal.json +109 -0
- package/lib/schemas/service-tunnel-client-api.json +300 -0
- package/lib/schemas/service-tunnel-web.json +140 -0
- package/package.json +60 -0
- package/prisma/migrations/0001_init/migration.sql +63 -0
- package/prisma/migrations/0002_account_plan/migration.sql +6 -0
- package/prisma/migrations/0003_tunnel_owner_server/migration.sql +1 -0
- package/prisma/migrations/20260701000000_add_client_auth/migration.sql +46 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +141 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
CREATE TYPE "AuthSessionStatus" AS ENUM ('pending', 'approved', 'consumed', 'expired', 'denied');
|
|
2
|
+
|
|
3
|
+
CREATE TABLE "ClientAuthSession" (
|
|
4
|
+
"id" TEXT NOT NULL,
|
|
5
|
+
"browserKeyHash" TEXT NOT NULL,
|
|
6
|
+
"pollSecretHash" TEXT NOT NULL,
|
|
7
|
+
"status" "AuthSessionStatus" NOT NULL DEFAULT 'pending',
|
|
8
|
+
"tenantId" TEXT,
|
|
9
|
+
"appId" TEXT,
|
|
10
|
+
"bpUserSubject" TEXT,
|
|
11
|
+
"bpUserEmail" TEXT,
|
|
12
|
+
"clientIpHash" TEXT,
|
|
13
|
+
"userAgentHash" TEXT,
|
|
14
|
+
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
15
|
+
"approvedAt" TIMESTAMP(3),
|
|
16
|
+
"consumedAt" TIMESTAMP(3),
|
|
17
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
18
|
+
|
|
19
|
+
CONSTRAINT "ClientAuthSession_pkey" PRIMARY KEY ("id")
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE TABLE "ClientDeviceToken" (
|
|
23
|
+
"id" TEXT NOT NULL,
|
|
24
|
+
"accountId" TEXT,
|
|
25
|
+
"tenantId" TEXT NOT NULL,
|
|
26
|
+
"bpUserSubject" TEXT NOT NULL,
|
|
27
|
+
"tokenHash" TEXT NOT NULL,
|
|
28
|
+
"name" TEXT,
|
|
29
|
+
"ipRangeHash" TEXT NOT NULL,
|
|
30
|
+
"ipFamily" TEXT NOT NULL,
|
|
31
|
+
"userAgentHash" TEXT,
|
|
32
|
+
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
33
|
+
"revokedAt" TIMESTAMP(3),
|
|
34
|
+
"lastUsedAt" TIMESTAMP(3),
|
|
35
|
+
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
36
|
+
|
|
37
|
+
CONSTRAINT "ClientDeviceToken_pkey" PRIMARY KEY ("id")
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX "ClientAuthSession_status_expiresAt_idx" ON "ClientAuthSession"("status", "expiresAt");
|
|
41
|
+
|
|
42
|
+
CREATE UNIQUE INDEX "ClientDeviceToken_tokenHash_key" ON "ClientDeviceToken"("tokenHash");
|
|
43
|
+
|
|
44
|
+
CREATE INDEX "ClientDeviceToken_tenantId_bpUserSubject_idx" ON "ClientDeviceToken"("tenantId", "bpUserSubject");
|
|
45
|
+
|
|
46
|
+
CREATE INDEX "ClientDeviceToken_expiresAt_idx" ON "ClientDeviceToken"("expiresAt");
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client-js"
|
|
3
|
+
output = "../src/generated/prisma"
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
datasource db {
|
|
7
|
+
provider = "postgresql"
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
model Account {
|
|
11
|
+
id String @id @default(cuid())
|
|
12
|
+
email String? @unique
|
|
13
|
+
plan AccountPlan @default(anonymous)
|
|
14
|
+
verificationBypass Boolean @default(false)
|
|
15
|
+
ipVerification Boolean @default(false)
|
|
16
|
+
createdAt DateTime @default(now())
|
|
17
|
+
tunnels Tunnel[]
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
model ClientSession {
|
|
21
|
+
id String @id @default(cuid())
|
|
22
|
+
accountId String?
|
|
23
|
+
ipHash String?
|
|
24
|
+
userAgent String?
|
|
25
|
+
createdAt DateTime @default(now())
|
|
26
|
+
expiresAt DateTime?
|
|
27
|
+
tunnels Tunnel[]
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
model Tunnel {
|
|
31
|
+
id String @id @default(cuid())
|
|
32
|
+
accountId String?
|
|
33
|
+
sessionId String
|
|
34
|
+
subdomain String @unique
|
|
35
|
+
ownerServerId String?
|
|
36
|
+
targetHost String
|
|
37
|
+
targetPort Int
|
|
38
|
+
authenticated Boolean @default(false)
|
|
39
|
+
status TunnelStatus @default(created)
|
|
40
|
+
createdAt DateTime @default(now())
|
|
41
|
+
expiresAt DateTime
|
|
42
|
+
account Account? @relation(fields: [accountId], references: [id])
|
|
43
|
+
session ClientSession @relation(fields: [sessionId], references: [id])
|
|
44
|
+
validations VisitorValidation[]
|
|
45
|
+
usage UsageCounter?
|
|
46
|
+
|
|
47
|
+
@@index([sessionId])
|
|
48
|
+
@@index([expiresAt])
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
model VisitorValidation {
|
|
52
|
+
id String @id @default(cuid())
|
|
53
|
+
tunnelId String
|
|
54
|
+
visitorIpHash String
|
|
55
|
+
userAgentHash String
|
|
56
|
+
validationCookieHash String
|
|
57
|
+
validatedAt DateTime @default(now())
|
|
58
|
+
expiresAt DateTime
|
|
59
|
+
tunnel Tunnel @relation(fields: [tunnelId], references: [id])
|
|
60
|
+
|
|
61
|
+
@@index([tunnelId, visitorIpHash, userAgentHash])
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
model UsageCounter {
|
|
65
|
+
tunnelId String @id
|
|
66
|
+
requests Int @default(0)
|
|
67
|
+
bytesIn BigInt @default(0)
|
|
68
|
+
bytesOut BigInt @default(0)
|
|
69
|
+
updatedAt DateTime @updatedAt
|
|
70
|
+
tunnel Tunnel @relation(fields: [tunnelId], references: [id])
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
model AuditEvent {
|
|
74
|
+
id String @id @default(cuid())
|
|
75
|
+
event String
|
|
76
|
+
subjectId String?
|
|
77
|
+
data Json?
|
|
78
|
+
createdAt DateTime @default(now())
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
model ClientAuthSession {
|
|
82
|
+
id String @id @default(cuid())
|
|
83
|
+
browserKeyHash String
|
|
84
|
+
pollSecretHash String
|
|
85
|
+
status AuthSessionStatus @default(pending)
|
|
86
|
+
tenantId String?
|
|
87
|
+
appId String?
|
|
88
|
+
bpUserSubject String?
|
|
89
|
+
bpUserEmail String?
|
|
90
|
+
clientIpHash String?
|
|
91
|
+
userAgentHash String?
|
|
92
|
+
expiresAt DateTime
|
|
93
|
+
approvedAt DateTime?
|
|
94
|
+
consumedAt DateTime?
|
|
95
|
+
createdAt DateTime @default(now())
|
|
96
|
+
|
|
97
|
+
@@index([status, expiresAt])
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
model ClientDeviceToken {
|
|
101
|
+
id String @id @default(cuid())
|
|
102
|
+
accountId String?
|
|
103
|
+
tenantId String
|
|
104
|
+
bpUserSubject String
|
|
105
|
+
tokenHash String @unique
|
|
106
|
+
name String?
|
|
107
|
+
ipRangeHash String
|
|
108
|
+
ipFamily String
|
|
109
|
+
userAgentHash String?
|
|
110
|
+
expiresAt DateTime
|
|
111
|
+
revokedAt DateTime?
|
|
112
|
+
lastUsedAt DateTime?
|
|
113
|
+
createdAt DateTime @default(now())
|
|
114
|
+
|
|
115
|
+
@@index([tenantId, bpUserSubject])
|
|
116
|
+
@@index([expiresAt])
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
enum TunnelStatus {
|
|
120
|
+
created
|
|
121
|
+
active
|
|
122
|
+
draining
|
|
123
|
+
disconnected
|
|
124
|
+
expired
|
|
125
|
+
closed
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
enum AccountPlan {
|
|
129
|
+
anonymous
|
|
130
|
+
free
|
|
131
|
+
paid
|
|
132
|
+
admin
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
enum AuthSessionStatus {
|
|
136
|
+
pending
|
|
137
|
+
approved
|
|
138
|
+
consumed
|
|
139
|
+
expired
|
|
140
|
+
denied
|
|
141
|
+
}
|