@attlaz/client 1.115.3 → 1.117.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';
@@ -114,6 +116,8 @@ export declare class Client {
114
116
  }>;
115
117
  getAdapterEndpoint(): AdapterEndpoint;
116
118
  getAdapterConnectionEndpoint(): AdapterConnectionEndpoint;
119
+ getConnectionBundleEndpoint(): ConnectionBundleEndpoint;
120
+ getMcpAccessEndpoint(): McpAccessEndpoint;
117
121
  getProjectEndpoint(): ProjectEndpoint;
118
122
  getProjectEnvironmentEndpoint(): ProjectEnvironmentEndpoint;
119
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,
@@ -208,7 +212,7 @@ export class Client {
208
212
  this.httpClient.setTokenChangeHandler(handler);
209
213
  }
210
214
  async getApiInformation() {
211
- const result = await this.httpClient.request('/system/health', null, 'GET', false);
215
+ const result = await this.httpClient.request('/system/info', null, 'GET', true);
212
216
  if (result.version === undefined) {
213
217
  throw new Error('Unable to get API information: invalid response');
214
218
  }
@@ -221,6 +225,12 @@ export class Client {
221
225
  getAdapterConnectionEndpoint() {
222
226
  return this.getEndpoint('adapter-connection', this.Store.AdapterConnectionEndpoint);
223
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
+ }
224
234
  getProjectEndpoint() {
225
235
  return this.getEndpoint('project', this.Store.ProjectEndpoint);
226
236
  }
@@ -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,35 @@
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
+ /**
23
+ * Build the `target` for a connection or a bundle.
24
+ *
25
+ * The API addresses a target by one type-prefixed id, while every other client model carries the
26
+ * bare one — so the prefix is added here rather than at each call site. Each literal is Core's
27
+ * `PREFIX` (`adc`, `cbl`) plus the `_` separator its `toPrefixedString()` uses, duplicated the way
28
+ * this package already duplicates enums; keep them in step.
29
+ */
30
+ static targetForConnection(connectionId: string): string;
31
+ static targetForBundle(bundleId: string): string;
32
+ /** Paused is reversible and keeps its tokens; revoked is final and sweeps them. */
33
+ isUsable(): boolean;
34
+ static parse(raw: ApiRecord): McpAccess;
35
+ }
@@ -0,0 +1,50 @@
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
+ /**
22
+ * Build the `target` for a connection or a bundle.
23
+ *
24
+ * The API addresses a target by one type-prefixed id, while every other client model carries the
25
+ * bare one — so the prefix is added here rather than at each call site. Each literal is Core's
26
+ * `PREFIX` (`adc`, `cbl`) plus the `_` separator its `toPrefixedString()` uses, duplicated the way
27
+ * this package already duplicates enums; keep them in step.
28
+ */
29
+ static targetForConnection(connectionId) {
30
+ return 'adc_' + connectionId;
31
+ }
32
+ static targetForBundle(bundleId) {
33
+ return 'cbl_' + bundleId;
34
+ }
35
+ /** Paused is reversible and keeps its tokens; revoked is final and sweeps them. */
36
+ isUsable() {
37
+ return this.revokedAt === null && this.state === State.Active && this.url !== null;
38
+ }
39
+ static parse(raw) {
40
+ const access = new McpAccess();
41
+ access.id = raw.id;
42
+ access.name = raw.name;
43
+ access.target = raw.target;
44
+ access.state = State.fromString(raw.state);
45
+ access.revokedAt = (raw.revoked_at === null || raw.revoked_at === undefined) ? null : Utils.parseRawDate(raw.revoked_at);
46
+ access.createdAt = Utils.parseRawDate(raw.created_at);
47
+ access.url = (raw.url === null || raw.url === undefined) ? null : raw.url;
48
+ return access;
49
+ }
50
+ }
@@ -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.116.0";
package/dist/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "1.115.2";
1
+ export const VERSION = "1.116.0";
package/package.json CHANGED
@@ -1,72 +1,73 @@
1
- {
2
- "name": "@attlaz/client",
3
- "version": "1.115.3",
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.117.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
+ }