Skip to content

Commit 3532dd3

Browse files
committed
basic workflow working
1 parent 736ff6c commit 3532dd3

File tree

26 files changed

+545
-245
lines changed

26 files changed

+545
-245
lines changed

apps/desktop/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
"@ts-rest/core": "^3.52.1",
5555
"@types/react-tooltip": "^4.2.4",
5656
"cva": "npm:class-variance-authority@^0.7.0",
57-
"effect": "^3.17.7",
57+
"effect": "^3.17.13",
5858
"mp4box": "^0.5.2",
5959
"posthog-js": "^1.215.3",
6060
"solid-js": "^1.9.3",
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// import { Workflows } from "@cap/web-domain";
2+
// import { HttpServer } from "@effect/platform";
3+
// import { RpcSerialization, RpcServer } from "@effect/rpc";
4+
// import { WorkflowProxy, WorkflowProxyServer } from "@effect/workflow";
5+
// import { Layer } from "effect";
6+
// import { Dependencies } from "@/lib/server";
7+
8+
// const { handler } = RpcServer.toWebHandler(
9+
// WorkflowProxy.toRpcGroup(Workflows.Workflows),
10+
// {
11+
// layer: Layer.mergeAll(
12+
// RpcSerialization.layerJson,
13+
// HttpServer.layerContext,
14+
// Dependencies,
15+
// ),
16+
// },
17+
// );
18+
19+
// export const GET = handler;
20+
// export const POST = handler;

apps/web/app/api/playlist/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ const ApiLive = HttpApiBuilder.api(Api).pipe(
6161
);
6262

6363
const [S3ProviderLayer, customBucket] =
64-
yield* s3Buckets.getProviderLayer(video.bucketId);
64+
yield* s3Buckets.getProviderById(video.bucketId);
6565

6666
return yield* getPlaylistResponse(
6767
video,
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import { Loom } from "@cap/web-domain";
2+
import {
3+
HttpApi,
4+
HttpApiBuilder,
5+
HttpApiEndpoint,
6+
HttpApiGroup,
7+
HttpServerResponse,
8+
} from "@effect/platform";
9+
import { Effect, Layer } from "effect";
10+
import { apiToHandler } from "@/lib/server";
11+
12+
export const revalidate = "force-dynamic";
13+
14+
class Api extends HttpApi.make("CapWebApi")
15+
.add(
16+
HttpApiGroup.make("root").add(HttpApiEndpoint.get("test")`/import-video`),
17+
)
18+
.prefix("/api/test") {}
19+
20+
const ApiLive = HttpApiBuilder.api(Api).pipe(
21+
Layer.provide(
22+
HttpApiBuilder.group(Api, "root", (handlers) =>
23+
handlers.handle(
24+
"test",
25+
Effect.fn(function* () {
26+
yield* Loom.ImportVideo.execute({
27+
userId: "user123",
28+
loomVideoId: "loomVideoId123",
29+
loomOrgId: "loomOrgId123",
30+
orgId: "orgId123",
31+
downloadUrl:
32+
"https://cdn.loom.com/sessions/thumbnails/95a01fba1f5f434da5af3cfbe567c6a7-10954f1f96d7b5c2.mp4",
33+
});
34+
}),
35+
),
36+
),
37+
),
38+
);
39+
40+
const { handler } = apiToHandler(ApiLive);
41+
42+
export const GET = handler;
43+
export const HEAD = handler;

apps/web/lib/server.ts

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,21 @@ import {
1010
S3Buckets,
1111
Videos,
1212
VideosPolicy,
13+
WorkflowsLayer,
1314
} from "@cap/web-backend";
1415
import { type HttpAuthMiddleware, Video } from "@cap/web-domain";
16+
import {
17+
ClusterWorkflowEngine,
18+
MessageStorage,
19+
Runners,
20+
Sharding,
21+
ShardingConfig,
22+
ShardManager,
23+
ShardStorage,
24+
} from "@effect/cluster";
1525
import * as NodeSdk from "@effect/opentelemetry/NodeSdk";
1626
import {
27+
FetchHttpClient,
1728
type HttpApi,
1829
HttpApiBuilder,
1930
HttpMiddleware,
@@ -22,6 +33,7 @@ import {
2233
import { Cause, Effect, Exit, Layer, ManagedRuntime, Option } from "effect";
2334
import { isNotFoundError } from "next/dist/client/components/not-found";
2435
import { cookies } from "next/headers";
36+
2537
import { allowedOrigins } from "@/utils/cors";
2638
import { getTracingConfig } from "./tracing";
2739

@@ -48,13 +60,27 @@ const CookiePasswordAttachmentLive = Layer.effect(
4860
}),
4961
);
5062

51-
export const Dependencies = Layer.mergeAll(
52-
S3Buckets.Default,
53-
Videos.Default,
54-
VideosPolicy.Default,
55-
Folders.Default,
56-
TracingLayer,
57-
).pipe(Layer.provideMerge(DatabaseLive));
63+
const WorkflowEngine = ClusterWorkflowEngine.layer.pipe(
64+
Layer.provideMerge(Sharding.layer),
65+
Layer.provide(ShardManager.layerClientLocal),
66+
Layer.provide(ShardStorage.layerNoop),
67+
Layer.provide(Runners.layerNoop),
68+
Layer.provideMerge(MessageStorage.layerMemory),
69+
Layer.provide(ShardingConfig.layer()),
70+
);
71+
72+
export const Dependencies = WorkflowsLayer.pipe(
73+
Layer.provideMerge(
74+
Layer.mergeAll(
75+
S3Buckets.Default,
76+
Videos.Default,
77+
VideosPolicy.Default,
78+
Folders.Default,
79+
FetchHttpClient.layer,
80+
WorkflowEngine,
81+
).pipe(Layer.provideMerge(Layer.mergeAll(DatabaseLive, TracingLayer))),
82+
),
83+
);
5884

5985
// purposefully not exposed
6086
const EffectRuntime = ManagedRuntime.make(Dependencies);

apps/web/lib/tracing.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export const getTracingConfig = Effect.gen(function* () {
2222
return {
2323
resource: { serviceName: "cap-web" },
2424
spanProcessor: Option.match(axiomProcessor, {
25-
onNone: () => [],
25+
onNone: () => [new BatchSpanProcessor(new OTLPTraceExporter({}))],
2626
onSome: (processor) => [processor],
2727
}),
2828
};

apps/web/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,11 @@
2727
"@cap/web-domain": "workspace:*",
2828
"@deepgram/sdk": "^3.3.4",
2929
"@dub/analytics": "^0.0.27",
30+
"@effect/cluster": "^0.48.6",
3031
"@effect/opentelemetry": "^0.56.1",
3132
"@effect/platform": "^0.90.1",
32-
"@effect/rpc": "^0.68.3",
33+
"@effect/rpc": "^0.69.2",
34+
"@effect/workflow": "^0.9.5",
3335
"@fortawesome/free-brands-svg-icons": "^6.7.2",
3436
"@fortawesome/free-solid-svg-icons": "^6.7.2",
3537
"@fortawesome/react-fontawesome": "^0.2.2",
@@ -75,7 +77,7 @@
7577
"dotenv": "^16.3.1",
7678
"drizzle-orm": "0.43.1",
7779
"dub": "^0.64.0",
78-
"effect": "^3.17.7",
80+
"effect": "^3.17.13",
7981
"file-saver": "^2.0.5",
8082
"framer-motion": "^11.13.1",
8183
"geist": "^1.3.1",

packages/local-docker/docker-compose.yml

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,17 @@ services:
2323
# Local S3 Strorage
2424
minio:
2525
container_name: minio-storage
26-
image: "bitnami/minio:latest"
26+
image: "minio/minio:latest"
2727
restart: unless-stopped
2828
ports:
29-
- "3902:3902"
30-
- "3903:3903"
29+
- "9000:9000"
30+
- "9001:9001"
3131
environment:
32-
- MINIO_ROOT_USER=capS3root
33-
- MINIO_ROOT_PASSWORD=capS3root
34-
- MINIO_API_PORT_NUMBER=3902
35-
- MINIO_CONSOLE_PORT_NUMBER=3903
32+
MINIO_ROOT_USER: capS3root
33+
MINIO_ROOT_PASSWORD: capS3root
3634
volumes:
37-
- minio-data:/bitnami/minio/data
38-
- minio-certs:/certs
35+
- ~/minio/data:/data
36+
command: server /data --console-address ":9001"
3937

4038
createbuckets:
4139
container_name: minio-bucket-creation
@@ -45,7 +43,7 @@ services:
4543
entrypoint: >
4644
/bin/sh -c "
4745
sleep 10;
48-
/usr/bin/mc alias set myminio http://minio:3902 capS3root capS3root;
46+
/usr/bin/mc alias set myminio http://minio:9000 capS3root capS3root;
4947
/usr/bin/mc mb myminio/capso;
5048
echo '{\"Version\": \"2012-10-17\",\"Statement\": [{\"Effect\": \"Allow\",\"Principal\": {\"AWS\": [\"*\"]},\"Action\": [\"s3:GetObject\"],\"Resource\": [\"arn:aws:s3:::capso/*\"]}]}' > /tmp/policy.json;
5149
/usr/bin/mc anonymous set-json /tmp/policy.json myminio/capso;

packages/web-api-contract-effect/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@
66
"type": "module",
77
"dependencies": {
88
"@effect/platform": "^0.90.1",
9-
"effect": "^3.17.7"
9+
"effect": "^3.17.13"
1010
}
1111
}

packages/web-backend/package.json

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@
1212
"@cap/database": "workspace:*",
1313
"@cap/utils": "workspace:*",
1414
"@cap/web-domain": "workspace:*",
15+
"@effect/cluster": "^0.48.6",
1516
"@effect/platform": "^0.90.1",
16-
"@effect/rpc": "^0.68.3",
17+
"@effect/rpc": "^0.69.2",
18+
"@effect/workflow": "^0.9.5",
1719
"@smithy/types": "^4.3.1",
1820
"drizzle-orm": "0.43.1",
19-
"effect": "^3.17.7",
20-
"server-only": "^0.0.1",
21-
"next": "14.2.3"
21+
"effect": "^3.17.13",
22+
"next": "14.2.3",
23+
"server-only": "^0.0.1"
2224
}
2325
}

0 commit comments

Comments
 (0)