@typeship-ax/cli 0.22.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +13 -9
- package/README.md +14 -27
- package/api.json +8898 -9026
- package/api.md +370 -328
- package/dist/arguments.d.ts +54 -0
- package/dist/arguments.d.ts.map +1 -0
- package/dist/arguments.js +265 -0
- package/dist/cli-agent.d.ts +73 -9
- package/dist/cli-agent.d.ts.map +1 -1
- package/dist/cli-agent.js +331 -44
- package/dist/cli.js +802 -291
- package/dist/core/http.d.ts +162 -19
- package/dist/core/http.d.ts.map +1 -1
- package/dist/core/http.js +381 -48
- package/dist/core/pagination.d.ts +42 -6
- package/dist/core/pagination.d.ts.map +1 -1
- package/dist/core/pagination.js +111 -17
- package/dist/credential-storage.d.ts +10 -3
- package/dist/credential-storage.d.ts.map +1 -1
- package/dist/credential-storage.js +15 -6
- package/dist/dates.d.ts +1 -1
- package/dist/dates.js +1 -1
- package/dist/errors.d.ts +20 -84
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +20 -108
- package/dist/fields.d.ts +36 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +187 -0
- package/dist/index.d.ts +28 -18
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -25
- package/dist/named-credentials.d.ts +19 -0
- package/dist/named-credentials.d.ts.map +1 -1
- package/dist/named-credentials.js +81 -1
- package/dist/oauth-login.d.ts +8 -2
- package/dist/oauth-login.d.ts.map +1 -1
- package/dist/oauth-login.js +31 -19
- package/dist/oauth-request.d.ts +7 -1
- package/dist/oauth-request.d.ts.map +1 -1
- package/dist/oauth-request.js +26 -4
- package/dist/oauth-session.d.ts +13 -1
- package/dist/oauth-session.d.ts.map +1 -1
- package/dist/oauth-session.js +34 -18
- package/dist/ops.d.ts +58 -5
- package/dist/ops.d.ts.map +1 -1
- package/dist/ops.js +110 -41
- package/dist/polling-login.d.ts +8 -2
- package/dist/polling-login.d.ts.map +1 -1
- package/dist/polling-login.js +25 -11
- package/dist/resources/api-keys.d.ts +10 -7
- package/dist/resources/api-keys.d.ts.map +1 -1
- package/dist/resources/api-keys.js +10 -31
- package/dist/resources/deliveries.d.ts +89 -5
- package/dist/resources/deliveries.d.ts.map +1 -1
- package/dist/resources/deliveries.js +96 -19
- package/dist/resources/drafts.d.ts +16 -16
- package/dist/resources/drafts.d.ts.map +1 -1
- package/dist/resources/drafts.js +12 -65
- package/dist/resources/files.d.ts +4 -4
- package/dist/resources/files.d.ts.map +1 -1
- package/dist/resources/files.js +3 -12
- package/dist/resources/generations.d.ts +16 -16
- package/dist/resources/generations.d.ts.map +1 -1
- package/dist/resources/generations.js +23 -47
- package/dist/resources/organization.d.ts +4 -4
- package/dist/resources/organization.d.ts.map +1 -1
- package/dist/resources/organization.js +3 -10
- package/dist/resources/{generate.d.ts → packages.d.ts} +16 -16
- package/dist/resources/packages.d.ts.map +1 -0
- package/dist/resources/{generate.js → packages.js} +13 -29
- package/dist/resources/projects.d.ts +50 -50
- package/dist/resources/projects.d.ts.map +1 -1
- package/dist/resources/projects.js +60 -116
- package/dist/resources/releases.d.ts +22 -17
- package/dist/resources/releases.d.ts.map +1 -1
- package/dist/resources/releases.js +19 -40
- package/dist/resources/spec-revisions.d.ts +16 -7
- package/dist/resources/spec-revisions.d.ts.map +1 -1
- package/dist/resources/spec-revisions.js +7 -29
- package/dist/resources/specs.d.ts +7 -7
- package/dist/resources/specs.d.ts.map +1 -1
- package/dist/resources/specs.js +6 -34
- package/dist/resources/targets.d.ts +49 -49
- package/dist/resources/targets.d.ts.map +1 -1
- package/dist/resources/targets.js +59 -115
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +83 -81
- package/dist/search.d.ts +54 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +421 -0
- package/dist/table.d.ts +28 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +167 -0
- package/dist/type-docs.d.ts +61 -0
- package/dist/type-docs.d.ts.map +1 -0
- package/dist/type-docs.js +174 -0
- package/dist/types.d.ts +499 -339
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +18 -18
- package/package.json +5 -2
- package/src/arguments.ts +254 -0
- package/src/cli-agent.ts +351 -46
- package/src/cli.ts +753 -266
- package/src/core/http.ts +457 -58
- package/src/core/pagination.ts +129 -18
- package/src/credential-storage.ts +16 -6
- package/src/dates.ts +1 -1
- package/src/errors.ts +46 -115
- package/src/fields.ts +167 -0
- package/src/index.ts +45 -28
- package/src/named-credentials.ts +66 -1
- package/src/oauth-login.ts +36 -21
- package/src/oauth-request.ts +32 -6
- package/src/oauth-session.ts +37 -19
- package/src/ops.ts +146 -45
- package/src/polling-login.ts +24 -11
- package/src/resources/api-keys.ts +34 -48
- package/src/resources/deliveries.ts +213 -32
- package/src/resources/drafts.ts +62 -109
- package/src/resources/files.ts +19 -20
- package/src/resources/generations.ts +61 -79
- package/src/resources/organization.ts +11 -16
- package/src/resources/{generate.ts → packages.ts} +43 -51
- package/src/resources/projects.ts +145 -200
- package/src/resources/releases.ts +50 -67
- package/src/resources/spec-revisions.ts +40 -49
- package/src/resources/specs.ts +39 -59
- package/src/resources/targets.ts +144 -194
- package/src/schemas.ts +83 -81
- package/src/search.ts +434 -0
- package/src/table.ts +167 -0
- package/src/type-docs.ts +205 -0
- package/src/types.ts +538 -357
- package/dist/console-login-check.d.ts +0 -21
- package/dist/console-login-check.d.ts.map +0 -1
- package/dist/console-login-check.js +0 -107
- package/dist/console-login-contract.d.ts +0 -45
- package/dist/console-login-contract.d.ts.map +0 -1
- package/dist/console-login-contract.js +0 -40
- package/dist/resources/generate.d.ts.map +0 -1
- package/dist/resources/publications.d.ts +0 -47
- package/dist/resources/publications.d.ts.map +0 -1
- package/dist/resources/publications.js +0 -70
- package/src/console-login-check.ts +0 -88
- package/src/console-login-contract.ts +0 -65
- package/src/resources/publications.ts +0 -140
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Auto-pagination. Generated by
|
|
2
|
+
* Auto-pagination. Generated by Typeship — https://typeship.dev
|
|
3
3
|
*
|
|
4
4
|
* List operations return a PagePromise: `await` it for one page, or
|
|
5
5
|
* `for await` it to stream every item across every page.
|
|
6
6
|
*/
|
|
7
|
-
import { HttpCore, type CoreRequest, type ResponseMeta } from "./http.js";
|
|
7
|
+
import { HttpCore, SdkError, type CoreRequest, type ResponseMeta } from "./http.js";
|
|
8
8
|
export interface PageConfig {
|
|
9
|
-
style: "cursor" | "cursorFromLastId" | "page" | "offset";
|
|
10
|
-
/** Response field holding the item array ("data", "items", …)
|
|
9
|
+
style: "cursor" | "cursorFromLastId" | "page" | "offset" | "nextUrl" | "link";
|
|
10
|
+
/** Response field holding the item array ("data", "items", …); "" when
|
|
11
|
+
* the body is the array itself. */
|
|
11
12
|
itemsField: string;
|
|
12
13
|
cursorParam?: string;
|
|
13
14
|
/** Dot-path into the response body ("next_cursor", "meta.next_cursor"). */
|
|
@@ -18,22 +19,57 @@ export interface PageConfig {
|
|
|
18
19
|
pageParam?: string;
|
|
19
20
|
offsetParam?: string;
|
|
20
21
|
limitParam?: string;
|
|
22
|
+
/** nextUrl: dot-path of the next page's URL ("next_page_uri", "next"). */
|
|
23
|
+
nextUrlField?: string;
|
|
24
|
+
/** page: the first page number when it is not 1. */
|
|
25
|
+
firstPage?: number;
|
|
26
|
+
/** Dot-path of the total item count: iteration stops once it is reached. */
|
|
27
|
+
totalField?: string;
|
|
28
|
+
/** Dot-path of the total page count: page iteration stops at the last page. */
|
|
29
|
+
totalPagesField?: string;
|
|
30
|
+
/** Each item is this field of the listed element (a Relay edge's `node`). */
|
|
31
|
+
itemPath?: string;
|
|
32
|
+
/** Page size sent when the caller gives none (GraphQL `first`). */
|
|
33
|
+
defaultLimit?: number;
|
|
34
|
+
/** Relay backward paging, used when the caller passes `backward.limitParam` (`last`). */
|
|
35
|
+
backward?: {
|
|
36
|
+
limitParam: string;
|
|
37
|
+
cursorParam: string;
|
|
38
|
+
cursorField: string;
|
|
39
|
+
hasMoreField: string;
|
|
40
|
+
};
|
|
21
41
|
}
|
|
22
|
-
|
|
42
|
+
/** A list response the pagination rules cannot read. */
|
|
43
|
+
export declare class PaginationError extends SdkError {
|
|
44
|
+
constructor(message: string, response?: ResponseMeta);
|
|
45
|
+
}
|
|
46
|
+
type FetchPage<Item, E> = (query: Record<string, unknown>, url?: string, before?: number) => Promise<Page<Item, E>>;
|
|
23
47
|
export declare class Page<Item, E = unknown> {
|
|
24
48
|
private readonly fetchPage;
|
|
25
49
|
private readonly config;
|
|
26
50
|
private readonly params;
|
|
51
|
+
/** Items on the pages before this one, for the total-count stop. */
|
|
52
|
+
private readonly before;
|
|
27
53
|
readonly body: unknown;
|
|
28
54
|
readonly response: ResponseMeta;
|
|
29
|
-
constructor(fetchPage: FetchPage<Item, E>, config: PageConfig, params: Record<string, unknown>, body: unknown, response: ResponseMeta);
|
|
55
|
+
constructor(fetchPage: FetchPage<Item, E>, config: PageConfig, params: Record<string, unknown>, body: unknown, response: ResponseMeta, before?: number);
|
|
30
56
|
get items(): Item[];
|
|
57
|
+
/** True when the caller asked for backward Relay pages (`last`). */
|
|
58
|
+
private get backward();
|
|
31
59
|
hasNextPage(): boolean;
|
|
60
|
+
/** The next page's URL, for styles that follow one (a response field or
|
|
61
|
+
* the Link header); null on the last page and for the other styles. */
|
|
62
|
+
nextPageUrl(): string | null;
|
|
32
63
|
nextPageParams(): Record<string, unknown> | null;
|
|
33
64
|
/** Fetch the next page, or null when this is the last one. Throws the typed error on failure. */
|
|
34
65
|
getNextPage(): Promise<Page<Item, E> | null>;
|
|
35
66
|
/** Iterate every item on this page and all following pages. */
|
|
36
67
|
[Symbol.asyncIterator](): AsyncIterator<Item, void, undefined>;
|
|
68
|
+
/** Signals every style shares: has_more false, or the total reached. */
|
|
69
|
+
private finished;
|
|
70
|
+
/** Items up to the end of this page: counted along a walk, or implied by
|
|
71
|
+
* the page's position when it was fetched on its own (an MCP nextPage). */
|
|
72
|
+
private itemsThrough;
|
|
37
73
|
private looksLikeMore;
|
|
38
74
|
}
|
|
39
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,QAAQ,EACR,KAAK,WAAW,EAChB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,GAAG,kBAAkB,GAAG,MAAM,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/core/pagination.ts"],"names":[],"mappings":"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"}
|
package/dist/core/pagination.js
CHANGED
|
@@ -1,55 +1,93 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Auto-pagination. Generated by
|
|
2
|
+
* Auto-pagination. Generated by Typeship — https://typeship.dev
|
|
3
3
|
*
|
|
4
4
|
* List operations return a PagePromise: `await` it for one page, or
|
|
5
5
|
* `for await` it to stream every item across every page.
|
|
6
6
|
*/
|
|
7
|
+
import { SdkError, } from "./http.js";
|
|
8
|
+
/** A list response the pagination rules cannot read. */
|
|
9
|
+
export class PaginationError extends SdkError {
|
|
10
|
+
constructor(message, response) {
|
|
11
|
+
super(message, "pagination_error", response?.status ?? null, response?.rawBody, response?.requestId);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
7
14
|
export class Page {
|
|
8
15
|
fetchPage;
|
|
9
16
|
config;
|
|
10
17
|
params;
|
|
18
|
+
/** Items on the pages before this one, for the total-count stop. */
|
|
19
|
+
before;
|
|
11
20
|
body;
|
|
12
21
|
response;
|
|
13
|
-
constructor(fetchPage, config, params, body, response) {
|
|
22
|
+
constructor(fetchPage, config, params, body, response, before = 0) {
|
|
14
23
|
this.fetchPage = fetchPage;
|
|
15
24
|
this.config = config;
|
|
16
25
|
this.params = params;
|
|
17
26
|
this.body = body;
|
|
18
27
|
this.response = response;
|
|
28
|
+
this.before = before;
|
|
19
29
|
}
|
|
20
30
|
get items() {
|
|
21
|
-
const value = getPath(this.body, this.config.itemsField);
|
|
22
|
-
|
|
31
|
+
const value = this.config.itemsField === "" ? this.body : getPath(this.body, this.config.itemsField);
|
|
32
|
+
if (!Array.isArray(value))
|
|
33
|
+
return [];
|
|
34
|
+
const path = this.config.itemPath;
|
|
35
|
+
return path === undefined ? value : value.map((entry) => entry?.[path]);
|
|
36
|
+
}
|
|
37
|
+
/** True when the caller asked for backward Relay pages (`last`). */
|
|
38
|
+
get backward() {
|
|
39
|
+
const backward = this.config.backward;
|
|
40
|
+
return backward && this.params[backward.limitParam] !== undefined ? backward : undefined;
|
|
23
41
|
}
|
|
24
42
|
hasNextPage() {
|
|
25
43
|
return this.nextPageParams() !== null;
|
|
26
44
|
}
|
|
45
|
+
/** The next page's URL, for styles that follow one (a response field or
|
|
46
|
+
* the Link header); null on the last page and for the other styles. */
|
|
47
|
+
nextPageUrl() {
|
|
48
|
+
if (this.finished())
|
|
49
|
+
return null;
|
|
50
|
+
switch (this.config.style) {
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
27
54
|
nextPageParams() {
|
|
28
55
|
const { config, params } = this;
|
|
29
56
|
const items = this.items;
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
57
|
+
if (this.finished())
|
|
58
|
+
return null;
|
|
59
|
+
const backward = this.backward;
|
|
35
60
|
switch (config.style) {
|
|
36
61
|
case "cursor": {
|
|
37
|
-
const
|
|
62
|
+
const cursorParam = backward ? backward.cursorParam : config.cursorParam;
|
|
63
|
+
const next = getPath(this.body, backward ? backward.cursorField : config.nextCursorField);
|
|
38
64
|
if (next === undefined || next === null || next === "")
|
|
39
65
|
return null;
|
|
40
|
-
if (next === params[
|
|
66
|
+
if (next === params[cursorParam])
|
|
41
67
|
return null;
|
|
42
|
-
return { ...params, [
|
|
68
|
+
return { ...params, [cursorParam]: next };
|
|
43
69
|
}
|
|
44
70
|
}
|
|
45
|
-
|
|
71
|
+
// URL styles: the next request is the URL itself. Pass page_url as the
|
|
72
|
+
// pageUrl request option to fetch that page.
|
|
73
|
+
const url = this.nextPageUrl();
|
|
74
|
+
if (url === null)
|
|
75
|
+
return null;
|
|
76
|
+
// The URL is the whole request: its query can hold parameters the
|
|
77
|
+
// operation does not declare (GitHub's after), so it is passed as is.
|
|
78
|
+
return { page_url: url };
|
|
46
79
|
}
|
|
47
80
|
/** Fetch the next page, or null when this is the last one. Throws the typed error on failure. */
|
|
48
81
|
async getNextPage() {
|
|
82
|
+
const url = this.nextPageUrl();
|
|
83
|
+
if (url !== null)
|
|
84
|
+
return this.fetchPage({}, url, this.before + this.items.length);
|
|
85
|
+
if (this.config.style === "nextUrl" || this.config.style === "link")
|
|
86
|
+
return null;
|
|
49
87
|
const next = this.nextPageParams();
|
|
50
88
|
if (next === null)
|
|
51
89
|
return null;
|
|
52
|
-
return this.fetchPage(next);
|
|
90
|
+
return this.fetchPage(next, undefined, this.before + this.items.length);
|
|
53
91
|
}
|
|
54
92
|
/** Iterate every item on this page and all following pages. */
|
|
55
93
|
async *[Symbol.asyncIterator]() {
|
|
@@ -60,6 +98,38 @@ export class Page {
|
|
|
60
98
|
page = await page.getNextPage();
|
|
61
99
|
}
|
|
62
100
|
}
|
|
101
|
+
/** Signals every style shares: has_more false, or the total reached. */
|
|
102
|
+
finished() {
|
|
103
|
+
// Backward Relay pages end on hasPreviousPage, forward ones on hasNextPage.
|
|
104
|
+
const hasMoreField = this.backward?.hasMoreField ?? this.config.hasMoreField;
|
|
105
|
+
if (hasMoreField !== undefined && getPath(this.body, hasMoreField) === false)
|
|
106
|
+
return true;
|
|
107
|
+
if (this.config.totalField !== undefined) {
|
|
108
|
+
const total = getPath(this.body, this.config.totalField);
|
|
109
|
+
if (typeof total === "number" && this.itemsThrough() >= total)
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
/** Items up to the end of this page: counted along a walk, or implied by
|
|
115
|
+
* the page's position when it was fetched on its own (an MCP nextPage). */
|
|
116
|
+
itemsThrough() {
|
|
117
|
+
let before = this.before;
|
|
118
|
+
const { config, params } = this;
|
|
119
|
+
if (before === 0 && config.style === "offset" && config.offsetParam !== undefined) {
|
|
120
|
+
const offset = Number(params[config.offsetParam]);
|
|
121
|
+
if (Number.isFinite(offset) && offset > 0)
|
|
122
|
+
before = offset;
|
|
123
|
+
}
|
|
124
|
+
if (before === 0 && config.style === "page" && config.pageParam !== undefined && config.limitParam !== undefined) {
|
|
125
|
+
const current = Number(params[config.pageParam]);
|
|
126
|
+
const limit = Number(params[config.limitParam]);
|
|
127
|
+
const first = config.firstPage ?? 1;
|
|
128
|
+
if (Number.isFinite(current) && Number.isFinite(limit) && limit > 0 && current > first)
|
|
129
|
+
before = (current - first) * limit;
|
|
130
|
+
}
|
|
131
|
+
return before + this.items.length;
|
|
132
|
+
}
|
|
63
133
|
looksLikeMore(items) {
|
|
64
134
|
if (items.length === 0)
|
|
65
135
|
return false;
|
|
@@ -91,12 +161,29 @@ export class PagePromise {
|
|
|
91
161
|
}
|
|
92
162
|
export function paginate(core, req, config) {
|
|
93
163
|
const isGraphql = false;
|
|
94
|
-
const fetchPage = async (params) => {
|
|
164
|
+
const fetchPage = async (params, url, before = 0) => {
|
|
95
165
|
let nextReq = { ...req, query: params };
|
|
166
|
+
if (url !== undefined) {
|
|
167
|
+
// A next-page URL is followed verbatim, but only on the API's own
|
|
168
|
+
// origin: the request carries the client's credentials.
|
|
169
|
+
const base = new URL(core.config.baseUrl);
|
|
170
|
+
const target = new URL(url, base);
|
|
171
|
+
if (target.origin !== base.origin) {
|
|
172
|
+
throw new PaginationError("The next page is on another origin (" + target.origin + "); refusing to send credentials there. Fetch it yourself if you trust it.");
|
|
173
|
+
}
|
|
174
|
+
nextReq = { ...req, query: undefined, url: target.toString() };
|
|
175
|
+
}
|
|
96
176
|
const result = await core.request(nextReq);
|
|
97
177
|
if (!result.ok)
|
|
98
178
|
throw result.error instanceof Error ? result.error : new Error(String(result.error));
|
|
99
|
-
|
|
179
|
+
// A page without its item array is a contract break, not an empty page:
|
|
180
|
+
// iterating it would silently end the walk. A null array is empty.
|
|
181
|
+
const items = config.itemsField === "" ? result.data : getPath(result.data, config.itemsField);
|
|
182
|
+
if (!Array.isArray(items) && !(items === null && config.itemsField !== "")) {
|
|
183
|
+
throw new PaginationError((config.itemsField === "" ? "The list response is not an array" : "The list response has no " + JSON.stringify(config.itemsField) + " array")
|
|
184
|
+
+ ". Check the API response against the spec, or configure this operation's pagination.", result.response);
|
|
185
|
+
}
|
|
186
|
+
return new Page(fetchPage, config, params, result.data, result.response, before);
|
|
100
187
|
};
|
|
101
188
|
const initial = {};
|
|
102
189
|
let seed = req.query ?? {};
|
|
@@ -104,7 +191,14 @@ export function paginate(core, req, config) {
|
|
|
104
191
|
if (v !== undefined)
|
|
105
192
|
initial[k] = v;
|
|
106
193
|
}
|
|
107
|
-
|
|
194
|
+
// Relay servers reject a connection query with neither `first` nor `last`.
|
|
195
|
+
const backwardLimit = config.backward?.limitParam;
|
|
196
|
+
if (config.defaultLimit !== undefined && config.limitParam !== undefined && initial[config.limitParam] === undefined
|
|
197
|
+
&& (backwardLimit === undefined || initial[backwardLimit] === undefined)) {
|
|
198
|
+
initial[config.limitParam] = config.defaultLimit;
|
|
199
|
+
}
|
|
200
|
+
const pageUrl = req.options?.pageUrl;
|
|
201
|
+
return new PagePromise(pageUrl !== undefined ? fetchPage({}, pageUrl) : fetchPage(initial));
|
|
108
202
|
}
|
|
109
203
|
function getPath(body, path) {
|
|
110
204
|
let node = body;
|
|
@@ -13,12 +13,19 @@ export interface CredentialKeyStore {
|
|
|
13
13
|
/** Used only when explicitly removing this wrapping key, not ordinary logout. */
|
|
14
14
|
remove(): void;
|
|
15
15
|
}
|
|
16
|
+
/** The OS item's service name: the command that owns it, then a digest of
|
|
17
|
+
* the session file, so each profile has its own key. Limited to a fixed
|
|
18
|
+
* alphabet because the macOS write passes it through security's command
|
|
19
|
+
* stream. */
|
|
20
|
+
export declare function credentialKeyService(owner: string, path: string): string;
|
|
16
21
|
/** A small wrapping key avoids OS item-size limits; session files are encrypted
|
|
17
|
-
* separately so refresh rotation can retain the atomic file/lock transaction.
|
|
18
|
-
|
|
22
|
+
* separately so refresh rotation can retain the atomic file/lock transaction.
|
|
23
|
+
* `owner` is the command name; the CLI and its local MCP server pass the same
|
|
24
|
+
* one so they share the key. */
|
|
25
|
+
export declare function nativeCredentialKeyStore(path: string, owner: string, platform?: NodeJS.Platform, run?: NativeCommand, environmentName?: string): CredentialKeyStore;
|
|
19
26
|
export declare function encryptedCredentialCodec(path: string, keyStore: CredentialKeyStore): CredentialCodec;
|
|
20
27
|
/** OS protection is the default. Plaintext storage is an explicit, separate
|
|
21
28
|
* store for environments where the owner accepts that tradeoff. Never migrate
|
|
22
29
|
* or fall back silently when an OS service is unavailable. */
|
|
23
|
-
export declare function createCredentialStore(directory: string, mode?: string, environmentName?: string): FileCredentialStore;
|
|
30
|
+
export declare function createCredentialStore(directory: string, owner: string, mode?: string, environmentName?: string): FileCredentialStore;
|
|
24
31
|
//# sourceMappingURL=credential-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-storage.d.ts","sourceRoot":"","sources":["../src/credential-storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAA0B,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEvG,MAAM,WAAW,mBAAmB;IAAG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;AAC/G,MAAM,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC;AACxG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iFAAiF;IACjF,MAAM,IAAI,IAAI,CAAC;CAChB;AAkBD;
|
|
1
|
+
{"version":3,"file":"credential-storage.d.ts","sourceRoot":"","sources":["../src/credential-storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAA0B,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEvG,MAAM,WAAW,mBAAmB;IAAG,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE;AAC/G,MAAM,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,mBAAmB,CAAC;AACxG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iFAAiF;IACjF,MAAM,IAAI,IAAI,CAAC;CAChB;AAkBD;;;aAGa;AACb,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED;;;gCAGgC;AAChC,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAAE,GAAG,GAAE,aAA6B,EAAE,eAAe,SAAqB,GAAG,kBAAkB,CAqGhN;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,eAAe,CAkCpG;AAED;;8DAE8D;AAC9D,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAa,EAAE,eAAe,SAAqB,GAAG,mBAAmB,CAKtJ"}
|
|
@@ -19,12 +19,21 @@ function parseKey(value) {
|
|
|
19
19
|
throw new CredentialStorageError("The OS credential key is invalid.");
|
|
20
20
|
return key;
|
|
21
21
|
}
|
|
22
|
+
/** The OS item's service name: the command that owns it, then a digest of
|
|
23
|
+
* the session file, so each profile has its own key. Limited to a fixed
|
|
24
|
+
* alphabet because the macOS write passes it through security's command
|
|
25
|
+
* stream. */
|
|
26
|
+
export function credentialKeyService(owner, path) {
|
|
27
|
+
const name = owner.replace(/[^A-Za-z0-9._-]/g, "-") || "cli";
|
|
28
|
+
return name + ".credentials." + createHash("sha256").update(resolve(path)).digest("hex");
|
|
29
|
+
}
|
|
22
30
|
/** A small wrapping key avoids OS item-size limits; session files are encrypted
|
|
23
|
-
* separately so refresh rotation can retain the atomic file/lock transaction.
|
|
24
|
-
|
|
31
|
+
* separately so refresh rotation can retain the atomic file/lock transaction.
|
|
32
|
+
* `owner` is the command name; the CLI and its local MCP server pass the same
|
|
33
|
+
* one so they share the key. */
|
|
34
|
+
export function nativeCredentialKeyStore(path, owner, platform = process.platform, run = nativeCommand, environmentName = "CREDENTIAL_STORE") {
|
|
25
35
|
const failed = (name) => unavailable(name, environmentName);
|
|
26
|
-
const
|
|
27
|
-
const service = "typeship.credentials." + identity;
|
|
36
|
+
const service = credentialKeyService(owner, path);
|
|
28
37
|
const account = "session-key";
|
|
29
38
|
if (platform === "darwin") {
|
|
30
39
|
const name = "macOS Keychain";
|
|
@@ -197,11 +206,11 @@ export function encryptedCredentialCodec(path, keyStore) {
|
|
|
197
206
|
/** OS protection is the default. Plaintext storage is an explicit, separate
|
|
198
207
|
* store for environments where the owner accepts that tradeoff. Never migrate
|
|
199
208
|
* or fall back silently when an OS service is unavailable. */
|
|
200
|
-
export function createCredentialStore(directory, mode = "os", environmentName = "CREDENTIAL_STORE") {
|
|
209
|
+
export function createCredentialStore(directory, owner, mode = "os", environmentName = "CREDENTIAL_STORE") {
|
|
201
210
|
if (mode === "file")
|
|
202
211
|
return new FileCredentialStore(join(directory, "credentials.json"));
|
|
203
212
|
if (mode !== "os")
|
|
204
213
|
throw new CredentialStorageError(environmentName + " must be os or file.");
|
|
205
214
|
const path = join(directory, "credentials.enc");
|
|
206
|
-
return new FileCredentialStore(path, 40_000, encryptedCredentialCodec(path, nativeCredentialKeyStore(path, process.platform, nativeCommand, environmentName)));
|
|
215
|
+
return new FileCredentialStore(path, 40_000, encryptedCredentialCodec(path, nativeCredentialKeyStore(path, owner, process.platform, nativeCommand, environmentName)));
|
|
207
216
|
}
|
package/dist/dates.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Relative dates for date / date-time arguments. Generated by
|
|
2
|
+
* Relative dates for date / date-time arguments. Generated by Typeship — https://typeship.dev
|
|
3
3
|
*
|
|
4
4
|
* Agents rarely know "now" and often do know "a week ago", so date-shaped
|
|
5
5
|
* arguments of the CLI and the MCP server accept, besides an absolute
|
package/dist/dates.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Relative dates for date / date-time arguments. Generated by
|
|
2
|
+
* Relative dates for date / date-time arguments. Generated by Typeship — https://typeship.dev
|
|
3
3
|
*
|
|
4
4
|
* Agents rarely know "now" and often do know "a week ago", so date-shaped
|
|
5
5
|
* arguments of the CLI and the MCP server accept, besides an absolute
|
package/dist/errors.d.ts
CHANGED
|
@@ -1,96 +1,32 @@
|
|
|
1
|
-
import { ApiError, type ResponseMeta } from "./core/http.js";
|
|
1
|
+
import { ApiError, RateLimitError, ServerError, type ResponseMeta } from "./core/http.js";
|
|
2
2
|
import type { ErrorModelRead } from "./types.js";
|
|
3
|
-
export { ApiError, SdkError, ResponseParseError, TransportError, UnexpectedApiError, ValidationError, type Violation } from "./core/http.js";
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
* Raised for HTTP 400 responses.
|
|
7
|
-
*/
|
|
8
|
-
export declare class BadRequestError extends ApiError<400, ErrorModelRead> {
|
|
9
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Missing, invalid, expired, or revoked credentials.
|
|
13
|
-
* Raised for HTTP 401 responses.
|
|
14
|
-
*/
|
|
15
|
-
export declare class UnauthorizedError extends ApiError<401, ErrorModelRead> {
|
|
16
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* The credentials are valid but cannot act on the requested organization.
|
|
20
|
-
* Raised for HTTP 403 responses.
|
|
21
|
-
*/
|
|
22
|
-
export declare class ForbiddenError extends ApiError<403, ErrorModelRead> {
|
|
3
|
+
export { ApiError, SdkError, PayloadError, ResponseParseError, TransportError, UnexpectedApiError, ValidationError, BadRequestError, ConflictError, ForbiddenError, NotFoundError, NotModifiedError, RateLimitError, ServerError, UnauthorizedError, UnprocessableEntityError, type RateLimitInfo, type Violation, } from "./core/http.js";
|
|
4
|
+
/** Raised for HTTP 402 responses. */
|
|
5
|
+
export declare class PaymentRequiredError extends ApiError<402, ErrorModelRead> {
|
|
23
6
|
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
24
7
|
}
|
|
25
|
-
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
8
|
+
/** @deprecated Use RateLimitError, raised for every 429 response. */
|
|
9
|
+
export declare const RateLimitedError: typeof RateLimitError;
|
|
10
|
+
/** @deprecated Use RateLimitError, raised for every 429 response. */
|
|
11
|
+
export type RateLimitedError = RateLimitError<ErrorModelRead>;
|
|
12
|
+
/** @deprecated Use ServerError, raised for every 5xx response. */
|
|
13
|
+
export declare const InternalServerError: typeof ServerError;
|
|
14
|
+
/** @deprecated Use ServerError, raised for every 5xx response. */
|
|
15
|
+
export type InternalServerError = ServerError<ErrorModelRead>;
|
|
16
|
+
/** Raised for HTTP 412 responses. */
|
|
17
|
+
export declare class PreconditionFailedError extends ApiError<412, ErrorModelRead> {
|
|
30
18
|
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
31
19
|
}
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
20
|
+
/** @deprecated Use ServerError, raised for every 5xx response. */
|
|
21
|
+
export declare const BadGatewayError: typeof ServerError;
|
|
22
|
+
/** @deprecated Use ServerError, raised for every 5xx response. */
|
|
23
|
+
export type BadGatewayError = ServerError<ErrorModelRead>;
|
|
24
|
+
/** Raised for HTTP 413 responses. */
|
|
36
25
|
export declare class PayloadTooLargeError extends ApiError<413, ErrorModelRead> {
|
|
37
26
|
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
38
27
|
}
|
|
39
|
-
/**
|
|
40
|
-
* The Spec could not be resolved or understood.
|
|
41
|
-
* Raised for HTTP 422 responses.
|
|
42
|
-
*/
|
|
43
|
-
export declare class UnprocessableEntityError extends ApiError<422, ErrorModelRead> {
|
|
44
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Too many requests, or an identical write is still in progress. Wait for Retry-After before
|
|
48
|
-
* retrying.
|
|
49
|
-
* Raised for HTTP 429 responses.
|
|
50
|
-
*/
|
|
51
|
-
export declare class RateLimitedError extends ApiError<429, ErrorModelRead> {
|
|
52
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* An unexpected error prevented the request from completing.
|
|
56
|
-
* Raised for HTTP 500 responses.
|
|
57
|
-
*/
|
|
58
|
-
export declare class InternalServerError extends ApiError<500, ErrorModelRead> {
|
|
59
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Unexpected error.
|
|
63
|
-
* Raised for "default" responses.
|
|
64
|
-
*/
|
|
28
|
+
/** Raised for "default" responses. */
|
|
65
29
|
export declare class ApiResponseError extends ApiError<number, ErrorModelRead> {
|
|
66
30
|
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
67
31
|
}
|
|
68
|
-
/**
|
|
69
|
-
* No such resource in this organization.
|
|
70
|
-
* Raised for HTTP 404 responses.
|
|
71
|
-
*/
|
|
72
|
-
export declare class NotFoundError extends ApiError<404, ErrorModelRead> {
|
|
73
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* The plan does not include another project or the requested target configuration.
|
|
77
|
-
* Raised for HTTP 402 responses.
|
|
78
|
-
*/
|
|
79
|
-
export declare class PaymentRequiredError extends ApiError<402, ErrorModelRead> {
|
|
80
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* The resource changed since the ETag supplied in If-Match. No write was applied.
|
|
84
|
-
* Raised for HTTP 412 responses.
|
|
85
|
-
*/
|
|
86
|
-
export declare class PreconditionFailedError extends ApiError<412, ErrorModelRead> {
|
|
87
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Dependent work failed while completing the request.
|
|
91
|
-
* Raised for HTTP 502 responses.
|
|
92
|
-
*/
|
|
93
|
-
export declare class BadGatewayError extends ApiError<502, ErrorModelRead> {
|
|
94
|
-
constructor(body: ErrorModelRead, response: ResponseMeta);
|
|
95
|
-
}
|
|
96
32
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,KAAK,EAAc,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AAExB,qCAAqC;AACrC,qBAAa,oBAAqB,SAAQ,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;gBACzD,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY;CAGzD;AAED,qEAAqE;AACrE,eAAO,MAAM,gBAAgB,uBAAiB,CAAC;AAC/C,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC;AAE9D,kEAAkE;AAClE,eAAO,MAAM,mBAAmB,oBAAc,CAAC;AAC/C,kEAAkE;AAClE,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAE9D,qCAAqC;AACrC,qBAAa,uBAAwB,SAAQ,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;gBAC5D,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY;CAGzD;AAED,kEAAkE;AAClE,eAAO,MAAM,eAAe,oBAAc,CAAC;AAC3C,kEAAkE;AAClE,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;AAE1D,qCAAqC;AACrC,qBAAa,oBAAqB,SAAQ,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC;gBACzD,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY;CAGzD;AAED,sCAAsC;AACtC,qBAAa,gBAAiB,SAAQ,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;gBACxD,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY;CAGzD"}
|