tapflow 0.8.1 → 0.9.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 +6 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +118 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/relay-start.d.ts.map +1 -1
- package/dist/commands/relay-start.js +32 -5
- package/dist/commands/relay-start.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -173,7 +173,8 @@ tapflow is self-hosted by design — build files, device streams, and session re
|
|
|
173
173
|
| Third-party simulator cloud | Not required |
|
|
174
174
|
|
|
175
175
|
- **LAN-first** — the agent ↔ relay leg is internal traffic; the device stream never transits a third party.
|
|
176
|
-
- **
|
|
176
|
+
- **Authenticated by default off-host** — the relay accepts unauthenticated connections only from its own machine (`localhost`). Browsers reaching it from elsewhere sign in; agents on another machine present an `agent`-scope token.
|
|
177
|
+
- **PAT + roles** — Personal Access Tokens carry scopes (`builds:write` for CI uploads, `agent` for remote agents), and team roles (Admin / Developer / QA / Viewer) govern dashboard access.
|
|
177
178
|
|
|
178
179
|
Found a vulnerability? See [SECURITY.md](https://github.com/jo-duchan/tapflow/blob/main/SECURITY.md). For the full model, read [Security & Privacy](https://www.tapflow.dev/guide/security).
|
|
179
180
|
|
|
@@ -203,9 +204,11 @@ pm2 save && pm2 startup
|
|
|
203
204
|
**Each Mac agent:**
|
|
204
205
|
|
|
205
206
|
```sh
|
|
206
|
-
tapflow agent start --relay wss://your-relay-url
|
|
207
|
+
tapflow agent start --relay wss://your-relay-url --token <agent-token>
|
|
207
208
|
```
|
|
208
209
|
|
|
210
|
+
> A relay on a different machine accepts an agent only with an `agent`-scope token — create one in **Settings → Tokens** (Admin only). Agents on the relay's own machine (`tapflow start`) need no token. See [Remote relay authentication](https://www.tapflow.dev/guide/agent#remote-relay-authentication).
|
|
211
|
+
>
|
|
209
212
|
> For nginx / Caddy reverse proxy setup and external access, see [Self-Hosting the Relay](https://www.tapflow.dev/guide/self-hosting).
|
|
210
213
|
|
|
211
214
|
## CLI Reference
|
|
@@ -214,7 +217,7 @@ tapflow agent start --relay wss://your-relay-url
|
|
|
214
217
|
|---------|-------------|
|
|
215
218
|
| `tapflow start` | Start relay + agent together (local mode) |
|
|
216
219
|
| `tapflow relay start` | Start relay only |
|
|
217
|
-
| `tapflow agent start --relay <url
|
|
220
|
+
| `tapflow agent start --relay <url> [--token <pat>]` | Start agent and connect to a relay (remote relays need an `agent`-scope token) |
|
|
218
221
|
| `tapflow init` | Scaffold `tapflow.config.json` |
|
|
219
222
|
| `tapflow admin init` | Create the first admin account (CLI fallback) |
|
|
220
223
|
| `tapflow doctor [platform]` | Diagnose prerequisites (Node, iOS, Android) |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAuKD,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F1E"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { select, text, isCancel, cancel } from '@clack/prompts';
|
|
4
|
+
import { dnsProviders } from '@tapflowio/relay';
|
|
4
5
|
import { banner, warn } from '../lib/print.js';
|
|
5
6
|
const BASE_CONFIG = {
|
|
6
7
|
local: { port: 4000, dataDir: '.tapflow-data' },
|
|
@@ -31,6 +32,30 @@ function addToGitignore(dir, entry) {
|
|
|
31
32
|
fs.writeFileSync(gitignorePath, `# tapflow runtime data\n${entry}\n`, 'utf-8');
|
|
32
33
|
return 'created';
|
|
33
34
|
}
|
|
35
|
+
// #287 — 자격 증명 env 파일을 빈 값 템플릿으로 스캠폴드(사용자가 토큰 붙여넣음). 기존 값은 보존, 누락 키만 추가.
|
|
36
|
+
function scaffoldEnvFile(dataDir, envVars) {
|
|
37
|
+
const envPath = path.join(dataDir, '.env');
|
|
38
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
39
|
+
if (fs.existsSync(envPath)) {
|
|
40
|
+
const content = fs.readFileSync(envPath, 'utf-8');
|
|
41
|
+
const present = new Set(content.split('\n').map((l) => l.split('=')[0]?.trim()).filter(Boolean));
|
|
42
|
+
const missing = envVars.filter((v) => !present.has(v));
|
|
43
|
+
if (missing.length === 0)
|
|
44
|
+
return 'already-present';
|
|
45
|
+
const separator = content.endsWith('\n') || content === '' ? '' : '\n';
|
|
46
|
+
fs.appendFileSync(envPath, `${separator}${missing.map((v) => `${v}=`).join('\n')}\n`, 'utf-8');
|
|
47
|
+
return 'appended';
|
|
48
|
+
}
|
|
49
|
+
const header = '# tapflow DNS/ACME credentials — do not commit. Paste each token after the =.\n';
|
|
50
|
+
fs.writeFileSync(envPath, header + envVars.map((v) => `${v}=`).join('\n') + '\n', { mode: 0o600 });
|
|
51
|
+
try {
|
|
52
|
+
fs.chmodSync(envPath, 0o600);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// best-effort on platforms without POSIX permissions
|
|
56
|
+
}
|
|
57
|
+
return 'created';
|
|
58
|
+
}
|
|
34
59
|
async function promptTunnel() {
|
|
35
60
|
const provider = await select({
|
|
36
61
|
message: 'Tunnel provider',
|
|
@@ -98,6 +123,65 @@ async function promptTunnel() {
|
|
|
98
123
|
}
|
|
99
124
|
return { provider: 'rathole', serverAddr: serverAddr.trim(), publicUrl: publicUrl.trim(), ssh };
|
|
100
125
|
}
|
|
126
|
+
// LAN(=no tunnel) HTTPS 선택. WebCodecs(빠른 영상)는 secure context(HTTPS)에서만 동작.
|
|
127
|
+
// 도메인 없으면 Standard(HTTP/WASM)로 충분히 동작하므로 강요하지 않는다.
|
|
128
|
+
async function promptTls() {
|
|
129
|
+
const perf = await select({
|
|
130
|
+
message: 'Streaming performance',
|
|
131
|
+
options: [
|
|
132
|
+
{ value: 'standard', label: 'Standard', hint: 'HTTP, software decode — instant, no domain needed' },
|
|
133
|
+
{ value: 'high', label: 'High performance', hint: 'HTTPS, hardware decode (WebCodecs) — smooth, needs a domain' },
|
|
134
|
+
],
|
|
135
|
+
});
|
|
136
|
+
if (isCancel(perf)) {
|
|
137
|
+
cancel('Cancelled.');
|
|
138
|
+
process.exit(0);
|
|
139
|
+
}
|
|
140
|
+
if (perf !== 'high')
|
|
141
|
+
return null;
|
|
142
|
+
const method = await select({
|
|
143
|
+
message: 'Certificate method',
|
|
144
|
+
options: [
|
|
145
|
+
...dnsProviders.list().map((p) => ({ value: p.name, label: p.label, hint: p.hint })),
|
|
146
|
+
{ value: 'import', label: 'Existing certificate', hint: 'bring your own cert & key files' },
|
|
147
|
+
],
|
|
148
|
+
});
|
|
149
|
+
if (isCancel(method)) {
|
|
150
|
+
cancel('Cancelled.');
|
|
151
|
+
process.exit(0);
|
|
152
|
+
}
|
|
153
|
+
if (method === 'import') {
|
|
154
|
+
const certPath = await text({
|
|
155
|
+
message: 'Certificate path (fullchain PEM)',
|
|
156
|
+
placeholder: '/path/to/fullchain.pem',
|
|
157
|
+
validate: (v) => (!v?.trim() ? 'Required' : undefined),
|
|
158
|
+
});
|
|
159
|
+
if (isCancel(certPath)) {
|
|
160
|
+
cancel('Cancelled.');
|
|
161
|
+
process.exit(0);
|
|
162
|
+
}
|
|
163
|
+
const keyPath = await text({
|
|
164
|
+
message: 'Private key path (PEM)',
|
|
165
|
+
placeholder: '/path/to/privkey.pem',
|
|
166
|
+
validate: (v) => (!v?.trim() ? 'Required' : undefined),
|
|
167
|
+
});
|
|
168
|
+
if (isCancel(keyPath)) {
|
|
169
|
+
cancel('Cancelled.');
|
|
170
|
+
process.exit(0);
|
|
171
|
+
}
|
|
172
|
+
return { mode: 'import-cert', certPath: certPath.trim(), keyPath: keyPath.trim() };
|
|
173
|
+
}
|
|
174
|
+
const domain = await text({
|
|
175
|
+
message: 'Domain for tapflow (its A record points to this Mac on the LAN)',
|
|
176
|
+
placeholder: 'tap.yourcompany.com',
|
|
177
|
+
validate: (v) => (!v?.trim() ? 'Required' : undefined),
|
|
178
|
+
});
|
|
179
|
+
if (isCancel(domain)) {
|
|
180
|
+
cancel('Cancelled.');
|
|
181
|
+
process.exit(0);
|
|
182
|
+
}
|
|
183
|
+
return { mode: 'byo-api-token', domain: domain.trim(), dnsProvider: method };
|
|
184
|
+
}
|
|
101
185
|
export async function cmdInitConfig(opts) {
|
|
102
186
|
const configPath = path.join(process.cwd(), 'tapflow.config.json');
|
|
103
187
|
if (fs.existsSync(configPath) && !opts.force) {
|
|
@@ -124,7 +208,16 @@ export async function cmdInitConfig(opts) {
|
|
|
124
208
|
else if (process.stdin.isTTY) {
|
|
125
209
|
tunnel = await promptTunnel();
|
|
126
210
|
}
|
|
127
|
-
|
|
211
|
+
// HTTPS(WebCodecs)는 LAN(=no tunnel) 경로에서만 위저드로 묻는다. tailscale/rathole의 HTTPS는 후속.
|
|
212
|
+
let tls = null;
|
|
213
|
+
if (tunnel == null && process.stdin.isTTY) {
|
|
214
|
+
tls = await promptTls();
|
|
215
|
+
}
|
|
216
|
+
const configOut = {
|
|
217
|
+
...BASE_CONFIG,
|
|
218
|
+
...(tunnel != null ? { tunnel } : {}),
|
|
219
|
+
...(tls != null ? { tls } : {}),
|
|
220
|
+
};
|
|
128
221
|
try {
|
|
129
222
|
fs.writeFileSync(configPath, JSON.stringify(configOut, null, 2) + '\n', 'utf-8');
|
|
130
223
|
}
|
|
@@ -134,6 +227,17 @@ export async function cmdInitConfig(opts) {
|
|
|
134
227
|
]);
|
|
135
228
|
process.exit(1);
|
|
136
229
|
}
|
|
230
|
+
// byo-api-token: 토큰 재export 없이 재시작 가능하도록 자격 증명 env 파일을 스캠폴드(빈 변수명만 작성).
|
|
231
|
+
let envScaffold = 'skipped';
|
|
232
|
+
if (tls?.mode === 'byo-api-token') {
|
|
233
|
+
const envVars = dnsProviders.get(tls.dnsProvider)?.envVars ?? [];
|
|
234
|
+
try {
|
|
235
|
+
envScaffold = scaffoldEnvFile(path.join(process.cwd(), '.tapflow-data'), envVars);
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
warn(`Could not write .tapflow-data/.env: ${err instanceof Error ? err.message : String(err)}`);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
137
241
|
let gitignoreUpdated = 'skipped';
|
|
138
242
|
if (isInsideGitRepo(process.cwd())) {
|
|
139
243
|
try {
|
|
@@ -153,6 +257,19 @@ export async function cmdInitConfig(opts) {
|
|
|
153
257
|
}
|
|
154
258
|
if (tunnel)
|
|
155
259
|
lines.push(`Tunnel: ${tunnel.provider}`);
|
|
260
|
+
if (tls?.mode === 'byo-api-token') {
|
|
261
|
+
const envVars = dnsProviders.get(tls.dnsProvider)?.envVars.join(', ') ?? 'the provider credentials';
|
|
262
|
+
lines.push(`HTTPS: ${tls.dnsProvider} DNS-01 for ${tls.domain}.`);
|
|
263
|
+
if (envScaffold === 'created' || envScaffold === 'appended') {
|
|
264
|
+
lines.push(`Paste ${envVars} into .tapflow-data/.env (the relay reads it on start).`);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
lines.push(`Set ${envVars} (the relay auto-publishes the A record on start).`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
else if (tls?.mode === 'import-cert') {
|
|
271
|
+
lines.push('HTTPS: import-cert. Ensure the cert/key paths exist on this Mac.');
|
|
272
|
+
}
|
|
156
273
|
lines.push('Next: tapflow start');
|
|
157
274
|
banner('success', 'CONFIG CREATED', lines);
|
|
158
275
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-start.d.ts","sourceRoot":"","sources":["../../src/commands/relay-start.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"relay-start.d.ts","sourceRoot":"","sources":["../../src/commands/relay-start.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAMD,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2E1E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { RelayServer, initDb, config } from '@tapflowio/relay';
|
|
4
|
+
import { RelayServer, initDb, config, createCertProvider, startCertRenewal, startAddressPublisher, buildCorsOrigins, proxyWithoutPublicUrlWarning, loadDataDirEnv } from '@tapflowio/relay';
|
|
5
5
|
import { banner, step, warn } from '../lib/print.js';
|
|
6
6
|
import { startConfiguredTunnel } from '../lib/tunnel-runner.js';
|
|
7
7
|
const DEFAULT_PORT = config.local.port;
|
|
@@ -17,10 +17,35 @@ export async function cmdRelayStart(opts) {
|
|
|
17
17
|
if (!fs.existsSync(path.join(process.cwd(), 'tapflow.config.json'))) {
|
|
18
18
|
warn('tapflow.config.json not found — using defaults. Run tapflow init to configure.');
|
|
19
19
|
}
|
|
20
|
+
// Load gitignored credentials (DNS/ACME tokens) before any cert issuance reads process.env.
|
|
21
|
+
const envPath = loadDataDirEnv(config.local.dataDir);
|
|
22
|
+
if (envPath)
|
|
23
|
+
step(`Loaded credentials from ${envPath}`);
|
|
20
24
|
initDb(path.join(config.local.dataDir, 'tapflow.db'));
|
|
21
|
-
|
|
25
|
+
let tls;
|
|
26
|
+
let certProvider = null;
|
|
27
|
+
if (config.tls) {
|
|
28
|
+
certProvider = createCertProvider(config.tls, { dataDir: config.local.dataDir });
|
|
29
|
+
const material = await certProvider.ensureCert();
|
|
30
|
+
tls = { cert: material.cert, key: material.key };
|
|
31
|
+
}
|
|
32
|
+
const httpScheme = tls ? 'https' : 'http';
|
|
33
|
+
const wsScheme = tls ? 'wss' : 'ws';
|
|
34
|
+
// A domain-bound cert won't validate against localhost, so advertise the cert's domain instead.
|
|
35
|
+
const displayHost = config.tls?.mode === 'byo-api-token' ? config.tls.domain : 'localhost';
|
|
36
|
+
const proxyWarning = proxyWithoutPublicUrlWarning(config);
|
|
37
|
+
if (proxyWarning)
|
|
38
|
+
warn(proxyWarning);
|
|
39
|
+
const server = new RelayServer({ port, uploadsDir: path.join(config.local.dataDir, 'uploads'), wsBackpressureBytes: config.local.wsBackpressureBytes, trustedProxies: config.local.trustedProxies, corsOrigins: buildCorsOrigins(config, port), tls });
|
|
22
40
|
await server.start();
|
|
23
|
-
step(`Relay started on
|
|
41
|
+
step(`Relay started on ${httpScheme}://${displayHost}:${port}`);
|
|
42
|
+
const stopRenewal = certProvider
|
|
43
|
+
? startCertRenewal(certProvider, { onRenew: (m) => server.updateTlsContext({ cert: m.cert, key: m.key }) })
|
|
44
|
+
: null;
|
|
45
|
+
// byo-api-token: publish the relay's LAN IP to the domain's A record so teammates just open the URL.
|
|
46
|
+
const stopPublish = config.tls?.mode === 'byo-api-token' && config.tls.publishAddress !== false
|
|
47
|
+
? startAddressPublisher(config.tls)
|
|
48
|
+
: null;
|
|
24
49
|
const SUPPORTED_PROVIDERS = ['rathole', 'tailscale'];
|
|
25
50
|
if (opts.tunnel && !SUPPORTED_PROVIDERS.includes(opts.tunnel)) {
|
|
26
51
|
banner('error', 'TUNNEL CONFIG ERROR', [`Unsupported tunnel provider: "${opts.tunnel}". Supported: ${SUPPORTED_PROVIDERS.join(', ')}`]);
|
|
@@ -39,12 +64,14 @@ export async function cmdRelayStart(opts) {
|
|
|
39
64
|
publicUrl = started.publicUrl;
|
|
40
65
|
}
|
|
41
66
|
banner('success', 'TAPFLOW RELAY READY', [
|
|
42
|
-
`Relay :
|
|
67
|
+
`Relay : ${httpScheme}://${displayHost}:${port}`,
|
|
43
68
|
...(publicUrl ? [`Public : ${publicUrl}`] : []),
|
|
44
|
-
`Connect Mac agents: tapflow agent start --relay
|
|
69
|
+
`Connect Mac agents: tapflow agent start --relay ${wsScheme}://<host>:${port}`,
|
|
45
70
|
'Press Ctrl+C to stop.',
|
|
46
71
|
]);
|
|
47
72
|
process.on('SIGINT', () => {
|
|
73
|
+
stopRenewal?.();
|
|
74
|
+
stopPublish?.();
|
|
48
75
|
void tunnel?.stop();
|
|
49
76
|
process.exit(0);
|
|
50
77
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-start.js","sourceRoot":"","sources":["../../src/commands/relay-start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"relay-start.js","sourceRoot":"","sources":["../../src/commands/relay-start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAC3L,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAA;AAQ/D,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAA;AAEtC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAA;AAEzF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAA;IACzC,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,WAAW,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAA;IAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;QACpE,IAAI,CAAC,gFAAgF,CAAC,CAAA;IACxF,CAAC;IACD,4FAA4F;IAC5F,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpD,IAAI,OAAO;QAAE,IAAI,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAA;IACvD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAA;IAErD,IAAI,GAA8C,CAAA;IAClD,IAAI,YAAY,GAAiD,IAAI,CAAA;IACrE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,YAAY,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QAChF,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAA;QAChD,GAAG,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAA;IAClD,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACnC,gGAAgG;IAChG,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAA;IAE1F,MAAM,YAAY,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAA;IACzD,IAAI,YAAY;QAAE,IAAI,CAAC,YAAY,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,cAAc,EAAE,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAA;IACtP,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACpB,IAAI,CAAC,oBAAoB,UAAU,MAAM,WAAW,IAAI,IAAI,EAAE,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,YAAY;QAC9B,CAAC,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QAC3G,CAAC,CAAC,IAAI,CAAA;IACR,qGAAqG;IACrG,MAAM,WAAW,GACf,MAAM,CAAC,GAAG,EAAE,IAAI,KAAK,eAAe,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,KAAK,KAAK;QACzE,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,GAAG,CAAC;QACnC,CAAC,CAAC,IAAI,CAAA;IAEV,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,iCAAiC,IAAI,CAAC,MAAM,iBAAiB,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAA;QACvI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAC/B,IAAI,MAAM,GAAwB,IAAI,CAAA;IAEtC,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,uEAAuE,CAAC,CAAC,CAAA;YACjH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;QAC5D,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;QACvB,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,SAAS,EAAE,qBAAqB,EAAE;QACvC,YAAY,UAAU,MAAM,WAAW,IAAI,IAAI,EAAE;QACjD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,oDAAoD,QAAQ,aAAa,IAAI,EAAE;QAC/E,uBAAuB;KACxB,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,WAAW,EAAE,EAAE,CAAA;QACf,WAAW,EAAE,EAAE,CAAA;QACf,KAAK,MAAM,EAAE,IAAI,EAAE,CAAA;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tapflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Self-hosted iOS/Android simulator streaming for the whole team",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ios",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@clack/prompts": "^1.5.0",
|
|
47
47
|
"cac": "^6.7.14",
|
|
48
|
-
"ws": "^8.
|
|
48
|
+
"ws": "^8.21.0",
|
|
49
49
|
"zod": "^4.4.3",
|
|
50
|
-
"@tapflowio/agent-core": "0.
|
|
51
|
-
"@tapflowio/android-agent": "0.
|
|
52
|
-
"@tapflowio/ios-agent": "0.
|
|
53
|
-
"@tapflowio/relay": "0.
|
|
50
|
+
"@tapflowio/agent-core": "0.9.0",
|
|
51
|
+
"@tapflowio/android-agent": "0.9.0",
|
|
52
|
+
"@tapflowio/ios-agent": "0.9.0",
|
|
53
|
+
"@tapflowio/relay": "0.9.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "^20.0.0",
|