@opencoredev/social-sdk 0.1.1 → 0.1.2
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 +4 -2
- package/package.json +1 -1
- package/dist/cli.d.ts +0 -14
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -234
- package/dist/cli.js.map +0 -1
- package/dist/cloud/common.d.ts +0 -26
- package/dist/cloud/common.d.ts.map +0 -1
- package/dist/cloud/common.js +0 -307
- package/dist/cloud/common.js.map +0 -1
- package/dist/cloud/lifecycle.d.ts +0 -11
- package/dist/cloud/lifecycle.d.ts.map +0 -1
- package/dist/cloud/lifecycle.js +0 -108
- package/dist/cloud/lifecycle.js.map +0 -1
- package/dist/cloud/media.d.ts +0 -24
- package/dist/cloud/media.d.ts.map +0 -1
- package/dist/cloud/media.js +0 -97
- package/dist/cloud/media.js.map +0 -1
- package/dist/cloud/outcomes.d.ts +0 -10
- package/dist/cloud/outcomes.d.ts.map +0 -1
- package/dist/cloud/outcomes.js +0 -188
- package/dist/cloud/outcomes.js.map +0 -1
- package/dist/cloud/post-for-me.d.ts +0 -70
- package/dist/cloud/post-for-me.d.ts.map +0 -1
- package/dist/cloud/post-for-me.js +0 -326
- package/dist/cloud/post-for-me.js.map +0 -1
- package/dist/cloud/zernio.d.ts +0 -112
- package/dist/cloud/zernio.d.ts.map +0 -1
- package/dist/cloud/zernio.js +0 -542
- package/dist/cloud/zernio.js.map +0 -1
- package/dist/core/adapter.d.ts +0 -118
- package/dist/core/adapter.d.ts.map +0 -1
- package/dist/core/adapter.js +0 -4
- package/dist/core/adapter.js.map +0 -1
- package/dist/core/client.d.ts +0 -108
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/client.js +0 -893
- package/dist/core/client.js.map +0 -1
- package/dist/core/concurrency.d.ts +0 -10
- package/dist/core/concurrency.d.ts.map +0 -1
- package/dist/core/concurrency.js +0 -78
- package/dist/core/concurrency.js.map +0 -1
- package/dist/core/errors.d.ts +0 -45
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -44
- package/dist/core/errors.js.map +0 -1
- package/dist/core/idempotency.d.ts +0 -34
- package/dist/core/idempotency.d.ts.map +0 -1
- package/dist/core/idempotency.js +0 -59
- package/dist/core/idempotency.js.map +0 -1
- package/dist/core/index.d.ts +0 -7
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -7
- package/dist/core/index.js.map +0 -1
- package/dist/core/pagination.d.ts +0 -12
- package/dist/core/pagination.d.ts.map +0 -1
- package/dist/core/pagination.js +0 -81
- package/dist/core/pagination.js.map +0 -1
- package/dist/core/types.d.ts +0 -329
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -7
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -2
- package/dist/index.js.map +0 -1
- package/dist/platforms/bluesky.d.ts +0 -132
- package/dist/platforms/bluesky.d.ts.map +0 -1
- package/dist/platforms/bluesky.js +0 -1049
- package/dist/platforms/bluesky.js.map +0 -1
- package/dist/platforms/instagram.d.ts +0 -63
- package/dist/platforms/instagram.d.ts.map +0 -1
- package/dist/platforms/instagram.js +0 -676
- package/dist/platforms/instagram.js.map +0 -1
- package/dist/platforms/linkedin.d.ts +0 -54
- package/dist/platforms/linkedin.d.ts.map +0 -1
- package/dist/platforms/linkedin.js +0 -580
- package/dist/platforms/linkedin.js.map +0 -1
- package/dist/platforms/threads.d.ts +0 -102
- package/dist/platforms/threads.d.ts.map +0 -1
- package/dist/platforms/threads.js +0 -571
- package/dist/platforms/threads.js.map +0 -1
- package/dist/platforms/tiktok.d.ts +0 -32
- package/dist/platforms/tiktok.d.ts.map +0 -1
- package/dist/platforms/tiktok.js +0 -511
- package/dist/platforms/tiktok.js.map +0 -1
- package/dist/platforms/x-engagement.d.ts +0 -17
- package/dist/platforms/x-engagement.d.ts.map +0 -1
- package/dist/platforms/x-engagement.js +0 -47
- package/dist/platforms/x-engagement.js.map +0 -1
- package/dist/platforms/x.d.ts +0 -82
- package/dist/platforms/x.d.ts.map +0 -1
- package/dist/platforms/x.js +0 -511
- package/dist/platforms/x.js.map +0 -1
- package/dist/platforms/youtube-upload.d.ts +0 -33
- package/dist/platforms/youtube-upload.d.ts.map +0 -1
- package/dist/platforms/youtube-upload.js +0 -281
- package/dist/platforms/youtube-upload.js.map +0 -1
- package/dist/platforms/youtube.d.ts +0 -55
- package/dist/platforms/youtube.d.ts.map +0 -1
- package/dist/platforms/youtube.js +0 -561
- package/dist/platforms/youtube.js.map +0 -1
- package/dist/server/connections.d.ts +0 -124
- package/dist/server/connections.d.ts.map +0 -1
- package/dist/server/connections.js +0 -334
- package/dist/server/connections.js.map +0 -1
- package/dist/server/credentials.d.ts +0 -52
- package/dist/server/credentials.d.ts.map +0 -1
- package/dist/server/credentials.js +0 -115
- package/dist/server/credentials.js.map +0 -1
- package/dist/server/index.d.ts +0 -5
- package/dist/server/index.d.ts.map +0 -1
- package/dist/server/index.js +0 -5
- package/dist/server/index.js.map +0 -1
- package/dist/server/oauth.d.ts +0 -48
- package/dist/server/oauth.d.ts.map +0 -1
- package/dist/server/oauth.js +0 -483
- package/dist/server/oauth.js.map +0 -1
- package/dist/server/webhooks.d.ts +0 -58
- package/dist/server/webhooks.d.ts.map +0 -1
- package/dist/server/webhooks.js +0 -198
- package/dist/server/webhooks.js.map +0 -1
- package/dist/testing/index.d.ts +0 -47
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js +0 -413
- package/dist/testing/index.js.map +0 -1
- package/dist/testing.d.ts +0 -2
- package/dist/testing.d.ts.map +0 -1
- package/dist/testing.js +0 -2
- package/dist/testing.js.map +0 -1
- package/dist/transport/binary.d.ts +0 -3
- package/dist/transport/binary.d.ts.map +0 -1
- package/dist/transport/binary.js +0 -30
- package/dist/transport/binary.js.map +0 -1
- package/dist/transport/budget.d.ts +0 -4
- package/dist/transport/budget.d.ts.map +0 -1
- package/dist/transport/budget.js +0 -27
- package/dist/transport/budget.js.map +0 -1
- package/dist/transport/http.d.ts +0 -44
- package/dist/transport/http.d.ts.map +0 -1
- package/dist/transport/http.js +0 -230
- package/dist/transport/http.js.map +0 -1
- package/dist/transport/json.d.ts +0 -3
- package/dist/transport/json.d.ts.map +0 -1
- package/dist/transport/json.js +0 -11
- package/dist/transport/json.js.map +0 -1
- package/dist/transport/upload.d.ts +0 -25
- package/dist/transport/upload.d.ts.map +0 -1
- package/dist/transport/upload.js +0 -133
- package/dist/transport/upload.js.map +0 -1
- package/dist/transport/validation.d.ts +0 -6
- package/dist/transport/validation.d.ts.map +0 -1
- package/dist/transport/validation.js +0 -24
- package/dist/transport/validation.js.map +0 -1
package/dist/transport/http.js
DELETED
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import { parseJson } from "./json.js";
|
|
2
|
-
export class HttpError extends Error {
|
|
3
|
-
kind;
|
|
4
|
-
dispatched;
|
|
5
|
-
status;
|
|
6
|
-
retryAfterMs;
|
|
7
|
-
requestId;
|
|
8
|
-
name = "HttpError";
|
|
9
|
-
constructor(message, kind, dispatched, status, retryAfterMs, requestId) {
|
|
10
|
-
super(message);
|
|
11
|
-
this.kind = kind;
|
|
12
|
-
this.dispatched = dispatched;
|
|
13
|
-
this.status = status;
|
|
14
|
-
this.retryAfterMs = retryAfterMs;
|
|
15
|
-
this.requestId = requestId;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export function retryDelay(value, now) {
|
|
19
|
-
if (value === null)
|
|
20
|
-
return undefined;
|
|
21
|
-
const seconds = Number(value);
|
|
22
|
-
if (value.trim() !== "" && Number.isFinite(seconds) && seconds >= 0)
|
|
23
|
-
return seconds * 1000;
|
|
24
|
-
const timestamp = Date.parse(value);
|
|
25
|
-
return Number.isFinite(timestamp) ? Math.max(0, timestamp - now) : undefined;
|
|
26
|
-
}
|
|
27
|
-
function sleep(milliseconds, signal) {
|
|
28
|
-
return new Promise((resolve, reject) => {
|
|
29
|
-
signal.throwIfAborted();
|
|
30
|
-
const abort = () => {
|
|
31
|
-
clearTimeout(timer);
|
|
32
|
-
reject(signal.reason);
|
|
33
|
-
};
|
|
34
|
-
const timer = setTimeout(() => {
|
|
35
|
-
signal.removeEventListener("abort", abort);
|
|
36
|
-
resolve();
|
|
37
|
-
}, milliseconds);
|
|
38
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
/** Enforce cancellation even when an injected I/O implementation ignores signals. */
|
|
42
|
-
export async function abortable(work, signal) {
|
|
43
|
-
if (signal.aborted) {
|
|
44
|
-
void work.catch(() => undefined);
|
|
45
|
-
throw signal.reason;
|
|
46
|
-
}
|
|
47
|
-
let abort = () => { };
|
|
48
|
-
const cancelled = new Promise((_resolve, reject) => {
|
|
49
|
-
abort = () => reject(signal.reason);
|
|
50
|
-
signal.addEventListener("abort", abort, { once: true });
|
|
51
|
-
});
|
|
52
|
-
try {
|
|
53
|
-
return await Promise.race([work, cancelled]);
|
|
54
|
-
}
|
|
55
|
-
finally {
|
|
56
|
-
signal.removeEventListener("abort", abort);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
export async function readJson(response, limit, signal) {
|
|
60
|
-
if (response.status === 204 || !response.body)
|
|
61
|
-
return null;
|
|
62
|
-
const length = Number(response.headers.get("content-length"));
|
|
63
|
-
if (Number.isFinite(length) && length > limit) {
|
|
64
|
-
void response.body.cancel().catch(() => undefined);
|
|
65
|
-
throw new HttpError("Upstream response exceeds the configured byte limit.", "invalid-response", true, response.status);
|
|
66
|
-
}
|
|
67
|
-
const reader = response.body.getReader();
|
|
68
|
-
const chunks = [];
|
|
69
|
-
let total = 0;
|
|
70
|
-
try {
|
|
71
|
-
for (;;) {
|
|
72
|
-
const chunk = await (signal ? abortable(reader.read(), signal) : reader.read());
|
|
73
|
-
if (chunk.done)
|
|
74
|
-
break;
|
|
75
|
-
total += chunk.value.byteLength;
|
|
76
|
-
if (total > limit)
|
|
77
|
-
throw new HttpError("Upstream response exceeds the configured byte limit.", "invalid-response", true, response.status);
|
|
78
|
-
chunks.push(chunk.value);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch (error) {
|
|
82
|
-
void reader.cancel().catch(() => undefined);
|
|
83
|
-
throw error;
|
|
84
|
-
}
|
|
85
|
-
finally {
|
|
86
|
-
reader.releaseLock();
|
|
87
|
-
}
|
|
88
|
-
const bytes = new Uint8Array(total);
|
|
89
|
-
let offset = 0;
|
|
90
|
-
for (const chunk of chunks) {
|
|
91
|
-
bytes.set(chunk, offset);
|
|
92
|
-
offset += chunk.byteLength;
|
|
93
|
-
}
|
|
94
|
-
try {
|
|
95
|
-
const text = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
|
|
96
|
-
if (!text.trim())
|
|
97
|
-
return null;
|
|
98
|
-
return parseJson(text);
|
|
99
|
-
}
|
|
100
|
-
catch {
|
|
101
|
-
throw new HttpError("Upstream returned an invalid JSON response.", "invalid-response", true, response.status);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
export function createHttp(options = {}) {
|
|
105
|
-
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
106
|
-
const maxBytes = options.maxResponseBytes ?? 2 * 1024 * 1024;
|
|
107
|
-
if (!Number.isFinite(timeoutMs) ||
|
|
108
|
-
timeoutMs <= 0 ||
|
|
109
|
-
!Number.isSafeInteger(maxBytes) ||
|
|
110
|
-
maxBytes <= 0) {
|
|
111
|
-
throw new HttpError("HTTP timeout and response byte limit must be positive.", "invalid-input", false);
|
|
112
|
-
}
|
|
113
|
-
const now = options.now ?? Date.now;
|
|
114
|
-
const random = options.random ?? Math.random;
|
|
115
|
-
return async function request(input) {
|
|
116
|
-
const deadlineMs = Math.min(timeoutMs, input.timeoutMs ?? timeoutMs);
|
|
117
|
-
if (!Number.isFinite(deadlineMs) || deadlineMs <= 0)
|
|
118
|
-
throw new HttpError("Request elapsed budget must be positive.", "invalid-input", false);
|
|
119
|
-
if (input.url.protocol !== "https:" || input.url.username || input.url.password) {
|
|
120
|
-
throw new HttpError("API URLs must use HTTPS without embedded credentials.", "invalid-input", false);
|
|
121
|
-
}
|
|
122
|
-
const method = input.method ?? "GET";
|
|
123
|
-
const safe = method === "GET" || method === "HEAD";
|
|
124
|
-
const attempts = input.maxAttempts ?? 1;
|
|
125
|
-
if (!Number.isSafeInteger(attempts) ||
|
|
126
|
-
attempts < 1 ||
|
|
127
|
-
attempts > 5 ||
|
|
128
|
-
(!safe && attempts !== 1)) {
|
|
129
|
-
throw new HttpError("Use one attempt for mutations and at most five attempts for reads.", "invalid-input", false);
|
|
130
|
-
}
|
|
131
|
-
if (input.signal?.aborted)
|
|
132
|
-
throw new HttpError("Request cancelled before dispatch.", "cancelled", false);
|
|
133
|
-
const controller = new AbortController();
|
|
134
|
-
const abort = () => controller.abort(input.signal?.reason);
|
|
135
|
-
input.signal?.addEventListener("abort", abort, { once: true });
|
|
136
|
-
const timer = setTimeout(() => controller.abort(new Error("HTTP deadline exceeded")), deadlineMs);
|
|
137
|
-
const started = now();
|
|
138
|
-
let dispatched = false;
|
|
139
|
-
try {
|
|
140
|
-
for (let attempt = 1; attempt <= attempts; attempt++) {
|
|
141
|
-
controller.signal.throwIfAborted();
|
|
142
|
-
const attemptStarted = now();
|
|
143
|
-
let status;
|
|
144
|
-
let delay;
|
|
145
|
-
try {
|
|
146
|
-
dispatched = true;
|
|
147
|
-
const pendingResponse = (options.fetch ?? globalThis.fetch)(input.url, {
|
|
148
|
-
method,
|
|
149
|
-
...(input.headers ? { headers: input.headers } : {}),
|
|
150
|
-
...(input.body !== undefined ? { body: input.body } : {}),
|
|
151
|
-
signal: controller.signal,
|
|
152
|
-
redirect: "error",
|
|
153
|
-
});
|
|
154
|
-
void pendingResponse.then((response) => {
|
|
155
|
-
if (controller.signal.aborted)
|
|
156
|
-
void response.body?.cancel().catch(() => undefined);
|
|
157
|
-
}, () => undefined);
|
|
158
|
-
const response = await abortable(pendingResponse, controller.signal);
|
|
159
|
-
status = response.status;
|
|
160
|
-
if (response.ok) {
|
|
161
|
-
const body = method === "HEAD" ? null : await readJson(response, maxBytes, controller.signal);
|
|
162
|
-
if (!input.responseHeaders)
|
|
163
|
-
return body;
|
|
164
|
-
const headers = {};
|
|
165
|
-
for (const name of input.responseHeaders) {
|
|
166
|
-
const value = response.headers.get(name);
|
|
167
|
-
if (value !== null)
|
|
168
|
-
headers[name.toLowerCase()] = value;
|
|
169
|
-
}
|
|
170
|
-
return { body, headers };
|
|
171
|
-
}
|
|
172
|
-
delay = retryDelay(response.headers.get("retry-after"), now());
|
|
173
|
-
void response.body?.cancel().catch(() => undefined);
|
|
174
|
-
// Response bodies and URL query strings may contain credentials or user content.
|
|
175
|
-
throw new HttpError(`Upstream request failed with HTTP ${response.status}.`, "http", true, response.status, delay);
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
if (controller.signal.aborted)
|
|
179
|
-
throw error;
|
|
180
|
-
const retryable = !(error instanceof HttpError) ||
|
|
181
|
-
(error.kind === "http" &&
|
|
182
|
-
(error.status === 429 || (error.status !== undefined && error.status >= 500)));
|
|
183
|
-
if (!safe || !retryable || attempt >= attempts) {
|
|
184
|
-
if (error instanceof HttpError)
|
|
185
|
-
throw error;
|
|
186
|
-
throw new HttpError("Network request failed; a dispatched mutation may have been accepted.", "network", true);
|
|
187
|
-
}
|
|
188
|
-
delay ??=
|
|
189
|
-
Math.min(200 * 2 ** (attempt - 1), 5_000) * (0.5 + Math.max(0, Math.min(1, random())));
|
|
190
|
-
}
|
|
191
|
-
finally {
|
|
192
|
-
if (options.onRequest) {
|
|
193
|
-
// Diagnostics cannot change a write's outcome or leak a rejected promise.
|
|
194
|
-
try {
|
|
195
|
-
const pending = options.onRequest({
|
|
196
|
-
method,
|
|
197
|
-
...(status === undefined ? {} : { status }),
|
|
198
|
-
attempt,
|
|
199
|
-
elapsedMs: now() - attemptStarted,
|
|
200
|
-
});
|
|
201
|
-
if (pending)
|
|
202
|
-
void pending.catch(() => undefined);
|
|
203
|
-
}
|
|
204
|
-
catch {
|
|
205
|
-
/* application-owned diagnostics */
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
if (delay !== undefined) {
|
|
210
|
-
if (now() - started + delay >= deadlineMs)
|
|
211
|
-
throw new HttpError("Retry delay exceeds the request deadline.", "timeout", dispatched, status, delay);
|
|
212
|
-
await abortable((options.sleep ?? sleep)(delay, controller.signal), controller.signal);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
throw new HttpError("Request attempt budget exhausted.", "network", dispatched);
|
|
216
|
-
}
|
|
217
|
-
catch (error) {
|
|
218
|
-
if (input.signal?.aborted)
|
|
219
|
-
throw new HttpError("Request cancelled; a dispatched mutation may still complete remotely.", "cancelled", dispatched);
|
|
220
|
-
if (controller.signal.aborted)
|
|
221
|
-
throw new HttpError("Request deadline exceeded; reconcile dispatched mutations before retrying.", "timeout", dispatched);
|
|
222
|
-
throw error;
|
|
223
|
-
}
|
|
224
|
-
finally {
|
|
225
|
-
clearTimeout(timer);
|
|
226
|
-
input.signal?.removeEventListener("abort", abort);
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
//# sourceMappingURL=http.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
|
package/dist/transport/json.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/transport/json.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAW/C"}
|
package/dist/transport/json.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/** Preserve integer IDs that JSON.parse would otherwise round. */
|
|
2
|
-
export function parseJson(text) {
|
|
3
|
-
// Match quoted strings first so digits within strings are never rewritten.
|
|
4
|
-
const lossless = text.replace(/"(?:[^"\\]|\\[\s\S])*"|-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/g, (token) => {
|
|
5
|
-
if (token.startsWith('"') || /[.eE]/.test(token) || Number.isSafeInteger(Number(token)))
|
|
6
|
-
return token;
|
|
7
|
-
return `"${token}"`;
|
|
8
|
-
});
|
|
9
|
-
return JSON.parse(lossless);
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=json.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/transport/json.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAC3B,qEAAqE,EACrE,CAAC,KAAK,EAAE,EAAE;QACR,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrF,OAAO,KAAK,CAAC;QACf,OAAO,IAAI,KAAK,GAAG,CAAC;IACtB,CAAC,CACF,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export interface UploadSource {
|
|
2
|
-
mimeType: string;
|
|
3
|
-
size?: number;
|
|
4
|
-
/** Called exactly once per explicit upload. Return a fresh stream each time. */
|
|
5
|
-
open: () => ReadableStream<Uint8Array>;
|
|
6
|
-
}
|
|
7
|
-
export interface UploadOptions {
|
|
8
|
-
url: string;
|
|
9
|
-
source: UploadSource;
|
|
10
|
-
/** Trusted application/adapter policy, never browser-supplied. */
|
|
11
|
-
allowHost: (hostname: string) => boolean;
|
|
12
|
-
maxBytes: number;
|
|
13
|
-
maxChunkBytes?: number;
|
|
14
|
-
signal?: AbortSignal;
|
|
15
|
-
timeoutMs?: number;
|
|
16
|
-
fetch?: typeof globalThis.fetch;
|
|
17
|
-
onProgress?: (bytes: number) => void;
|
|
18
|
-
}
|
|
19
|
-
export declare function httpsUrl(value: string): URL;
|
|
20
|
-
/** A provider-issued upload URL is used once, without API authorization or redirects. */
|
|
21
|
-
export declare function upload(options: UploadOptions): Promise<{
|
|
22
|
-
bytes: number;
|
|
23
|
-
etag?: string;
|
|
24
|
-
}>;
|
|
25
|
-
//# sourceMappingURL=upload.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/transport/upload.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,IAAI,EAAE,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,kEAAkE;IAClE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAmC3C;AAED,yFAAyF;AACzF,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAuJ9F"}
|
package/dist/transport/upload.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { abortable, HttpError } from "./http.js";
|
|
2
|
-
export function httpsUrl(value) {
|
|
3
|
-
let url;
|
|
4
|
-
try {
|
|
5
|
-
url = new URL(value);
|
|
6
|
-
}
|
|
7
|
-
catch {
|
|
8
|
-
throw new HttpError("Media URL must be an absolute HTTPS URL.", "invalid-input", false);
|
|
9
|
-
}
|
|
10
|
-
if (url.protocol !== "https:" ||
|
|
11
|
-
url.username ||
|
|
12
|
-
url.password ||
|
|
13
|
-
(url.port && url.port !== "443") ||
|
|
14
|
-
url.hash) {
|
|
15
|
-
throw new HttpError("Media URL must use HTTPS port 443 without credentials or a fragment.", "invalid-input", false);
|
|
16
|
-
}
|
|
17
|
-
const hostname = url.hostname.toLowerCase();
|
|
18
|
-
if (hostname === "localhost" ||
|
|
19
|
-
hostname.endsWith(".localhost") ||
|
|
20
|
-
hostname.endsWith(".local") ||
|
|
21
|
-
hostname.includes(":") ||
|
|
22
|
-
/^\d+(\.\d+){3}$/.test(hostname)) {
|
|
23
|
-
throw new HttpError("Local and IP-literal media hosts are not permitted.", "invalid-input", false);
|
|
24
|
-
}
|
|
25
|
-
return url;
|
|
26
|
-
}
|
|
27
|
-
/** A provider-issued upload URL is used once, without API authorization or redirects. */
|
|
28
|
-
export async function upload(options) {
|
|
29
|
-
const url = httpsUrl(options.url);
|
|
30
|
-
if (!options.allowHost(url.hostname))
|
|
31
|
-
throw new HttpError("Upload host is outside the configured storage policy.", "invalid-input", false);
|
|
32
|
-
const maxChunkBytes = options.maxChunkBytes ?? 1024 * 1024;
|
|
33
|
-
if (!Number.isSafeInteger(options.maxBytes) ||
|
|
34
|
-
options.maxBytes <= 0 ||
|
|
35
|
-
!Number.isSafeInteger(maxChunkBytes) ||
|
|
36
|
-
maxChunkBytes <= 0) {
|
|
37
|
-
throw new HttpError("Upload size and chunk limits must be positive integers.", "invalid-input", false);
|
|
38
|
-
}
|
|
39
|
-
const { source } = options;
|
|
40
|
-
if (!/^(image|video|application)\/[a-z0-9.+-]+$/i.test(source.mimeType))
|
|
41
|
-
throw new HttpError("An explicit supported media MIME type is required.", "invalid-input", false);
|
|
42
|
-
if (source.size !== undefined &&
|
|
43
|
-
(!Number.isSafeInteger(source.size) || source.size < 0 || source.size > options.maxBytes)) {
|
|
44
|
-
throw new HttpError("Media size exceeds the upload limit or is invalid.", "invalid-input", false);
|
|
45
|
-
}
|
|
46
|
-
if (options.signal?.aborted)
|
|
47
|
-
throw new HttpError("Upload cancelled before opening the stream.", "cancelled", false);
|
|
48
|
-
const timeout = options.timeoutMs ?? 120_000;
|
|
49
|
-
if (!Number.isFinite(timeout) || timeout <= 0)
|
|
50
|
-
throw new HttpError("Upload deadline must be positive.", "invalid-input", false);
|
|
51
|
-
const controller = new AbortController();
|
|
52
|
-
const abort = () => controller.abort(options.signal?.reason);
|
|
53
|
-
options.signal?.addEventListener("abort", abort, { once: true });
|
|
54
|
-
const timer = setTimeout(() => controller.abort(new Error("Upload deadline exceeded")), timeout);
|
|
55
|
-
let reader;
|
|
56
|
-
let bytes = 0;
|
|
57
|
-
let dispatched = false;
|
|
58
|
-
try {
|
|
59
|
-
reader = source.open().getReader();
|
|
60
|
-
const sourceReader = reader;
|
|
61
|
-
const body = new ReadableStream({
|
|
62
|
-
async pull(output) {
|
|
63
|
-
try {
|
|
64
|
-
controller.signal.throwIfAborted();
|
|
65
|
-
const next = await abortable(sourceReader.read(), controller.signal);
|
|
66
|
-
if (next.done) {
|
|
67
|
-
if (source.size !== undefined && bytes !== source.size)
|
|
68
|
-
throw new HttpError("Upload stream length does not match declared size.", "invalid-input", dispatched);
|
|
69
|
-
output.close();
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
if (next.value.byteLength > maxChunkBytes ||
|
|
73
|
-
bytes + next.value.byteLength > options.maxBytes) {
|
|
74
|
-
throw new HttpError("Upload stream exceeds its chunk or total byte limit.", "invalid-input", dispatched);
|
|
75
|
-
}
|
|
76
|
-
bytes += next.value.byteLength;
|
|
77
|
-
output.enqueue(next.value);
|
|
78
|
-
try {
|
|
79
|
-
options.onProgress?.(bytes);
|
|
80
|
-
}
|
|
81
|
-
catch {
|
|
82
|
-
/* diagnostics cannot alter upload */
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
catch (error) {
|
|
86
|
-
void sourceReader.cancel().catch(() => undefined);
|
|
87
|
-
output.error(error);
|
|
88
|
-
}
|
|
89
|
-
},
|
|
90
|
-
cancel(reason) {
|
|
91
|
-
void sourceReader.cancel(reason).catch(() => undefined);
|
|
92
|
-
},
|
|
93
|
-
}, { highWaterMark: 1 });
|
|
94
|
-
const init = {
|
|
95
|
-
method: "PUT",
|
|
96
|
-
headers: { "Content-Type": source.mimeType },
|
|
97
|
-
body,
|
|
98
|
-
duplex: "half",
|
|
99
|
-
redirect: "error",
|
|
100
|
-
signal: controller.signal,
|
|
101
|
-
};
|
|
102
|
-
dispatched = true;
|
|
103
|
-
const pending = (options.fetch ?? globalThis.fetch)(url, init);
|
|
104
|
-
void pending.then((response) => {
|
|
105
|
-
if (controller.signal.aborted)
|
|
106
|
-
void response.body?.cancel().catch(() => undefined);
|
|
107
|
-
}, () => undefined);
|
|
108
|
-
const response = await abortable(pending, controller.signal);
|
|
109
|
-
void response.body?.cancel().catch(() => undefined);
|
|
110
|
-
if (!response.ok)
|
|
111
|
-
throw new HttpError(`Storage upload failed with HTTP ${response.status}.`, "http", true, response.status);
|
|
112
|
-
if (source.size !== undefined && bytes !== source.size)
|
|
113
|
-
throw new HttpError("Storage accepted before the full declared upload was consumed.", "invalid-response", true);
|
|
114
|
-
const etag = response.headers.get("etag");
|
|
115
|
-
return { bytes, ...(etag === null ? {} : { etag }) };
|
|
116
|
-
}
|
|
117
|
-
catch (error) {
|
|
118
|
-
if (options.signal?.aborted)
|
|
119
|
-
throw new HttpError("Upload cancelled; remote acceptance is uncertain after dispatch.", "cancelled", dispatched);
|
|
120
|
-
if (controller.signal.aborted)
|
|
121
|
-
throw new HttpError("Upload deadline exceeded.", "timeout", dispatched);
|
|
122
|
-
if (error instanceof HttpError)
|
|
123
|
-
throw error;
|
|
124
|
-
throw new HttpError("Upload failed. Reconcile the upload before explicitly reopening its source.", "network", dispatched);
|
|
125
|
-
}
|
|
126
|
-
finally {
|
|
127
|
-
clearTimeout(timer);
|
|
128
|
-
options.signal?.removeEventListener("abort", abort);
|
|
129
|
-
void reader?.cancel().catch(() => undefined);
|
|
130
|
-
reader?.releaseLock();
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
//# sourceMappingURL=upload.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../src/transport/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export declare function object(value: unknown): Record<string, unknown>;
|
|
2
|
-
export declare function array(value: unknown): unknown[];
|
|
3
|
-
export declare function string(value: unknown): string;
|
|
4
|
-
export declare function optionalString(value: unknown): string | undefined;
|
|
5
|
-
export declare function optionalNumber(value: unknown): number | undefined;
|
|
6
|
-
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/transport/validation.ts"],"names":[],"mappings":"AAEA,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAK9D;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,EAAE,CAI/C;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ7C;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEjE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEjE"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { HttpError } from "./http.js";
|
|
2
|
-
export function object(value) {
|
|
3
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
4
|
-
throw new HttpError("Upstream response must be an object.", "invalid-response", true);
|
|
5
|
-
}
|
|
6
|
-
return value;
|
|
7
|
-
}
|
|
8
|
-
export function array(value) {
|
|
9
|
-
if (!Array.isArray(value))
|
|
10
|
-
throw new HttpError("Upstream response must contain an array.", "invalid-response", true);
|
|
11
|
-
return value;
|
|
12
|
-
}
|
|
13
|
-
export function string(value) {
|
|
14
|
-
if (typeof value !== "string" || !value)
|
|
15
|
-
throw new HttpError("Upstream response is missing a string identifier or required field.", "invalid-response", true);
|
|
16
|
-
return value;
|
|
17
|
-
}
|
|
18
|
-
export function optionalString(value) {
|
|
19
|
-
return typeof value === "string" ? value : undefined;
|
|
20
|
-
}
|
|
21
|
-
export function optionalNumber(value) {
|
|
22
|
-
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
23
|
-
}
|
|
24
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/transport/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxE,MAAM,IAAI,SAAS,CAAC,sCAAsC,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAc;IAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,0CAA0C,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK;QACrC,MAAM,IAAI,SAAS,CACjB,qEAAqE,EACrE,kBAAkB,EAClB,IAAI,CACL,CAAC;IACJ,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACjF,CAAC"}
|