ilml-plugin-linkedin 1.2.1 → 1.2.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/CHANGELOG.md +28 -0
- package/README.md +16 -99
- package/ilml-plugin.json +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 1.2.2
|
|
4
|
+
- README polish based on real-user feedback:
|
|
5
|
+
- Cleaner top — removed the metadata bullet list (npm/tracker/license) that was the very first thing visitors saw on the npm page; now opens straight into "What it does"
|
|
6
|
+
- Removed the entire `Developer Notes` section — it was internal-only and not useful for end users (release process and architecture notes live in `CLAUDE.md` and the SDK's plugin spec)
|
|
7
|
+
- Clarified the `LINKEDIN_SEARCH_URL` instruction (no more raw URL parameters like `f_AL=true` — just "open LinkedIn → Jobs, set filters, copy URL")
|
|
8
|
+
- New **Author & contact** section with personal page, LinkedIn, and a **DigitalTwins.team** call-to-action for custom plugin development
|
|
9
|
+
- `CHANGELOG.md` is now shipped in the npm tarball (added to `package.json#files`), so the npm package page renders release notes next to the README
|
|
10
|
+
- New **Feedback & support** section in the README pointing at a dedicated **Support** node in iLiveMyLife (`0000019dde81b04f-2e534bb8ebad0000`) — users can write directly to the maintainer via the in-graph messenger or `ilml send` from the terminal
|
|
11
|
+
|
|
12
|
+
## 1.2.1
|
|
13
|
+
- Documentation overhaul — `README.md` rewritten in English, split into **User Guide** (install, configure, run, update) and **Developer Notes** (release process, architecture, security checklist)
|
|
14
|
+
- Removed outdated `.env`-based user instructions — the plugin is now fully self-configuring via `ilml plugin install linkedin` + first-run prompts (or `ilml plugin config linkedin set KEY VALUE`)
|
|
15
|
+
- Added `CHANGELOG.md` (this file)
|
|
16
|
+
- Added `CLAUDE.md` — project-level guide for the AI assistant covering release process and key architecture pointers
|
|
17
|
+
- Added a `Releases` node in the iLiveMyLife graph for in-app release notifications
|
|
18
|
+
|
|
19
|
+
## 1.2.0
|
|
20
|
+
- First public publish on npm as `ilml-plugin-linkedin`
|
|
21
|
+
- `src/config.mjs` refactored to use `getPluginConfig()` from `@ilivemylife/graph-sdk` v1.0.17
|
|
22
|
+
- Resolved configuration is merged into `process.env` so the rest of the codebase (16+ files reading `process.env.X`) keeps working unchanged
|
|
23
|
+
- The manual `LINKEDIN_NAME` bootstrap check is removed — schema validation in the SDK handles it
|
|
24
|
+
- Works in both **production** (`ilml linkedin <command>`) and **development** (`node run.mjs` with `.env` next to manifest), without any code changes between modes
|
|
25
|
+
- Bumped `@ilivemylife/graph-sdk` peer to `^1.0.17`
|
|
26
|
+
- `package.json` polish for npm publish — `author`, `license: UNLICENSED`, `keywords`, strict `files: ["dist", "ilml-plugin.json"]` whitelist
|
|
27
|
+
- `ilml-plugin.json` declares config via `config.sections[].fields[]` (richer manifest format supported by SDK 1.0.17): grouped fields with `label`, `hint`, types (`text`, `secret`, `path`, `nodeId`, `url`, `number`, `boolean`)
|
|
28
|
+
- All sensitive files (`.env`, `cookies.json`, raw sources, internal handoff docs, runtime data) excluded from the npm tarball via `.npmignore`
|
package/README.md
CHANGED
|
@@ -2,12 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
LinkedIn job-search and networking automation as a plugin for the [`ilml`](https://www.npmjs.com/package/@ilivemylife/graph-sdk) CLI.
|
|
4
4
|
|
|
5
|
-
- **npm:** https://www.npmjs.com/package/ilml-plugin-linkedin
|
|
6
|
-
- **Tracker / Releases (in iLiveMyLife):** open the **Releases** node inside the **LinkedIn Automation** project in your iLiveMyLife app
|
|
7
|
-
- **License:** UNLICENSED — all rights reserved
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
5
|
## What it does
|
|
12
6
|
|
|
13
7
|
A toolkit that drives LinkedIn from your machine via a real browser (Puppeteer + stealth), with results synced into your [iLiveMyLife](https://ilivemylife.io) knowledge graph:
|
|
@@ -94,7 +88,7 @@ ilml plugin config linkedin reset # wipe all; will re-promp
|
|
|
94
88
|
| Data storage | `DATA_DIR` | no | Absolute path to a directory for the local DB / cookies. **Recommended** — keeps data outside the plugin install folder so it survives plugin updates. |
|
|
95
89
|
| Apply bot | `City` | no | Default city for filters. Default: `Toronto`. |
|
|
96
90
|
| | `MAX_APPLY_FOR_RUN` | no | Stop after this many applications per run. Default: `50`. |
|
|
97
|
-
| | `LINKEDIN_SEARCH_URL` | no | Default LinkedIn jobs search URL
|
|
91
|
+
| | `LINKEDIN_SEARCH_URL` | no | Default LinkedIn jobs search URL — open LinkedIn → Jobs, set your filters, then make sure **Easy Apply** is on. Copy the resulting URL from the address bar and paste it here. |
|
|
98
92
|
| Scouting | `LINKEDIN_SCOUT_URLS` | no | Comma-separated job search URLs to scan without applying. |
|
|
99
93
|
| Resume / CV | `CV_TEXT`, `RESUME_PDF_URL`, `RESUME_FILENAME` | no | CV snippet, public PDF URL, suggested filename. Used in messages to recruiters. |
|
|
100
94
|
| Funnel | `FUNNEL_USE_CUSTOM_MESSAGE` | no | Send a custom note with connection requests. Default: `false`. |
|
|
@@ -198,105 +192,28 @@ ilml plugin config linkedin reset
|
|
|
198
192
|
|
|
199
193
|
To clean up the data directory (cookies, DBs), delete the folder you set as `DATA_DIR` manually.
|
|
200
194
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
# Developer Notes
|
|
204
|
-
|
|
205
|
-
> Single-developer project. The reference for plugin architecture and SDK contracts is the iLiveMyLife graph-sdk repo's [`PLUGINS.md`](https://github.com/iLiveMyLife/graph-sdk.iLiveMyLife.io/blob/main/PLUGINS.md). Most of what follows is just reminders for me when I come back to this in a few months.
|
|
206
|
-
|
|
207
|
-
## Layout
|
|
208
|
-
|
|
209
|
-
```
|
|
210
|
-
ilml-plugin.json # manifest: name, version, commands, config.sections[].fields[]
|
|
211
|
-
package.json # npm metadata; "files": ["dist", "ilml-plugin.json"] is the publish whitelist
|
|
212
|
-
.npmignore # belt-and-suspenders excludes (.env, cookies.json, sources, etc.)
|
|
213
|
-
.env / .env.example # dev only; gitignored
|
|
214
|
-
|
|
215
|
-
run.mjs / syncAll.mjs / messageBot.mjs / scout.mjs / ... # entry points (one per ilml subcommand)
|
|
216
|
-
src/
|
|
217
|
-
config.mjs # reads via SDK getPluginConfig(); merges into process.env so the rest of the codebase keeps using process.env.X
|
|
218
|
-
graphClient.mjs # SDK client wrapper
|
|
219
|
-
database.mjs # local JSON DB at DATA_DIR
|
|
220
|
-
saveLoginState.mjs # entry: ilml linkedin login
|
|
221
|
-
... domain modules ...
|
|
222
|
-
scripts/
|
|
223
|
-
build-plugin.mjs # esbuild bundler — outputs dist/*.mjs (minified, no sourcemaps)
|
|
224
|
-
# externalizes: puppeteer, dotenv, @ilivemylife/graph-sdk
|
|
225
|
-
```
|
|
226
|
-
|
|
227
|
-
## Configuration model
|
|
228
|
-
|
|
229
|
-
- The plugin reads its config **only** through `getPluginConfig()` from `@ilivemylife/graph-sdk` (called once in `src/config.mjs`).
|
|
230
|
-
- Resolved values are merged into `process.env` so existing files reading `process.env.LINKEDIN_NAME` etc. keep working unchanged. New code should read directly from the SDK return value when feasible.
|
|
231
|
-
- Auth token: `process.env.ILML_TOKEN` — injected by ilml CLI in production; resolved by the SDK in dev (local config / `.env` / global config / env var).
|
|
232
|
-
- Active scope dir: `process.env.ILML_SCOPE_DIR` — set in production only. Plugin code never reads it directly; the SDK does.
|
|
195
|
+
## Feedback & support
|
|
233
196
|
|
|
234
|
-
|
|
197
|
+
Bug reports, feature requests, and general questions land in the plugin's **Support** node inside iLiveMyLife. Send a message there and we'll get back to you:
|
|
235
198
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
| **Production** | `ilml linkedin <command>` | The active ilml scope's `<scope>/.ilivemylife/plugins-state/linkedin.json` |
|
|
239
|
-
| **Dev** | `node run.mjs` (etc.) | `.env` next to `ilml-plugin.json` (auto-detected by SDK) |
|
|
199
|
+
- In any iLiveMyLife app (web / mobile / desktop): open https://app.ilivemylife.io/item/0000019dde81b04f-2e534bb8ebad0000 and use the messenger panel
|
|
200
|
+
- From the terminal: `ilml send 0000019dde81b04f-2e534bb8ebad0000 "your message"`
|
|
240
201
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
## Local dev iteration
|
|
244
|
-
|
|
245
|
-
When the plugin code itself is what's changing:
|
|
246
|
-
|
|
247
|
-
```bash
|
|
248
|
-
# 1. (optional) edit ilml-plugin.json or src/*
|
|
249
|
-
# 2. Build
|
|
250
|
-
npm run build:plugin
|
|
202
|
+
## Links
|
|
251
203
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
# 3b. Full check via ilml CLI — needs the plugin re-packed and re-installed
|
|
256
|
-
npm pack
|
|
257
|
-
ilml plugin install linkedin file:///$(pwd)/ilml-plugin-linkedin-X.Y.Z.tgz
|
|
258
|
-
ilml linkedin <command>
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
When the **SDK** is what's changing alongside, also rebuild and re-install the SDK from the sibling `graph-sdk.iLiveMyLife.io` repo:
|
|
262
|
-
|
|
263
|
-
```bash
|
|
264
|
-
# In ../graph-sdk.iLiveMyLife.io
|
|
265
|
-
npm run build && npm pack
|
|
266
|
-
|
|
267
|
-
# In this repo
|
|
268
|
-
npm install ../graph-sdk.iLiveMyLife.io/ilivemylife-graph-sdk-X.Y.Z.tgz --no-save
|
|
269
|
-
npm run build:plugin
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
## Release process
|
|
273
|
-
|
|
274
|
-
1. **Update `CHANGELOG.md`** — add an entry at the top describing what changed for users.
|
|
275
|
-
2. **Bump version in BOTH** `package.json#version` AND `ilml-plugin.json#version`. They must match — `ilml plugin update` compares the manifest version against npm's `dist-tags.latest`. Drift here causes false update loops or silent skips.
|
|
276
|
-
3. **Commit with explicit paths only:**
|
|
277
|
-
```bash
|
|
278
|
-
git commit -- package.json ilml-plugin.json CHANGELOG.md <other-changed-files> -m "v1.X.Y: short description"
|
|
279
|
-
```
|
|
280
|
-
4. **Push:** `git push`.
|
|
281
|
-
5. **Publish:** `npm publish --access public`. The `prepublishOnly` script runs `build:plugin` automatically — `dist/` is rebuilt from current sources before packing.
|
|
282
|
-
6. **Update the Releases node in the graph** — sync description with the new CHANGELOG entry.
|
|
283
|
-
|
|
284
|
-
## Security checklist before each `npm publish`
|
|
204
|
+
- This plugin on npm: https://www.npmjs.com/package/ilml-plugin-linkedin
|
|
205
|
+
- `ilml` CLI on npm: https://www.npmjs.com/package/@ilivemylife/graph-sdk
|
|
206
|
+
- iLiveMyLife: https://ilivemylife.io
|
|
285
207
|
|
|
286
|
-
|
|
287
|
-
- `grep -E "ilya|sorokin|password|token|@gmail" dist/*.mjs dist/src/*.mjs` — no real personal data should appear in bundled output. (Examples in `README.md` like `ivan@example.com` are fine — they're documentation placeholders.)
|
|
288
|
-
- `ls dist/*.map dist/**/*.map 2>/dev/null` — must return nothing (no sourcemaps).
|
|
289
|
-
- `npm whoami` — confirm correct npm account before publish.
|
|
208
|
+
---
|
|
290
209
|
|
|
291
|
-
##
|
|
210
|
+
## Author & contact
|
|
292
211
|
|
|
293
|
-
|
|
294
|
-
- SDK source: https://github.com/iLiveMyLife/graph-sdk.iLiveMyLife.io
|
|
295
|
-
- This plugin on npm: https://www.npmjs.com/package/ilml-plugin-linkedin
|
|
296
|
-
- ilml CLI on npm: https://www.npmjs.com/package/@ilivemylife/graph-sdk
|
|
212
|
+
**[Ilya Sorokin](https://www.digitaltwins.team/team/ilya-sorokin)** — creator of [iLiveMyLife.io](https://ilivemylife.io) and this plugin.
|
|
297
213
|
|
|
298
|
-
|
|
214
|
+
- LinkedIn: [linkedin.com/in/ilyasorokin](https://www.linkedin.com/in/ilyasorokin/)
|
|
215
|
+
- Email: info@ilivemylife.io
|
|
299
216
|
|
|
300
|
-
|
|
217
|
+
### Need a custom plugin or extension?
|
|
301
218
|
|
|
302
|
-
|
|
219
|
+
[**DigitalTwins.team**](https://www.digitaltwins.team/) — my consulting company — designs and builds custom automation, SDK extensions, and bespoke plugins for the iLiveMyLife ecosystem (and beyond). If you want to integrate your own workflow with iLiveMyLife, extend this plugin's behavior, or commission something new, get in touch.
|
package/ilml-plugin.json
CHANGED
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ilml-plugin-linkedin",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "ilml plugin: LinkedIn job automation — apply, scout, sync, funnel, messages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
8
|
-
"ilml-plugin.json"
|
|
8
|
+
"ilml-plugin.json",
|
|
9
|
+
"CHANGELOG.md"
|
|
9
10
|
],
|
|
10
11
|
"scripts": {
|
|
11
12
|
"build:plugin": "node scripts/build-plugin.mjs",
|