@typeb-digital/nucleus-sdk 0.0.1 → 0.0.3
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/README.md +236 -0
- package/dist/cjs/index.cjs +683 -0
- package/dist/cjs/index.d.cts +567 -0
- package/dist/cjs/index.d.cts.map +1 -0
- package/dist/es/index.d.ts +567 -0
- package/dist/es/index.d.ts.map +1 -0
- package/dist/es/index.js +683 -0
- package/package.json +5 -1
- package/src/apps.ts +0 -19
- package/src/client.ts +0 -75
- package/src/index.ts +0 -82
- package/src/resources/clients.ts +0 -65
- package/src/resources/currencies.ts +0 -41
- package/src/resources/departments.ts +0 -43
- package/src/resources/employees.ts +0 -65
- package/src/resources/files.ts +0 -105
- package/src/resources/generic-rates.ts +0 -43
- package/src/resources/partners.ts +0 -61
- package/src/resources/project-types.ts +0 -41
- package/src/resources/projects.ts +0 -65
- package/src/transform.ts +0 -266
- package/src/transport.ts +0 -145
- package/src/types.ts +0 -447
- package/tsconfig.json +0 -12
- package/tsconfig.verify.json +0 -11
- package/typeb-digital-nucleus-sdk-0.0.1.tgz +0 -0
- package/verify.ts +0 -182
|
@@ -0,0 +1,567 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nucleus SDK — Type System
|
|
3
|
+
*
|
|
4
|
+
* Bucket types are transcribed from docs/NUCLEUS_PIVOT.md §7 (Bucket Definitions).
|
|
5
|
+
* Each bucket type contains only that bucket's fields.
|
|
6
|
+
* The scope-to-type inference intersects selected bucket types at compile time.
|
|
7
|
+
*/
|
|
8
|
+
type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
|
|
9
|
+
type NoScope = Record<never, never>;
|
|
10
|
+
type ErrorCode = 'FORBIDDEN' | 'NOT_FOUND' | 'INVALID_SCOPE' | 'RATE_LIMITED' | 'NETWORK_ERROR';
|
|
11
|
+
type ErrorResult = {
|
|
12
|
+
error: {
|
|
13
|
+
code: ErrorCode;
|
|
14
|
+
message: string;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
type SuccessResult<T> = {
|
|
18
|
+
data: T;
|
|
19
|
+
};
|
|
20
|
+
type ListMeta = {
|
|
21
|
+
total: number;
|
|
22
|
+
page: number;
|
|
23
|
+
pageSize: number;
|
|
24
|
+
hasMore: boolean;
|
|
25
|
+
};
|
|
26
|
+
type ListResult<T> = {
|
|
27
|
+
data: T[];
|
|
28
|
+
meta: ListMeta;
|
|
29
|
+
};
|
|
30
|
+
type SingleResult<T> = SuccessResult<T> | ErrorResult;
|
|
31
|
+
type PaginatedResult<T> = ListResult<T> | ErrorResult;
|
|
32
|
+
declare function isError<T>(result: SuccessResult<T> | ListResult<T> | ErrorResult): result is ErrorResult;
|
|
33
|
+
type EmployeeIdentity = {
|
|
34
|
+
id: string;
|
|
35
|
+
displayName: string;
|
|
36
|
+
firstName: string;
|
|
37
|
+
lastName: string;
|
|
38
|
+
email: string;
|
|
39
|
+
pictureUrl: string | null;
|
|
40
|
+
jobTitle: string | null;
|
|
41
|
+
department: string | null;
|
|
42
|
+
employmentStatus: string;
|
|
43
|
+
isExternal: boolean;
|
|
44
|
+
};
|
|
45
|
+
type EmployeeContact = {
|
|
46
|
+
profile: {
|
|
47
|
+
phone?: string | null;
|
|
48
|
+
city?: string | null;
|
|
49
|
+
country?: string | null;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
type EmployeeEmployment = {
|
|
53
|
+
startDate: string | null;
|
|
54
|
+
weeklyCapacity: number | null;
|
|
55
|
+
managerId: string | null;
|
|
56
|
+
partnerId: string | null;
|
|
57
|
+
/** IANA timezone string, e.g. "Asia/Colombo". Null when not yet set. */
|
|
58
|
+
timezone: string | null;
|
|
59
|
+
profile: {
|
|
60
|
+
biography?: string | null;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
type EmployeeSensitive = {
|
|
64
|
+
birthday: string | null;
|
|
65
|
+
profile: {
|
|
66
|
+
emergencyContact?: {
|
|
67
|
+
name: string | null;
|
|
68
|
+
phone: string | null;
|
|
69
|
+
} | null;
|
|
70
|
+
};
|
|
71
|
+
customFields: Record<string, unknown> | null;
|
|
72
|
+
};
|
|
73
|
+
type EmployeeCompensation = {
|
|
74
|
+
currentCompensation: {
|
|
75
|
+
hourlyCostRate: number | null;
|
|
76
|
+
hourlyBillableRate: number | null;
|
|
77
|
+
monthlyCostRate: number | null;
|
|
78
|
+
monthlyBillableRate: number | null;
|
|
79
|
+
currencyCode: string;
|
|
80
|
+
effectiveFrom: string;
|
|
81
|
+
} | null;
|
|
82
|
+
};
|
|
83
|
+
type EmployeeCompensationHistory = {
|
|
84
|
+
compensationHistory: Array<{
|
|
85
|
+
hourlyCostRate: number | null;
|
|
86
|
+
hourlyBillableRate: number | null;
|
|
87
|
+
monthlyCostRate: number | null;
|
|
88
|
+
monthlyBillableRate: number | null;
|
|
89
|
+
currencyCode: string;
|
|
90
|
+
effectiveFrom: string;
|
|
91
|
+
effectiveTo: string | null;
|
|
92
|
+
}>;
|
|
93
|
+
};
|
|
94
|
+
type EmployeeBucketMap = {
|
|
95
|
+
identity: EmployeeIdentity;
|
|
96
|
+
contact: EmployeeContact;
|
|
97
|
+
employment: EmployeeEmployment;
|
|
98
|
+
sensitive: EmployeeSensitive;
|
|
99
|
+
compensation: EmployeeCompensation;
|
|
100
|
+
compensation_history: EmployeeCompensationHistory;
|
|
101
|
+
};
|
|
102
|
+
type ProjectMembership = {
|
|
103
|
+
employeeId: string;
|
|
104
|
+
role: string | null;
|
|
105
|
+
};
|
|
106
|
+
type ProjectCore = {
|
|
107
|
+
id: string;
|
|
108
|
+
name: string;
|
|
109
|
+
status: string;
|
|
110
|
+
colorTag: string | null;
|
|
111
|
+
iconName: string | null;
|
|
112
|
+
startDate: string | null;
|
|
113
|
+
endDate: string | null;
|
|
114
|
+
projectTypeId: string | null;
|
|
115
|
+
clientId: string | null;
|
|
116
|
+
};
|
|
117
|
+
type ProjectTeam = {
|
|
118
|
+
projectManagerId: string | null;
|
|
119
|
+
engagementLeadId: string | null;
|
|
120
|
+
memberships: ProjectMembership[];
|
|
121
|
+
};
|
|
122
|
+
type ProjectFinancials = Record<never, never>;
|
|
123
|
+
type ProjectIntegrations = {
|
|
124
|
+
source: string | null;
|
|
125
|
+
clockifyProjectId: string | null;
|
|
126
|
+
clockifyWorkspaceId: string | null;
|
|
127
|
+
apolloDealId: string | null;
|
|
128
|
+
};
|
|
129
|
+
type ProjectBucketMap = {
|
|
130
|
+
core: ProjectCore;
|
|
131
|
+
team: ProjectTeam;
|
|
132
|
+
financials: ProjectFinancials;
|
|
133
|
+
integrations: ProjectIntegrations;
|
|
134
|
+
};
|
|
135
|
+
type ClientIdentity = {
|
|
136
|
+
id: string;
|
|
137
|
+
name: string;
|
|
138
|
+
code: string | null;
|
|
139
|
+
industry: string | null;
|
|
140
|
+
website: string | null;
|
|
141
|
+
country: string | null;
|
|
142
|
+
};
|
|
143
|
+
type ClientContact = {
|
|
144
|
+
primaryContactName: string | null;
|
|
145
|
+
primaryContactEmail: string | null;
|
|
146
|
+
contactPhone: string | null;
|
|
147
|
+
};
|
|
148
|
+
type ClientFinancials = {
|
|
149
|
+
defaultCurrency: string | null;
|
|
150
|
+
};
|
|
151
|
+
type ClientNotes = {
|
|
152
|
+
notes: string | null;
|
|
153
|
+
};
|
|
154
|
+
type ClientBucketMap = {
|
|
155
|
+
identity: ClientIdentity;
|
|
156
|
+
contact: ClientContact;
|
|
157
|
+
financials: ClientFinancials;
|
|
158
|
+
notes: ClientNotes;
|
|
159
|
+
};
|
|
160
|
+
type PartnerIdentity = {
|
|
161
|
+
id: string;
|
|
162
|
+
name: string;
|
|
163
|
+
};
|
|
164
|
+
type PartnerContact = {
|
|
165
|
+
contactName: string | null;
|
|
166
|
+
contactEmail: string | null;
|
|
167
|
+
contactPhone: string | null;
|
|
168
|
+
};
|
|
169
|
+
type PartnerNotes = {
|
|
170
|
+
notes: string | null;
|
|
171
|
+
};
|
|
172
|
+
type PartnerBucketMap = {
|
|
173
|
+
identity: PartnerIdentity;
|
|
174
|
+
contact: PartnerContact;
|
|
175
|
+
notes: PartnerNotes;
|
|
176
|
+
};
|
|
177
|
+
type DepartmentCore = {
|
|
178
|
+
id: string;
|
|
179
|
+
name: string;
|
|
180
|
+
titles: string[];
|
|
181
|
+
sortOrder: number;
|
|
182
|
+
};
|
|
183
|
+
type DepartmentBucketMap = {
|
|
184
|
+
core: DepartmentCore;
|
|
185
|
+
};
|
|
186
|
+
type ProjectTypeCore = {
|
|
187
|
+
id: string;
|
|
188
|
+
name: string;
|
|
189
|
+
description: string | null;
|
|
190
|
+
sortOrder: number;
|
|
191
|
+
};
|
|
192
|
+
type ProjectTypeBucketMap = {
|
|
193
|
+
core: ProjectTypeCore;
|
|
194
|
+
};
|
|
195
|
+
type CurrencyCore = {
|
|
196
|
+
code: string;
|
|
197
|
+
name: string;
|
|
198
|
+
symbol: string | null;
|
|
199
|
+
isDefault: boolean;
|
|
200
|
+
sortOrder: number;
|
|
201
|
+
};
|
|
202
|
+
type CurrencyBucketMap = {
|
|
203
|
+
core: CurrencyCore;
|
|
204
|
+
};
|
|
205
|
+
type GenericRateCore = {
|
|
206
|
+
id: string;
|
|
207
|
+
title: string;
|
|
208
|
+
department: string;
|
|
209
|
+
currencyCode: string;
|
|
210
|
+
};
|
|
211
|
+
type GenericRateFinancials = {
|
|
212
|
+
costRate: number;
|
|
213
|
+
billableRate: number;
|
|
214
|
+
};
|
|
215
|
+
type GenericRateBucketMap = {
|
|
216
|
+
core: GenericRateCore;
|
|
217
|
+
financials: GenericRateFinancials;
|
|
218
|
+
};
|
|
219
|
+
type ScopeDeclaration = {
|
|
220
|
+
employees?: readonly (keyof EmployeeBucketMap)[];
|
|
221
|
+
projects?: readonly (keyof ProjectBucketMap)[];
|
|
222
|
+
clients?: readonly (keyof ClientBucketMap)[];
|
|
223
|
+
partners?: readonly (keyof PartnerBucketMap)[];
|
|
224
|
+
departments?: readonly (keyof DepartmentBucketMap)[];
|
|
225
|
+
projectTypes?: readonly (keyof ProjectTypeBucketMap)[];
|
|
226
|
+
currencies?: readonly (keyof CurrencyBucketMap)[];
|
|
227
|
+
genericRates?: readonly (keyof GenericRateBucketMap)[];
|
|
228
|
+
};
|
|
229
|
+
type ResolveBuckets<M, B> = B extends readonly (keyof M)[] ? [B[number]] extends [never] ? NoScope : UnionToIntersection<M[B[number]]> : NoScope;
|
|
230
|
+
type ResolveEmployee<S extends ScopeDeclaration> = ResolveBuckets<EmployeeBucketMap, S['employees']>;
|
|
231
|
+
type ResolveProject<S extends ScopeDeclaration> = ResolveBuckets<ProjectBucketMap, S['projects']>;
|
|
232
|
+
type ResolveClient<S extends ScopeDeclaration> = ResolveBuckets<ClientBucketMap, S['clients']>;
|
|
233
|
+
type ResolvePartner<S extends ScopeDeclaration> = ResolveBuckets<PartnerBucketMap, S['partners']>;
|
|
234
|
+
type ResolveDepartment<S extends ScopeDeclaration> = ResolveBuckets<DepartmentBucketMap, S['departments']>;
|
|
235
|
+
type ResolveProjectType<S extends ScopeDeclaration> = ResolveBuckets<ProjectTypeBucketMap, S['projectTypes']>;
|
|
236
|
+
type ResolveCurrency<S extends ScopeDeclaration> = ResolveBuckets<CurrencyBucketMap, S['currencies']>;
|
|
237
|
+
type ResolveGenericRate<S extends ScopeDeclaration> = ResolveBuckets<GenericRateBucketMap, S['genericRates']>;
|
|
238
|
+
type EmployeeExpandPath = 'manager' | 'partner';
|
|
239
|
+
type WithEmployeeExpand<T, E extends readonly EmployeeExpandPath[], S extends ScopeDeclaration> = T & ('manager' extends E[number] ? {
|
|
240
|
+
manager: ResolveEmployee<S> | null;
|
|
241
|
+
} : unknown) & ('partner' extends E[number] ? {
|
|
242
|
+
partner: PartnerIdentity | null;
|
|
243
|
+
} : unknown);
|
|
244
|
+
type ProjectExpandPath = 'projectType' | 'client' | 'projectManager' | 'projectManager.manager' | 'engagementLead' | 'engagementLead.manager' | 'memberships.employee';
|
|
245
|
+
type ProjectMembershipExpanded<S extends ScopeDeclaration> = {
|
|
246
|
+
employeeId: string;
|
|
247
|
+
role: string | null;
|
|
248
|
+
employee: ResolveEmployee<S>;
|
|
249
|
+
};
|
|
250
|
+
type WithProjectExpand<T, E extends readonly ProjectExpandPath[], S extends ScopeDeclaration> = ('memberships.employee' extends E[number] ? Omit<T, 'memberships'> & {
|
|
251
|
+
memberships: Array<ProjectMembershipExpanded<S>>;
|
|
252
|
+
} : T) & ('client' extends E[number] ? {
|
|
253
|
+
client: ResolveClient<S> | null;
|
|
254
|
+
} : unknown) & ('projectType' extends E[number] ? {
|
|
255
|
+
projectType: ProjectTypeCore | null;
|
|
256
|
+
} : unknown) & ('projectManager.manager' extends E[number] ? {
|
|
257
|
+
projectManager: (ResolveEmployee<S> & {
|
|
258
|
+
manager: ResolveEmployee<S> | null;
|
|
259
|
+
}) | null;
|
|
260
|
+
} : 'projectManager' extends E[number] ? {
|
|
261
|
+
projectManager: ResolveEmployee<S> | null;
|
|
262
|
+
} : unknown) & ('engagementLead.manager' extends E[number] ? {
|
|
263
|
+
engagementLead: (ResolveEmployee<S> & {
|
|
264
|
+
manager: ResolveEmployee<S> | null;
|
|
265
|
+
}) | null;
|
|
266
|
+
} : 'engagementLead' extends E[number] ? {
|
|
267
|
+
engagementLead: ResolveEmployee<S> | null;
|
|
268
|
+
} : unknown);
|
|
269
|
+
type ClientExpandPath = 'projects';
|
|
270
|
+
type WithClientExpand<T, E extends readonly ClientExpandPath[], S extends ScopeDeclaration> = T & ('projects' extends E[number] ? {
|
|
271
|
+
projects: Array<ResolveProject<S>>;
|
|
272
|
+
} : unknown);
|
|
273
|
+
type PartnerExpandPath = 'employees';
|
|
274
|
+
type WithPartnerExpand<T, E extends readonly PartnerExpandPath[], S extends ScopeDeclaration> = T & ('employees' extends E[number] ? {
|
|
275
|
+
employees: Array<ResolveEmployee<S>>;
|
|
276
|
+
} : unknown);
|
|
277
|
+
type AppScopeInfo = {
|
|
278
|
+
id: string;
|
|
279
|
+
resource: string;
|
|
280
|
+
buckets: string[];
|
|
281
|
+
status: 'active' | 'pending' | 'rejected';
|
|
282
|
+
reviewNote: string | null;
|
|
283
|
+
};
|
|
284
|
+
type AppInfo = {
|
|
285
|
+
id: string;
|
|
286
|
+
appId: string;
|
|
287
|
+
name: string;
|
|
288
|
+
description: string | null;
|
|
289
|
+
icon: string | null;
|
|
290
|
+
environment: string;
|
|
291
|
+
status: string;
|
|
292
|
+
scopes: AppScopeInfo[];
|
|
293
|
+
tokens: {
|
|
294
|
+
id: string;
|
|
295
|
+
tokenPrefix: string;
|
|
296
|
+
environment: string;
|
|
297
|
+
status: string;
|
|
298
|
+
lastUsedAt: string | null;
|
|
299
|
+
expiresAt: string | null;
|
|
300
|
+
createdAt: string;
|
|
301
|
+
}[];
|
|
302
|
+
createdAt: string;
|
|
303
|
+
};
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* HTTP transport — wraps ofetch so resource files never see raw network concerns.
|
|
307
|
+
* All methods return result objects; they never throw.
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
declare class NucleusTransport {
|
|
311
|
+
private readonly headers;
|
|
312
|
+
private readonly baseUrl;
|
|
313
|
+
constructor(token: string, baseUrl?: string);
|
|
314
|
+
get<T>(path: string, query?: Record<string, string | number | undefined>): Promise<SuccessResult<T> | ErrorResult>;
|
|
315
|
+
post<T>(path: string, body: unknown): Promise<SuccessResult<T> | ErrorResult>;
|
|
316
|
+
del<T = null>(path: string, query?: Record<string, string | undefined>): Promise<SuccessResult<T> | ErrorResult>;
|
|
317
|
+
getList<T>(path: string, query?: Record<string, string | number | undefined>): Promise<ListResult<T> | ErrorResult>;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
type EmployeeListParams = {
|
|
321
|
+
search?: string;
|
|
322
|
+
department?: string;
|
|
323
|
+
employmentStatus?: string;
|
|
324
|
+
page?: number;
|
|
325
|
+
pageSize?: number;
|
|
326
|
+
expand?: readonly EmployeeExpandPath[];
|
|
327
|
+
};
|
|
328
|
+
declare class EmployeesAccessor<S extends ScopeDeclaration> {
|
|
329
|
+
private readonly transport;
|
|
330
|
+
constructor(transport: NucleusTransport);
|
|
331
|
+
list<E extends readonly EmployeeExpandPath[] = never[]>(params?: EmployeeListParams & {
|
|
332
|
+
expand?: E;
|
|
333
|
+
}): Promise<PaginatedResult<WithEmployeeExpand<ResolveEmployee<S>, E, S>>>;
|
|
334
|
+
getById<E extends readonly EmployeeExpandPath[] = never[]>(id: string, options?: {
|
|
335
|
+
expand?: E;
|
|
336
|
+
}): Promise<SingleResult<WithEmployeeExpand<ResolveEmployee<S>, E, S>>>;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
type ProjectListParams = {
|
|
340
|
+
search?: string;
|
|
341
|
+
status?: string;
|
|
342
|
+
clientId?: string;
|
|
343
|
+
page?: number;
|
|
344
|
+
pageSize?: number;
|
|
345
|
+
expand?: readonly ProjectExpandPath[];
|
|
346
|
+
};
|
|
347
|
+
declare class ProjectsAccessor<S extends ScopeDeclaration> {
|
|
348
|
+
private readonly transport;
|
|
349
|
+
constructor(transport: NucleusTransport);
|
|
350
|
+
list<E extends readonly ProjectExpandPath[] = never[]>(params?: ProjectListParams & {
|
|
351
|
+
expand?: E;
|
|
352
|
+
}): Promise<PaginatedResult<WithProjectExpand<ResolveProject<S>, E, S>>>;
|
|
353
|
+
getById<E extends readonly ProjectExpandPath[] = never[]>(id: string, options?: {
|
|
354
|
+
expand?: E;
|
|
355
|
+
}): Promise<SingleResult<WithProjectExpand<ResolveProject<S>, E, S>>>;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
type ClientListParams = {
|
|
359
|
+
search?: string;
|
|
360
|
+
industry?: string;
|
|
361
|
+
country?: string;
|
|
362
|
+
page?: number;
|
|
363
|
+
pageSize?: number;
|
|
364
|
+
expand?: readonly ClientExpandPath[];
|
|
365
|
+
};
|
|
366
|
+
declare class ClientsAccessor<S extends ScopeDeclaration> {
|
|
367
|
+
private readonly transport;
|
|
368
|
+
constructor(transport: NucleusTransport);
|
|
369
|
+
list<E extends readonly ClientExpandPath[] = never[]>(params?: ClientListParams & {
|
|
370
|
+
expand?: E;
|
|
371
|
+
}): Promise<PaginatedResult<WithClientExpand<ResolveClient<S>, E, S>>>;
|
|
372
|
+
getById<E extends readonly ClientExpandPath[] = never[]>(id: string, options?: {
|
|
373
|
+
expand?: E;
|
|
374
|
+
}): Promise<SingleResult<WithClientExpand<ResolveClient<S>, E, S>>>;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
type PartnerListParams = {
|
|
378
|
+
search?: string;
|
|
379
|
+
page?: number;
|
|
380
|
+
pageSize?: number;
|
|
381
|
+
expand?: readonly PartnerExpandPath[];
|
|
382
|
+
};
|
|
383
|
+
declare class PartnersAccessor<S extends ScopeDeclaration> {
|
|
384
|
+
private readonly transport;
|
|
385
|
+
constructor(transport: NucleusTransport);
|
|
386
|
+
list<E extends readonly PartnerExpandPath[] = never[]>(params?: PartnerListParams & {
|
|
387
|
+
expand?: E;
|
|
388
|
+
}): Promise<PaginatedResult<WithPartnerExpand<ResolvePartner<S>, E, S>>>;
|
|
389
|
+
getById<E extends readonly PartnerExpandPath[] = never[]>(id: string, options?: {
|
|
390
|
+
expand?: E;
|
|
391
|
+
}): Promise<SingleResult<WithPartnerExpand<ResolvePartner<S>, E, S>>>;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
type DepartmentListParams = {
|
|
395
|
+
search?: string;
|
|
396
|
+
page?: number;
|
|
397
|
+
pageSize?: number;
|
|
398
|
+
};
|
|
399
|
+
declare class DepartmentsAccessor<S extends ScopeDeclaration> {
|
|
400
|
+
private readonly transport;
|
|
401
|
+
constructor(transport: NucleusTransport);
|
|
402
|
+
list(params?: DepartmentListParams): Promise<PaginatedResult<ResolveDepartment<S>>>;
|
|
403
|
+
getById(id: string): Promise<SingleResult<ResolveDepartment<S>>>;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
type ProjectTypeListParams = {
|
|
407
|
+
page?: number;
|
|
408
|
+
pageSize?: number;
|
|
409
|
+
};
|
|
410
|
+
declare class ProjectTypesAccessor<S extends ScopeDeclaration> {
|
|
411
|
+
private readonly transport;
|
|
412
|
+
constructor(transport: NucleusTransport);
|
|
413
|
+
list(params?: ProjectTypeListParams): Promise<PaginatedResult<ResolveProjectType<S>>>;
|
|
414
|
+
getById(id: string): Promise<SingleResult<ResolveProjectType<S>>>;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
type CurrencyListParams = {
|
|
418
|
+
page?: number;
|
|
419
|
+
pageSize?: number;
|
|
420
|
+
};
|
|
421
|
+
declare class CurrenciesAccessor<S extends ScopeDeclaration> {
|
|
422
|
+
private readonly transport;
|
|
423
|
+
constructor(transport: NucleusTransport);
|
|
424
|
+
list(params?: CurrencyListParams): Promise<PaginatedResult<ResolveCurrency<S>>>;
|
|
425
|
+
getByCode(code: string): Promise<SingleResult<ResolveCurrency<S>>>;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
type GenericRateListParams = {
|
|
429
|
+
department?: string;
|
|
430
|
+
page?: number;
|
|
431
|
+
pageSize?: number;
|
|
432
|
+
};
|
|
433
|
+
declare class GenericRatesAccessor<S extends ScopeDeclaration> {
|
|
434
|
+
private readonly transport;
|
|
435
|
+
constructor(transport: NucleusTransport);
|
|
436
|
+
list(params?: GenericRateListParams): Promise<PaginatedResult<ResolveGenericRate<S>>>;
|
|
437
|
+
getById(id: string): Promise<SingleResult<ResolveGenericRate<S>>>;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* AppsAccessor — wraps the self-service app info endpoint (§3.8, §6).
|
|
442
|
+
* Calls GET /api/v1/platform/apps/me with the app token.
|
|
443
|
+
* This is the only platform endpoint accessible via app token.
|
|
444
|
+
*/
|
|
445
|
+
|
|
446
|
+
declare class AppsAccessor {
|
|
447
|
+
private readonly transport;
|
|
448
|
+
constructor(transport: NucleusTransport);
|
|
449
|
+
me(): Promise<SingleResult<AppInfo>>;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
type FileVisibility = 'public' | 'private';
|
|
453
|
+
type FileRecord = {
|
|
454
|
+
id: string;
|
|
455
|
+
key: string;
|
|
456
|
+
bucket: string;
|
|
457
|
+
filename: string | null;
|
|
458
|
+
mimeType: string;
|
|
459
|
+
sizeBytes: number;
|
|
460
|
+
allowedUsers: string[];
|
|
461
|
+
metadata: Record<string, unknown>;
|
|
462
|
+
createdAt: string;
|
|
463
|
+
updatedAt: string;
|
|
464
|
+
};
|
|
465
|
+
type FileUrlResult = {
|
|
466
|
+
url: string;
|
|
467
|
+
};
|
|
468
|
+
type UploadParams = {
|
|
469
|
+
/** App-provided path-style key, e.g. 'users/123/avatar' or 'contracts/2026/q1.pdf'. */
|
|
470
|
+
key: string;
|
|
471
|
+
/** File bytes. */
|
|
472
|
+
file: Buffer;
|
|
473
|
+
mimeType: string;
|
|
474
|
+
visibility: FileVisibility;
|
|
475
|
+
/** Empty or omit → app-wide access. Non-empty restricts to these employee IDs. */
|
|
476
|
+
allowedUsers?: string[];
|
|
477
|
+
/** Arbitrary JSON stored alongside the file record. */
|
|
478
|
+
metadata?: Record<string, unknown>;
|
|
479
|
+
/** Optional content-disposition filename. Derived from key's last segment if omitted. */
|
|
480
|
+
filename?: string;
|
|
481
|
+
};
|
|
482
|
+
type GetUrlOptions = {
|
|
483
|
+
/**
|
|
484
|
+
* Nucleus user access token (from the client SDK's getSession().accessToken).
|
|
485
|
+
* Required when the file has allowedUsers — verifies the requesting user is permitted.
|
|
486
|
+
* Omit for app-wide files.
|
|
487
|
+
*/
|
|
488
|
+
asUser?: string;
|
|
489
|
+
};
|
|
490
|
+
type ListParams = {
|
|
491
|
+
/** Filter to files under this path prefix, e.g. 'users/123/'. */
|
|
492
|
+
prefix?: string;
|
|
493
|
+
page?: number;
|
|
494
|
+
pageSize?: number;
|
|
495
|
+
};
|
|
496
|
+
declare class FilesAccessor {
|
|
497
|
+
private readonly transport;
|
|
498
|
+
constructor(transport: NucleusTransport);
|
|
499
|
+
/**
|
|
500
|
+
* Upload a file. Upsert semantics: re-uploading the same key overwrites the
|
|
501
|
+
* existing R2 object and updates the File record — no duplicate, no error.
|
|
502
|
+
*/
|
|
503
|
+
upload(params: UploadParams): Promise<SingleResult<FileRecord> | ErrorResult>;
|
|
504
|
+
/**
|
|
505
|
+
* Resolve a usable URL for a file.
|
|
506
|
+
* - Public files → deterministic CDN URL
|
|
507
|
+
* - Private app-wide files → fresh pre-signed URL (expires in R2_SIGNED_URL_TTL seconds)
|
|
508
|
+
* - Private user-scoped files → supply asUser; 403 if user is not in allowedUsers
|
|
509
|
+
*/
|
|
510
|
+
getUrl(key: string, options?: GetUrlOptions): Promise<SingleResult<FileUrlResult> | ErrorResult>;
|
|
511
|
+
/** Soft-delete. Resolution of the key returns 404 thereafter. */
|
|
512
|
+
delete(key: string): Promise<SingleResult<null> | ErrorResult>;
|
|
513
|
+
/** List this app's files. Optionally filter by path prefix. */
|
|
514
|
+
list(params?: ListParams): Promise<PaginatedResult<FileRecord>>;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
type NucleusClientConfig<S extends ScopeDeclaration> = {
|
|
518
|
+
/** App token — `el_live_...` or `el_test_...`. Store in an environment variable, never commit. */
|
|
519
|
+
token: string;
|
|
520
|
+
/** Base URL of the Nucleus API. Defaults to the production platform URL. */
|
|
521
|
+
baseUrl?: string;
|
|
522
|
+
/**
|
|
523
|
+
* Declared scopes — drives the return types of every resource accessor.
|
|
524
|
+
* Declare exactly the buckets your app token is approved for.
|
|
525
|
+
* Declaring a bucket the token lacks causes the API to return filtered data;
|
|
526
|
+
* it does not cause a runtime error during client construction.
|
|
527
|
+
*/
|
|
528
|
+
scopes: S;
|
|
529
|
+
};
|
|
530
|
+
/**
|
|
531
|
+
* NucleusClient — entry point for the Nucleus server SDK.
|
|
532
|
+
*
|
|
533
|
+
* @example
|
|
534
|
+
* ```typescript
|
|
535
|
+
* import { NucleusClient } from '@typeb-digital/nucleus-sdk';
|
|
536
|
+
*
|
|
537
|
+
* export const nucleus = new NucleusClient({
|
|
538
|
+
* token: process.env.NUCLEUS_TOKEN!,
|
|
539
|
+
* scopes: {
|
|
540
|
+
* employees: ['identity', 'employment'],
|
|
541
|
+
* projects: ['core'],
|
|
542
|
+
* clients: ['identity'],
|
|
543
|
+
* },
|
|
544
|
+
* });
|
|
545
|
+
* ```
|
|
546
|
+
*
|
|
547
|
+
* The `scopes` object is the heart of the type system — it is declared once at
|
|
548
|
+
* instantiation and drives the return type of every method on the client.
|
|
549
|
+
* TypeScript infers it automatically; no explicit type parameters needed.
|
|
550
|
+
*/
|
|
551
|
+
declare class NucleusClient<const S extends ScopeDeclaration> {
|
|
552
|
+
readonly employees: EmployeesAccessor<S>;
|
|
553
|
+
readonly projects: ProjectsAccessor<S>;
|
|
554
|
+
readonly clients: ClientsAccessor<S>;
|
|
555
|
+
readonly partners: PartnersAccessor<S>;
|
|
556
|
+
readonly departments: DepartmentsAccessor<S>;
|
|
557
|
+
readonly projectTypes: ProjectTypesAccessor<S>;
|
|
558
|
+
readonly currencies: CurrenciesAccessor<S>;
|
|
559
|
+
readonly genericRates: GenericRatesAccessor<S>;
|
|
560
|
+
readonly apps: AppsAccessor;
|
|
561
|
+
readonly files: FilesAccessor;
|
|
562
|
+
constructor(config: NucleusClientConfig<S>);
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
export { FilesAccessor, NucleusClient, isError };
|
|
566
|
+
export type { AppInfo, AppScopeInfo, ClientContact, ClientExpandPath, ClientFinancials, ClientIdentity, ClientNotes, CurrencyCore, DepartmentCore, EmployeeCompensation, EmployeeCompensationHistory, EmployeeContact, EmployeeEmployment, EmployeeExpandPath, EmployeeIdentity, EmployeeSensitive, ErrorCode, ErrorResult, ListParams as FileListParams, FileRecord, FileUrlResult, FileVisibility, GenericRateCore, GenericRateFinancials, GetUrlOptions, ListMeta, ListResult, NucleusClientConfig, PaginatedResult, PartnerContact, PartnerExpandPath, PartnerIdentity, PartnerNotes, ProjectCore, ProjectExpandPath, ProjectFinancials, ProjectIntegrations, ProjectMembership, ProjectTeam, ProjectTypeCore, ResolveClient, ResolveCurrency, ResolveDepartment, ResolveEmployee, ResolveGenericRate, ResolvePartner, ResolveProject, ResolveProjectType, ScopeDeclaration, SingleResult, SuccessResult, UploadParams, WithClientExpand, WithEmployeeExpand, WithPartnerExpand, WithProjectExpand };
|
|
567
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sources":["../../src/types.ts","../../src/transport.ts","../../src/resources/employees.ts","../../src/resources/projects.ts","../../src/resources/clients.ts","../../src/resources/partners.ts","../../src/resources/departments.ts","../../src/resources/project-types.ts","../../src/resources/currencies.ts","../../src/resources/generic-rates.ts","../../src/apps.ts","../../src/resources/files.ts","../../src/client.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,mBAAmB;AACxB,KAAK,OAAO,GAAG,MAAM;AACrB,KAAK,SAAS;AACd,KAAK,WAAW;AAChB;AACA,cAAc,SAAS;AACvB;AACA;AACA;AACA,KAAK,aAAa;AAClB;AACA;AACA,KAAK,QAAQ;AACb;AACA;AACA;AACA;AACA;AACA,KAAK,UAAU;AACf;AACA,UAAU,QAAQ;AAClB;AACA,KAAK,YAAY,MAAM,aAAa,MAAM,WAAW;AACrD,KAAK,eAAe,MAAM,UAAU,MAAM,WAAW;AACrD,iBAAiB,OAAO,YAAY,aAAa,MAAM,UAAU,MAAM,WAAW,aAAa,WAAW;AAC1G,KAAK,gBAAgB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,eAAe;AACpB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,kBAAkB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,iBAAiB;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,MAAM;AACxB;AACA,KAAK,oBAAoB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,2BAA2B;AAChC,yBAAyB,KAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,iBAAiB;AACtB,cAAc,gBAAgB;AAC9B,aAAa,eAAe;AAC5B,gBAAgB,kBAAkB;AAClC,eAAe,iBAAiB;AAChC,kBAAkB,oBAAoB;AACtC,0BAA0B,2BAA2B;AACrD;AACA,KAAK,iBAAiB;AACtB;AACA;AACA;AACA,KAAK,WAAW;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,WAAW;AAChB;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA,KAAK,iBAAiB,GAAG,MAAM;AAC/B,KAAK,mBAAmB;AACxB;AACA;AACA;AACA;AACA;AACA,KAAK,gBAAgB;AACrB,UAAU,WAAW;AACrB,UAAU,WAAW;AACrB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","names":[]}
|