@sparkvault/sdk-mobile 0.1.3
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 +186 -0
- package/dist/auth.d.ts +74 -0
- package/dist/auth.js +515 -0
- package/dist/auth.js.map +1 -0
- package/dist/billing.d.ts +21 -0
- package/dist/billing.js +10 -0
- package/dist/billing.js.map +1 -0
- package/dist/client.d.ts +27 -0
- package/dist/client.js +36 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +39 -0
- package/dist/config.js +69 -0
- package/dist/config.js.map +1 -0
- package/dist/encoding.d.ts +7 -0
- package/dist/encoding.js +113 -0
- package/dist/encoding.js.map +1 -0
- package/dist/entropy.d.ts +18 -0
- package/dist/entropy.js +35 -0
- package/dist/entropy.js.map +1 -0
- package/dist/errors.d.ts +46 -0
- package/dist/errors.js +72 -0
- package/dist/errors.js.map +1 -0
- package/dist/folders.d.ts +15 -0
- package/dist/folders.js +54 -0
- package/dist/folders.js.map +1 -0
- package/dist/health.d.ts +19 -0
- package/dist/health.js +60 -0
- package/dist/health.js.map +1 -0
- package/dist/http.d.ts +45 -0
- package/dist/http.js +351 -0
- package/dist/http.js.map +1 -0
- package/dist/identity-dialog.d.ts +19 -0
- package/dist/identity-dialog.js +656 -0
- package/dist/identity-dialog.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/ingots.d.ts +99 -0
- package/dist/ingots.js +365 -0
- package/dist/ingots.js.map +1 -0
- package/dist/mutex.d.ts +6 -0
- package/dist/mutex.js +20 -0
- package/dist/mutex.js.map +1 -0
- package/dist/push-tokens.d.ts +12 -0
- package/dist/push-tokens.js +15 -0
- package/dist/push-tokens.js.map +1 -0
- package/dist/sparks.d.ts +39 -0
- package/dist/sparks.js +32 -0
- package/dist/sparks.js.map +1 -0
- package/dist/tus.d.ts +24 -0
- package/dist/tus.js +202 -0
- package/dist/tus.js.map +1 -0
- package/dist/types.d.ts +406 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +5 -0
- package/dist/validation.js +45 -0
- package/dist/validation.js.map +1 -0
- package/dist/vaults.d.ts +94 -0
- package/dist/vaults.js +106 -0
- package/dist/vaults.js.map +1 -0
- package/package.json +58 -0
- package/src/auth.ts +707 -0
- package/src/billing.ts +30 -0
- package/src/client.ts +51 -0
- package/src/config.ts +123 -0
- package/src/encoding.ts +150 -0
- package/src/entropy.ts +56 -0
- package/src/errors.ts +110 -0
- package/src/folders.ts +76 -0
- package/src/health.ts +81 -0
- package/src/http.ts +429 -0
- package/src/identity-dialog.tsx +955 -0
- package/src/index.ts +103 -0
- package/src/ingots.ts +593 -0
- package/src/mutex.ts +26 -0
- package/src/push-tokens.ts +26 -0
- package/src/sparks.ts +73 -0
- package/src/tus.ts +280 -0
- package/src/types.ts +487 -0
- package/src/validation.ts +49 -0
- package/src/vaults.ts +271 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export class MobilePushTokensClient {
|
|
2
|
+
constructor(http) {
|
|
3
|
+
this.http = http;
|
|
4
|
+
}
|
|
5
|
+
async register(pushToken) {
|
|
6
|
+
const response = await this.http.post('/push-tokens', {
|
|
7
|
+
push_token: pushToken,
|
|
8
|
+
});
|
|
9
|
+
return response.data;
|
|
10
|
+
}
|
|
11
|
+
async unregister(tokenHash) {
|
|
12
|
+
await this.http.delete(`/push-tokens/${encodeURIComponent(tokenHash)}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=push-tokens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-tokens.js","sourceRoot":"","sources":["../src/push-tokens.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,sBAAsB;IAGjC,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAAiB;QAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAA4B,cAAc,EAAE;YAC/E,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF"}
|
package/dist/sparks.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { MobileHttpClient } from './http.js';
|
|
2
|
+
export interface Spark {
|
|
3
|
+
spark_id: string;
|
|
4
|
+
status: string;
|
|
5
|
+
payload?: string;
|
|
6
|
+
content_type?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ListSparksOptions {
|
|
9
|
+
kindling?: string;
|
|
10
|
+
limit?: number;
|
|
11
|
+
cursor?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ListSparksResponse {
|
|
14
|
+
sparks: Spark[];
|
|
15
|
+
next_cursor?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface SparkResponse {
|
|
18
|
+
spark_id: string;
|
|
19
|
+
payload: string;
|
|
20
|
+
content_type?: string;
|
|
21
|
+
status?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface CreateSparkOptions {
|
|
24
|
+
payload: string;
|
|
25
|
+
contentType?: string;
|
|
26
|
+
ttlMinutes?: number;
|
|
27
|
+
kindling?: string;
|
|
28
|
+
name?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface CreateSparkResponse {
|
|
31
|
+
spark_id: string;
|
|
32
|
+
}
|
|
33
|
+
export declare class MobileSparksClient {
|
|
34
|
+
private readonly http;
|
|
35
|
+
constructor(http: MobileHttpClient);
|
|
36
|
+
list(options?: ListSparksOptions): Promise<ListSparksResponse>;
|
|
37
|
+
get(sparkId: string): Promise<SparkResponse>;
|
|
38
|
+
create(options: CreateSparkOptions): Promise<CreateSparkResponse>;
|
|
39
|
+
}
|
package/dist/sparks.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class MobileSparksClient {
|
|
2
|
+
constructor(http) {
|
|
3
|
+
this.http = http;
|
|
4
|
+
}
|
|
5
|
+
async list(options = {}) {
|
|
6
|
+
const params = new URLSearchParams();
|
|
7
|
+
if (options.kindling)
|
|
8
|
+
params.set('kindling', options.kindling);
|
|
9
|
+
if (options.limit)
|
|
10
|
+
params.set('limit', String(options.limit));
|
|
11
|
+
if (options.cursor)
|
|
12
|
+
params.set('cursor', options.cursor);
|
|
13
|
+
const query = params.toString();
|
|
14
|
+
const response = await this.http.get(query ? `/sparks?${query}` : '/sparks');
|
|
15
|
+
return response.data;
|
|
16
|
+
}
|
|
17
|
+
async get(sparkId) {
|
|
18
|
+
const response = await this.http.get(`/sparks/${encodeURIComponent(sparkId)}`);
|
|
19
|
+
return response.data;
|
|
20
|
+
}
|
|
21
|
+
async create(options) {
|
|
22
|
+
const response = await this.http.post('/sparks', {
|
|
23
|
+
payload: options.payload,
|
|
24
|
+
content_type: options.contentType,
|
|
25
|
+
ttl_minutes: options.ttlMinutes,
|
|
26
|
+
kindling: options.kindling,
|
|
27
|
+
name: options.name,
|
|
28
|
+
});
|
|
29
|
+
return response.data;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=sparks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparks.js","sourceRoot":"","sources":["../src/sparks.ts"],"names":[],"mappings":"AAuCA,MAAM,OAAO,kBAAkB;IAG7B,YAAY,IAAsB;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,UAA6B,EAAE;QACxC,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM;YAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAqB,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjG,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAgB,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9F,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAA2B;QACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAsB,SAAS,EAAE;YACpE,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,YAAY,EAAE,OAAO,CAAC,WAAW;YACjC,WAAW,EAAE,OAAO,CAAC,UAAU;YAC/B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF"}
|
package/dist/tus.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ResolvedMobileConfig } from './config.js';
|
|
2
|
+
import type { DebugLogger, UploadProgressCallback } from './types.js';
|
|
3
|
+
export interface ParsedForgeUrl {
|
|
4
|
+
baseUrl: string;
|
|
5
|
+
tusEndpoint: string;
|
|
6
|
+
istk: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TusUploadFromUriOptions {
|
|
9
|
+
fileUri: string;
|
|
10
|
+
fileSize: number;
|
|
11
|
+
filename: string;
|
|
12
|
+
contentType: string;
|
|
13
|
+
forgeUrl: string;
|
|
14
|
+
onProgress?: UploadProgressCallback;
|
|
15
|
+
abortSignal?: AbortSignal;
|
|
16
|
+
debug?: DebugLogger;
|
|
17
|
+
}
|
|
18
|
+
export declare function parseForgeUrl(forgeUrl: string): ParsedForgeUrl;
|
|
19
|
+
export declare class MobileTusUploader {
|
|
20
|
+
private readonly config;
|
|
21
|
+
constructor(config: ResolvedMobileConfig);
|
|
22
|
+
uploadFromUri(options: TusUploadFromUriOptions): Promise<void>;
|
|
23
|
+
private readChunk;
|
|
24
|
+
}
|
package/dist/tus.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { base64EncodeUtf8, base64ToBytes } from './encoding.js';
|
|
2
|
+
import { SparkVaultValidationError, TusUploadError } from './errors.js';
|
|
3
|
+
const TUS_VERSION = '1.0.0';
|
|
4
|
+
export function parseForgeUrl(forgeUrl) {
|
|
5
|
+
let url;
|
|
6
|
+
try {
|
|
7
|
+
url = new URL(forgeUrl);
|
|
8
|
+
}
|
|
9
|
+
catch {
|
|
10
|
+
throw new SparkVaultValidationError('Invalid Forge URL format');
|
|
11
|
+
}
|
|
12
|
+
if (url.protocol !== 'https:') {
|
|
13
|
+
throw new SparkVaultValidationError('Forge URL must use HTTPS protocol');
|
|
14
|
+
}
|
|
15
|
+
const istk = url.searchParams.get('istk');
|
|
16
|
+
if (!istk) {
|
|
17
|
+
throw new SparkVaultValidationError('Forge URL missing ISTK parameter');
|
|
18
|
+
}
|
|
19
|
+
const baseUrl = `${url.protocol}//${url.host}`;
|
|
20
|
+
return {
|
|
21
|
+
baseUrl,
|
|
22
|
+
tusEndpoint: `${baseUrl}${url.pathname}`,
|
|
23
|
+
istk,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function getErrorName(err) {
|
|
27
|
+
return err instanceof Error ? err.name : 'UnknownError';
|
|
28
|
+
}
|
|
29
|
+
function getErrorMessage(err) {
|
|
30
|
+
return err instanceof Error ? err.message : String(err);
|
|
31
|
+
}
|
|
32
|
+
function inferTusPhase(error) {
|
|
33
|
+
const message = error.message;
|
|
34
|
+
if (message.includes('cancelled') || message.includes('aborted'))
|
|
35
|
+
return 'cancelled';
|
|
36
|
+
if (message.includes('timeout') || message.includes('timed out'))
|
|
37
|
+
return 'timeout';
|
|
38
|
+
if (message.includes('stall'))
|
|
39
|
+
return 'stalled';
|
|
40
|
+
if (message.includes('network'))
|
|
41
|
+
return 'network';
|
|
42
|
+
if (message.includes('create') || message.includes('POST'))
|
|
43
|
+
return 'create';
|
|
44
|
+
if (message.includes('upload') || message.includes('PATCH') || message.includes('Chunk'))
|
|
45
|
+
return 'upload';
|
|
46
|
+
return 'unknown';
|
|
47
|
+
}
|
|
48
|
+
function ensureNotAborted(signal) {
|
|
49
|
+
if (signal?.aborted) {
|
|
50
|
+
throw new TusUploadError('Upload cancelled', { phase: 'cancelled' });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function toArrayBuffer(bytes) {
|
|
54
|
+
const copy = new Uint8Array(bytes.byteLength);
|
|
55
|
+
copy.set(bytes);
|
|
56
|
+
return copy.buffer;
|
|
57
|
+
}
|
|
58
|
+
async function createTusUpload(config, parsed, fileSize, filename, contentType, signal) {
|
|
59
|
+
ensureNotAborted(signal);
|
|
60
|
+
const metadata = `filename ${base64EncodeUtf8(filename)},filetype ${base64EncodeUtf8(contentType || 'application/octet-stream')}`;
|
|
61
|
+
const response = await config.fetch(parsed.tusEndpoint, {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: {
|
|
64
|
+
'Tus-Resumable': TUS_VERSION,
|
|
65
|
+
'Upload-Length': String(fileSize),
|
|
66
|
+
'Upload-Metadata': metadata,
|
|
67
|
+
'X-ISTK': parsed.istk,
|
|
68
|
+
},
|
|
69
|
+
signal,
|
|
70
|
+
timeoutMs: config.tusPostTimeoutMs,
|
|
71
|
+
}).catch(err => {
|
|
72
|
+
if (getErrorName(err) === 'AbortError') {
|
|
73
|
+
throw new TusUploadError('TUS POST request timed out', {
|
|
74
|
+
cause: err instanceof Error ? err : null,
|
|
75
|
+
filename,
|
|
76
|
+
fileSize,
|
|
77
|
+
phase: 'timeout',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
throw err;
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
const errorText = await response.text().catch(() => '');
|
|
84
|
+
throw new TusUploadError(`TUS create failed: ${response.status} - ${errorText}`, {
|
|
85
|
+
httpStatus: response.status,
|
|
86
|
+
filename,
|
|
87
|
+
fileSize,
|
|
88
|
+
phase: 'create',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
const location = response.headers.get('Location');
|
|
92
|
+
if (!location) {
|
|
93
|
+
throw new TusUploadError('TUS create response missing Location header', {
|
|
94
|
+
filename,
|
|
95
|
+
fileSize,
|
|
96
|
+
phase: 'create',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return location.startsWith('http') ? location : `${parsed.baseUrl}${location}`;
|
|
100
|
+
}
|
|
101
|
+
function uploadChunk(uploadUrl, istk, chunk, offset, timeoutMs, signal, onChunkProgress) {
|
|
102
|
+
if (typeof XMLHttpRequest === 'undefined') {
|
|
103
|
+
throw new SparkVaultValidationError('XMLHttpRequest is required for mobile TUS uploads');
|
|
104
|
+
}
|
|
105
|
+
return new Promise((resolve, reject) => {
|
|
106
|
+
const xhr = new XMLHttpRequest();
|
|
107
|
+
let settled = false;
|
|
108
|
+
const cleanup = () => {
|
|
109
|
+
signal?.removeEventListener('abort', abort);
|
|
110
|
+
};
|
|
111
|
+
const finish = (fn) => {
|
|
112
|
+
if (settled)
|
|
113
|
+
return;
|
|
114
|
+
settled = true;
|
|
115
|
+
cleanup();
|
|
116
|
+
fn();
|
|
117
|
+
};
|
|
118
|
+
const abort = () => {
|
|
119
|
+
xhr.abort();
|
|
120
|
+
finish(() => reject(new TusUploadError('Upload cancelled', { phase: 'cancelled' })));
|
|
121
|
+
};
|
|
122
|
+
if (signal?.aborted) {
|
|
123
|
+
abort();
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
127
|
+
xhr.upload.onprogress = event => {
|
|
128
|
+
if (event.lengthComputable) {
|
|
129
|
+
onChunkProgress?.(event.loaded);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
xhr.onload = () => {
|
|
133
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
134
|
+
const offsetHeader = xhr.getResponseHeader('Upload-Offset');
|
|
135
|
+
const chunkSize = chunk instanceof Blob ? chunk.size : chunk.byteLength;
|
|
136
|
+
const newOffset = offsetHeader ? parseInt(offsetHeader, 10) : offset + chunkSize;
|
|
137
|
+
finish(() => resolve(newOffset));
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
finish(() => reject(new TusUploadError(`Chunk upload failed: ${xhr.status} - ${xhr.responseText.substring(0, 200)}`, {
|
|
141
|
+
httpStatus: xhr.status,
|
|
142
|
+
phase: 'upload',
|
|
143
|
+
})));
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
xhr.onerror = () => finish(() => reject(new TusUploadError('Chunk upload network error', { phase: 'network' })));
|
|
147
|
+
xhr.onabort = () => finish(() => reject(new TusUploadError('Chunk upload aborted', { phase: 'cancelled' })));
|
|
148
|
+
xhr.ontimeout = () => finish(() => reject(new TusUploadError(`Chunk upload timeout after ${timeoutMs / 1000}s`, { phase: 'timeout' })));
|
|
149
|
+
xhr.open('PATCH', uploadUrl);
|
|
150
|
+
xhr.setRequestHeader('Tus-Resumable', TUS_VERSION);
|
|
151
|
+
xhr.setRequestHeader('Upload-Offset', String(offset));
|
|
152
|
+
xhr.setRequestHeader('Content-Type', 'application/offset+octet-stream');
|
|
153
|
+
xhr.setRequestHeader('X-ISTK', istk);
|
|
154
|
+
xhr.timeout = timeoutMs;
|
|
155
|
+
xhr.send(chunk instanceof Blob ? chunk : toArrayBuffer(chunk));
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export class MobileTusUploader {
|
|
159
|
+
constructor(config) {
|
|
160
|
+
this.config = config;
|
|
161
|
+
}
|
|
162
|
+
async uploadFromUri(options) {
|
|
163
|
+
const fileReader = this.config.fileReader;
|
|
164
|
+
if (!fileReader) {
|
|
165
|
+
throw new SparkVaultValidationError('fileReader adapter is required for URI uploads');
|
|
166
|
+
}
|
|
167
|
+
const parsed = parseForgeUrl(options.forgeUrl);
|
|
168
|
+
const debug = options.debug;
|
|
169
|
+
const cleanUri = options.fileUri.split('#')[0];
|
|
170
|
+
let bytesUploaded = 0;
|
|
171
|
+
try {
|
|
172
|
+
debug?.log(`Starting TUS upload for ${options.filename}`);
|
|
173
|
+
const uploadUrl = await createTusUpload(this.config, parsed, options.fileSize, options.filename, options.contentType, options.abortSignal);
|
|
174
|
+
while (bytesUploaded < options.fileSize) {
|
|
175
|
+
ensureNotAborted(options.abortSignal);
|
|
176
|
+
const chunkLength = Math.min(this.config.tusChunkSizeBytes, options.fileSize - bytesUploaded);
|
|
177
|
+
const chunk = await this.readChunk(fileReader, cleanUri, bytesUploaded, chunkLength);
|
|
178
|
+
const chunkStart = bytesUploaded;
|
|
179
|
+
const newOffset = await uploadChunk(uploadUrl, parsed.istk, chunk, chunkStart, this.config.tusChunkTimeoutMs, options.abortSignal, chunkUploaded => options.onProgress?.(chunkStart + chunkUploaded, options.fileSize));
|
|
180
|
+
bytesUploaded = newOffset;
|
|
181
|
+
options.onProgress?.(bytesUploaded, options.fileSize);
|
|
182
|
+
}
|
|
183
|
+
debug?.success(`TUS upload completed for ${options.filename}`);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
187
|
+
debug?.error(`Upload failed: ${getErrorMessage(error)}`);
|
|
188
|
+
if (err instanceof TusUploadError)
|
|
189
|
+
throw err;
|
|
190
|
+
throw TusUploadError.fromError(error, {
|
|
191
|
+
filename: options.filename,
|
|
192
|
+
fileSize: options.fileSize,
|
|
193
|
+
phase: inferTusPhase(error),
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async readChunk(fileReader, fileUri, position, length) {
|
|
198
|
+
const chunkBase64 = await fileReader.readAsBase64(fileUri, { position, length });
|
|
199
|
+
return base64ToBytes(chunkBase64);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=tus.js.map
|
package/dist/tus.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tus.js","sourceRoot":"","sources":["../src/tus.ts"],"names":[],"mappings":"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"}
|