{"id":19670356,"url":"https://github.com/mat-sz/upload","last_synced_at":"2026-03-12T11:34:21.937Z","repository":{"id":57387232,"uuid":"269142594","full_name":"mat-sz/upload","owner":"mat-sz","description":"⬆ Isomorphic TypeScript file upload library.","archived":false,"fork":false,"pushed_at":"2024-07-30T22:16:05.000Z","size":181,"stargazers_count":20,"open_issues_count":6,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-12-27T04:07:08.055Z","etag":null,"topics":["fetch","fetch-api","form","javascript","javascript-library","promise","typescript","typescript-library","upload","upload-file"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause-clear","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mat-sz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-03T16:45:00.000Z","updated_at":"2024-10-24T13:58:03.000Z","dependencies_parsed_at":"2024-06-18T18:17:37.933Z","dependency_job_id":"944f6b61-47fd-4119-9a8f-c3e9e294d5fd","html_url":"https://github.com/mat-sz/upload","commit_stats":{"total_commits":44,"total_committers":4,"mean_commits":11.0,"dds":0.09090909090909094,"last_synced_commit":"b0ef656455533546f4e51d4135fbdf2be1a7f97e"},"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-sz%2Fupload","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-sz%2Fupload/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-sz%2Fupload/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mat-sz%2Fupload/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mat-sz","download_url":"https://codeload.github.com/mat-sz/upload/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232308556,"owners_count":18503119,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fetch","fetch-api","form","javascript","javascript-library","promise","typescript","typescript-library","upload","upload-file"],"created_at":"2024-11-11T17:06:01.718Z","updated_at":"2026-03-12T11:34:21.834Z","avatar_url":"https://github.com/mat-sz.png","language":"TypeScript","readme":"\u003ch1 align=\"center\"\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/mat-sz/upload/master/logo.png\" alt=\"upload\" width=\"700\"\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\nIsomorphic TypeScript file upload library for browser and node.js environments.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"workflow\" src=\"https://img.shields.io/github/workflow/status/mat-sz/upload/Node.js%20CI%20(yarn)\"\u003e\n\u003ca href=\"https://npmjs.com/package/upload\"\u003e\n\u003cimg alt=\"npm\" src=\"https://img.shields.io/npm/v/upload\"\u003e\n\u003cimg alt=\"npm\" src=\"https://img.shields.io/npm/dw/upload\"\u003e\n\u003cimg alt=\"NPM\" src=\"https://img.shields.io/npm/l/upload\"\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003cstrong\u003eQuickstart:\u003c/strong\u003e\n\u003c/p\u003e\n\n```\nnpm install upload\n\n# ...or\n\nyarn add upload\n```\n\n## Example usage\n\n### upload function\n\n```ts\nimport { upload } from 'upload';\n\nasync function test() {\n  const response = await upload(\n    'https://example.com/upload',\n    {\n      file: someInput.file,\n    },\n    {\n      onProgress: progress =\u003e (element.innerText = progress * 100 + '%'),\n    }\n  );\n\n  console.log(response);\n}\n```\n\n### Upload class\n\n```ts\nasync function test() {\n  const upload = new Upload({\n    url: 'https://example.com/upload',\n    form: {\n      file: someInput.file,\n    },\n    headers: {\n      Authorization: 'Bearer TOKEN',\n    },\n  });\n\n  upload.on('progress', progress =\u003e {\n    element.innerText = progress * 100 + '%';\n  });\n\n  const response = await upload.upload();\n  console.log(response);\n\n  alert('Done!');\n}\n```\n\n### Abort request\n\n```ts\nconst upload = new Upload({\n  url: 'https://httpbin.org/post',\n  form: someInput.file,\n});\n\nupload.on('state', () =\u003e {\n  if (upload.state === 'aborted') doSomething();\n});\n\nupload.upload();\nupload.abort();\n```\n\n## Events\n\nYou can attach event listeners to an instance of `Upload` with `.on`:\n\n```ts\nupload.on('state', state =\u003e {\n  console.log(state);\n});\n```\n\n### state\n\nEmitted when upload state is changed. Possible states: `new`, `started`, `aborted`, `failed`, `successful`.\n\n### error\n\nEmitted when an error occurs.\n\n### progress (progress: number)\n\nEmitted when upload progress changes. Progress is a float between 0 and 1.\n\n## API\n\n```ts\ninterface UploadResponse {\n  data?: string | ArrayBuffer | Blob;\n  headers?: Record\u003cstring, string | string[] | undefined\u003e;\n}\n\ninterface UploadOptions {\n  form: Record\u003cstring, string | Blob\u003e | FormData | FormDataNode;\n  url: string;\n  headers?: Record\u003cstring, string\u003e;\n}\n\ntype UploadState = 'new' | 'started' | 'aborted' | 'failed' | 'successful';\n\npublic state: UploadState;\npublic progress = 0;\npublic uploadedBytes = 0;\npublic totalBytes = 0;\n\nnew Upload(options: UploadOptions);\nupload(): Promise\u003cUploadResponse\u003e;\nabort(): void;\n\non(eventType: 'progress', listener: (progress: number) =\u003e void): void;\non(eventType: 'error', listener: () =\u003e void): void;\non(eventType: 'state', listener: (state: string) =\u003e void): void;\n\noff(eventType: 'progress', listener: (progress: number) =\u003e void): void;\noff(eventType: 'error', listener: () =\u003e void): void;\noff(eventType: 'state', listener: (state: string) =\u003e void): void;\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmat-sz%2Fupload","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmat-sz%2Fupload","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmat-sz%2Fupload/lists"}