Huakun Shen e4d1441d73
Feature: support npm extension publish (#62)
* feat: npm package registry API

* refactor: move package registry files

* refactor: move jsr and npm api to a new package

* ci: add verify-package-export

* test: implement tests for npm package validation as kunkun extension

* chore: add missing dep for package-registry pkg

* feat: make provenance an optional input for npm validation function

* ci: add verify-package-export as dev dep to 2 packages that uses it

* feat: add rekor log API, and return commit from jsr & npm package in validation function

* feat: return github repo info from validation function of jsr and npm

* feat: extend ExtPublishMetadata to include optional GitHub repository details

* fix: eslint for ui package

* refactor: format desktop

* fix: eslint errors in desktop

* format: all code

* ci: add lint to CI

* feat: add more info to validation function returned from package-registry npm jsr

* pnpm lock

* feat: add 2 more variables to supabase extension metadata model

* format

* feat: add provenance card

* feat: add workflow path to ExtPublishMetadata and jsr/npm validation

* update provenance

* feat: make store extension and provenance more responsive

* chore: add globals to ui package

* fix: remove unnecessary any to fix eslint

* fix: svg sanitize

* chore: add @typescript-eslint/eslint-plugin to ui package to fix eslint

* fix: update eslint dep to fix error

* fix: try fixing eslint

* fix: update eslint configuration for improved compatibility

* chore: add globals package and update README for Discord invite

* fix: update eslint rules and upgrade typescript-eslint dependency

- Disabled additional eslint rules to resolve errors:
  - @typescript-eslint/no-unused-expressions
  - svelte/no-inner-declarations
- Upgraded typescript-eslint from version 8.19.1 to 8.20.0 for improved compatibility.

* update pnpm lock

---------

Co-authored-by: Huakun Shen <huaukun.shen@huakunshen.com>
2025-01-16 06:00:07 -05:00

49 lines
1.4 KiB
TypeScript

/**
* TODO: move this module to another folder
*/
import { Octokit } from "@octokit/rest"
/**
* Check if a user is a public member of a GitHub organization
* @param orgName - The name of the GitHub organization
* @param username - The username of the user
* @returns A promise that resolves to a boolean indicating if the user is a public member of the organization
*/
export function userIsPublicMemberOfGitHubOrg(orgName: string, username: string): Promise<boolean> {
const octokit = new Octokit()
return octokit.orgs
.checkPublicMembershipForUser({ org: orgName, username })
.then(() => true)
.catch(() => false)
}
/**
* Only works if user grants read:org scope with the org when login
* @param orgName
* @param username
* @param githubToken
*/
export function authenticatedUserIsMemberOfGitHubOrg(
orgName: string,
githubToken: string
): Promise<boolean> {
const octokit = new Octokit({ auth: githubToken })
return octokit.orgs.listForAuthenticatedUser().then((res) => {
return res.data.some((org) => org.login === orgName)
})
}
export function parseGitHubRepoFromUri(uri: string): {
owner: string
repo: string
} {
// check regex
const regex = /https?:\/\/github\.com\/([^\/]+)\/([^\/]+)/
const match = uri.match(regex)
if (!match) {
throw new Error("Invalid GitHub repository URI")
}
const [, owner, repo] = match
return { owner, repo }
}