worked on twitter api support added surrealist to flake got database create user and sign in functions working
This commit is contained in:
parent
19d70ba912
commit
5b9c9187ff
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-debug.log*
|
||||||
yarn-error.log*
|
yarn-error.log*
|
||||||
.config/.env
|
.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/
|
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/
|
dist/
|
||||||
|
.direnv/
|
||||||
# Gatsby files
|
database.surql
|
||||||
.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
|
|
||||||
19
flake.lock
generated
19
flake.lock
generated
|
|
@ -34,10 +34,27 @@
|
||||||
"type": "github"
|
"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": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"systems": {
|
"systems": {
|
||||||
|
|
|
||||||
19
flake.nix
19
flake.nix
|
|
@ -2,7 +2,11 @@
|
||||||
description = "A js development environment";
|
description = "A js development environment";
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
|
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, ... }:
|
outputs = { self, nixpkgs, flake-utils, ... }:
|
||||||
|
|
@ -12,13 +16,20 @@
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = [];
|
overlays = [];
|
||||||
};
|
};
|
||||||
|
unstable = import <nixos-unstable> { config = { allowUnfree = true; }; };
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
devShell = pkgs.mkShell {
|
devShell = pkgs.mkShell {
|
||||||
buildInputs = [
|
buildInputs = with pkgs; [
|
||||||
pkgs.nodejs_20
|
nodejs_20
|
||||||
pkgs.yarn
|
yarn
|
||||||
|
surrealdb
|
||||||
|
unstable.surrealist
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (nixpkgs.lib.getName pkg) [
|
||||||
|
"surrealdb"
|
||||||
|
];
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,13 +3,16 @@
|
||||||
"main": "src/index.js",
|
"main": "src/index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"start": "node dist/server.js"
|
"start": "node dist/server.js --env-file='.config/.env'"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/express": "^4.17.21",
|
"@types/express": "^4.17.21",
|
||||||
"dotenv": "^16.4.5",
|
"axios": "^1.6.8",
|
||||||
|
"cron": "^3.1.7",
|
||||||
"express": "^4.19.2",
|
"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": {}
|
"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 {Router,Request,Response} from 'express';
|
||||||
import { RestliClient } from 'linkedin-api-client';
|
import {post_to_li} from './platforms/li_post.js'
|
||||||
import { config } from 'dotenv';
|
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
|
// Create a router
|
||||||
const router = express.Router();
|
const router = Router();
|
||||||
const restliClient = new RestliClient();
|
|
||||||
// Load API Keys
|
|
||||||
const twitterApiKey = process.env.TWITTER_API_KEY;
|
|
||||||
const liApiKey = process.env.LI_API_KEY || '';
|
|
||||||
|
|
||||||
// Define routes
|
// Endpoints to post to twitter
|
||||||
// Twitter API tweet endpoint: https://api.twitter.com/1.1/statuses/update.json
|
//TODO: accept MD as input and convert to non-formatted text as Twitter is dumb and doesn't allow formatting in posts
|
||||||
router.get('/twitter', (req,res) => {
|
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
|
//Endpoints for surrealdb
|
||||||
router.get('/li', (req,res) => {
|
/// 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
|
// Endpoint to post to linkedin
|
||||||
router.get('/all', (req,res) => {
|
//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
|
// Export the router
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,11 @@ import express from 'express';
|
||||||
import router from './router.js';
|
import router from './router.js';
|
||||||
|
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 3000;
|
const port = process.env.PORT || 3000;
|
||||||
|
|
||||||
// Use the router
|
// Use the router
|
||||||
app.use(router);
|
app.use(router);
|
||||||
|
|
||||||
app.listen(port, () => {
|
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
|
# 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@*":
|
"@types/body-parser@*":
|
||||||
version "1.19.5"
|
version "1.19.5"
|
||||||
resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4"
|
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"
|
resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f"
|
||||||
integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==
|
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":
|
"@types/mime@^1":
|
||||||
version "1.3.5"
|
version "1.3.5"
|
||||||
resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690"
|
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"
|
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||||
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
|
||||||
|
|
||||||
axios@^1.1.3:
|
axios@^1.1.3, axios@^1.6.8:
|
||||||
version "1.6.8"
|
version "1.6.8"
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
|
resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
|
||||||
integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
|
integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
|
||||||
|
|
@ -126,6 +149,13 @@ body-parser@1.20.2:
|
||||||
type-is "~1.6.18"
|
type-is "~1.6.18"
|
||||||
unpipe "1.0.0"
|
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:
|
bytes@3.1.2:
|
||||||
version "3.1.2"
|
version "3.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
|
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"
|
get-intrinsic "^1.2.4"
|
||||||
set-function-length "^1.2.1"
|
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:
|
combined-stream@^1.0.8:
|
||||||
version "1.0.8"
|
version "1.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
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"
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051"
|
||||||
integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
|
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:
|
debug@2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
|
|
@ -178,6 +223,11 @@ debug@2.6.9:
|
||||||
dependencies:
|
dependencies:
|
||||||
ms "2.0.0"
|
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:
|
define-data-property@^1.1.4:
|
||||||
version "1.1.4"
|
version "1.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
|
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"
|
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
|
||||||
integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
|
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:
|
ee-first@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
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"
|
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
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:
|
linkedin-api-client@^0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/linkedin-api-client/-/linkedin-api-client-0.3.0.tgz#b10db8b028a74cad4ca3baa0781b2787a2c8b56c"
|
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"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
|
||||||
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
|
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:
|
media-typer@0.3.0:
|
||||||
version "0.3.0"
|
version "0.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
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"
|
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
|
||||||
integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
|
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:
|
object-inspect@^1.13.1:
|
||||||
version "1.13.1"
|
version "1.13.1"
|
||||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
|
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"
|
resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
|
||||||
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
|
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:
|
toidentifier@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
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:
|
type-is@~1.6.18:
|
||||||
version "1.6.18"
|
version "1.6.18"
|
||||||
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
|
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"
|
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||||
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
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:
|
utils-merge@1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||||
integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
|
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:
|
vary@~1.1.2:
|
||||||
version "1.1.2"
|
version "1.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||||
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
|
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