@venturekit-pro/social 0.0.0-dev.20260815190251 → 0.0.0-dev.20260816114351
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/dist/adapters/facebook.d.ts +3 -2
- package/dist/adapters/facebook.d.ts.map +1 -1
- package/dist/adapters/facebook.js +47 -88
- package/dist/adapters/facebook.js.map +1 -1
- package/dist/adapters/linkedin.d.ts.map +1 -1
- package/dist/adapters/linkedin.js +22 -7
- package/dist/adapters/linkedin.js.map +1 -1
- package/package.json +4 -4
|
@@ -29,8 +29,9 @@
|
|
|
29
29
|
* all uploaded photo ids via the `attached_media` field. This is the
|
|
30
30
|
* only Graph API flow that produces a multi-image post on a Page.
|
|
31
31
|
*
|
|
32
|
-
* Meta's /photos endpoint accepts JPEG and PNG only.
|
|
33
|
-
*
|
|
32
|
+
* Meta's /photos endpoint accepts JPEG and PNG only. The format is
|
|
33
|
+
* read from the downloaded bytes rather than `media.mimeType`, and
|
|
34
|
+
* anything else (e.g. WebP, which the CMS uses for blog covers) is
|
|
34
35
|
* converted to JPEG before upload via the optional `sharp` peer
|
|
35
36
|
* dependency. The constraints allow WebP so validation doesn't block
|
|
36
37
|
* the post before the adapter can convert it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebook.d.ts","sourceRoot":"","sources":["../../src/adapters/facebook.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"facebook.d.ts","sourceRoot":"","sources":["../../src/adapters/facebook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAIV,yBAAyB,EAE1B,MAAM,aAAa,CAAC;AAmBrB,eAAO,MAAM,oBAAoB,EAAE,yBAelC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAClD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,qBAA0B,GACjC,aAAa,CA0Hf"}
|
|
@@ -29,13 +29,16 @@
|
|
|
29
29
|
* all uploaded photo ids via the `attached_media` field. This is the
|
|
30
30
|
* only Graph API flow that produces a multi-image post on a Page.
|
|
31
31
|
*
|
|
32
|
-
* Meta's /photos endpoint accepts JPEG and PNG only.
|
|
33
|
-
*
|
|
32
|
+
* Meta's /photos endpoint accepts JPEG and PNG only. The format is
|
|
33
|
+
* read from the downloaded bytes rather than `media.mimeType`, and
|
|
34
|
+
* anything else (e.g. WebP, which the CMS uses for blog covers) is
|
|
34
35
|
* converted to JPEG before upload via the optional `sharp` peer
|
|
35
36
|
* dependency. The constraints allow WebP so validation doesn't block
|
|
36
37
|
* the post before the adapter can convert it.
|
|
37
38
|
*/
|
|
38
|
-
import {
|
|
39
|
+
import { SocialPublishError, SocialValidationError } from '../types.js';
|
|
40
|
+
import { vendorFetch } from '../http.js';
|
|
41
|
+
import { downloadMedia, ensureUploadableImage, filenameForMime, } from '../media.js';
|
|
39
42
|
import { validatePost } from '../validation.js';
|
|
40
43
|
const META_GRAPH_BASE = 'https://graph.facebook.com';
|
|
41
44
|
const META_GRAPH_VERSION = 'v18.0';
|
|
@@ -80,32 +83,35 @@ export function createFacebookAdapter(config = {}) {
|
|
|
80
83
|
// original JSON body path is correct.
|
|
81
84
|
if (mediaCount === 0) {
|
|
82
85
|
const endpoint = `/${version}/${encodeURIComponent(pageId)}/feed`;
|
|
83
|
-
const
|
|
84
|
-
const res = await fbFetch('facebook', `${baseUrl}${endpoint}`, {
|
|
86
|
+
const res = await vendorFetch('facebook', `${baseUrl}${endpoint}`, {
|
|
85
87
|
method: 'POST',
|
|
86
88
|
headers: {
|
|
87
89
|
Authorization: `Bearer ${credentials.accessToken}`,
|
|
88
90
|
'Content-Type': 'application/json',
|
|
89
91
|
},
|
|
90
|
-
body: JSON.stringify(
|
|
92
|
+
body: JSON.stringify(buildFeedBody(post)),
|
|
91
93
|
});
|
|
92
94
|
return parseResult(res, post);
|
|
93
95
|
}
|
|
96
|
+
// Meta hard-caps an album at 10 photos. `validate()` already
|
|
97
|
+
// reports this, but `publish()` can be called without it (and
|
|
98
|
+
// `config.constraints` can raise `maxMediaCount` past the vendor
|
|
99
|
+
// limit), so refuse loudly rather than silently dropping content.
|
|
100
|
+
if (mediaCount > MAX_FB_PHOTOS) {
|
|
101
|
+
throw new SocialValidationError(`[social/facebook] Too many photos (${mediaCount}; Meta allows ${MAX_FB_PHOTOS} per post).`, { platform: 'facebook' });
|
|
102
|
+
}
|
|
94
103
|
// Single photo posts hit /<page-id>/photos with multipart form
|
|
95
104
|
// data. We download the image in-process and upload the bytes via
|
|
96
105
|
// the `source` field — Meta's servers don't need to fetch
|
|
97
106
|
// anything.
|
|
98
107
|
if (mediaCount === 1) {
|
|
99
|
-
const media = post.media[0];
|
|
100
108
|
const endpoint = `/${version}/${encodeURIComponent(pageId)}/photos`;
|
|
101
|
-
const
|
|
102
|
-
const form = new FormData();
|
|
109
|
+
const form = await photoForm(post.media[0], constraints.maxMediaSizeBytes);
|
|
103
110
|
form.append('message', post.body);
|
|
104
|
-
form.append('source', new Blob([imgBuf], { type: mimeType }), 'cover.jpg');
|
|
105
111
|
// Do NOT set Content-Type manually — fetch() sets the multipart
|
|
106
112
|
// boundary automatically from FormData. A manual header would
|
|
107
113
|
// omit the boundary and Meta would reject the request.
|
|
108
|
-
const res = await
|
|
114
|
+
const res = await vendorFetch('facebook', `${baseUrl}${endpoint}`, {
|
|
109
115
|
method: 'POST',
|
|
110
116
|
headers: { Authorization: `Bearer ${credentials.accessToken}` },
|
|
111
117
|
body: form,
|
|
@@ -120,12 +126,10 @@ export function createFacebookAdapter(config = {}) {
|
|
|
120
126
|
const photosEndpoint = `/${version}/${encodeURIComponent(pageId)}/photos`;
|
|
121
127
|
const feedEndpoint = `/${version}/${encodeURIComponent(pageId)}/feed`;
|
|
122
128
|
const attachedMedia = [];
|
|
123
|
-
for (const media of post.media
|
|
124
|
-
const
|
|
125
|
-
const form = new FormData();
|
|
129
|
+
for (const media of post.media) {
|
|
130
|
+
const form = await photoForm(media, constraints.maxMediaSizeBytes);
|
|
126
131
|
form.append('published', 'false');
|
|
127
|
-
|
|
128
|
-
const uploadRes = await fbFetch('facebook', `${baseUrl}${photosEndpoint}`, {
|
|
132
|
+
const uploadRes = await vendorFetch('facebook', `${baseUrl}${photosEndpoint}`, {
|
|
129
133
|
method: 'POST',
|
|
130
134
|
headers: { Authorization: `Bearer ${credentials.accessToken}` },
|
|
131
135
|
body: form,
|
|
@@ -138,12 +142,14 @@ export function createFacebookAdapter(config = {}) {
|
|
|
138
142
|
}
|
|
139
143
|
attachedMedia.push({ media_fbid: photoId });
|
|
140
144
|
}
|
|
141
|
-
// Create the feed post referencing all uploaded photos.
|
|
145
|
+
// Create the feed post referencing all uploaded photos. `link` is
|
|
146
|
+
// deliberately omitted: Meta cannot render a link preview and
|
|
147
|
+
// `attached_media` on the same story — same rule as LinkedIn.
|
|
142
148
|
const feedBody = {
|
|
143
149
|
message: post.body,
|
|
144
150
|
attached_media: attachedMedia,
|
|
145
151
|
};
|
|
146
|
-
const feedRes = await
|
|
152
|
+
const feedRes = await vendorFetch('facebook', `${baseUrl}${feedEndpoint}`, {
|
|
147
153
|
method: 'POST',
|
|
148
154
|
headers: {
|
|
149
155
|
Authorization: `Bearer ${credentials.accessToken}`,
|
|
@@ -182,76 +188,29 @@ function parseResult(res, post) {
|
|
|
182
188
|
};
|
|
183
189
|
}
|
|
184
190
|
/**
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
let imgBuf = new Uint8Array(await downloadImage(media.url, 'facebook'));
|
|
203
|
-
let mimeType = media.mimeType;
|
|
204
|
-
if (!FACEBOOK_UPLOAD_MIME.has(mimeType)) {
|
|
205
|
-
const sharp = await importSharp();
|
|
206
|
-
imgBuf = await sharp(imgBuf).jpeg({ quality: 90 }).toBuffer();
|
|
207
|
-
mimeType = 'image/jpeg';
|
|
208
|
-
}
|
|
209
|
-
return { imgBuf, mimeType };
|
|
210
|
-
}
|
|
211
|
-
/**
|
|
212
|
-
* Lazy-import `sharp` so it's only loaded when an image actually
|
|
213
|
-
* needs format conversion. The package declares it as an optional
|
|
214
|
-
* peer dependency — apps that only post JPEG/PNG never need it.
|
|
215
|
-
*/
|
|
216
|
-
async function importSharp() {
|
|
217
|
-
try {
|
|
218
|
-
const sharp = (await import('sharp')).default;
|
|
219
|
-
return sharp;
|
|
220
|
-
}
|
|
221
|
-
catch {
|
|
222
|
-
throw new Error('[social/facebook] The `sharp` package is required to convert images to JPEG for Facebook. ' +
|
|
223
|
-
'Install it with `npm install sharp` or `pnpm add sharp`.');
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
/**
|
|
227
|
-
* fetch wrapper with the same vendor-status → typed-error mapping as
|
|
228
|
-
* `vendorFetch`, but accepts `FormData` as the body (the shared
|
|
229
|
-
* `vendorFetch` types `body` as `string | URLSearchParams`).
|
|
191
|
+
* Build the multipart body for one `/<page-id>/photos` upload.
|
|
192
|
+
*
|
|
193
|
+
* Downloading in-process is what makes photo posts work everywhere:
|
|
194
|
+
* the URLs the CMS produces (presigned S3, MinIO on localhost, a
|
|
195
|
+
* private bucket with no CDN) are reachable from the publishing worker
|
|
196
|
+
* but not from Meta's servers, so we push the bytes rather than hand
|
|
197
|
+
* Meta a `url` to fetch.
|
|
198
|
+
*
|
|
199
|
+
* `downloadMedia` enforces the http(s)-only rule, the per-attachment
|
|
200
|
+
* byte cap and the abort timeout; `ensureUploadableImage` transcodes
|
|
201
|
+
* anything Meta's /photos endpoint won't take. The effective format
|
|
202
|
+
* comes from the payload's magic number, NOT `media.mimeType` — that
|
|
203
|
+
* field is caller metadata and goes stale (a WebP recorded as
|
|
204
|
+
* `image/jpeg` is exactly the failure this path guards against).
|
|
205
|
+
*
|
|
206
|
+
* The caller appends the fields that differ per flow (`message` for a
|
|
207
|
+
* single photo, `published=false` for an album member).
|
|
230
208
|
*/
|
|
231
|
-
async function
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
const bodyText = await res.text();
|
|
238
|
-
let body;
|
|
239
|
-
try {
|
|
240
|
-
body = bodyText ? JSON.parse(bodyText) : null;
|
|
241
|
-
}
|
|
242
|
-
catch {
|
|
243
|
-
body = bodyText;
|
|
244
|
-
}
|
|
245
|
-
if (res.ok)
|
|
246
|
-
return { body, bodyText };
|
|
247
|
-
const truncated = bodyText.length > 1024 ? bodyText.slice(0, 1024) + '…' : bodyText;
|
|
248
|
-
const message = `${res.status} ${res.statusText}: ${truncated}`;
|
|
249
|
-
if (res.status === 401 || res.status === 403) {
|
|
250
|
-
throw new SocialAuthError(message, { platform, status: res.status, raw: body });
|
|
251
|
-
}
|
|
252
|
-
if (res.status >= 400 && res.status < 500) {
|
|
253
|
-
throw new SocialValidationError(message, { platform, status: res.status, raw: body });
|
|
254
|
-
}
|
|
255
|
-
throw new SocialPublishError(message, { platform, status: res.status, raw: body });
|
|
209
|
+
async function photoForm(media, maxBytes) {
|
|
210
|
+
const downloaded = await downloadMedia(media.url, 'facebook', { maxBytes });
|
|
211
|
+
const { bytes, mimeType } = await ensureUploadableImage(downloaded, media.mimeType, FACEBOOK_UPLOAD_MIME, 'facebook');
|
|
212
|
+
const form = new FormData();
|
|
213
|
+
form.append('source', new Blob([bytes], { type: mimeType }), filenameForMime(mimeType));
|
|
214
|
+
return form;
|
|
256
215
|
}
|
|
257
216
|
//# sourceMappingURL=facebook.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"facebook.js","sourceRoot":"","sources":["../../src/adapters/facebook.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"facebook.js","sourceRoot":"","sources":["../../src/adapters/facebook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linkedin.d.ts","sourceRoot":"","sources":["../../src/adapters/linkedin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAIV,yBAAyB,EAG1B,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"linkedin.d.ts","sourceRoot":"","sources":["../../src/adapters/linkedin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAIV,yBAAyB,EAG1B,MAAM,aAAa,CAAC;AAkBrB,eAAO,MAAM,oBAAoB,EAAE,yBAUlC,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,GAAE,qBAA0B,GACjC,aAAa,CAiFf"}
|
|
@@ -36,6 +36,12 @@ import { vendorFetch } from '../http.js';
|
|
|
36
36
|
import { downloadMedia, ensureUploadableImage } from '../media.js';
|
|
37
37
|
import { validatePost } from '../validation.js';
|
|
38
38
|
const LINKEDIN_API_BASE = 'https://api.linkedin.com';
|
|
39
|
+
/**
|
|
40
|
+
* Required on every versioned (`/rest/*`) call. Format is `YYYYMM`;
|
|
41
|
+
* LinkedIn retires versions on a rolling ~1-year window, so this is
|
|
42
|
+
* the single place to bump.
|
|
43
|
+
*/
|
|
44
|
+
const LINKEDIN_VERSION = '202511';
|
|
39
45
|
/** LinkedIn's feedshare-image recipe accepts JPEG and PNG only. */
|
|
40
46
|
const LINKEDIN_ACCEPTED_MIME = new Set(['image/jpeg', 'image/png']);
|
|
41
47
|
export const LINKEDIN_CONSTRAINTS = {
|
|
@@ -68,9 +74,13 @@ export function createLinkedInAdapter(config = {}) {
|
|
|
68
74
|
},
|
|
69
75
|
async publish(post, credentials) {
|
|
70
76
|
// Stage images that aren't already LinkedIn URNs.
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
|
|
77
|
+
//
|
|
78
|
+
// A link preview wins over media (`buildPostBody` emits
|
|
79
|
+
// `content.article` and ignores `stagedMedia`), so skip staging
|
|
80
|
+
// outright when `post.link` is set: uploading images the body
|
|
81
|
+
// will discard costs three vendor round-trips each and lets an
|
|
82
|
+
// irrelevant staging failure abort an otherwise-valid link post.
|
|
83
|
+
const media = post.link ? [] : (post.media ?? []);
|
|
74
84
|
const stagedMedia = [];
|
|
75
85
|
for (const m of media) {
|
|
76
86
|
if (m.url.startsWith('urn:li:image:')) {
|
|
@@ -90,8 +100,7 @@ export function createLinkedInAdapter(config = {}) {
|
|
|
90
100
|
Authorization: `Bearer ${credentials.accessToken}`,
|
|
91
101
|
'Content-Type': 'application/json',
|
|
92
102
|
'X-Restli-Protocol-Version': '2.0.0',
|
|
93
|
-
|
|
94
|
-
'Linkedin-Version': '202511',
|
|
103
|
+
'Linkedin-Version': LINKEDIN_VERSION,
|
|
95
104
|
};
|
|
96
105
|
const res = await vendorFetch('linkedin', `${baseUrl}/rest/posts`, {
|
|
97
106
|
method: 'POST',
|
|
@@ -150,7 +159,7 @@ async function stageImage(baseUrl, credentials, media, maxBytes) {
|
|
|
150
159
|
Authorization: `Bearer ${credentials.accessToken}`,
|
|
151
160
|
'Content-Type': 'application/json',
|
|
152
161
|
'X-Restli-Protocol-Version': '2.0.0',
|
|
153
|
-
'Linkedin-Version':
|
|
162
|
+
'Linkedin-Version': LINKEDIN_VERSION,
|
|
154
163
|
},
|
|
155
164
|
body: JSON.stringify(initBody),
|
|
156
165
|
});
|
|
@@ -176,10 +185,15 @@ async function stageImage(baseUrl, credentials, media, maxBytes) {
|
|
|
176
185
|
}
|
|
177
186
|
// ─── Internal: first-comment ──────────────────────────────────────────
|
|
178
187
|
/**
|
|
179
|
-
* Post a first-comment under a freshly-published
|
|
188
|
+
* Post a first-comment under a freshly-published post via the
|
|
180
189
|
* `socialActions/{urn}/comments` endpoint. The comment is authored by
|
|
181
190
|
* the same actor as the post (`credentials.authorRef`).
|
|
182
191
|
*
|
|
192
|
+
* Still on `/v2`: comments have no `/rest` equivalent that accepts a
|
|
193
|
+
* `urn:li:share` object. `Linkedin-Version` is sent anyway so the call
|
|
194
|
+
* doesn't break when LinkedIn folds this endpoint into the versioned
|
|
195
|
+
* surface — the header is ignored on unversioned routes.
|
|
196
|
+
*
|
|
183
197
|
* Best-effort by contract: the post is already live, so a failed
|
|
184
198
|
* comment must never unwind a successful publish. We swallow vendor
|
|
185
199
|
* errors here and let the caller's publish result stand.
|
|
@@ -192,6 +206,7 @@ async function postFirstComment(baseUrl, credentials, postUrn, text) {
|
|
|
192
206
|
Authorization: `Bearer ${credentials.accessToken}`,
|
|
193
207
|
'Content-Type': 'application/json',
|
|
194
208
|
'X-Restli-Protocol-Version': '2.0.0',
|
|
209
|
+
'Linkedin-Version': LINKEDIN_VERSION,
|
|
195
210
|
},
|
|
196
211
|
body: JSON.stringify({
|
|
197
212
|
actor: credentials.authorRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../../src/adapters/linkedin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAWH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;AAErD,mEAAmE;AACnE,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC;AAEpE,MAAM,CAAC,MAAM,oBAAoB,GAA8B;IAC7D,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;IACd,gBAAgB,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC;IAC3D,aAAa,EAAE,CAAC;IAChB,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC;IAClD,iBAAiB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,yBAAyB;IAC9D,oBAAoB,EAAE,IAAI;CAC3B,CAAC;AASF;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAgC,EAAE;IAElC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1E,MAAM,WAAW,GAA8B;QAC7C,GAAG,oBAAoB;QACvB,GAAG,MAAM,CAAC,WAAW;KACtB,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,UAAU;QACf,WAAW,EAAE,UAAU;QACvB,WAAW;QAEX,QAAQ,CAAC,IAAgB;YACvB,OAAO,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACzC,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW;YAC7B,kDAAkD;YAClD,
|
|
1
|
+
{"version":3,"file":"linkedin.js","sourceRoot":"","sources":["../../src/adapters/linkedin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venturekit-pro/social",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.20260816114351",
|
|
4
4
|
"description": "Social-platform publishing adapters + catalog for VentureKit applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -55,10 +55,10 @@
|
|
|
55
55
|
"publishing"
|
|
56
56
|
],
|
|
57
57
|
"dependencies": {
|
|
58
|
-
"@venturekit/core": "0.0.0-dev.
|
|
58
|
+
"@venturekit/core": "0.0.0-dev.20260816114351"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
|
61
|
-
"@venturekit/data": "0.0.0-dev.
|
|
61
|
+
"@venturekit/data": "0.0.0-dev.20260816114351",
|
|
62
62
|
"sharp": ">=0.32"
|
|
63
63
|
},
|
|
64
64
|
"peerDependenciesMeta": {
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"@types/node": "^26.1.2",
|
|
74
|
-
"@venturekit/data": "0.0.0-dev.
|
|
74
|
+
"@venturekit/data": "0.0.0-dev.20260816114351",
|
|
75
75
|
"sharp": "^0.35.3",
|
|
76
76
|
"typescript": "^5.3.0"
|
|
77
77
|
},
|