@tharris5141/asset-sdk 1.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,18 @@
1
+ export declare const getAssetUrl: (assetId?: string | null) => Promise<string | null>;
2
+ export declare const useAssetUrl: (assetId?: string | null) => string | null;
3
+ export interface UploadAssetOptions {
4
+ purpose: string;
5
+ tenantId: string;
6
+ accessToken?: string;
7
+ onProgress?: (percent: number) => void;
8
+ }
9
+ export declare const uploadAsset: (file: File | Blob | {
10
+ uri: string;
11
+ name: string;
12
+ type?: string;
13
+ }, options: UploadAssetOptions) => Promise<{
14
+ assetId: string;
15
+ url: string;
16
+ } | null>;
17
+ export declare const deleteAsset: (assetId: string) => Promise<boolean>;
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,WAAW,GAAU,UAAU,MAAM,GAAG,IAAI,KAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAkBhF,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,UAAU,MAAM,GAAG,IAAI,KAAG,MAAM,GAAG,IAM9D,CAAA;AAKD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;AAED,eAAO,MAAM,WAAW,GACtB,MAAM,IAAI,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAChE,SAAS,kBAAkB,KAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkDjD,CAAA;AAKD,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,OAAO,CASlE,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.deleteAsset = exports.uploadAsset = exports.useAssetUrl = exports.getAssetUrl = void 0;
37
+ // packages/sdk/src/index.ts
38
+ const React = __importStar(require("react"));
39
+ const getBaseUrl = () => {
40
+ // @ts-ignore – Expo injects EXPO_PUBLIC_* at build time
41
+ const env = process?.env?.EXPO_PUBLIC_ENV || 'development';
42
+ switch (env) {
43
+ case 'production': return 'https://assets.summit-one.app/';
44
+ case 'staging': return 'https://summit-asset-service-staging.up.railway.app';
45
+ default: return 'https://summit-asset-service-development.up.railway.app';
46
+ }
47
+ };
48
+ const cache = new Map();
49
+ const getAssetUrl = async (assetId) => {
50
+ if (!assetId)
51
+ return null;
52
+ const cached = cache.get(assetId);
53
+ if (cached && cached.expiresAt > Date.now() + 60_000)
54
+ return cached.url;
55
+ try {
56
+ const res = await fetch(`${getBaseUrl()}/assets/${assetId}/url`, { cache: 'no-store' });
57
+ if (!res.ok)
58
+ return null;
59
+ const data = await res.json();
60
+ if (data.url) {
61
+ cache.set(assetId, { url: data.url, expiresAt: Date.now() + 10 * 60 * 1000 });
62
+ return data.url;
63
+ }
64
+ }
65
+ catch (e) {
66
+ console.warn('[@summit/asset-sdk] failed to fetch URL', e);
67
+ }
68
+ return null;
69
+ };
70
+ exports.getAssetUrl = getAssetUrl;
71
+ const useAssetUrl = (assetId) => {
72
+ const [url, setUrl] = React.useState(null);
73
+ React.useEffect(() => {
74
+ (0, exports.getAssetUrl)(assetId).then(setUrl);
75
+ }, [assetId]);
76
+ return url;
77
+ };
78
+ exports.useAssetUrl = useAssetUrl;
79
+ const uploadAsset = async (file, options) => {
80
+ const { purpose, tenantId, onProgress, accessToken } = options; // <--- Destructure it
81
+ const filename = 'name' in file ? file.name : 'upload';
82
+ const mimeType = file.type || 'application/octet-stream';
83
+ const headers = { 'Content-Type': 'application/json' };
84
+ if (accessToken) {
85
+ headers['Authorization'] = `Bearer ${accessToken}`; // <--- Attach it
86
+ }
87
+ // 1. Get signed upload URL from server
88
+ const uploadRes = await fetch(`${getBaseUrl()}/assets/upload`, {
89
+ method: 'POST',
90
+ headers: { 'Content-Type': 'application/json' },
91
+ body: JSON.stringify({
92
+ filename,
93
+ mime_type: mimeType,
94
+ purpose,
95
+ tenant_id: tenantId,
96
+ }),
97
+ });
98
+ if (!uploadRes.ok) {
99
+ console.error('[@summit/asset-sdk] Failed to get upload URL');
100
+ return null;
101
+ }
102
+ const { asset_id, upload_url } = await uploadRes.json();
103
+ // 2. Upload directly to Supabase
104
+ return new Promise((resolve) => {
105
+ const xhr = new XMLHttpRequest();
106
+ xhr.upload.onprogress = (e) => {
107
+ if (e.lengthComputable && onProgress) {
108
+ onProgress(Math.round((e.loaded / e.total) * 100));
109
+ }
110
+ };
111
+ xhr.onload = async () => {
112
+ if (xhr.status >= 200 && xhr.status < 300) {
113
+ const url = await (0, exports.getAssetUrl)(asset_id);
114
+ resolve({ assetId: asset_id, url: url });
115
+ }
116
+ else {
117
+ resolve(null);
118
+ }
119
+ };
120
+ xhr.onerror = () => resolve(null);
121
+ xhr.open('PUT', upload_url);
122
+ xhr.setRequestHeader('Content-Type', mimeType);
123
+ xhr.send(file);
124
+ });
125
+ };
126
+ exports.uploadAsset = uploadAsset;
127
+ // ─────────────────────────────────────────────────────────────────────────────
128
+ // DELETE ASSET
129
+ // ─────────────────────────────────────────────────────────────────────────────
130
+ const deleteAsset = async (assetId) => {
131
+ try {
132
+ const res = await fetch(`${getBaseUrl()}/assets/${assetId}`, {
133
+ method: 'DELETE',
134
+ });
135
+ return res.ok;
136
+ }
137
+ catch {
138
+ return false;
139
+ }
140
+ };
141
+ exports.deleteAsset = deleteAsset;
142
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@tharris5141/asset-sdk",
3
+ "version": "1.0.1",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "scripts": {
10
+ "build": "tsc"
11
+ },
12
+ "peerDependencies": {
13
+ "react": ">=16.8.0"
14
+ },
15
+ "devDependencies": {
16
+ "@types/node": "^20.19.26",
17
+ "@types/react": "^18.3.27",
18
+ "typescript": "^5.5.4"
19
+ }
20
+ }