• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

endatix / endatix-hub / 26183617452

20 May 2026 07:00PM UTC coverage: 51.833% (+0.6%) from 51.239%
26183617452

push

github

web-flow
feat!: Add S3 Storage provider (#637)

Merged after approval

1373 of 2342 branches covered (58.63%)

Branch coverage included in aggregate %.

1173 of 1884 new or added lines in 122 files covered. (62.26%)

12 existing lines in 11 files now uncovered.

5599 of 11109 relevant lines covered (50.4%)

9.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/lib/endatix-api/forms/forms.ts
1
import { Form } from "@/types";
2
import { Result } from "@/lib/result";
3
import { validateEndatixId } from "@/lib/utils/type-validators";
4
import { EndatixApi } from "../endatix-api";
5
import { ApiResult } from "../shared/api-result";
6
import {
7
  CreateFormAccessTokenRequest,
8
  FormAccessTokenResponse,
9
  FormsListRequest,
10
  GetPublicFormAccessRequest,
11
  PublicFormAccessResponse,
12
  UpdateFormRequest,
13
} from "./types";
14
import { CreateFormRequest } from "@/lib/form-types";
15

16
export class Forms {
17
  constructor(private readonly endatix: EndatixApi) {}
×
18

19
  async create(request: CreateFormRequest): Promise<ApiResult<Form>> {
20
    return this.endatix.post<Form>("/forms", request);
×
21
  }
22

23
  async list(request?: FormsListRequest): Promise<ApiResult<Form[]>> {
24
    const params = new URLSearchParams();
×
25
    params.set("pageSize", "100");
×
26
    if (request?.filter) {
×
27
      params.set("filter", request.filter);
×
28
    }
29
    if (request?.folderId) {
×
30
      params.set("folderId", request.folderId);
×
31
    }
32
    return this.endatix.get<Form[]>(`/forms?${params.toString()}`);
×
33
  }
34

35
  async get(formId: string): Promise<ApiResult<Form>> {
36
    const validateFormIdResult = validateEndatixId(formId, "formId");
×
37
    if (Result.isError(validateFormIdResult)) {
×
38
      return ApiResult.validationError(validateFormIdResult.message);
×
39
    }
40
    return this.endatix.get<Form>(`/forms/${validateFormIdResult.value}`);
×
41
  }
42

43
  async update(
44
    formId: string,
45
    request: UpdateFormRequest,
46
  ): Promise<ApiResult<void>> {
47
    const validateFormIdResult = validateEndatixId(formId, "formId");
×
48
    if (Result.isError(validateFormIdResult)) {
×
49
      return ApiResult.validationError(validateFormIdResult.message);
×
50
    }
51
    return this.endatix.patch<void>(
×
52
      `/forms/${validateFormIdResult.value}`,
53
      request,
54
    );
55
  }
56

57
  async delete(formId: string): Promise<ApiResult<void>> {
58
    const validateFormIdResult = validateEndatixId(formId, "formId");
×
59
    if (Result.isError(validateFormIdResult)) {
×
60
      return ApiResult.validationError(validateFormIdResult.message);
×
61
    }
62
    return this.endatix.delete<void>(`/forms/${validateFormIdResult.value}`);
×
63
  }
64

65
  /**
66
   * Gets a form access JWT for browser calls to public form related endpoints & resources.
67
   */
68
  async createFormAccessToken(
69
    formId: string,
70
    body: CreateFormAccessTokenRequest = {},
71
  ): Promise<ApiResult<FormAccessTokenResponse>> {
72
    const validateFormIdResult = validateEndatixId(formId, "formId");
×
73
    if (Result.isError(validateFormIdResult)) {
×
74
      return ApiResult.validationError(validateFormIdResult.message);
×
75
    }
76

77
    return this.endatix.post<FormAccessTokenResponse>(
×
78
      `/public/forms/${validateFormIdResult.value}/access-tokens`,
79
      body,
80
      { requireAuth: false },
81
    );
82
  }
83

84
  /**
85
   * Resolves public-form permissions via OSS PublicFormAccessPolicy.
86
   * Pass hub session token for private forms; optional respondent token as query params.
87
   */
88
  async getPublicFormAccess(
89
    formId: string,
90
    request: GetPublicFormAccessRequest = {},
91
    requireAuth = false,
92
  ): Promise<ApiResult<PublicFormAccessResponse>> {
NEW
93
    const validateFormIdResult = validateEndatixId(formId, "formId");
×
NEW
94
    if (Result.isError(validateFormIdResult)) {
×
NEW
95
      return ApiResult.validationError(validateFormIdResult.message);
×
96
    }
97

NEW
98
    const params = new URLSearchParams();
×
NEW
99
    if (request.token) {
×
NEW
100
      params.set("token", request.token);
×
101
    }
NEW
102
    if (request.tokenType) {
×
NEW
103
      params.set("tokenType", request.tokenType);
×
104
    }
NEW
105
    const query = params.toString();
×
NEW
106
    const path = `/access/public/forms/${validateFormIdResult.value}${
×
107
      query ? `?${query}` : ""
108
    }`;
109

NEW
110
    return this.endatix.get<PublicFormAccessResponse>(path, { requireAuth });
×
111
  }
112
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc