Merge pull request #1 from specCon18/twitter_api_support
worked on twitter api support added surrealist to flake got database …
This commit is contained in:
commit
5ba3b1a3bd
12 changed files with 374 additions and 225 deletions
1
.envrc
Normal file
1
.envrc
Normal file
|
|
@ -0,0 +1 @@
|
|||
use flake
|
||||
125
.gitignore
vendored
125
.gitignore
vendored
|
|
@ -1,128 +1,7 @@
|
|||
# Logs
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
.config/.env
|
||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||
|
||||
# Runtime data
|
||||
pids
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
index
|
||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||
lib-cov
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||
.grunt
|
||||
|
||||
# Bower dependency directory (https://bower.io/)
|
||||
bower_components
|
||||
|
||||
# node-waf configuration
|
||||
.lock-wscript
|
||||
|
||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||
build/Release
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
jspm_packages/
|
||||
|
||||
# Snowpack dependency directory (https://snowpack.dev/)
|
||||
web_modules/
|
||||
|
||||
# TypeScript cache
|
||||
*.tsbuildinfo
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional eslint cache
|
||||
.eslintcache
|
||||
|
||||
# Optional stylelint cache
|
||||
.stylelintcache
|
||||
|
||||
# Microbundle cache
|
||||
.rpt2_cache/
|
||||
.rts2_cache_cjs/
|
||||
.rts2_cache_es/
|
||||
.rts2_cache_umd/
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# dotenv environment variable files
|
||||
.env
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
.env.local
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
out
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
dist/
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||
# public
|
||||
|
||||
# vuepress build output
|
||||
.vuepress/dist
|
||||
|
||||
# vuepress v2.x temp and cache directory
|
||||
.temp
|
||||
.cache
|
||||
|
||||
# Docusaurus cache and generated files
|
||||
.docusaurus
|
||||
|
||||
# Serverless directories
|
||||
.serverless/
|
||||
|
||||
# FuseBox cache
|
||||
.fusebox/
|
||||
|
||||
# DynamoDB Local files
|
||||
.dynamodb/
|
||||
|
||||
# TernJS port file
|
||||
.tern-port
|
||||
|
||||
# Stores VSCode versions used for testing VSCode extensions
|
||||
.vscode-test
|
||||
|
||||
# yarn v2
|
||||
.yarn/cache
|
||||
.yarn/unplugged
|
||||
.yarn/build-state.yml
|
||||
.yarn/install-state.gz
|
||||
.pnp.*
|
||||
|
||||
# direnv
|
||||
.direnv
|
||||
.direnv/
|
||||
database.surql
|
||||
19
flake.lock
generated
19
flake.lock
generated
|
|
@ -34,10 +34,27 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1714253743,
|
||||
"narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
|
|
|
|||
19
flake.nix
19
flake.nix
|
|
@ -2,7 +2,11 @@
|
|||
description = "A js development environment";
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
flake-utils = {
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable";
|
||||
url = "github:numtide/flake-utils";
|
||||
};
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||
|
|
@ -12,13 +16,20 @@
|
|||
inherit system;
|
||||
overlays = [];
|
||||
};
|
||||
unstable = import <nixos-unstable> { config = { allowUnfree = true; }; };
|
||||
in
|
||||
{
|
||||
devShell = pkgs.mkShell {
|
||||
buildInputs = [
|
||||
pkgs.nodejs_20
|
||||
pkgs.yarn
|
||||
buildInputs = with pkgs; [
|
||||
nodejs_20
|
||||
yarn
|
||||
surrealdb
|
||||
unstable.surrealist
|
||||
];
|
||||
};
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [
|
||||
"surrealdb"
|
||||
];
|
||||
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,13 +3,16 @@
|
|||
"main": "src/index.js",
|
||||
"scripts": {
|
||||
"build": "tsc",
|
||||
"start": "node dist/server.js"
|
||||
"start": "node dist/server.js --env-file='.config/.env'"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/express": "^4.17.21",
|
||||
"dotenv": "^16.4.5",
|
||||
"axios": "^1.6.8",
|
||||
"cron": "^3.1.7",
|
||||
"express": "^4.19.2",
|
||||
"linkedin-api-client": "^0.3.0"
|
||||
"linkedin-api-client": "^0.3.0",
|
||||
"surrealdb.js": "^1.0.0-beta.5",
|
||||
"twitter-api-v2": "^1.16.3"
|
||||
},
|
||||
"devDependencies": {}
|
||||
}
|
||||
|
|
|
|||
138
src/database.ts
Normal file
138
src/database.ts
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
import axios, { AxiosRequestConfig } from "axios";
|
||||
|
||||
interface db_auth_data {
|
||||
user:string,
|
||||
pass:string,
|
||||
db:string,
|
||||
sc?:string,
|
||||
ns:string
|
||||
};
|
||||
|
||||
interface spapi_user {
|
||||
name:string
|
||||
accounts?:Array<spapi_account>
|
||||
};
|
||||
|
||||
interface spapi_account {
|
||||
id:string,
|
||||
username:string,
|
||||
post_count:number,
|
||||
platform_ident:string,
|
||||
last_post: ISO8601Timestamp,
|
||||
};
|
||||
|
||||
interface platform_auth_data {
|
||||
[key: string]: {
|
||||
[key: string]: string;
|
||||
};
|
||||
}
|
||||
|
||||
type ISO8601Timestamp = `${number}-${number}-${number}T${number}:${number}:${number}${'Z' | '' | `${'+' | '-'}${number}:${number}`}`;
|
||||
|
||||
const platform_auth_structures: platform_auth_data = {
|
||||
linkedin: {
|
||||
api_key: ""
|
||||
},
|
||||
//TODO find correct auth_data for twitter posts on v2 api
|
||||
twitter: {
|
||||
access_token: "",
|
||||
refresh_token: ""
|
||||
}
|
||||
};
|
||||
|
||||
const platforms:{ [key: string]: any } = {
|
||||
twitter:{identifier:"twit",auth_data:platform_auth_structures.twitter},
|
||||
linkedin:{identifier:"li",auth_data:platform_auth_structures.linkedin}
|
||||
};
|
||||
|
||||
//Create a user in the table User on the local running SurrealDB instance over http via the Surreal REST API on port 8000
|
||||
function create_user(token:string, auth:db_auth_data, user:spapi_user){
|
||||
|
||||
let surql_query = `CREATE User:${user.name} SET name = '${user.name}', accounts = null;`;
|
||||
let request_config:AxiosRequestConfig = {
|
||||
url: '/sql',
|
||||
method: 'post',
|
||||
baseURL: 'http://localhost:8000',
|
||||
headers: {
|
||||
'Accept':'application/json',
|
||||
'Authorization':token,
|
||||
'NS': auth.ns,
|
||||
'DB': auth.db,
|
||||
},
|
||||
data: surql_query,
|
||||
auth: {
|
||||
username:auth.user,
|
||||
password:auth.pass
|
||||
},
|
||||
responseType: 'json',
|
||||
};
|
||||
let res = axios.request(request_config).then(function (response) {
|
||||
return response.data;
|
||||
});
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
function create_account(account:spapi_account, user:spapi_user,){
|
||||
if (account.platform_ident == platforms.twitter.identifier) {
|
||||
|
||||
} else if (account.platform_ident === platforms.linkedin.identifier) {
|
||||
|
||||
} else {
|
||||
console.log("Invalid Platform Identifier")
|
||||
}
|
||||
}
|
||||
|
||||
//Authenticate with the local running SurrealDB instance over http via the Surreal REST API on port 8000
|
||||
function db_auth(data:db_auth_data) {
|
||||
let request_config:AxiosRequestConfig = {
|
||||
url: '/signin',
|
||||
method: 'post',
|
||||
baseURL: 'http://127.0.0.1:8000',
|
||||
headers: {
|
||||
'Accept':'application/json',
|
||||
},
|
||||
data: {
|
||||
NS: data.ns,
|
||||
DB: data.db,
|
||||
user: data.user,
|
||||
pass: data.pass
|
||||
},
|
||||
auth: {
|
||||
username: data.user,
|
||||
password: data.pass
|
||||
},
|
||||
responseType: 'json',
|
||||
};
|
||||
let res = axios.request(request_config).then(function (response) {
|
||||
return response.data.token;
|
||||
});
|
||||
|
||||
return res
|
||||
};
|
||||
|
||||
// * Example/test Code for creating a user
|
||||
// let data:db_auth_data = {
|
||||
// ns: "social_post",
|
||||
// db: "social_post",
|
||||
// user: "root",
|
||||
// pass: "root"
|
||||
// };
|
||||
// let user:spapi_user = {
|
||||
// name: 'jessie'
|
||||
// }
|
||||
// try {
|
||||
// let token = await db_auth(data);
|
||||
// let res = await create_user(token,data,user);
|
||||
// // Assuming res is an array with one element containing the result object
|
||||
// if (res && res.length > 0) {
|
||||
// // Accessing the first element of the result array and then accessing the 'result' property of that object
|
||||
// let resultObject = res[0].result;
|
||||
// console.log(resultObject);
|
||||
// // Now you can work with the resultObject
|
||||
// } else {
|
||||
// console.log("No result found.");
|
||||
// }
|
||||
// } catch (error) {
|
||||
// console.error('Error:', error);
|
||||
// }
|
||||
|
|
@ -1,65 +0,0 @@
|
|||
/**
|
||||
* Example calls to create a post on LinkedIn. This requires a member-based token with the following
|
||||
* scopes (r_liteprofile, w_member_social), which is provided by the Sign in with LinkedIn and Share on LinkedIn
|
||||
* API products.
|
||||
*
|
||||
* The steps include:
|
||||
* 1. Fetching the authenticated member's profile to obtain the member's identifier (a person URN)
|
||||
* 2. Create a post using /posts endpoint
|
||||
*
|
||||
* To view these posts, go to linkedin.com and click Me > Posts & Activity.
|
||||
*
|
||||
* BEWARE: This will make an actual post to the main feed which is visible to anyone.
|
||||
*/
|
||||
|
||||
import { RestliClient } from 'linkedin-api-client';
|
||||
import dotenv from 'dotenv';
|
||||
|
||||
dotenv.config({ path: './.config/.env' });
|
||||
|
||||
const USERINFO_RESOURCE = '/userinfo';
|
||||
const POSTS_RESOURCE = '/posts';
|
||||
const API_VERSION = '202401';
|
||||
|
||||
async function main(): Promise<void> {
|
||||
const restliClient = new RestliClient();
|
||||
restliClient.setDebugParams({ enabled: true });
|
||||
const accessToken = process.env.LI_API_KEY || '';
|
||||
|
||||
const meResponse = await restliClient.get({
|
||||
resourcePath: USERINFO_RESOURCE,
|
||||
accessToken
|
||||
});
|
||||
console.log(meResponse.data);
|
||||
|
||||
/**
|
||||
* Calling the newer, more streamlined (and versioned) /posts API to create
|
||||
* a text post on behalf of the authenticated member.
|
||||
*/
|
||||
const postsCreateResponse = await restliClient.create({
|
||||
resourcePath: POSTS_RESOURCE,
|
||||
entity: {
|
||||
author: `urn:li:person:${meResponse.data.sub}`,
|
||||
lifecycleState: 'PUBLISHED',
|
||||
visibility: 'PUBLIC',
|
||||
commentary: 'Sample text post created with /posts API',
|
||||
distribution: {
|
||||
feedDistribution: 'MAIN_FEED',
|
||||
targetEntities: [],
|
||||
thirdPartyDistributionChannels: []
|
||||
}
|
||||
},
|
||||
accessToken,
|
||||
versionString: API_VERSION
|
||||
});
|
||||
// This is the created share URN
|
||||
console.log(postsCreateResponse.createdEntityId);
|
||||
}
|
||||
|
||||
main()
|
||||
.then(() => {
|
||||
console.log('Completed');
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log(`Error encountered: ${error.message}`);
|
||||
});
|
||||
35
src/platforms/li_post.ts
Normal file
35
src/platforms/li_post.ts
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import { RestliClient } from 'linkedin-api-client';
|
||||
|
||||
const USERINFO_ENDPOINT = '/userinfo';
|
||||
const POSTS_ENDPOINT = '/posts';
|
||||
const API_VERSION = process.env.LI_API_VERSION || '';
|
||||
const API_KEY = process.env.LI_API_KEY || '';
|
||||
|
||||
export async function post_to_li(): Promise<void> {
|
||||
const restliClient = new RestliClient();
|
||||
restliClient.setDebugParams({ enabled: true });
|
||||
|
||||
const meResponse = await restliClient.get({
|
||||
resourcePath: USERINFO_ENDPOINT,
|
||||
accessToken: API_KEY
|
||||
});
|
||||
|
||||
const postsCreateResponse = await restliClient.create({
|
||||
resourcePath: POSTS_ENDPOINT,
|
||||
entity: {
|
||||
author: `urn:li:person:${meResponse.data.sub}`,
|
||||
lifecycleState: 'PUBLISHED',
|
||||
visibility: 'PUBLIC',
|
||||
commentary: 'Sample text post created with /posts API',
|
||||
distribution: {
|
||||
feedDistribution: 'MAIN_FEED',
|
||||
targetEntities: [],
|
||||
thirdPartyDistributionChannels: []
|
||||
}
|
||||
},
|
||||
accessToken:API_KEY,
|
||||
versionString: API_VERSION
|
||||
});
|
||||
|
||||
console.log(postsCreateResponse.createdEntityId);
|
||||
}
|
||||
13
src/platforms/twitter_post.ts
Normal file
13
src/platforms/twitter_post.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
import { TwitterApi } from "twitter-api-v2";
|
||||
|
||||
const client = new TwitterApi({
|
||||
clientId: process.env.TWITTER_CLIENT_ID || '',
|
||||
clientSecret: process.env.TWITTER_CLIENT_SECRET || '',
|
||||
});
|
||||
|
||||
const bearer = new TwitterApi(process.env.TWITTER_BEARER_TOKEN || '');
|
||||
function auth(){};
|
||||
|
||||
export const twitter_callback_url = "http://127.0.0.1:3000/callback/";
|
||||
export const twitter_client = client.readWrite;
|
||||
export const twitter_bearer = bearer.readOnly;
|
||||
|
|
@ -1,29 +1,31 @@
|
|||
import express from 'express';
|
||||
import { RestliClient } from 'linkedin-api-client';
|
||||
import { config } from 'dotenv';
|
||||
import {Router,Request,Response} from 'express';
|
||||
import {post_to_li} from './platforms/li_post.js'
|
||||
import {twitter_client} from './platforms/twitter_post.js';
|
||||
|
||||
//Load the .env file in ./config/.env to get apiKeys
|
||||
config({ path: './.config/.env' });
|
||||
// Create a router
|
||||
const router = express.Router();
|
||||
const restliClient = new RestliClient();
|
||||
// Load API Keys
|
||||
const twitterApiKey = process.env.TWITTER_API_KEY;
|
||||
const liApiKey = process.env.LI_API_KEY || '';
|
||||
const router = Router();
|
||||
|
||||
// Define routes
|
||||
// Twitter API tweet endpoint: https://api.twitter.com/1.1/statuses/update.json
|
||||
router.get('/twitter', (req,res) => {
|
||||
|
||||
});
|
||||
// Endpoints to post to twitter
|
||||
//TODO: accept MD as input and convert to non-formatted text as Twitter is dumb and doesn't allow formatting in posts
|
||||
router.post('/twitter/tweet', (req: Request, res: Response) => {});
|
||||
router.get('/twitter/callback',(req:Request,res:Response) => {});
|
||||
|
||||
// LinkedIn API tweet endpoint: https://api.linkedin.com/v2/ugcPosts
|
||||
router.get('/li', (req,res) => {
|
||||
});
|
||||
//Endpoints for surrealdb
|
||||
/// Endpoints for the User Table
|
||||
router.post('/db/user/create', (req:Request,res:Response) => {});
|
||||
router.get('/db/user/read', (req:Request,res:Response) => {});
|
||||
router.patch('/db/user/update', (req:Request,res:Response) => {});
|
||||
router.delete('/db/user/delete', (req:Request,res:Response) => {});
|
||||
/// Endpoints for the Account Table
|
||||
router.post('/db/account/create', (req:Request,res:Response) => {});
|
||||
router.get('/db/account/read', (req:Request,res:Response) => {});
|
||||
router.patch('/db/account/update', (req:Request,res:Response) => {});
|
||||
router.delete('/db/account/delete', (req:Request,res:Response) => {});
|
||||
|
||||
// Route post to each enpoint
|
||||
router.get('/all', (req,res) => {
|
||||
|
||||
// Endpoint to post to linkedin
|
||||
//TODO: accept MD as input and convert to non-formatted text as LinkedIn is dumb and doesn't allow formatting in posts
|
||||
router.post('/linkedin/post', (req: Request, res: Response) => {
|
||||
post_to_li().then(() => {console.log('Completed');}).catch((error) => {console.log(`Error encountered: ${error.message}`);});
|
||||
});
|
||||
|
||||
// Export the router
|
||||
|
|
|
|||
|
|
@ -2,11 +2,11 @@ import express from 'express';
|
|||
import router from './router.js';
|
||||
|
||||
const app = express();
|
||||
const port = 3000;
|
||||
const port = process.env.PORT || 3000;
|
||||
|
||||
// Use the router
|
||||
app.use(router);
|
||||
|
||||
app.listen(port, () => {
|
||||
console.log(`Server running at http://localhost:${port}`);
|
||||
console.log(`Server running at http://127.0.0.1:${port}`);
|
||||
});
|
||||
|
|
|
|||
127
yarn.lock
127
yarn.lock
|
|
@ -2,6 +2,24 @@
|
|||
# yarn lockfile v1
|
||||
|
||||
|
||||
"@deno/shim-deno-test@^0.4.0":
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@deno/shim-deno-test/-/shim-deno-test-0.4.0.tgz#2ff56821854c51323c0cd08a4a56d668f84367ba"
|
||||
integrity sha512-oYWcD7CpERZy/TXMTM9Tgh1HD/POHlbY9WpzmAk+5H8DohcxG415Qws8yLGlim3EaKBT2v3lJv01x4G0BosnaQ==
|
||||
|
||||
"@deno/shim-deno@~0.16.1":
|
||||
version "0.16.1"
|
||||
resolved "https://registry.yarnpkg.com/@deno/shim-deno/-/shim-deno-0.16.1.tgz#f7d3925745c74337c83818de7d6435557c816c60"
|
||||
integrity sha512-s9v0kzF5bm/o9TgdwvsraHx6QNllYrXXmKzgOG2lh4LFXnVMr2gpjK/c/ve6EflQn1MqImcWmVD8HAv5ahuuZQ==
|
||||
dependencies:
|
||||
"@deno/shim-deno-test" "^0.4.0"
|
||||
which "^2.0.2"
|
||||
|
||||
"@icholy/duration@^5.1.0":
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@icholy/duration/-/duration-5.1.0.tgz#da193379e3a1b3107984c8bf22b4aa4ee7af1ef8"
|
||||
integrity sha512-I/zdjC6qYdwWJ2H1/PZbI3g58pPIiI/eOe5XDTtQ/v36d0ogcvAylqwOIWj/teY1rBnIMzUyWfX7PMm9I67WWg==
|
||||
|
||||
"@types/body-parser@*":
|
||||
version "1.19.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
|
||||
|
|
@ -42,6 +60,11 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
|
||||
integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
|
||||
|
||||
"@types/luxon@~3.4.0":
|
||||
version "3.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/luxon/-/luxon-3.4.2.tgz#e4fc7214a420173cea47739c33cdf10874694db7"
|
||||
integrity sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==
|
||||
|
||||
"@types/mime@^1":
|
||||
version "1.3.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
|
||||
|
|
@ -99,7 +122,7 @@ asynckit@^0.4.0:
|
|||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||
|
||||
axios@^1.1.3:
|
||||
axios@^1.1.3, axios@^1.6.8:
|
||||
version "1.6.8"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
|
||||
integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
|
||||
|
|
@ -126,6 +149,13 @@ body-parser@1.20.2:
|
|||
type-is "~1.6.18"
|
||||
unpipe "1.0.0"
|
||||
|
||||
bufferutil@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea"
|
||||
integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==
|
||||
dependencies:
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
bytes@3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
|
||||
|
|
@ -142,6 +172,13 @@ call-bind@^1.0.7:
|
|||
get-intrinsic "^1.2.4"
|
||||
set-function-length "^1.2.1"
|
||||
|
||||
cbor-redux@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/cbor-redux/-/cbor-redux-1.0.0.tgz#82437cf23bab5920bbb19a708a1c46a505da790c"
|
||||
integrity sha512-nqCD/Yu2FON0XgZYdUNsMx1Tc08MOY3noh9bO2MvkjlyLZyqIVWjuz6A0mDrPJncdOfacokFUtF7zlzzP5oK5A==
|
||||
dependencies:
|
||||
"@deno/shim-deno" "~0.16.1"
|
||||
|
||||
combined-stream@^1.0.8:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
|
|
@ -171,6 +208,14 @@ cookie@0.6.0:
|
|||
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
|
||||
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
|
||||
|
||||
cron@^3.1.7:
|
||||
version "3.1.7"
|
||||
resolved "https://registry.yarnpkg.com/cron/-/cron-3.1.7.tgz#3423d618ba625e78458fff8cb67001672d49ba0d"
|
||||
integrity sha512-tlBg7ARsAMQLzgwqVxy8AZl/qlTc5nibqYwtNGoCrd+cV+ugI+tvZC1oT/8dFH8W455YrywGykx/KMmAqOr7Jw==
|
||||
dependencies:
|
||||
"@types/luxon" "~3.4.0"
|
||||
luxon "~3.4.0"
|
||||
|
||||
debug@2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
|
|
@ -178,6 +223,11 @@ debug@2.6.9:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
decimal.js@^10.4.3:
|
||||
version "10.4.3"
|
||||
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23"
|
||||
integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==
|
||||
|
||||
define-data-property@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
|
||||
|
|
@ -202,11 +252,6 @@ destroy@1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
|
||||
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
|
||||
|
||||
dotenv@^16.4.5:
|
||||
version "16.4.5"
|
||||
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
|
||||
integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
|
||||
|
||||
ee-first@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
|
|
@ -388,6 +433,16 @@ ipaddr.js@1.9.1:
|
|||
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
||||
|
||||
isexe@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
|
||||
|
||||
isows@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.4.tgz#810cd0d90cc4995c26395d2aa4cfa4037ebdf061"
|
||||
integrity sha512-hEzjY+x9u9hPmBom9IIAqdJCwNLax+xrPb51vEPpERoFlIxgmZcHzsT5jKG06nvInKOBGvReAVz80Umed5CczQ==
|
||||
|
||||
linkedin-api-client@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/linkedin-api-client/-/linkedin-api-client-0.3.0.tgz#b10db8b028a74cad4ca3baa0781b2787a2c8b56c"
|
||||
|
|
@ -402,6 +457,11 @@ lodash@^4.17.21:
|
|||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
||||
|
||||
luxon@~3.4.0:
|
||||
version "3.4.4"
|
||||
resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.4.4.tgz#cf20dc27dc532ba41a169c43fdcc0063601577af"
|
||||
integrity sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==
|
||||
|
||||
media-typer@0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
|
|
@ -449,6 +509,11 @@ negotiator@0.6.3:
|
|||
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
||||
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
|
||||
|
||||
node-gyp-build@^4.3.0:
|
||||
version "4.8.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd"
|
||||
integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==
|
||||
|
||||
object-inspect@^1.13.1:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
|
||||
|
|
@ -584,11 +649,32 @@ statuses@2.0.1:
|
|||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
||||
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
||||
|
||||
surrealdb.js@^1.0.0-beta.5:
|
||||
version "1.0.0-beta.5"
|
||||
resolved "https://registry.yarnpkg.com/surrealdb.js/-/surrealdb.js-1.0.0-beta.5.tgz#2eb48a46838774dd229c84bc6a1193135fbfbd82"
|
||||
integrity sha512-8JEHCLm/ulm4gBX9XJ/MGKofHlBw14mRAiG/1spvadQ1N51UsmDXMHD11YPACXZ2yBjJfDeYY1EdH9OW4PnrQA==
|
||||
dependencies:
|
||||
"@icholy/duration" "^5.1.0"
|
||||
cbor-redux "1.0.0"
|
||||
decimal.js "^10.4.3"
|
||||
isows "^1.0.4"
|
||||
uuidv7 "0.6.3"
|
||||
ws "^8.16.0"
|
||||
zod "*"
|
||||
optionalDependencies:
|
||||
bufferutil "^4.0.8"
|
||||
utf-8-validate "^6.0.3"
|
||||
|
||||
toidentifier@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||
|
||||
twitter-api-v2@^1.16.3:
|
||||
version "1.16.3"
|
||||
resolved "https://registry.yarnpkg.com/twitter-api-v2/-/twitter-api-v2-1.16.3.tgz#6042c61b4dee35329dda3d153d9f08d2c6a348e3"
|
||||
integrity sha512-T9Wbq1y3IrTshBvtVawpWp1GmL3mduF4RhieSfM1HsL10Qda0EeJMDUwr5C6IeelnSZ65tiiXzs0xUS8FHM9XA==
|
||||
|
||||
type-is@~1.6.18:
|
||||
version "1.6.18"
|
||||
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
|
||||
|
|
@ -607,12 +693,41 @@ unpipe@1.0.0, unpipe@~1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
||||
|
||||
utf-8-validate@^6.0.3:
|
||||
version "6.0.3"
|
||||
resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777"
|
||||
integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==
|
||||
dependencies:
|
||||
node-gyp-build "^4.3.0"
|
||||
|
||||
utils-merge@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
|
||||
|
||||
uuidv7@0.6.3:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/uuidv7/-/uuidv7-0.6.3.tgz#2abcfa683b4ad4a0cbbbaedffc3ef940c110cf10"
|
||||
integrity sha512-zV3eW2NlXTsun/aJ7AixxZjH/byQcH/r3J99MI0dDEkU2cJIBJxhEWUHDTpOaLPRNhebPZoeHuykYREkI9HafA==
|
||||
|
||||
vary@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
||||
|
||||
which@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
|
||||
dependencies:
|
||||
isexe "^2.0.0"
|
||||
|
||||
ws@^8.16.0:
|
||||
version "8.17.0"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.0.tgz#d145d18eca2ed25aaf791a183903f7be5e295fea"
|
||||
integrity sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==
|
||||
|
||||
zod@*:
|
||||
version "3.23.5"
|
||||
resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.5.tgz#c7b7617d017d4a2f21852f533258d26a9a5ae09f"
|
||||
integrity sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue