@ikatec/digisac-api-sdk 2.2.1 → 3.0.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.
@@ -5,22 +5,38 @@ export type AcceptanceTerm = {
5
5
  name: string;
6
6
  textField: string;
7
7
  accountId: string;
8
- fileId: string;
8
+ /** `null` when the term has no attachment. */
9
+ fileId: string | null;
9
10
  createdAt: string;
10
11
  updatedAt: string;
11
12
  deletedAt: string | null;
12
13
  account?: Account;
13
- file?: File;
14
+ /** Present with `include: ['file']`; `null` when the term has no attachment. */
15
+ file?: File | null;
14
16
  };
15
17
  export type AcceptanceTermRelationships = 'account' | 'file';
18
+ /** Attachment sent inline with the term. `base64` is the raw file content, without the data-URI prefix. */
19
+ export type AcceptanceTermFileUpload = {
20
+ base64: string;
21
+ name: string;
22
+ mimetype: string;
23
+ };
16
24
  export type CreateAcceptanceTermPayload = {
17
25
  name: string;
18
26
  fileId?: string;
19
27
  textField?: string;
28
+ /** Uploads and attaches a file to the new term. */
29
+ file?: AcceptanceTermFileUpload;
20
30
  };
21
31
  export type UpdateAcceptanceTermPayload = {
22
32
  name?: string;
23
33
  fileId?: string;
24
34
  textField?: string;
35
+ /**
36
+ * Replaces the attachment with a new upload, or removes it when `{}` is sent. Omitting `file`
37
+ * currently makes the backend persist the update and then answer 500 (SD-2285) — send `file`
38
+ * explicitly on every update.
39
+ */
40
+ file?: AcceptanceTermFileUpload | Record<string, never>;
25
41
  };
26
42
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/acceptanceTerms/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5D,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/acceptanceTerms/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAE1C,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAExB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gFAAgF;IAChF,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,SAAS,GAAG,MAAM,CAAA;AAE5D,2GAA2G;AAC3G,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,IAAI,CAAC,EAAE,wBAAwB,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,IAAI,CAAC,EAAE,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CACxD,CAAA"}
@@ -130,6 +130,8 @@ export type AccountSettings = {
130
130
  timezone?: string;
131
131
  /** Requires agents to select a topic when closing a ticket. */
132
132
  topicRequired?: boolean;
133
+ /** Requires agents to fill in the summary when closing a ticket. */
134
+ summaryRequired?: boolean;
133
135
  /** Enables visibility of tags in the chat interface. */
134
136
  showTagsInChat?: boolean;
135
137
  /** Enables the ticket (SAC) functionality for the account. */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/accounts/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/accounts/types.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,46 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
  const require_chunk = require('../../_chunks/chunk-Dk0Otj32.cjs');
3
- const require_core_BaseCrudApi = require('../../core/BaseCrudApi.cjs');
4
3
  let qs = require("qs");
5
4
  qs = require_chunk.__toESM(qs);
6
5
 
7
6
  //#region src/apis/terms/TermsApi.ts
8
- var TermsApi = class extends require_core_BaseCrudApi.BaseCrudApi {
7
+ /**
8
+ * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,
9
+ * so the `/terms` route has no create/list/update/delete — only the routes below.
10
+ *
11
+ * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only
12
+ * handles JSON/text bodies.
13
+ */
14
+ var TermsApi = class {
15
+ client;
16
+ basePath = "/terms";
9
17
  constructor(client) {
10
- super(client, "/terms");
18
+ this.client = client;
19
+ this.getById = this.getById.bind(this);
20
+ this.getNotAgreed = this.getNotAgreed.bind(this);
21
+ this.agree = this.agree.bind(this);
11
22
  }
12
- /** Returns all terms where agreementDate is null for the current user's account (i.e. terms not yet agreed to). */
13
- getNotAgreed(query, headers) {
23
+ /** Returns a single term by its ID, scoped to the current account (`null` when not found). */
24
+ getById(id, query, headers) {
14
25
  const queryString = query ? `?${qs.default.stringify(query)}` : "";
15
- return this.client.get(`${this.basePath}/terms-not-agreed${queryString}`, headers);
26
+ return this.client.get(`${this.basePath}/${id}${queryString}`, headers);
27
+ }
28
+ /**
29
+ * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).
30
+ * The backend answers a plain array (not paginated) and ignores query parameters.
31
+ */
32
+ getNotAgreed(headers) {
33
+ return this.client.get(`${this.basePath}/terms-not-agreed`, headers);
34
+ }
35
+ /**
36
+ * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is
37
+ * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed
38
+ * to the user. Only terms of the current account are affected.
39
+ *
40
+ * The response is passed through from Agnus as-is, so it is not typed.
41
+ */
42
+ agree(termIds, headers) {
43
+ return this.client.patch(`${this.basePath}/agree`, { terms: termIds }, headers);
16
44
  }
17
45
  };
18
46
 
@@ -1 +1 @@
1
- {"version":3,"file":"TermsApi.cjs","names":["BaseCrudApi"],"sources":["../../../src/apis/terms/TermsApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { ListQuery, Paginated } from '../../core/types'\nimport type { Term, CreateTermPayload, UpdateTermPayload } from './types'\n\nexport class TermsApi extends BaseCrudApi<Term, CreateTermPayload, UpdateTermPayload> {\n constructor(client: ApiClient) {\n super(client, '/terms')\n }\n\n /** Returns all terms where agreementDate is null for the current user's account (i.e. terms not yet agreed to). */\n getNotAgreed(\n query?: ListQuery<Term>,\n headers?: Record<string, string>,\n ): Promise<Paginated<Term>> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<Term>>(\n `${this.basePath}/terms-not-agreed${queryString}`,\n headers,\n )\n }\n}\n"],"mappings":";;;;;;;AAMA,IAAa,WAAb,cAA8BA,qCAAwD;CACpF,YAAY,QAAmB;AAC7B,QAAM,QAAQ,SAAS;;;CAIzB,aACE,OACA,SAC0B;EAC1B,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,SAAS,mBAAmB,eACpC,QACD"}
1
+ {"version":3,"file":"TermsApi.cjs","names":[],"sources":["../../../src/apis/terms/TermsApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from '../../core/ApiClient'\nimport type { GetByIdQuery, HasGetById } from '../../core/types'\nimport type { Term } from './types'\n\n/**\n * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,\n * so the `/terms` route has no create/list/update/delete — only the routes below.\n *\n * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only\n * handles JSON/text bodies.\n */\nexport class TermsApi implements HasGetById<Term> {\n protected readonly client: ApiClient\n public readonly basePath = '/terms'\n\n constructor(client: ApiClient) {\n this.client = client\n this.getById = this.getById.bind(this)\n this.getNotAgreed = this.getNotAgreed.bind(this)\n this.agree = this.agree.bind(this)\n }\n\n /** Returns a single term by its ID, scoped to the current account (`null` when not found). */\n getById(id: string, query?: GetByIdQuery<Term>, headers?: Record<string, string>): Promise<Term> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Term>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).\n * The backend answers a plain array (not paginated) and ignores query parameters.\n */\n getNotAgreed(headers?: Record<string, string>): Promise<Term[]> {\n return this.client.get<Term[]>(`${this.basePath}/terms-not-agreed`, headers)\n }\n\n /**\n * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is\n * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed\n * to the user. Only terms of the current account are affected.\n *\n * The response is passed through from Agnus as-is, so it is not typed.\n */\n agree(termIds: string[], headers?: Record<string, string>): Promise<unknown> {\n return this.client.patch<unknown, { terms: string[] }>(\n `${this.basePath}/agree`,\n { terms: termIds },\n headers,\n )\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAa,WAAb,MAAkD;CAChD,AAAmB;CACnB,AAAgB,WAAW;CAE3B,YAAY,QAAmB;AAC7B,OAAK,SAAS;AACd,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,eAAe,KAAK,aAAa,KAAK,KAAK;AAChD,OAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;;;CAIpC,QAAQ,IAAY,OAA4B,SAAiD;EAC/F,MAAM,cAAc,QAAQ,IAAI,WAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IAAU,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAO/E,aAAa,SAAmD;AAC9D,SAAO,KAAK,OAAO,IAAY,GAAG,KAAK,SAAS,oBAAoB,QAAQ;;;;;;;;;CAU9E,MAAM,SAAmB,SAAoD;AAC3E,SAAO,KAAK,OAAO,MACjB,GAAG,KAAK,SAAS,SACjB,EAAE,OAAO,SAAS,EAClB,QACD"}
@@ -1,10 +1,31 @@
1
1
  import type { ApiClient } from '../../core/ApiClient';
2
- import { BaseCrudApi } from '../../core/BaseCrudApi';
3
- import type { ListQuery, Paginated } from '../../core/types';
4
- import type { Term, CreateTermPayload, UpdateTermPayload } from './types';
5
- export declare class TermsApi extends BaseCrudApi<Term, CreateTermPayload, UpdateTermPayload> {
2
+ import type { GetByIdQuery, HasGetById } from '../../core/types';
3
+ import type { Term } from './types';
4
+ /**
5
+ * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,
6
+ * so the `/terms` route has no create/list/update/delete — only the routes below.
7
+ *
8
+ * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only
9
+ * handles JSON/text bodies.
10
+ */
11
+ export declare class TermsApi implements HasGetById<Term> {
12
+ protected readonly client: ApiClient;
13
+ readonly basePath = "/terms";
6
14
  constructor(client: ApiClient);
7
- /** Returns all terms where agreementDate is null for the current user's account (i.e. terms not yet agreed to). */
8
- getNotAgreed(query?: ListQuery<Term>, headers?: Record<string, string>): Promise<Paginated<Term>>;
15
+ /** Returns a single term by its ID, scoped to the current account (`null` when not found). */
16
+ getById(id: string, query?: GetByIdQuery<Term>, headers?: Record<string, string>): Promise<Term>;
17
+ /**
18
+ * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).
19
+ * The backend answers a plain array (not paginated) and ignores query parameters.
20
+ */
21
+ getNotAgreed(headers?: Record<string, string>): Promise<Term[]>;
22
+ /**
23
+ * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is
24
+ * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed
25
+ * to the user. Only terms of the current account are affected.
26
+ *
27
+ * The response is passed through from Agnus as-is, so it is not typed.
28
+ */
29
+ agree(termIds: string[], headers?: Record<string, string>): Promise<unknown>;
9
30
  }
10
31
  //# sourceMappingURL=TermsApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TermsApi.d.ts","sourceRoot":"","sources":["../../../src/apis/terms/TermsApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAEzE,qBAAa,QAAS,SAAQ,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,iBAAiB,CAAC;gBACvE,MAAM,EAAE,SAAS;IAI7B,mHAAmH;IACnH,YAAY,CACV,KAAK,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;CAO5B"}
1
+ {"version":3,"file":"TermsApi.d.ts","sourceRoot":"","sources":["../../../src/apis/terms/TermsApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAEnC;;;;;;GAMG;AACH,qBAAa,QAAS,YAAW,UAAU,CAAC,IAAI,CAAC;IAC/C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IACpC,SAAgB,QAAQ,YAAW;gBAEvB,MAAM,EAAE,SAAS;IAO7B,8FAA8F;IAC9F,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhG;;;OAGG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAI/D;;;;;;OAMG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAO7E"}
@@ -1,15 +1,43 @@
1
- import { BaseCrudApi } from "../../core/BaseCrudApi.mjs";
2
1
  import qs from "qs";
3
2
 
4
3
  //#region src/apis/terms/TermsApi.ts
5
- var TermsApi = class extends BaseCrudApi {
4
+ /**
5
+ * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,
6
+ * so the `/terms` route has no create/list/update/delete — only the routes below.
7
+ *
8
+ * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only
9
+ * handles JSON/text bodies.
10
+ */
11
+ var TermsApi = class {
12
+ client;
13
+ basePath = "/terms";
6
14
  constructor(client) {
7
- super(client, "/terms");
15
+ this.client = client;
16
+ this.getById = this.getById.bind(this);
17
+ this.getNotAgreed = this.getNotAgreed.bind(this);
18
+ this.agree = this.agree.bind(this);
8
19
  }
9
- /** Returns all terms where agreementDate is null for the current user's account (i.e. terms not yet agreed to). */
10
- getNotAgreed(query, headers) {
20
+ /** Returns a single term by its ID, scoped to the current account (`null` when not found). */
21
+ getById(id, query, headers) {
11
22
  const queryString = query ? `?${qs.stringify(query)}` : "";
12
- return this.client.get(`${this.basePath}/terms-not-agreed${queryString}`, headers);
23
+ return this.client.get(`${this.basePath}/${id}${queryString}`, headers);
24
+ }
25
+ /**
26
+ * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).
27
+ * The backend answers a plain array (not paginated) and ignores query parameters.
28
+ */
29
+ getNotAgreed(headers) {
30
+ return this.client.get(`${this.basePath}/terms-not-agreed`, headers);
31
+ }
32
+ /**
33
+ * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is
34
+ * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed
35
+ * to the user. Only terms of the current account are affected.
36
+ *
37
+ * The response is passed through from Agnus as-is, so it is not typed.
38
+ */
39
+ agree(termIds, headers) {
40
+ return this.client.patch(`${this.basePath}/agree`, { terms: termIds }, headers);
13
41
  }
14
42
  };
15
43
 
@@ -1 +1 @@
1
- {"version":3,"file":"TermsApi.mjs","names":[],"sources":["../../../src/apis/terms/TermsApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from '../../core/ApiClient'\nimport { BaseCrudApi } from '../../core/BaseCrudApi'\nimport type { ListQuery, Paginated } from '../../core/types'\nimport type { Term, CreateTermPayload, UpdateTermPayload } from './types'\n\nexport class TermsApi extends BaseCrudApi<Term, CreateTermPayload, UpdateTermPayload> {\n constructor(client: ApiClient) {\n super(client, '/terms')\n }\n\n /** Returns all terms where agreementDate is null for the current user's account (i.e. terms not yet agreed to). */\n getNotAgreed(\n query?: ListQuery<Term>,\n headers?: Record<string, string>,\n ): Promise<Paginated<Term>> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Paginated<Term>>(\n `${this.basePath}/terms-not-agreed${queryString}`,\n headers,\n )\n }\n}\n"],"mappings":";;;;AAMA,IAAa,WAAb,cAA8B,YAAwD;CACpF,YAAY,QAAmB;AAC7B,QAAM,QAAQ,SAAS;;;CAIzB,aACE,OACA,SAC0B;EAC1B,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IACjB,GAAG,KAAK,SAAS,mBAAmB,eACpC,QACD"}
1
+ {"version":3,"file":"TermsApi.mjs","names":[],"sources":["../../../src/apis/terms/TermsApi.ts"],"sourcesContent":["import qs from 'qs'\nimport type { ApiClient } from '../../core/ApiClient'\nimport type { GetByIdQuery, HasGetById } from '../../core/types'\nimport type { Term } from './types'\n\n/**\n * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,\n * so the `/terms` route has no create/list/update/delete — only the routes below.\n *\n * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only\n * handles JSON/text bodies.\n */\nexport class TermsApi implements HasGetById<Term> {\n protected readonly client: ApiClient\n public readonly basePath = '/terms'\n\n constructor(client: ApiClient) {\n this.client = client\n this.getById = this.getById.bind(this)\n this.getNotAgreed = this.getNotAgreed.bind(this)\n this.agree = this.agree.bind(this)\n }\n\n /** Returns a single term by its ID, scoped to the current account (`null` when not found). */\n getById(id: string, query?: GetByIdQuery<Term>, headers?: Record<string, string>): Promise<Term> {\n const queryString = query ? `?${qs.stringify(query)}` : ''\n return this.client.get<Term>(`${this.basePath}/${id}${queryString}`, headers)\n }\n\n /**\n * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).\n * The backend answers a plain array (not paginated) and ignores query parameters.\n */\n getNotAgreed(headers?: Record<string, string>): Promise<Term[]> {\n return this.client.get<Term[]>(`${this.basePath}/terms-not-agreed`, headers)\n }\n\n /**\n * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is\n * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed\n * to the user. Only terms of the current account are affected.\n *\n * The response is passed through from Agnus as-is, so it is not typed.\n */\n agree(termIds: string[], headers?: Record<string, string>): Promise<unknown> {\n return this.client.patch<unknown, { terms: string[] }>(\n `${this.basePath}/agree`,\n { terms: termIds },\n headers,\n )\n }\n}\n"],"mappings":";;;;;;;;;;AAYA,IAAa,WAAb,MAAkD;CAChD,AAAmB;CACnB,AAAgB,WAAW;CAE3B,YAAY,QAAmB;AAC7B,OAAK,SAAS;AACd,OAAK,UAAU,KAAK,QAAQ,KAAK,KAAK;AACtC,OAAK,eAAe,KAAK,aAAa,KAAK,KAAK;AAChD,OAAK,QAAQ,KAAK,MAAM,KAAK,KAAK;;;CAIpC,QAAQ,IAAY,OAA4B,SAAiD;EAC/F,MAAM,cAAc,QAAQ,IAAI,GAAG,UAAU,MAAM,KAAK;AACxD,SAAO,KAAK,OAAO,IAAU,GAAG,KAAK,SAAS,GAAG,KAAK,eAAe,QAAQ;;;;;;CAO/E,aAAa,SAAmD;AAC9D,SAAO,KAAK,OAAO,IAAY,GAAG,KAAK,SAAS,oBAAoB,QAAQ;;;;;;;;;CAU9E,MAAM,SAAmB,SAAoD;AAC3E,SAAO,KAAK,OAAO,MACjB,GAAG,KAAK,SAAS,SACjB,EAAE,OAAO,SAAS,EAClB,QACD"}
@@ -11,18 +11,4 @@ export type Term = {
11
11
  createdAt: string;
12
12
  updatedAt: string;
13
13
  };
14
- export type CreateTermPayload = {
15
- title: Record<string, string>;
16
- text: Record<string, string>;
17
- expirationDate: string;
18
- version: string;
19
- agnusId: string;
20
- accountId?: string;
21
- };
22
- export type UpdateTermPayload = {
23
- title?: Record<string, string>;
24
- text?: Record<string, string>;
25
- expirationDate?: string;
26
- version?: string;
27
- };
28
14
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/terms/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/apis/terms/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ikatec/digisac-api-sdk",
3
- "version": "2.2.1",
3
+ "version": "3.0.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",
@@ -0,0 +1,96 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest'
2
+ import { AcceptanceTermsApi } from './AcceptanceTermsApi'
3
+ import type { ApiClient } from '../../core/ApiClient'
4
+ import type {
5
+ AcceptanceTerm,
6
+ CreateAcceptanceTermPayload,
7
+ UpdateAcceptanceTermPayload,
8
+ } from './types'
9
+
10
+ // ── Mock client factory ──────────────────────────────────────────────
11
+
12
+ function createMockClient(): ApiClient {
13
+ return {
14
+ setAccessToken: vi.fn().mockReturnThis(),
15
+ request: vi.fn(),
16
+ get: vi.fn(),
17
+ post: vi.fn(),
18
+ put: vi.fn(),
19
+ patch: vi.fn(),
20
+ delete: vi.fn(),
21
+ }
22
+ }
23
+
24
+ // ── Fixtures ─────────────────────────────────────────────────────────
25
+
26
+ const term: AcceptanceTerm = {
27
+ id: 'at-1',
28
+ name: 'LGPD',
29
+ textField: 'Ao continuar, você concorda...',
30
+ accountId: 'acc-1',
31
+ fileId: null,
32
+ createdAt: '2024-01-01T00:00:00Z',
33
+ updatedAt: '2024-01-01T00:00:00Z',
34
+ deletedAt: null,
35
+ }
36
+
37
+ const upload = { base64: 'JVBERi0xLjQ=', name: 'termo.pdf', mimetype: 'application/pdf' }
38
+
39
+ // ── Tests ────────────────────────────────────────────────────────────
40
+
41
+ describe('AcceptanceTermsApi', () => {
42
+ let client: ReturnType<typeof createMockClient>
43
+ let api: AcceptanceTermsApi
44
+
45
+ beforeEach(() => {
46
+ client = createMockClient()
47
+ api = new AcceptanceTermsApi(client)
48
+ })
49
+
50
+ describe('create', () => {
51
+ it('sends the inline file upload in the body', async () => {
52
+ vi.mocked(client.post).mockResolvedValue({ ...term, fileId: 'file-1' })
53
+ const body: CreateAcceptanceTermPayload = { name: 'LGPD', textField: 'Texto', file: upload }
54
+ await api.create(body)
55
+ expect(client.post).toHaveBeenCalledWith('/acceptance-terms', body, undefined)
56
+ })
57
+
58
+ it('creates a term without attachment', async () => {
59
+ vi.mocked(client.post).mockResolvedValue(term)
60
+ const result = await api.create({ name: 'LGPD', textField: 'Texto' })
61
+ expect(client.post).toHaveBeenCalledWith(
62
+ '/acceptance-terms',
63
+ { name: 'LGPD', textField: 'Texto' },
64
+ undefined,
65
+ )
66
+ expect(result.fileId).toBeNull()
67
+ })
68
+ })
69
+
70
+ describe('updateById', () => {
71
+ it('sends a new file upload', async () => {
72
+ vi.mocked(client.put).mockResolvedValue(term)
73
+ const body: UpdateAcceptanceTermPayload = { name: 'LGPD v2', file: upload }
74
+ await api.updateById('at-1', body)
75
+ expect(client.put).toHaveBeenCalledWith('/acceptance-terms/at-1', body, undefined)
76
+ })
77
+
78
+ it('sends an empty file object to remove the attachment', async () => {
79
+ vi.mocked(client.put).mockResolvedValue(term)
80
+ const body: UpdateAcceptanceTermPayload = { name: 'LGPD', textField: 'Texto', file: {} }
81
+ await api.updateById('at-1', body)
82
+ expect(client.put).toHaveBeenCalledWith('/acceptance-terms/at-1', body, undefined)
83
+ })
84
+ })
85
+
86
+ describe('getById', () => {
87
+ it('includes the file relationship', async () => {
88
+ vi.mocked(client.get).mockResolvedValue({ ...term, file: null })
89
+ const result = await api.getById('at-1', { include: ['file'] })
90
+ const url = vi.mocked(client.get).mock.calls[0][0] as string
91
+ expect(url).toContain('/acceptance-terms/at-1?')
92
+ expect(url).toContain('include')
93
+ expect(result.file).toBeNull()
94
+ })
95
+ })
96
+ })
@@ -6,25 +6,42 @@ export type AcceptanceTerm = {
6
6
  name: string
7
7
  textField: string
8
8
  accountId: string
9
- fileId: string
9
+ /** `null` when the term has no attachment. */
10
+ fileId: string | null
10
11
  createdAt: string
11
12
  updatedAt: string
12
13
  deletedAt: string | null
13
14
  // relationships
14
15
  account?: Account
15
- file?: File
16
+ /** Present with `include: ['file']`; `null` when the term has no attachment. */
17
+ file?: File | null
16
18
  }
17
19
 
18
20
  export type AcceptanceTermRelationships = 'account' | 'file'
19
21
 
22
+ /** Attachment sent inline with the term. `base64` is the raw file content, without the data-URI prefix. */
23
+ export type AcceptanceTermFileUpload = {
24
+ base64: string
25
+ name: string
26
+ mimetype: string
27
+ }
28
+
20
29
  export type CreateAcceptanceTermPayload = {
21
30
  name: string
22
31
  fileId?: string
23
32
  textField?: string
33
+ /** Uploads and attaches a file to the new term. */
34
+ file?: AcceptanceTermFileUpload
24
35
  }
25
36
 
26
37
  export type UpdateAcceptanceTermPayload = {
27
38
  name?: string
28
39
  fileId?: string
29
40
  textField?: string
41
+ /**
42
+ * Replaces the attachment with a new upload, or removes it when `{}` is sent. Omitting `file`
43
+ * currently makes the backend persist the update and then answer 500 (SD-2285) — send `file`
44
+ * explicitly on every update.
45
+ */
46
+ file?: AcceptanceTermFileUpload | Record<string, never>
30
47
  }
@@ -131,6 +131,8 @@ export type AccountSettings = {
131
131
  timezone?: string
132
132
  /** Requires agents to select a topic when closing a ticket. */
133
133
  topicRequired?: boolean
134
+ /** Requires agents to fill in the summary when closing a ticket. */
135
+ summaryRequired?: boolean
134
136
  /** Enables visibility of tags in the chat interface. */
135
137
  showTagsInChat?: boolean
136
138
  /** Enables the ticket (SAC) functionality for the account. */
@@ -1,8 +1,7 @@
1
1
  import { beforeEach, describe, expect, it, vi } from 'vitest'
2
2
  import { TermsApi } from './TermsApi'
3
3
  import type { ApiClient } from '../../core/ApiClient'
4
- import type { Term, CreateTermPayload } from './types'
5
- import type { Paginated } from '../../core/types'
4
+ import type { Term } from './types'
6
5
 
7
6
  // ── Mock client factory ──────────────────────────────────────────────
8
7
 
@@ -34,17 +33,6 @@ const term: Term = {
34
33
  updatedAt: '2024-01-01T00:00:00Z',
35
34
  }
36
35
 
37
- const paginated: Paginated<Term> = {
38
- data: [term],
39
- total: 1,
40
- limit: 10,
41
- skip: 0,
42
- currentPage: 1,
43
- lastPage: 1,
44
- from: 1,
45
- to: 1,
46
- }
47
-
48
36
  // ── Tests ────────────────────────────────────────────────────────────
49
37
 
50
38
  describe('TermsApi', () => {
@@ -56,30 +44,13 @@ describe('TermsApi', () => {
56
44
  api = new TermsApi(client)
57
45
  })
58
46
 
59
- // ── getMany ──────────────────────────────────────────────────────
60
-
61
- describe('getMany', () => {
62
- it('calls client.get with /terms when no query is provided', async () => {
63
- vi.mocked(client.get).mockResolvedValue(paginated)
64
- const result = await api.getMany()
65
- expect(client.get).toHaveBeenCalledWith('/terms', undefined)
66
- expect(result).toEqual(paginated)
67
- })
68
-
69
- it('serializes query parameters', async () => {
70
- vi.mocked(client.get).mockResolvedValue(paginated)
71
- await api.getMany({ page: 2 })
72
- const url = vi.mocked(client.get).mock.calls[0][0] as string
73
- expect(url).toContain('/terms?')
74
- expect(url).toContain('page=2')
75
- })
76
-
77
- it('forwards custom headers', async () => {
78
- vi.mocked(client.get).mockResolvedValue(paginated)
79
- const headers = { 'X-Custom': 'value' }
80
- await api.getMany(undefined, headers)
81
- expect(client.get).toHaveBeenCalledWith('/terms', headers)
82
- })
47
+ it('exposes only the read routes served by the backend', () => {
48
+ expect(api.basePath).toBe('/terms')
49
+ // /terms has no list/create/update/delete routes (404 "Route not found.")
50
+ expect(api).not.toHaveProperty('getMany')
51
+ expect(api).not.toHaveProperty('create')
52
+ expect(api).not.toHaveProperty('updateById')
53
+ expect(api).not.toHaveProperty('deleteById')
83
54
  })
84
55
 
85
56
  // ── getById ──────────────────────────────────────────────────────
@@ -92,100 +63,83 @@ describe('TermsApi', () => {
92
63
  expect(result).toEqual(term)
93
64
  })
94
65
 
66
+ it('serializes the query', async () => {
67
+ vi.mocked(client.get).mockResolvedValue(term)
68
+ await api.getById('term-1', { attributes: ['id', 'version'] })
69
+ const url = vi.mocked(client.get).mock.calls[0][0] as string
70
+ expect(url).toContain('/terms/term-1?')
71
+ expect(url).toContain('attributes')
72
+ })
73
+
95
74
  it('forwards custom headers', async () => {
96
75
  vi.mocked(client.get).mockResolvedValue(term)
97
76
  const headers = { 'X-Tenant': 'abc' }
98
77
  await api.getById('term-1', undefined, headers)
99
78
  expect(client.get).toHaveBeenCalledWith('/terms/term-1', headers)
100
79
  })
101
- })
102
80
 
103
- // ── create ───────────────────────────────────────────────────────
104
-
105
- describe('create', () => {
106
- it('calls client.post with /terms and body', async () => {
107
- vi.mocked(client.post).mockResolvedValue(term)
108
- const body: CreateTermPayload = {
109
- title: { en: 'ToS' },
110
- text: { en: 'Text' },
111
- expirationDate: '2025-01-01',
112
- version: '1.0',
113
- agnusId: 'agnus-1',
114
- }
115
- const result = await api.create(body)
116
- expect(client.post).toHaveBeenCalledWith('/terms', body, undefined)
117
- expect(result).toEqual(term)
81
+ it('keeps working when detached from the instance', async () => {
82
+ vi.mocked(client.get).mockResolvedValue(term)
83
+ const { getById } = api
84
+ await getById('term-1')
85
+ expect(client.get).toHaveBeenCalledWith('/terms/term-1', undefined)
118
86
  })
119
87
  })
120
88
 
121
- // ── updateById ───────────────────────────────────────────────────
89
+ // ── getNotAgreed ─────────────────────────────────────────────────
122
90
 
123
- describe('updateById', () => {
124
- it('calls client.put with /terms/:id and body', async () => {
125
- vi.mocked(client.put).mockResolvedValue(term)
126
- const result = await api.updateById('term-1', { version: '1.1' })
127
- expect(client.put).toHaveBeenCalledWith('/terms/term-1', { version: '1.1' }, undefined)
128
- expect(result).toEqual(term)
91
+ describe('getNotAgreed', () => {
92
+ it('calls client.get with /terms/terms-not-agreed and returns the plain array', async () => {
93
+ vi.mocked(client.get).mockResolvedValue([term])
94
+ const result = await api.getNotAgreed()
95
+ expect(client.get).toHaveBeenCalledWith('/terms/terms-not-agreed', undefined)
96
+ expect(result).toEqual([term])
129
97
  })
130
98
 
131
99
  it('forwards custom headers', async () => {
132
- vi.mocked(client.put).mockResolvedValue(term)
133
- const headers = { 'If-Match': 'etag' }
134
- await api.updateById('term-1', { version: '2.0' }, headers)
135
- expect(client.put).toHaveBeenCalledWith('/terms/term-1', { version: '2.0' }, headers)
100
+ vi.mocked(client.get).mockResolvedValue([])
101
+ const headers = { 'X-Custom': 'h' }
102
+ await api.getNotAgreed(headers)
103
+ expect(client.get).toHaveBeenCalledWith('/terms/terms-not-agreed', headers)
136
104
  })
137
105
  })
138
106
 
139
- // ── deleteById ───────────────────────────────────────────────────
140
-
141
- describe('deleteById', () => {
142
- it('calls client.delete with /terms/:id', async () => {
143
- vi.mocked(client.delete).mockResolvedValue(term)
144
- const result = await api.deleteById('term-1')
145
- expect(client.delete).toHaveBeenCalledWith('/terms/term-1', undefined)
146
- expect(result).toEqual(term)
107
+ // ── agree ────────────────────────────────────────────────────────
108
+
109
+ describe('agree', () => {
110
+ it('calls client.patch with /terms/agree and the term ids', async () => {
111
+ const agnusResponse = { agreed: true }
112
+ vi.mocked(client.patch).mockResolvedValue(agnusResponse)
113
+ const result = await api.agree(['term-1', 'term-2'])
114
+ expect(client.patch).toHaveBeenCalledWith(
115
+ '/terms/agree',
116
+ { terms: ['term-1', 'term-2'] },
117
+ undefined,
118
+ )
119
+ expect(result).toEqual(agnusResponse)
147
120
  })
148
121
 
149
122
  it('forwards custom headers', async () => {
150
- vi.mocked(client.delete).mockResolvedValue(term)
151
- const headers = { 'X-Reason': 'cleanup' }
152
- await api.deleteById('term-1', headers)
153
- expect(client.delete).toHaveBeenCalledWith('/terms/term-1', headers)
154
- })
155
- })
156
-
157
- // ── getNotAgreed ─────────────────────────────────────────────────
158
-
159
- describe('getNotAgreed', () => {
160
- it('calls client.get with /terms/terms-not-agreed when no query is provided', async () => {
161
- vi.mocked(client.get).mockResolvedValue(paginated)
162
- const result = await api.getNotAgreed()
163
- expect(client.get).toHaveBeenCalledWith('/terms/terms-not-agreed', undefined)
164
- expect(result).toEqual(paginated)
165
- })
166
-
167
- it('serializes query parameters', async () => {
168
- vi.mocked(client.get).mockResolvedValue(paginated)
169
- await api.getNotAgreed({ page: 1, perPage: 5 })
170
- const url = vi.mocked(client.get).mock.calls[0][0] as string
171
- expect(url).toContain('/terms/terms-not-agreed?')
172
- expect(url).toContain('page=1')
123
+ vi.mocked(client.patch).mockResolvedValue({})
124
+ const headers = { 'X-Custom': 'h' }
125
+ await api.agree(['term-1'], headers)
126
+ expect(client.patch).toHaveBeenCalledWith('/terms/agree', { terms: ['term-1'] }, headers)
173
127
  })
174
128
 
175
- it('forwards custom headers', async () => {
176
- vi.mocked(client.get).mockResolvedValue(paginated)
177
- const headers = { 'X-Custom': 'h' }
178
- await api.getNotAgreed(undefined, headers)
179
- expect(client.get).toHaveBeenCalledWith('/terms/terms-not-agreed', headers)
129
+ it('keeps working when detached from the instance', async () => {
130
+ vi.mocked(client.patch).mockResolvedValue({})
131
+ const { agree } = api
132
+ await agree(['term-1'])
133
+ expect(client.patch).toHaveBeenCalledWith('/terms/agree', { terms: ['term-1'] }, undefined)
180
134
  })
181
135
  })
182
136
 
183
137
  // ── Error propagation ────────────────────────────────────────────
184
138
 
185
139
  describe('error propagation', () => {
186
- it('propagates errors from getMany', async () => {
140
+ it('propagates errors from getById', async () => {
187
141
  vi.mocked(client.get).mockRejectedValue(new Error('Network error'))
188
- await expect(api.getMany()).rejects.toThrow('Network error')
142
+ await expect(api.getById('term-1')).rejects.toThrow('Network error')
189
143
  })
190
144
 
191
145
  it('propagates errors from getNotAgreed', async () => {
@@ -1,22 +1,51 @@
1
1
  import qs from 'qs'
2
2
  import type { ApiClient } from '../../core/ApiClient'
3
- import { BaseCrudApi } from '../../core/BaseCrudApi'
4
- import type { ListQuery, Paginated } from '../../core/types'
5
- import type { Term, CreateTermPayload, UpdateTermPayload } from './types'
3
+ import type { GetByIdQuery, HasGetById } from '../../core/types'
4
+ import type { Term } from './types'
5
+
6
+ /**
7
+ * Platform terms of use. Terms are published by Agnus (billing) and accepted by the account users,
8
+ * so the `/terms` route has no create/list/update/delete — only the routes below.
9
+ *
10
+ * `GET /terms/:id/export-pdf` is not exposed: it answers a binary PDF, and `ApiClient` only
11
+ * handles JSON/text bodies.
12
+ */
13
+ export class TermsApi implements HasGetById<Term> {
14
+ protected readonly client: ApiClient
15
+ public readonly basePath = '/terms'
6
16
 
7
- export class TermsApi extends BaseCrudApi<Term, CreateTermPayload, UpdateTermPayload> {
8
17
  constructor(client: ApiClient) {
9
- super(client, '/terms')
18
+ this.client = client
19
+ this.getById = this.getById.bind(this)
20
+ this.getNotAgreed = this.getNotAgreed.bind(this)
21
+ this.agree = this.agree.bind(this)
10
22
  }
11
23
 
12
- /** Returns all terms where agreementDate is null for the current user's account (i.e. terms not yet agreed to). */
13
- getNotAgreed(
14
- query?: ListQuery<Term>,
15
- headers?: Record<string, string>,
16
- ): Promise<Paginated<Term>> {
24
+ /** Returns a single term by its ID, scoped to the current account (`null` when not found). */
25
+ getById(id: string, query?: GetByIdQuery<Term>, headers?: Record<string, string>): Promise<Term> {
17
26
  const queryString = query ? `?${qs.stringify(query)}` : ''
18
- return this.client.get<Paginated<Term>>(
19
- `${this.basePath}/terms-not-agreed${queryString}`,
27
+ return this.client.get<Term>(`${this.basePath}/${id}${queryString}`, headers)
28
+ }
29
+
30
+ /**
31
+ * Returns the terms of the current account that were not agreed to yet (`agreementDate` null).
32
+ * The backend answers a plain array (not paginated) and ignores query parameters.
33
+ */
34
+ getNotAgreed(headers?: Record<string, string>): Promise<Term[]> {
35
+ return this.client.get<Term[]>(`${this.basePath}/terms-not-agreed`, headers)
36
+ }
37
+
38
+ /**
39
+ * Agrees to the given terms on behalf of the authenticated user. IRREVERSIBLE: the acceptance is
40
+ * registered on Agnus, the terms get `agreementDate`/`userId`, and the signed PDFs are e-mailed
41
+ * to the user. Only terms of the current account are affected.
42
+ *
43
+ * The response is passed through from Agnus as-is, so it is not typed.
44
+ */
45
+ agree(termIds: string[], headers?: Record<string, string>): Promise<unknown> {
46
+ return this.client.patch<unknown, { terms: string[] }>(
47
+ `${this.basePath}/agree`,
48
+ { terms: termIds },
20
49
  headers,
21
50
  )
22
51
  }
@@ -11,19 +11,3 @@ export type Term = {
11
11
  createdAt: string
12
12
  updatedAt: string
13
13
  }
14
-
15
- export type CreateTermPayload = {
16
- title: Record<string, string>
17
- text: Record<string, string>
18
- expirationDate: string
19
- version: string
20
- agnusId: string
21
- accountId?: string
22
- }
23
-
24
- export type UpdateTermPayload = {
25
- title?: Record<string, string>
26
- text?: Record<string, string>
27
- expirationDate?: string
28
- version?: string
29
- }