@geekapps/silo-nextjs 0.0.1

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.
@@ -0,0 +1,37 @@
1
+ import type { SiloClientOptions, UploadResult, UploadOptions, SignedUrlResult, SignOptions, ListFilesResult, ListBucketsResult, SiloFile, ProcessingJob } from "./types.js";
2
+ export type { SiloClientOptions } from "./types.js";
3
+ export declare class SiloClient {
4
+ private baseUrl;
5
+ private token?;
6
+ private defaultBucket;
7
+ constructor(opts: SiloClientOptions);
8
+ private headers;
9
+ private request;
10
+ upload(file: File | Blob, opts?: UploadOptions): Promise<UploadResult>;
11
+ private uploadWithProgress;
12
+ uploadBatch(files: File[], opts?: UploadOptions): Promise<{
13
+ files: UploadResult[];
14
+ }>;
15
+ getSignedUrl(fileId: string, opts?: SignOptions): Promise<SignedUrlResult>;
16
+ getFileMeta(fileId: string): Promise<SiloFile & {
17
+ jobs: ProcessingJob[];
18
+ }>;
19
+ deleteFile(fileId: string): Promise<void>;
20
+ listBuckets(): Promise<ListBucketsResult>;
21
+ getHlsUrl(fileId: string, opts?: SignOptions): Promise<{
22
+ url: string;
23
+ storyboardUrl: string;
24
+ expiresIn: number;
25
+ }>;
26
+ listFiles(bucket?: string, opts?: {
27
+ cursor?: string;
28
+ limit?: number;
29
+ }): Promise<ListFilesResult>;
30
+ getFileUrl(bucket: string, key: string): string;
31
+ }
32
+ export declare class SiloError extends Error {
33
+ status: number;
34
+ body: string;
35
+ constructor(status: number, body: string);
36
+ }
37
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;gBAElB,IAAI,EAAE,iBAAiB;IAMnC,OAAO,CAAC,OAAO;YAMD,OAAO;IAef,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBhF,OAAO,CAAC,kBAAkB;IA2BpB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC;IAcxF,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ9E,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG;QAAE,IAAI,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAI1E,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,WAAW,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAIzC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAWrH,SAAS,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAQ1G,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;CAGhD;AAED,qBAAa,SAAU,SAAQ,KAAK;IAEzB,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM;CAKtB"}
package/dist/client.js ADDED
@@ -0,0 +1,132 @@
1
+ export class SiloClient {
2
+ baseUrl;
3
+ token;
4
+ defaultBucket;
5
+ constructor(opts) {
6
+ this.baseUrl = opts.baseUrl.replace(/\/$/, "");
7
+ if (opts.token !== undefined)
8
+ this.token = opts.token;
9
+ this.defaultBucket = opts.defaultBucket ?? "default";
10
+ }
11
+ headers(extra) {
12
+ const h = { ...extra };
13
+ if (this.token)
14
+ h["Authorization"] = `Bearer ${this.token}`;
15
+ return h;
16
+ }
17
+ async request(path, init = {}) {
18
+ const res = await fetch(`${this.baseUrl}${path}`, {
19
+ ...init,
20
+ headers: { ...this.headers(), ...init.headers },
21
+ });
22
+ if (!res.ok) {
23
+ const body = await res.text();
24
+ throw new SiloError(res.status, body);
25
+ }
26
+ if (res.status === 204)
27
+ return undefined;
28
+ return res.json();
29
+ }
30
+ async upload(file, opts = {}) {
31
+ const bucket = opts.bucket ?? this.defaultBucket;
32
+ const params = new URLSearchParams({ bucket });
33
+ if (opts.expiresIn)
34
+ params.set("expiresIn", String(opts.expiresIn));
35
+ if (opts.private !== undefined)
36
+ params.set("private", String(opts.private));
37
+ const formData = new FormData();
38
+ formData.append("file", file, file instanceof File ? file.name : "upload");
39
+ if (opts.onProgress) {
40
+ return this.uploadWithProgress(formData, params, opts.onProgress);
41
+ }
42
+ return this.request(`/upload?${params}`, {
43
+ method: "POST",
44
+ body: formData,
45
+ });
46
+ }
47
+ uploadWithProgress(formData, params, onProgress) {
48
+ return new Promise((resolve, reject) => {
49
+ const xhr = new XMLHttpRequest();
50
+ xhr.open("POST", `${this.baseUrl}/upload?${params}`);
51
+ if (this.token)
52
+ xhr.setRequestHeader("Authorization", `Bearer ${this.token}`);
53
+ xhr.upload.addEventListener("progress", (e) => {
54
+ if (e.lengthComputable)
55
+ onProgress(Math.round((e.loaded / e.total) * 100));
56
+ });
57
+ xhr.addEventListener("load", () => {
58
+ if (xhr.status >= 200 && xhr.status < 300) {
59
+ resolve(JSON.parse(xhr.responseText));
60
+ }
61
+ else {
62
+ reject(new SiloError(xhr.status, xhr.responseText));
63
+ }
64
+ });
65
+ xhr.addEventListener("error", () => reject(new SiloError(0, "Network error")));
66
+ xhr.send(formData);
67
+ });
68
+ }
69
+ async uploadBatch(files, opts = {}) {
70
+ const bucket = opts.bucket ?? this.defaultBucket;
71
+ const params = new URLSearchParams({ bucket });
72
+ if (opts.expiresIn)
73
+ params.set("expiresIn", String(opts.expiresIn));
74
+ const formData = new FormData();
75
+ for (const file of files)
76
+ formData.append("file", file, file.name);
77
+ return this.request(`/upload/batch?${params}`, {
78
+ method: "POST",
79
+ body: formData,
80
+ });
81
+ }
82
+ async getSignedUrl(fileId, opts = {}) {
83
+ return this.request(`/files/${fileId}/sign`, {
84
+ method: "POST",
85
+ headers: { "Content-Type": "application/json" },
86
+ body: JSON.stringify(opts),
87
+ });
88
+ }
89
+ async getFileMeta(fileId) {
90
+ return this.request(`/files/${fileId}/meta`);
91
+ }
92
+ async deleteFile(fileId) {
93
+ return this.request(`/files/${fileId}`, { method: "DELETE" });
94
+ }
95
+ async listBuckets() {
96
+ return this.request("/buckets");
97
+ }
98
+ async getHlsUrl(fileId, opts = {}) {
99
+ const { url, expiresIn } = await this.getSignedUrl(fileId, opts);
100
+ // Extract token from signed URL: .../key.TOKEN
101
+ const tokenMatch = url.match(/\.([^./?]+)(?:\?|$)/);
102
+ if (!tokenMatch)
103
+ return { url, storyboardUrl: "", expiresIn };
104
+ const token = tokenMatch[1];
105
+ const hlsUrl = `${this.baseUrl}/files/${fileId}/hls?token=${token}`;
106
+ const storyboardUrl = `${this.baseUrl}/files/${fileId}/storyboard?token=${token}`;
107
+ return { url: hlsUrl, storyboardUrl, expiresIn };
108
+ }
109
+ async listFiles(bucket, opts = {}) {
110
+ const b = bucket ?? this.defaultBucket;
111
+ const params = new URLSearchParams();
112
+ if (opts.cursor)
113
+ params.set("cursor", opts.cursor);
114
+ if (opts.limit)
115
+ params.set("limit", String(opts.limit));
116
+ return this.request(`/buckets/${b}/files?${params}`);
117
+ }
118
+ getFileUrl(bucket, key) {
119
+ return `${this.baseUrl}/files/${bucket}/${key}`;
120
+ }
121
+ }
122
+ export class SiloError extends Error {
123
+ status;
124
+ body;
125
+ constructor(status, body) {
126
+ super(`Silo API error ${status}: ${body}`);
127
+ this.status = status;
128
+ this.body = body;
129
+ this.name = "SiloError";
130
+ }
131
+ }
132
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { useUpload } from "./use-upload.js";
2
+ export { useSignedUrl } from "./use-signed-url.js";
3
+ export { useFileStatus } from "./use-file-status.js";
4
+ export { useSiloClient } from "./use-silo-client.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { useUpload } from "./use-upload.js";
2
+ export { useSignedUrl } from "./use-signed-url.js";
3
+ export { useFileStatus } from "./use-file-status.js";
4
+ export { useSiloClient } from "./use-silo-client.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { SiloFile, ProcessingJob } from "../types.js";
2
+ export interface FileStatusState {
3
+ file: (SiloFile & {
4
+ jobs: ProcessingJob[];
5
+ }) | null;
6
+ loading: boolean;
7
+ error: Error | null;
8
+ isProcessing: boolean;
9
+ isDone: boolean;
10
+ isFailed: boolean;
11
+ }
12
+ export declare function useFileStatus(fileId: string | null | undefined, opts?: {
13
+ pollInterval?: number;
14
+ }): FileStatusState;
15
+ //# sourceMappingURL=use-file-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-file-status.d.ts","sourceRoot":"","sources":["../../src/hooks/use-file-status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAGhF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,CAAC,QAAQ,GAAG;QAAE,IAAI,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,GAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,GACnC,eAAe,CAgDjB"}
@@ -0,0 +1,48 @@
1
+ "use client";
2
+ import { useState, useEffect, useRef } from "react";
3
+ import { useSiloClient } from "./use-silo-client.js";
4
+ export function useFileStatus(fileId, opts = {}) {
5
+ const client = useSiloClient();
6
+ const [state, setState] = useState({
7
+ file: null,
8
+ loading: false,
9
+ error: null,
10
+ isProcessing: false,
11
+ isDone: false,
12
+ isFailed: false,
13
+ });
14
+ const intervalRef = useRef(null);
15
+ useEffect(() => {
16
+ if (!fileId)
17
+ return;
18
+ const fetchStatus = async () => {
19
+ try {
20
+ const file = await client.getFileMeta(fileId);
21
+ const statuses = file.jobs.map((j) => j.status);
22
+ const isProcessing = statuses.some((s) => s === "PENDING" || s === "PROCESSING");
23
+ const isFailed = statuses.some((s) => s === "FAILED" || s === "DEAD");
24
+ const isDone = statuses.length > 0 && statuses.every((s) => s === "DONE");
25
+ setState({ file, loading: false, error: null, isProcessing, isDone, isFailed });
26
+ // Stop polling when all jobs are settled
27
+ if (!isProcessing && intervalRef.current) {
28
+ clearInterval(intervalRef.current);
29
+ intervalRef.current = null;
30
+ }
31
+ }
32
+ catch (err) {
33
+ setState((prev) => ({ ...prev, loading: false, error: err instanceof Error ? err : new Error(String(err)) }));
34
+ }
35
+ };
36
+ setState((prev) => ({ ...prev, loading: true }));
37
+ void fetchStatus();
38
+ if (opts.pollInterval) {
39
+ intervalRef.current = setInterval(() => void fetchStatus(), opts.pollInterval);
40
+ }
41
+ return () => {
42
+ if (intervalRef.current)
43
+ clearInterval(intervalRef.current);
44
+ };
45
+ }, [fileId, opts.pollInterval]);
46
+ return state;
47
+ }
48
+ //# sourceMappingURL=use-file-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-file-status.js","sourceRoot":"","sources":["../../src/hooks/use-file-status.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAWrD,MAAM,UAAU,aAAa,CAC3B,MAAiC,EACjC,OAAkC,EAAE;IAEpC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAkB;QAClD,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;QACX,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,CAAwB,IAAI,CAAC,CAAC;IAExD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,YAAY,CAAC,CAAC;gBACjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC;gBACtE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;gBAE1E,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAEhF,yCAAyC;gBACzC,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBACzC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACnC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC7B,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAChH,CAAC;QACH,CAAC,CAAC;QAEF,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACjD,KAAK,WAAW,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,WAAW,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjF,CAAC;QAED,OAAO,GAAG,EAAE;YACV,IAAI,WAAW,CAAC,OAAO;gBAAE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { SignOptions } from "../types.js";
2
+ export interface SignedUrlState {
3
+ url: string | null;
4
+ loading: boolean;
5
+ error: Error | null;
6
+ }
7
+ export declare function useSignedUrl(fileId: string | null | undefined, opts?: SignOptions): SignedUrlState;
8
+ //# sourceMappingURL=use-signed-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-signed-url.d.ts","sourceRoot":"","sources":["../../src/hooks/use-signed-url.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,GAAE,WAAgB,GAAG,cAAc,CAmBtG"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { useState, useEffect } from "react";
3
+ import { useSiloClient } from "./use-silo-client.js";
4
+ export function useSignedUrl(fileId, opts = {}) {
5
+ const client = useSiloClient();
6
+ const [state, setState] = useState({ url: null, loading: false, error: null });
7
+ useEffect(() => {
8
+ if (!fileId)
9
+ return;
10
+ setState({ url: null, loading: true, error: null });
11
+ client
12
+ .getSignedUrl(fileId, opts)
13
+ .then(({ url }) => setState({ url, loading: false, error: null }))
14
+ .catch((err) => setState({ url: null, loading: false, error: err instanceof Error ? err : new Error(String(err)) }));
15
+ // opts intentionally omitted — only re-run on fileId change
16
+ // eslint-disable-next-line react-hooks/exhaustive-deps
17
+ }, [fileId]);
18
+ return state;
19
+ }
20
+ //# sourceMappingURL=use-signed-url.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-signed-url.js","sourceRoot":"","sources":["../../src/hooks/use-signed-url.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAQrD,MAAM,UAAU,YAAY,CAAC,MAAiC,EAAE,OAAoB,EAAE;IACpF,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAiB,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/F,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM;aACH,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC;aAC1B,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACjE,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CACb,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CACpG,CAAC;QACJ,4DAA4D;QAC5D,uDAAuD;IACzD,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useSiloClient(): import("../client.js").SiloClient;
2
+ //# sourceMappingURL=use-silo-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-silo-client.d.ts","sourceRoot":"","sources":["../../src/hooks/use-silo-client.ts"],"names":[],"mappings":"AAKA,wBAAgB,aAAa,sCAM5B"}
@@ -0,0 +1,11 @@
1
+ "use client";
2
+ import { useContext } from "react";
3
+ import { SiloContext } from "../provider.js";
4
+ export function useSiloClient() {
5
+ const ctx = useContext(SiloContext);
6
+ if (!ctx) {
7
+ throw new Error("useSiloClient must be used inside <SiloProvider>");
8
+ }
9
+ return ctx.client;
10
+ }
11
+ //# sourceMappingURL=use-silo-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-silo-client.js","sourceRoot":"","sources":["../../src/hooks/use-silo-client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,UAAU,aAAa;IAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC;AACpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { UploadResult, UploadOptions } from "../types.js";
2
+ export type UploadState = {
3
+ status: "idle";
4
+ } | {
5
+ status: "uploading";
6
+ progress: number;
7
+ } | {
8
+ status: "done";
9
+ result: UploadResult;
10
+ } | {
11
+ status: "error";
12
+ error: Error;
13
+ };
14
+ export declare function useUpload(defaultOpts?: UploadOptions): {
15
+ state: UploadState;
16
+ upload: (file: File | Blob, opts?: UploadOptions) => Promise<UploadResult>;
17
+ reset: () => void;
18
+ };
19
+ //# sourceMappingURL=use-upload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-upload.d.ts","sourceRoot":"","sources":["../../src/hooks/use-upload.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/D,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAClB;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC;AAEtC,wBAAgB,SAAS,CAAC,WAAW,GAAE,aAAkB;;mBAKxC,IAAI,GAAG,IAAI,SAAQ,aAAa;;EAsBhD"}
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { useState, useCallback } from "react";
3
+ import { useSiloClient } from "./use-silo-client.js";
4
+ export function useUpload(defaultOpts = {}) {
5
+ const client = useSiloClient();
6
+ const [state, setState] = useState({ status: "idle" });
7
+ const upload = useCallback(async (file, opts = {}) => {
8
+ setState({ status: "uploading", progress: 0 });
9
+ try {
10
+ const result = await client.upload(file, {
11
+ ...defaultOpts,
12
+ ...opts,
13
+ onProgress: (p) => setState({ status: "uploading", progress: p }),
14
+ });
15
+ setState({ status: "done", result });
16
+ return result;
17
+ }
18
+ catch (err) {
19
+ const error = err instanceof Error ? err : new Error(String(err));
20
+ setState({ status: "error", error });
21
+ throw error;
22
+ }
23
+ }, [client, defaultOpts]);
24
+ const reset = useCallback(() => setState({ status: "idle" }), []);
25
+ return { state, upload, reset };
26
+ }
27
+ //# sourceMappingURL=use-upload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-upload.js","sourceRoot":"","sources":["../../src/hooks/use-upload.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAQrD,MAAM,UAAU,SAAS,CAAC,cAA6B,EAAE;IACvD,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAc,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EAAE,IAAiB,EAAE,OAAsB,EAAE,EAAE,EAAE;QACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;gBACvC,GAAG,WAAW;gBACd,GAAG,IAAI;gBACP,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;aAClE,CAAC,CAAC;YACH,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACrC,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YACrC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,WAAW,CAAC,CACtB,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAElE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { SiloClient, SiloError } from "./client.js";
2
+ export { SiloProvider, SiloContext } from "./provider.js";
3
+ export { useUpload, useSignedUrl, useFileStatus, useSiloClient } from "./hooks/index.js";
4
+ export type { SiloFile, SiloFileMetadata, SiloBucket, UploadResult, SignedUrlResult, ListFilesResult, ListBucketsResult, SiloClientOptions, UploadOptions, SignOptions, ProcessingJob, ProcessingJobStatus, } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,YAAY,EACV,QAAQ,EACR,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { SiloClient, SiloError } from "./client.js";
2
+ export { SiloProvider, SiloContext } from "./provider.js";
3
+ export { useUpload, useSignedUrl, useFileStatus, useSiloClient } from "./hooks/index.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type ReactNode } from "react";
2
+ import { SiloClient, type SiloClientOptions } from "./client.js";
3
+ interface SiloContextValue {
4
+ client: SiloClient;
5
+ }
6
+ export declare const SiloContext: import("react").Context<SiloContextValue | null>;
7
+ export declare function SiloProvider({ children, ...opts }: SiloClientOptions & {
8
+ children: ReactNode;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE,UAAU,gBAAgB;IACxB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,GAAG,IAAI,EACR,EAAE,iBAAiB,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAG7C"}
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useMemo } from "react";
4
+ import { SiloClient } from "./client.js";
5
+ export const SiloContext = createContext(null);
6
+ export function SiloProvider({ children, ...opts }) {
7
+ const client = useMemo(() => new SiloClient(opts), [opts.baseUrl, opts.token, opts.defaultBucket]);
8
+ return _jsx(SiloContext.Provider, { value: { client }, children: children });
9
+ }
10
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,aAAa,EAAE,OAAO,EAAkB,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,UAAU,EAA0B,MAAM,aAAa,CAAC;AAMjE,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAExE,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,GAAG,IAAI,EACqC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IACnG,OAAO,KAAC,WAAW,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,MAAM,EAAE,YAAG,QAAQ,GAAwB,CAAC;AACpF,CAAC"}
@@ -0,0 +1,89 @@
1
+ export interface SiloFile {
2
+ id: string;
3
+ key: string;
4
+ bucket: string;
5
+ originalName: string;
6
+ mimeType: string;
7
+ size: number;
8
+ isPrivate: boolean;
9
+ expiresAt?: string;
10
+ createdAt: string;
11
+ updatedAt: string;
12
+ metadata?: SiloFileMetadata;
13
+ jobs?: Array<{
14
+ id: string;
15
+ status: ProcessingJobStatus;
16
+ type: string;
17
+ }>;
18
+ }
19
+ export interface SiloFileMetadata {
20
+ id: string;
21
+ fileId: string;
22
+ width?: number;
23
+ height?: number;
24
+ format?: string;
25
+ duration?: number;
26
+ fps?: number;
27
+ videoCodec?: string;
28
+ audioCodec?: string;
29
+ hasHls: boolean;
30
+ hasAv1: boolean;
31
+ caption?: string;
32
+ altText?: string;
33
+ }
34
+ export interface UploadResult {
35
+ id: string;
36
+ key: string;
37
+ bucket: string;
38
+ url: string;
39
+ signedUrl?: string;
40
+ mimeType: string;
41
+ size: number;
42
+ category: "image" | "video" | "audio" | "document";
43
+ processingJobId?: string;
44
+ }
45
+ export interface SignedUrlResult {
46
+ url: string;
47
+ expiresIn: number;
48
+ }
49
+ export interface ListFilesResult {
50
+ items: SiloFile[];
51
+ nextCursor?: string;
52
+ }
53
+ export interface SiloClientOptions {
54
+ baseUrl: string;
55
+ token?: string;
56
+ defaultBucket?: string;
57
+ }
58
+ export interface UploadOptions {
59
+ bucket?: string;
60
+ expiresIn?: number;
61
+ private?: boolean;
62
+ onProgress?: (progress: number) => void;
63
+ }
64
+ export interface SignOptions {
65
+ ttl?: number;
66
+ disposition?: "inline" | "attachment";
67
+ }
68
+ export type ProcessingJobStatus = "PENDING" | "PROCESSING" | "DONE" | "FAILED" | "DEAD";
69
+ export interface SiloBucket {
70
+ id: string;
71
+ name: string;
72
+ fileCount: number;
73
+ lastUploadAt: string | null;
74
+ }
75
+ export interface ListBucketsResult {
76
+ items: SiloBucket[];
77
+ }
78
+ export interface ProcessingJob {
79
+ id: string;
80
+ fileId: string;
81
+ type: string;
82
+ status: ProcessingJobStatus;
83
+ attempts: number;
84
+ error?: string;
85
+ createdAt: string;
86
+ startedAt?: string;
87
+ finishedAt?: string;
88
+ }
89
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@geekapps/silo-nextjs",
3
+ "version": "0.0.1",
4
+ "description": "Silo SDK for Next.js — typed client + React hooks",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/index.js",
14
+ "types": "./dist/index.d.ts"
15
+ },
16
+ "./client": {
17
+ "import": "./dist/client.js",
18
+ "types": "./dist/client.d.ts"
19
+ },
20
+ "./hooks": {
21
+ "import": "./dist/hooks/index.js",
22
+ "types": "./dist/hooks/index.d.ts"
23
+ }
24
+ },
25
+ "scripts": {
26
+ "build": "tsc -p tsconfig.json",
27
+ "dev": "tsc -p tsconfig.json --watch",
28
+ "typecheck": "tsc --noEmit"
29
+ },
30
+ "peerDependencies": {
31
+ "react": ">=19.0.0"
32
+ },
33
+ "devDependencies": {
34
+ "@types/node": "^24.0.0",
35
+ "@types/react": "^19.1.8",
36
+ "typescript": "^5.9.3"
37
+ }
38
+ }