@attlaz/client 1.115.2 → 1.116.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/dist/Client.d.ts CHANGED
@@ -3,6 +3,8 @@ import { ITransport, ParseErrorHandler } from './Http/Transport/ITransport.js';
3
3
  import { OAuthClient, TokenChangeHandler } from './Http/Transport/OAuthClient.js';
4
4
  import { AccessTokenEndpoint } from './Service/AccessTokenEndpoint.js';
5
5
  import { AdapterConnectionEndpoint } from './Service/AdapterConnectionEndpoint.js';
6
+ import { ConnectionBundleEndpoint } from './Service/ConnectionBundleEndpoint.js';
7
+ import { McpAccessEndpoint } from './Service/McpAccessEndpoint.js';
6
8
  import { AdapterEndpoint } from './Service/AdapterEndpoint.js';
7
9
  import { ChannelEndpoint } from './Service/ChannelEndpoint.js';
8
10
  import { CodeDeployEndpoint } from './Service/CodeDeployEndpoint.js';
@@ -77,6 +79,16 @@ export declare class Client {
77
79
  * Used for SPAs and other public clients that cannot keep a secret.
78
80
  */
79
81
  setPublicClient(clientId: string): void;
82
+ /**
83
+ * Overall budget for a single request. **Milliseconds** — the PHP client's `setTimeout()` takes
84
+ * seconds, so do not port a number across without converting.
85
+ *
86
+ * Defaults to 80 seconds, matching the PHP client. Raise it for a large upload or download: the
87
+ * budget covers the whole exchange, so a body big enough to take longer than this to transfer
88
+ * is aborted by the client itself, before the server has said anything. Pass 0 to disable the
89
+ * timeout entirely, which risks hanging the process on a stalled connection.
90
+ */
91
+ setTimeout(timeoutMs: number): void;
80
92
  setVersion(version: string | null): void;
81
93
  getHttpClient(): OAuthClient;
82
94
  /**
@@ -104,6 +116,8 @@ export declare class Client {
104
116
  }>;
105
117
  getAdapterEndpoint(): AdapterEndpoint;
106
118
  getAdapterConnectionEndpoint(): AdapterConnectionEndpoint;
119
+ getConnectionBundleEndpoint(): ConnectionBundleEndpoint;
120
+ getMcpAccessEndpoint(): McpAccessEndpoint;
107
121
  getProjectEndpoint(): ProjectEndpoint;
108
122
  getProjectEnvironmentEndpoint(): ProjectEnvironmentEndpoint;
109
123
  getCodeDeployEndpoint(): CodeDeployEndpoint;
package/dist/Client.js CHANGED
@@ -3,6 +3,8 @@ import { OAuthClientToken } from './Http/OAuthClientToken.js';
3
3
  import { OAuthClient } from './Http/Transport/OAuthClient.js';
4
4
  import { AccessTokenEndpoint } from './Service/AccessTokenEndpoint.js';
5
5
  import { AdapterConnectionEndpoint } from './Service/AdapterConnectionEndpoint.js';
6
+ import { ConnectionBundleEndpoint } from './Service/ConnectionBundleEndpoint.js';
7
+ import { McpAccessEndpoint } from './Service/McpAccessEndpoint.js';
6
8
  import { AdapterEndpoint } from './Service/AdapterEndpoint.js';
7
9
  import { ChannelEndpoint } from './Service/ChannelEndpoint.js';
8
10
  import { CodeDeployEndpoint } from './Service/CodeDeployEndpoint.js';
@@ -64,6 +66,8 @@ export class Client {
64
66
  AccessTokenEndpoint,
65
67
  AdapterConnectionEndpoint,
66
68
  AdapterEndpoint,
69
+ ConnectionBundleEndpoint,
70
+ McpAccessEndpoint,
67
71
  ChannelEndpoint,
68
72
  CodeDeployEndpoint,
69
73
  ComponentEndpoint,
@@ -152,6 +156,18 @@ export class Client {
152
156
  setPublicClient(clientId) {
153
157
  this.httpClient.setClientCredentials(clientId, null, ['all']);
154
158
  }
159
+ /**
160
+ * Overall budget for a single request. **Milliseconds** — the PHP client's `setTimeout()` takes
161
+ * seconds, so do not port a number across without converting.
162
+ *
163
+ * Defaults to 80 seconds, matching the PHP client. Raise it for a large upload or download: the
164
+ * budget covers the whole exchange, so a body big enough to take longer than this to transfer
165
+ * is aborted by the client itself, before the server has said anything. Pass 0 to disable the
166
+ * timeout entirely, which risks hanging the process on a stalled connection.
167
+ */
168
+ setTimeout(timeoutMs) {
169
+ this.httpClient.setTimeout(timeoutMs);
170
+ }
155
171
  setVersion(version) {
156
172
  this.httpClient.setVersion(version);
157
173
  }
@@ -196,7 +212,7 @@ export class Client {
196
212
  this.httpClient.setTokenChangeHandler(handler);
197
213
  }
198
214
  async getApiInformation() {
199
- const result = await this.httpClient.request('/system/health', null, 'GET', false);
215
+ const result = await this.httpClient.request('/system/info', null, 'GET', true);
200
216
  if (result.version === undefined) {
201
217
  throw new Error('Unable to get API information: invalid response');
202
218
  }
@@ -209,6 +225,12 @@ export class Client {
209
225
  getAdapterConnectionEndpoint() {
210
226
  return this.getEndpoint('adapter-connection', this.Store.AdapterConnectionEndpoint);
211
227
  }
228
+ getConnectionBundleEndpoint() {
229
+ return this.getEndpoint('connection-bundle', this.Store.ConnectionBundleEndpoint);
230
+ }
231
+ getMcpAccessEndpoint() {
232
+ return this.getEndpoint('mcp-access', this.Store.McpAccessEndpoint);
233
+ }
212
234
  getProjectEndpoint() {
213
235
  return this.getEndpoint('project', this.Store.ProjectEndpoint);
214
236
  }
@@ -54,6 +54,14 @@ export declare class OAuthClient implements ITransport {
54
54
  */
55
55
  requestBytes(action: string, parameters?: Parameters, method?: string, signWithOauthToken?: boolean, headers?: Record<string, string>): Promise<Uint8Array>;
56
56
  request<T>(action: string, parameters?: Parameters, method?: string, signWithOauthToken?: boolean): Promise<T>;
57
+ /**
58
+ * Overall budget for a single request, in milliseconds. Applies to the token request too, so a
59
+ * raised budget covers authentication as well.
60
+ *
61
+ * There is no separate connect timeout, unlike the PHP client: `AbortSignal.timeout` bounds the
62
+ * whole exchange and fetch exposes no connect phase to bound on its own.
63
+ */
64
+ setTimeout(timeoutMs: number): void;
57
65
  isAuthenticated(): boolean;
58
66
  getToken(): OAuthClientToken | null;
59
67
  setToken(token: OAuthClientToken): void;
@@ -270,6 +270,16 @@ export class OAuthClient {
270
270
  throw error;
271
271
  }
272
272
  }
273
+ /**
274
+ * Overall budget for a single request, in milliseconds. Applies to the token request too, so a
275
+ * raised budget covers authentication as well.
276
+ *
277
+ * There is no separate connect timeout, unlike the PHP client: `AbortSignal.timeout` bounds the
278
+ * whole exchange and fetch exposes no connect phase to bound on its own.
279
+ */
280
+ setTimeout(timeoutMs) {
281
+ this.options.timeoutMs = timeoutMs;
282
+ }
273
283
  isAuthenticated() {
274
284
  // TODO: other ways to determine if the client is authenticated?
275
285
  return this.oauthClientToken !== null && this.oauthClientToken !== undefined;
@@ -0,0 +1,18 @@
1
+ import { ApiRecord } from '../ApiRecord.js';
2
+ import { State } from '../State.js';
3
+ import { StateAware } from '../StateAware.js';
4
+ /**
5
+ * A named, reusable set of connections, scoped to one project.
6
+ *
7
+ * Note the wire names: the serializer strips a trailing `_id` and pluralises `_ids`, so the entity's
8
+ * `projectId` arrives as `project` and `connectionIds` as `connections`.
9
+ */
10
+ export declare class ConnectionBundle implements StateAware {
11
+ id: string;
12
+ name: string;
13
+ projectId: string;
14
+ connectionIds: string[];
15
+ state: State;
16
+ createdAt: Date;
17
+ static parse(raw: ApiRecord): ConnectionBundle;
18
+ }
@@ -0,0 +1,26 @@
1
+ import { Utils } from '../../Utils.js';
2
+ import { State } from '../State.js';
3
+ /**
4
+ * A named, reusable set of connections, scoped to one project.
5
+ *
6
+ * Note the wire names: the serializer strips a trailing `_id` and pluralises `_ids`, so the entity's
7
+ * `projectId` arrives as `project` and `connectionIds` as `connections`.
8
+ */
9
+ export class ConnectionBundle {
10
+ id;
11
+ name;
12
+ projectId;
13
+ connectionIds = [];
14
+ state = State.Active;
15
+ createdAt;
16
+ static parse(raw) {
17
+ const bundle = new ConnectionBundle();
18
+ bundle.id = raw.id;
19
+ bundle.name = raw.name;
20
+ bundle.projectId = raw.project;
21
+ bundle.connectionIds = Array.isArray(raw.connections) ? raw.connections : [];
22
+ bundle.state = State.fromString(raw.state);
23
+ bundle.createdAt = Utils.parseRawDate(raw.created_at);
24
+ return bundle;
25
+ }
26
+ }
@@ -0,0 +1,25 @@
1
+ import { ApiRecord } from '../ApiRecord.js';
2
+ import { State } from '../State.js';
3
+ import { StateAware } from '../StateAware.js';
4
+ /**
5
+ * A named, revocable share of one connection or connection bundle, reachable at its own MCP URL.
6
+ *
7
+ * `target` is a type-prefixed id (`adc_…` for a connection, `cbl_…` for a bundle) and is write-once:
8
+ * re-pointing an access would let a token already bound to its URL reach somewhere else.
9
+ */
10
+ export declare class McpAccess implements StateAware {
11
+ id: string;
12
+ name: string;
13
+ target: string;
14
+ state: State;
15
+ revokedAt: Date | null;
16
+ createdAt: Date;
17
+ /**
18
+ * The full URL to hand to a client, or null when the access has no live key — the state an
19
+ * interrupted rotation leaves behind, which the UI has to be able to show rather than assume away.
20
+ */
21
+ url: string | null;
22
+ /** Paused is reversible and keeps its tokens; revoked is final and sweeps them. */
23
+ isUsable(): boolean;
24
+ static parse(raw: ApiRecord): McpAccess;
25
+ }
@@ -0,0 +1,36 @@
1
+ import { Utils } from '../../Utils.js';
2
+ import { State } from '../State.js';
3
+ /**
4
+ * A named, revocable share of one connection or connection bundle, reachable at its own MCP URL.
5
+ *
6
+ * `target` is a type-prefixed id (`adc_…` for a connection, `cbl_…` for a bundle) and is write-once:
7
+ * re-pointing an access would let a token already bound to its URL reach somewhere else.
8
+ */
9
+ export class McpAccess {
10
+ id;
11
+ name;
12
+ target;
13
+ state = State.Active;
14
+ revokedAt = null;
15
+ createdAt;
16
+ /**
17
+ * The full URL to hand to a client, or null when the access has no live key — the state an
18
+ * interrupted rotation leaves behind, which the UI has to be able to show rather than assume away.
19
+ */
20
+ url = null;
21
+ /** Paused is reversible and keeps its tokens; revoked is final and sweeps them. */
22
+ isUsable() {
23
+ return this.revokedAt === null && this.state === State.Active && this.url !== null;
24
+ }
25
+ static parse(raw) {
26
+ const access = new McpAccess();
27
+ access.id = raw.id;
28
+ access.name = raw.name;
29
+ access.target = raw.target;
30
+ access.state = State.fromString(raw.state);
31
+ access.revokedAt = (raw.revoked_at === null || raw.revoked_at === undefined) ? null : Utils.parseRawDate(raw.revoked_at);
32
+ access.createdAt = Utils.parseRawDate(raw.created_at);
33
+ access.url = (raw.url === null || raw.url === undefined) ? null : raw.url;
34
+ return access;
35
+ }
36
+ }
@@ -0,0 +1,17 @@
1
+ import { ConnectionBundle } from '../Model/Connection/ConnectionBundle.js';
2
+ import { CursorPagination } from '../Model/Pagination/CursorPagination.js';
3
+ import { CollectionResult } from '../Model/Result/CollectionResult.js';
4
+ import { Endpoint } from './Endpoint.js';
5
+ export declare class ConnectionBundleEndpoint extends Endpoint {
6
+ getBundles(projectId: string, pagination: CursorPagination): Promise<CollectionResult<ConnectionBundle>>;
7
+ getBundleById(bundleId: string): Promise<ConnectionBundle | null>;
8
+ createBundle(projectId: string, name: string, connectionIds?: string[]): Promise<ConnectionBundle>;
9
+ renameBundle(bundleId: string, name: string): Promise<ConnectionBundle>;
10
+ /**
11
+ * Add and remove address one membership at a time rather than sending the whole list, so two
12
+ * people editing the same bundle cannot silently drop each other's change.
13
+ */
14
+ addConnection(bundleId: string, connectionId: string): Promise<ConnectionBundle>;
15
+ removeConnection(bundleId: string, connectionId: string): Promise<ConnectionBundle>;
16
+ private changeMembership;
17
+ }
@@ -0,0 +1,93 @@
1
+ import { path } from '../Http/Data/Path.js';
2
+ import { QueryString } from '../Http/Data/QueryString.js';
3
+ import { ConnectionBundle } from '../Model/Connection/ConnectionBundle.js';
4
+ import { Endpoint } from './Endpoint.js';
5
+ export class ConnectionBundleEndpoint extends Endpoint {
6
+ async getBundles(projectId, pagination) {
7
+ try {
8
+ const queryString = new QueryString(path('/projects/:projectId/connection-bundles', { projectId }));
9
+ queryString.addPagination(pagination);
10
+ return await this.requestCollection(queryString, ConnectionBundle.parse);
11
+ }
12
+ catch (error) {
13
+ if (this.httpClient.isDebugEnabled()) {
14
+ console.error('Failed to load connection bundles: ', error);
15
+ }
16
+ throw error;
17
+ }
18
+ }
19
+ async getBundleById(bundleId) {
20
+ try {
21
+ const url = path('/connection-bundles/:bundleId', { bundleId });
22
+ const result = await this.requestObject(url, null, ConnectionBundle.parse);
23
+ return result.getData();
24
+ }
25
+ catch (error) {
26
+ if (this.httpClient.isDebugEnabled()) {
27
+ console.error('Failed to load connection bundle: ', error);
28
+ }
29
+ throw error;
30
+ }
31
+ }
32
+ async createBundle(projectId, name, connectionIds = []) {
33
+ try {
34
+ const url = path('/projects/:projectId/connection-bundles', { projectId });
35
+ const result = await this.requestObject(url, { name, connections: connectionIds }, ConnectionBundle.parse, 'POST');
36
+ const created = result.getData();
37
+ if (created === null) {
38
+ throw new Error('Connection bundle not created');
39
+ }
40
+ return created;
41
+ }
42
+ catch (error) {
43
+ if (this.httpClient.isDebugEnabled()) {
44
+ console.error('Failed to create connection bundle: ', error);
45
+ }
46
+ throw error;
47
+ }
48
+ }
49
+ async renameBundle(bundleId, name) {
50
+ try {
51
+ const url = path('/connection-bundles/:bundleId', { bundleId });
52
+ const result = await this.requestObject(url, { name }, ConnectionBundle.parse, 'PATCH');
53
+ const updated = result.getData();
54
+ if (updated === null) {
55
+ throw new Error('Connection bundle not updated');
56
+ }
57
+ return updated;
58
+ }
59
+ catch (error) {
60
+ if (this.httpClient.isDebugEnabled()) {
61
+ console.error('Failed to rename connection bundle: ', error);
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ /**
67
+ * Add and remove address one membership at a time rather than sending the whole list, so two
68
+ * people editing the same bundle cannot silently drop each other's change.
69
+ */
70
+ async addConnection(bundleId, connectionId) {
71
+ return await this.changeMembership(bundleId, connectionId, 'PUT', 'add the connection to');
72
+ }
73
+ async removeConnection(bundleId, connectionId) {
74
+ return await this.changeMembership(bundleId, connectionId, 'DELETE', 'remove the connection from');
75
+ }
76
+ async changeMembership(bundleId, connectionId, method, description) {
77
+ try {
78
+ const url = path('/connection-bundles/:bundleId/connections/:connectionId', { bundleId, connectionId });
79
+ const result = await this.requestObject(url, null, ConnectionBundle.parse, method);
80
+ const updated = result.getData();
81
+ if (updated === null) {
82
+ throw new Error('Connection bundle not updated');
83
+ }
84
+ return updated;
85
+ }
86
+ catch (error) {
87
+ if (this.httpClient.isDebugEnabled()) {
88
+ console.error('Failed to ' + description + ' the bundle: ', error);
89
+ }
90
+ throw error;
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,23 @@
1
+ import { McpAccess } from '../Model/Mcp/McpAccess.js';
2
+ import { CollectionResult } from '../Model/Result/CollectionResult.js';
3
+ import { Endpoint } from './Endpoint.js';
4
+ export declare class McpAccessEndpoint extends Endpoint {
5
+ /**
6
+ * Every access pointing at one connection or bundle, revoked ones included — a revoked access is
7
+ * what explains to its owner why a URL they handed out stopped working.
8
+ *
9
+ * `target` is the type-prefixed id (`adc_…`, `cbl_…`), the same form the access reports back.
10
+ */
11
+ getAccessesByTarget(target: string): Promise<CollectionResult<McpAccess>>;
12
+ getAccessById(accessId: string): Promise<McpAccess | null>;
13
+ /** Creates the access and its first URL together — an access with no URL cannot be reached. */
14
+ createAccess(name: string, target: string): Promise<McpAccess>;
15
+ /** New URL, old one dead, and every token bound to the old one revoked. */
16
+ rotateKey(accessId: string): Promise<McpAccess>;
17
+ /** Reversible, and keeps its tokens, so resuming needs no re-authentication. */
18
+ pauseAccess(accessId: string): Promise<McpAccess>;
19
+ resumeAccess(accessId: string): Promise<McpAccess>;
20
+ /** One-way. The row survives as the record of what was granted; its tokens do not. */
21
+ revokeAccess(accessId: string): Promise<McpAccess>;
22
+ private lifecycle;
23
+ }
@@ -0,0 +1,86 @@
1
+ import { path } from '../Http/Data/Path.js';
2
+ import { QueryString } from '../Http/Data/QueryString.js';
3
+ import { McpAccess } from '../Model/Mcp/McpAccess.js';
4
+ import { Endpoint } from './Endpoint.js';
5
+ export class McpAccessEndpoint extends Endpoint {
6
+ /**
7
+ * Every access pointing at one connection or bundle, revoked ones included — a revoked access is
8
+ * what explains to its owner why a URL they handed out stopped working.
9
+ *
10
+ * `target` is the type-prefixed id (`adc_…`, `cbl_…`), the same form the access reports back.
11
+ */
12
+ async getAccessesByTarget(target) {
13
+ try {
14
+ const queryString = new QueryString('/mcp-accesses');
15
+ queryString.set('target', target);
16
+ return await this.requestCollection(queryString, McpAccess.parse);
17
+ }
18
+ catch (error) {
19
+ if (this.httpClient.isDebugEnabled()) {
20
+ console.error('Failed to load MCP accesses: ', error);
21
+ }
22
+ throw error;
23
+ }
24
+ }
25
+ async getAccessById(accessId) {
26
+ try {
27
+ const url = path('/mcp-accesses/:accessId', { accessId });
28
+ const result = await this.requestObject(url, null, McpAccess.parse);
29
+ return result.getData();
30
+ }
31
+ catch (error) {
32
+ if (this.httpClient.isDebugEnabled()) {
33
+ console.error('Failed to load MCP access: ', error);
34
+ }
35
+ throw error;
36
+ }
37
+ }
38
+ /** Creates the access and its first URL together — an access with no URL cannot be reached. */
39
+ async createAccess(name, target) {
40
+ try {
41
+ const result = await this.requestObject('/mcp-accesses', { name, target }, McpAccess.parse, 'POST');
42
+ const created = result.getData();
43
+ if (created === null) {
44
+ throw new Error('MCP access not created');
45
+ }
46
+ return created;
47
+ }
48
+ catch (error) {
49
+ if (this.httpClient.isDebugEnabled()) {
50
+ console.error('Failed to create MCP access: ', error);
51
+ }
52
+ throw error;
53
+ }
54
+ }
55
+ /** New URL, old one dead, and every token bound to the old one revoked. */
56
+ async rotateKey(accessId) {
57
+ return await this.lifecycle(accessId, path('/mcp-accesses/:accessId/rotate-key', { accessId }), 'POST', 'rotate the MCP URL');
58
+ }
59
+ /** Reversible, and keeps its tokens, so resuming needs no re-authentication. */
60
+ async pauseAccess(accessId) {
61
+ return await this.lifecycle(accessId, path('/mcp-accesses/:accessId/pause', { accessId }), 'POST', 'pause the MCP access');
62
+ }
63
+ async resumeAccess(accessId) {
64
+ return await this.lifecycle(accessId, path('/mcp-accesses/:accessId/resume', { accessId }), 'POST', 'resume the MCP access');
65
+ }
66
+ /** One-way. The row survives as the record of what was granted; its tokens do not. */
67
+ async revokeAccess(accessId) {
68
+ return await this.lifecycle(accessId, path('/mcp-accesses/:accessId', { accessId }), 'DELETE', 'revoke the MCP access');
69
+ }
70
+ async lifecycle(accessId, url, method, description) {
71
+ try {
72
+ const result = await this.requestObject(url, null, McpAccess.parse, method);
73
+ const access = result.getData();
74
+ if (access === null) {
75
+ throw new Error('MCP access not found: ' + accessId);
76
+ }
77
+ return access;
78
+ }
79
+ catch (error) {
80
+ if (this.httpClient.isDebugEnabled()) {
81
+ console.error('Failed to ' + description + ': ', error);
82
+ }
83
+ throw error;
84
+ }
85
+ }
86
+ }
package/dist/index.d.ts CHANGED
@@ -31,6 +31,8 @@ export { UserAccessTokenStatus } from './Model/AccessToken/UserAccessTokenStatus
31
31
  export { Adapter } from './Model/Adapter/Adapter.js';
32
32
  export { AdapterConfiguration } from './Model/Adapter/AdapterConfiguration.js';
33
33
  export { AdapterConnection } from './Model/Adapter/AdapterConnection.js';
34
+ export { ConnectionBundle } from './Model/Connection/ConnectionBundle.js';
35
+ export { McpAccess } from './Model/Mcp/McpAccess.js';
34
36
  export { AdapterCategory } from './Model/Adapter/AdapterCategory.js';
35
37
  export { AdapterConnectionStatus } from './Model/Adapter/AdapterConnectionStatus.js';
36
38
  export { AdapterConnectionConfigurationValue } from './Model/Adapter/AdapterConnectionConfigurationValue.js';
package/dist/index.js CHANGED
@@ -22,6 +22,8 @@ export { UserAccessTokenStatus } from './Model/AccessToken/UserAccessTokenStatus
22
22
  export { Adapter } from './Model/Adapter/Adapter.js';
23
23
  export { AdapterConfiguration } from './Model/Adapter/AdapterConfiguration.js';
24
24
  export { AdapterConnection } from './Model/Adapter/AdapterConnection.js';
25
+ export { ConnectionBundle } from './Model/Connection/ConnectionBundle.js';
26
+ export { McpAccess } from './Model/Mcp/McpAccess.js';
25
27
  export { AdapterCategory } from './Model/Adapter/AdapterCategory.js';
26
28
  export { AdapterConnectionStatus } from './Model/Adapter/AdapterConnectionStatus.js';
27
29
  export { AdapterConnectionConfigurationValue } from './Model/Adapter/AdapterConnectionConfigurationValue.js';
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "1.115.2";
1
+ export declare const VERSION = "1.115.3";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "1.115.2";
1
+ export const VERSION = "1.115.3";
package/package.json CHANGED
@@ -1,72 +1,73 @@
1
- {
2
- "name": "@attlaz/client",
3
- "version": "1.115.2",
4
- "description": "Javascript Client to access Attlaz API",
5
- "types": "./dist/index.d.ts",
6
- "main": "./dist/index.js",
7
- "type": "module",
8
- "exports": {
9
- "./package.json": {
10
- "default": "./package.json"
11
- },
12
- ".": {
13
- "types": "./dist/index.d.ts",
14
- "default": "./dist/index.js"
15
- },
16
- "./*": {
17
- "default": "./dist/*",
18
- "types": "./dist/*"
19
- }
20
- },
21
- "repository": {
22
- "type": "git",
23
- "url": "git+https://github.com/Attlaz-Platform/JS-Client.git"
24
- },
25
- "homepage": "https://attlaz.com",
26
- "keywords": [
27
- "attlaz",
28
- "client",
29
- "http",
30
- "api"
31
- ],
32
- "files": [
33
- "dist/*"
34
- ],
35
- "sideEffects": false,
36
- "author": "Stijn Duynslaeger <stijn@attlaz.com> (stijn@attlaz.com)",
37
- "license": "MIT",
38
- "scripts": {
39
- "prebuild": "npm run setversion",
40
- "prepare": "npm run clean && tsc --project tsconfig.build.json && npm run setversion",
41
- "build": "npm run clean && tsc -p tsconfig.build.json",
42
- "setversion": "node -p \"'export const VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
43
- "clean": "rimraf dist",
44
- "scan": "docker run -v .:/path zricethezav/gitleaks:latest detect --source=\"/path\" ",
45
- "test": "vitest run --mode unit",
46
- "typecheck": "tsc --project tsconfig.json --noEmit",
47
- "test-integration": "vitest run --mode integration",
48
- "test-live": "vitest --mode unit"
49
- },
50
- "publishConfig": {
51
- "access": "public",
52
- "registry": "https://registry.npmjs.org"
53
- },
54
- "devDependencies": {
55
- "@types/node": "^26.4.0",
56
- "@typescript-eslint/eslint-plugin": "^8.59.3",
57
- "@typescript-eslint/parser": "^8.59.3",
58
- "eslint": "^9.39.5",
59
- "eslint-config-attlaz-base": "^1.8.0",
60
- "eslint-import-resolver-typescript": "^4.4.5",
61
- "eslint-plugin-import": "^2.32.0",
62
- "eslint-plugin-jsdoc": "^62.9.0",
63
- "eslint-plugin-prefer-arrow": "^1.2.3",
64
- "eslint-plugin-promise": "^7.3.0",
65
- "rimraf": "^6.1.3",
66
- "typescript": "^6.0.3",
67
- "vitest": "^4.1.11"
68
- },
69
- "directories": {
70
- "test": "test"
71
- }
72
- }
1
+ {
2
+ "name": "@attlaz/client",
3
+ "version": "1.116.0",
4
+ "description": "Javascript Client to access Attlaz API",
5
+ "types": "./dist/index.d.ts",
6
+ "main": "./dist/index.js",
7
+ "type": "module",
8
+ "exports": {
9
+ "./package.json": {
10
+ "default": "./package.json"
11
+ },
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "default": "./dist/index.js"
15
+ },
16
+ "./*": {
17
+ "default": "./dist/*",
18
+ "types": "./dist/*"
19
+ }
20
+ },
21
+ "repository": {
22
+ "type": "git",
23
+ "url": "git+https://github.com/Attlaz-Platform/JS-Client.git"
24
+ },
25
+ "homepage": "https://attlaz.com",
26
+ "keywords": [
27
+ "attlaz",
28
+ "client",
29
+ "http",
30
+ "api"
31
+ ],
32
+ "files": [
33
+ "dist/*"
34
+ ],
35
+ "sideEffects": false,
36
+ "author": "Stijn Duynslaeger <stijn@attlaz.com> (stijn@attlaz.com)",
37
+ "license": "MIT",
38
+ "scripts": {
39
+ "prebuild": "npm run setversion",
40
+ "prepublishOnly": "npm run typecheck && npm test",
41
+ "prepare": "npm run clean && tsc --project tsconfig.build.json && npm run setversion",
42
+ "build": "npm run clean && tsc -p tsconfig.build.json",
43
+ "setversion": "node -p \"'export const VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
44
+ "clean": "rimraf dist",
45
+ "scan": "docker run -v .:/path zricethezav/gitleaks:latest detect --source=\"/path\" ",
46
+ "test": "vitest run --mode unit",
47
+ "typecheck": "tsc --project tsconfig.json --noEmit",
48
+ "test-integration": "vitest run --mode integration",
49
+ "test-live": "vitest --mode unit"
50
+ },
51
+ "publishConfig": {
52
+ "access": "public",
53
+ "registry": "https://registry.npmjs.org"
54
+ },
55
+ "devDependencies": {
56
+ "@types/node": "^26.4.0",
57
+ "@typescript-eslint/eslint-plugin": "^8.59.3",
58
+ "@typescript-eslint/parser": "^8.59.3",
59
+ "eslint": "^9.39.5",
60
+ "eslint-config-attlaz-base": "^1.8.0",
61
+ "eslint-import-resolver-typescript": "^4.4.5",
62
+ "eslint-plugin-import": "^2.32.0",
63
+ "eslint-plugin-jsdoc": "^62.9.0",
64
+ "eslint-plugin-prefer-arrow": "^1.2.3",
65
+ "eslint-plugin-promise": "^7.3.0",
66
+ "rimraf": "^6.1.3",
67
+ "typescript": "^6.0.3",
68
+ "vitest": "^4.1.11"
69
+ },
70
+ "directories": {
71
+ "test": "test"
72
+ }
73
+ }