Skip to content

Commit

Permalink
Merge pull request #224 from acelaya-forks/feature/abort-signal
Browse files Browse the repository at this point in the history
Allow an AbortSignal to be provided to ShlinkApiClient methods
  • Loading branch information
acelaya authored Jan 26, 2025
2 parents 68c0241 + d94a3c3 commit 412577a
Show file tree
Hide file tree
Showing 9 changed files with 169 additions and 89 deletions.
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,25 @@ All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org).

## [Unreleased]
### Added
* [#8](https://github.com/shlinkio/shlink-js-sdk/issues/8) Allow an `AbortSignal` to be provided as the last optional argument to all public `ShlinkApiClient` methods.

This will let consumers control if a request should be aborted, via `AbortController`.

### Changed
* Rearrange `exports` order, as suggested by vitest.

### Deprecated
* *Nothing*

### Removed
* *Nothing*

### Fixed
* *Nothing*


## [1.3.0] - 2024-11-25
### Added
* Add support for `geolocation-country-code` and `geolocation-city-name` redirect condition types.
Expand Down
16 changes: 8 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,24 @@
"types": "./dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.js",
"types": "./dist/index.d.ts",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
"import": "./dist/index.js"
},
"./api-contract": {
"import": "./dist/api-contract.js",
"types": "./dist/api-contract.d.ts",
"require": "./dist/api-contract.cjs",
"types": "./dist/api-contract.d.ts"
"import": "./dist/api-contract.js"
},
"./browser": {
"import": "./dist/browser.js",
"types": "./dist/browser.d.ts",
"require": "./dist/browser.cjs",
"types": "./dist/browser.d.ts"
"import": "./dist/browser.js"
},
"./node": {
"import": "./dist/node.js",
"types": "./dist/node.d.ts",
"require": "./dist/node.cjs",
"types": "./dist/node.d.ts"
"import": "./dist/node.js"
},
"./package.json": "./package.json"
},
Expand Down
56 changes: 35 additions & 21 deletions src/api-contract/ShlinkApiClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,67 +24,81 @@ import type {
export type ShlinkApiClient = {
// Short URLs

listShortUrls(params?: ShlinkShortUrlsListParams): Promise<ShlinkShortUrlsList>;
listShortUrls(params?: ShlinkShortUrlsListParams, signal?: AbortSignal): Promise<ShlinkShortUrlsList>;

createShortUrl(options: ShlinkCreateShortUrlData): Promise<ShlinkShortUrl>;
createShortUrl(options: ShlinkCreateShortUrlData, signal?: AbortSignal): Promise<ShlinkShortUrl>;

getShortUrl(shortCode: string, domain?: string | null): Promise<ShlinkShortUrl>;
getShortUrl(shortCode: string, domain?: string | null, signal?: AbortSignal): Promise<ShlinkShortUrl>;

deleteShortUrl(shortCode: string, domain?: string | null): Promise<void>;
deleteShortUrl(shortCode: string, domain?: string | null, signal?: AbortSignal): Promise<void>;

updateShortUrl(
shortCode: string,
domain: string | null | undefined,
data: ShlinkEditShortUrlData,
signal?: AbortSignal,
): Promise<ShlinkShortUrl>;

// Short URL redirect rules

getShortUrlRedirectRules(shortCode: string, domain?: string | null): Promise<ShlinkRedirectRulesList>;
getShortUrlRedirectRules(
shortCode: string,
domain?: string | null,
signal?: AbortSignal,
): Promise<ShlinkRedirectRulesList>;

setShortUrlRedirectRules(
shortCode: string,
domain: string | null | undefined,
data: ShlinkSetRedirectRulesData,
signal?: AbortSignal,
): Promise<ShlinkRedirectRulesList>;

// Visits

getVisitsOverview(): Promise<ShlinkVisitsOverview>;
getVisitsOverview(signal?: AbortSignal): Promise<ShlinkVisitsOverview>;

getShortUrlVisits(shortCode: string, params?: ShlinkShortUrlVisitsParams): Promise<ShlinkVisitsList>;
getShortUrlVisits(
shortCode: string,
params?: ShlinkShortUrlVisitsParams,
signal?: AbortSignal,
): Promise<ShlinkVisitsList>;

getTagVisits(tag: string, params?: ShlinkVisitsParams): Promise<ShlinkVisitsList>;
getTagVisits(tag: string, params?: ShlinkVisitsParams, signal?: AbortSignal): Promise<ShlinkVisitsList>;

getDomainVisits(domain: string, params?: ShlinkVisitsParams): Promise<ShlinkVisitsList>;
getDomainVisits(domain: string, params?: ShlinkVisitsParams, signal?: AbortSignal): Promise<ShlinkVisitsList>;

getOrphanVisits(params?: ShlinkOrphanVisitsParams): Promise<ShlinkVisitsList>;
getOrphanVisits(params?: ShlinkOrphanVisitsParams, signal?: AbortSignal): Promise<ShlinkVisitsList>;

getNonOrphanVisits(params?: ShlinkVisitsParams): Promise<ShlinkVisitsList>;
getNonOrphanVisits(params?: ShlinkVisitsParams, signal?: AbortSignal): Promise<ShlinkVisitsList>;

deleteShortUrlVisits(shortCode: string, domain?: string | null): Promise<ShlinkDeleteVisitsResult>;
deleteShortUrlVisits(
shortCode: string,
domain?: string | null,
signal?: AbortSignal,
): Promise<ShlinkDeleteVisitsResult>;

deleteOrphanVisits(): Promise<ShlinkDeleteVisitsResult>;
deleteOrphanVisits(signal?: AbortSignal): Promise<ShlinkDeleteVisitsResult>;

// Tags

listTags(): Promise<ShlinkTagsList>;
listTags(signal?: AbortSignal): Promise<ShlinkTagsList>;

tagsStats(): Promise<ShlinkTagsStatsList>;
tagsStats(signal?: AbortSignal): Promise<ShlinkTagsStatsList>;

deleteTags(tags: string[]): Promise<{ tags: string[] }>;
deleteTags(tags: string[], signal?: AbortSignal): Promise<{ tags: string[] }>;

editTag(oldName: string, newName: string): Promise<{ oldName: string; newName: string }>;
editTag(oldName: string, newName: string, signal?: AbortSignal): Promise<{ oldName: string; newName: string }>;

// Domains

listDomains(): Promise<ShlinkDomainsList>;
listDomains(signal?: AbortSignal): Promise<ShlinkDomainsList>;

editDomainRedirects(domainRedirects: ShlinkEditDomainRedirects): Promise<ShlinkDomainRedirects>;
editDomainRedirects(domainRedirects: ShlinkEditDomainRedirects, signal?: AbortSignal): Promise<ShlinkDomainRedirects>;

// Misc

health(authority?: string): Promise<ShlinkHealth>;
health(authority?: string, signal?: AbortSignal): Promise<ShlinkHealth>;

mercureInfo(): Promise<ShlinkMercureInfo>;
mercureInfo(signal?: AbortSignal): Promise<ShlinkMercureInfo>;
};
1 change: 1 addition & 0 deletions src/api/HttpClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ export type RequestOptions = {
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
body?: string;
headers?: Record<string, string>;
signal?: AbortSignal;
};

export type HttpClient = {
Expand Down
Loading

0 comments on commit 412577a

Please sign in to comment.