@timeback/core 0.2.1-beta.20260314151810 → 0.2.1-beta.20260315040428
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/{chunk-y0b5t60e.js → chunk-87h1b7ca.js} +26 -3
- package/dist/{chunk-k030r9e8.js → chunk-qt3x4rwv.js} +14 -0
- package/dist/client.d.ts +13 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/errors.js +1 -1
- package/dist/index.js +242 -29
- package/dist/utils.js +2 -2
- package/package.json +2 -1
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
validateNonEmptyString,
|
|
8
8
|
validateUuid,
|
|
9
9
|
validateWithSchema
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-qt3x4rwv.js";
|
|
11
11
|
|
|
12
12
|
// ../edubridge/src/utils.ts
|
|
13
13
|
var log = createScopedLogger("edubridge");
|
|
@@ -793,7 +793,9 @@ var EduBridgeEnrollment = z7.object({
|
|
|
793
793
|
school: z7.object({
|
|
794
794
|
id: z7.string(),
|
|
795
795
|
name: z7.string()
|
|
796
|
-
})
|
|
796
|
+
}),
|
|
797
|
+
testOutSupported: z7.boolean(),
|
|
798
|
+
testOutEligible: z7.boolean()
|
|
797
799
|
});
|
|
798
800
|
var SubjectMetrics = z7.object({
|
|
799
801
|
activityMetrics: z7.object({
|
|
@@ -1591,6 +1593,10 @@ var PowerPathPlacementQueryParams = z10.object({
|
|
|
1591
1593
|
student: NonEmptyString,
|
|
1592
1594
|
subject: TimebackSubject
|
|
1593
1595
|
});
|
|
1596
|
+
var PowerPathMakeExternalStudentTestOutAssignmentInput = z10.object({
|
|
1597
|
+
oneRosterSourcedId: NonEmptyString,
|
|
1598
|
+
subject: NonEmptyString
|
|
1599
|
+
});
|
|
1594
1600
|
var PowerPathRenderConfigUpsertInput = z10.object({
|
|
1595
1601
|
courseIds: z10.array(NonEmptyString).min(1),
|
|
1596
1602
|
rendererId: NonEmptyString,
|
|
@@ -1863,6 +1869,23 @@ var QtiLessonFeedbackInput = z11.object({
|
|
|
1863
1869
|
lessonId: NonEmptyString,
|
|
1864
1870
|
humanApproved: z11.boolean().optional()
|
|
1865
1871
|
}).strict();
|
|
1872
|
+
// ../../types/src/zod/reporting.ts
|
|
1873
|
+
import { z as z12 } from "zod/v4";
|
|
1874
|
+
var ReportingAuthMode = z12.enum(["creator_only", "same_org", "all_orgs"]);
|
|
1875
|
+
var ReportingSavedQueryId = z12.string().uuid();
|
|
1876
|
+
var ReportingUserEmail = z12.email();
|
|
1877
|
+
var ReportingQueryInput = z12.object({
|
|
1878
|
+
sql: NonEmptyString
|
|
1879
|
+
});
|
|
1880
|
+
var PersistReportingQueryInput = z12.object({
|
|
1881
|
+
endpointName: NonEmptyString,
|
|
1882
|
+
sql: NonEmptyString,
|
|
1883
|
+
authMode: ReportingAuthMode,
|
|
1884
|
+
description: NonEmptyString.optional()
|
|
1885
|
+
});
|
|
1886
|
+
var RemoveReportingQueryInput = z12.object({
|
|
1887
|
+
endpointId: ReportingSavedQueryId
|
|
1888
|
+
});
|
|
1866
1889
|
// ../edubridge/src/resources/analytics.ts
|
|
1867
1890
|
class AnalyticsResource {
|
|
1868
1891
|
transport;
|
|
@@ -2127,4 +2150,4 @@ function createEdubridgeClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
|
2127
2150
|
|
|
2128
2151
|
// ../edubridge/src/client.ts
|
|
2129
2152
|
var EdubridgeClient = createEdubridgeClient();
|
|
2130
|
-
export { ActivityCompletedInput, TimeSpentInput, CaliperEnvelopeInput, CaliperSendEventsInput, CaliperListEventsParams, QuestionSeenInput, QuestionAnsweredInput, QuestionGradedInput, WebhookCreateInput, WebhookUpdateInput, WebhookFilterCreateInput, WebhookFilterUpdateInput, CasePackageInput, ClrCredentialInput, OneRosterUserCreateInput, OneRosterCourseCreateInput, OneRosterClassCreateInput, OneRosterEnrollmentCreateInput, OneRosterCategoryCreateInput, OneRosterLineItemCreateInput, OneRosterResultCreateInput, OneRosterScoreScaleCreateInput, OneRosterAssessmentLineItemCreateInput, OneRosterAssessmentResultCreateInput, OneRosterOrgCreateInput, OneRosterSchoolCreateInput, OneRosterAcademicSessionCreateInput, OneRosterComponentResourceCreateInput, OneRosterCourseComponentCreateInput, OneRosterEnrollInput, OneRosterAgentInput, OneRosterCredentialInput, OneRosterDemographicsCreateInput, OneRosterResourceCreateInput, OneRosterCourseStructureInput, OneRosterBulkResultsInput, PowerPathCreateExternalPlacementTestInput, PowerPathCreateExternalTestOutInput, PowerPathCreateInternalTestInput, PowerPathCreateNewAttemptInput, PowerPathFinalStudentAssessmentResponseInput, PowerPathLessonPlansCreateInput, PowerPathLessonPlanOperationsInput, PowerPathLessonPlanUpdateStudentItemResponseInput, PowerPathMakeExternalTestAssignmentInput, PowerPathPlacementResetUserPlacementInput, PowerPathResetAttemptInput, PowerPathScreeningResetSessionInput, PowerPathScreeningAssignTestInput, PowerPathTestAssignmentsCreateInput, PowerPathTestAssignmentsUpdateInput, PowerPathTestAssignmentsBulkInput, PowerPathTestAssignmentsImportInput, PowerPathTestAssignmentsListParams, PowerPathTestAssignmentsAdminParams, PowerPathUpdateStudentQuestionResponseInput, PowerPathGetAssessmentProgressParams, PowerPathGetNextQuestionParams, PowerPathGetAttemptsParams, PowerPathTestOutParams, PowerPathImportExternalTestAssignmentResultsParams, PowerPathPlacementQueryParams, PowerPathRenderConfigUpsertInput, PowerPathSyllabusQueryParams, QtiAssessmentItemXmlCreateInput, QtiAssessmentItemJsonCreateInput, QtiAssessmentItemCreateInput, QtiAssessmentItemUpdateInput, QtiAssessmentItemProcessResponseInput, QtiAssessmentItemRef, QtiAssessmentSection, QtiTestPart, QtiReorderItemsInput, QtiAssessmentTestMetadataUpdateInput, QtiAssessmentTestCreateInput, QtiAssessmentTestUpdateInput, QtiStimulusCreateInput, QtiStimulusUpdateInput, QtiValidateInput, QtiValidateBatchInput, QtiLessonFeedbackInput, aggregateActivityMetrics, EdubridgeClient };
|
|
2153
|
+
export { ActivityCompletedInput, TimeSpentInput, CaliperEnvelopeInput, CaliperSendEventsInput, CaliperListEventsParams, QuestionSeenInput, QuestionAnsweredInput, QuestionGradedInput, WebhookCreateInput, WebhookUpdateInput, WebhookFilterCreateInput, WebhookFilterUpdateInput, CasePackageInput, ClrCredentialInput, OneRosterUserCreateInput, OneRosterCourseCreateInput, OneRosterClassCreateInput, OneRosterEnrollmentCreateInput, OneRosterCategoryCreateInput, OneRosterLineItemCreateInput, OneRosterResultCreateInput, OneRosterScoreScaleCreateInput, OneRosterAssessmentLineItemCreateInput, OneRosterAssessmentResultCreateInput, OneRosterOrgCreateInput, OneRosterSchoolCreateInput, OneRosterAcademicSessionCreateInput, OneRosterComponentResourceCreateInput, OneRosterCourseComponentCreateInput, OneRosterEnrollInput, OneRosterAgentInput, OneRosterCredentialInput, OneRosterDemographicsCreateInput, OneRosterResourceCreateInput, OneRosterCourseStructureInput, OneRosterBulkResultsInput, PowerPathCreateExternalPlacementTestInput, PowerPathCreateExternalTestOutInput, PowerPathCreateInternalTestInput, PowerPathCreateNewAttemptInput, PowerPathFinalStudentAssessmentResponseInput, PowerPathLessonPlansCreateInput, PowerPathLessonPlanOperationsInput, PowerPathLessonPlanUpdateStudentItemResponseInput, PowerPathMakeExternalTestAssignmentInput, PowerPathPlacementResetUserPlacementInput, PowerPathResetAttemptInput, PowerPathScreeningResetSessionInput, PowerPathScreeningAssignTestInput, PowerPathTestAssignmentsCreateInput, PowerPathTestAssignmentsUpdateInput, PowerPathTestAssignmentsBulkInput, PowerPathTestAssignmentsImportInput, PowerPathTestAssignmentsListParams, PowerPathTestAssignmentsAdminParams, PowerPathUpdateStudentQuestionResponseInput, PowerPathGetAssessmentProgressParams, PowerPathGetNextQuestionParams, PowerPathGetAttemptsParams, PowerPathTestOutParams, PowerPathImportExternalTestAssignmentResultsParams, PowerPathPlacementQueryParams, PowerPathMakeExternalStudentTestOutAssignmentInput, PowerPathRenderConfigUpsertInput, PowerPathSyllabusQueryParams, QtiAssessmentItemXmlCreateInput, QtiAssessmentItemJsonCreateInput, QtiAssessmentItemCreateInput, QtiAssessmentItemUpdateInput, QtiAssessmentItemProcessResponseInput, QtiAssessmentItemRef, QtiAssessmentSection, QtiTestPart, QtiReorderItemsInput, QtiAssessmentTestMetadataUpdateInput, QtiAssessmentTestCreateInput, QtiAssessmentTestUpdateInput, QtiStimulusCreateInput, QtiStimulusUpdateInput, QtiValidateInput, QtiValidateBatchInput, QtiLessonFeedbackInput, ReportingUserEmail, ReportingQueryInput, PersistReportingQueryInput, aggregateActivityMetrics, EdubridgeClient };
|
|
@@ -644,6 +644,13 @@ var BEYONDAI_PATHS = {
|
|
|
644
644
|
webhookFilterUpdate: "/webhook-filters/{id}",
|
|
645
645
|
webhookFilterDelete: "/webhook-filters/{id}",
|
|
646
646
|
webhookFiltersByWebhook: "/webhook-filters/webhook/{webhookId}"
|
|
647
|
+
},
|
|
648
|
+
reporting: {
|
|
649
|
+
mcp: "/lambda/mcp/reporting",
|
|
650
|
+
savedQueryExecute: "/lambda/reporting/saved-queries/{id}",
|
|
651
|
+
adminGroupCheck: "/lambda/mcp/admin/users/{email}/group",
|
|
652
|
+
adminGroupAdd: "/lambda/mcp/admin/users/{email}/group",
|
|
653
|
+
adminGroupRemove: "/lambda/mcp/admin/users/{email}/group"
|
|
647
654
|
}
|
|
648
655
|
};
|
|
649
656
|
var LEARNWITHAI_PATHS = {
|
|
@@ -660,6 +667,7 @@ var LEARNWITHAI_PATHS = {
|
|
|
660
667
|
resources: "/resources/1.0"
|
|
661
668
|
},
|
|
662
669
|
webhooks: null,
|
|
670
|
+
reporting: null,
|
|
663
671
|
edubridge: null,
|
|
664
672
|
powerpath: null,
|
|
665
673
|
clr: null,
|
|
@@ -688,6 +696,7 @@ function resolvePathProfiles(pathProfile, customPaths) {
|
|
|
688
696
|
caliper: customPaths?.caliper ?? basePaths.caliper,
|
|
689
697
|
oneroster: customPaths?.oneroster ?? basePaths.oneroster,
|
|
690
698
|
webhooks: customPaths?.webhooks ?? basePaths.webhooks,
|
|
699
|
+
reporting: customPaths?.reporting ?? basePaths.reporting,
|
|
691
700
|
edubridge: customPaths?.edubridge ?? basePaths.edubridge,
|
|
692
701
|
powerpath: customPaths?.powerpath ?? basePaths.powerpath,
|
|
693
702
|
clr: customPaths?.clr ?? basePaths.clr,
|
|
@@ -749,6 +758,10 @@ class TimebackProvider {
|
|
|
749
758
|
baseUrl: platformEndpoints.caliper[env],
|
|
750
759
|
authUrl: this.authUrl
|
|
751
760
|
},
|
|
761
|
+
reporting: {
|
|
762
|
+
baseUrl: platformEndpoints.api[env],
|
|
763
|
+
authUrl: this.authUrl
|
|
764
|
+
},
|
|
752
765
|
qti: {
|
|
753
766
|
baseUrl: platformEndpoints.qti[env],
|
|
754
767
|
authUrl: this.authUrl
|
|
@@ -766,6 +779,7 @@ class TimebackProvider {
|
|
|
766
779
|
case: { baseUrl: config.baseUrl, authUrl: this.authUrl },
|
|
767
780
|
caliper: { baseUrl: config.baseUrl, authUrl: this.authUrl },
|
|
768
781
|
webhooks: { baseUrl: config.baseUrl, authUrl: this.authUrl },
|
|
782
|
+
reporting: { baseUrl: config.baseUrl, authUrl: this.authUrl },
|
|
769
783
|
qti: { baseUrl: config.baseUrl, authUrl: this.authUrl }
|
|
770
784
|
};
|
|
771
785
|
} else if (isServicesConfig(config)) {
|
package/dist/client.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { AuthCheckResult, TimebackProvider } from '@timeback/internal-clien
|
|
|
6
6
|
import type { OneRosterClientInstance } from '@timeback/oneroster';
|
|
7
7
|
import type { PowerPathClientInstance } from '@timeback/powerpath';
|
|
8
8
|
import type { QtiClientInstance } from '@timeback/qti';
|
|
9
|
+
import type { ReportingClientInstance } from '@timeback/reporting';
|
|
9
10
|
import type { WebhooksClientInstance } from '@timeback/webhooks';
|
|
10
11
|
import type { TimebackClientConfig } from './types/index';
|
|
11
12
|
/**
|
|
@@ -20,6 +21,7 @@ import type { TimebackClientConfig } from './types/index';
|
|
|
20
21
|
* - **OneRoster**: Rostering and gradebook data
|
|
21
22
|
* - **Edubridge**: Simplified enrollments and analytics
|
|
22
23
|
* - **Caliper**: Learning analytics events
|
|
24
|
+
* - **Reporting**: Ad-hoc queries and saved reporting endpoints
|
|
23
25
|
* - **QTI**: Assessment content management
|
|
24
26
|
* - **PowerPath**: Placement tests, lesson plans, and assessments
|
|
25
27
|
* - **CLR**: Comprehensive Learner Record credentials
|
|
@@ -83,6 +85,7 @@ export declare class TimebackClient {
|
|
|
83
85
|
private _powerpath?;
|
|
84
86
|
private _clr?;
|
|
85
87
|
private _case?;
|
|
88
|
+
private _reporting?;
|
|
86
89
|
private _webhooks?;
|
|
87
90
|
/**
|
|
88
91
|
* Creates a new Timeback client.
|
|
@@ -162,6 +165,16 @@ export declare class TimebackClient {
|
|
|
162
165
|
* @throws {Error} If client has been closed or service not configured
|
|
163
166
|
*/
|
|
164
167
|
get case(): CaseClientInstance;
|
|
168
|
+
/**
|
|
169
|
+
* Reporting API client for reporting queries and saved reporting endpoints.
|
|
170
|
+
*
|
|
171
|
+
* Lazily initialized on first access. Shares OAuth tokens with other
|
|
172
|
+
* sub-clients through the provider.
|
|
173
|
+
*
|
|
174
|
+
* @returns The Reporting client instance
|
|
175
|
+
* @throws {Error} If client has been closed or service not configured
|
|
176
|
+
*/
|
|
177
|
+
get reporting(): ReportingClientInstance;
|
|
165
178
|
/**
|
|
166
179
|
* Webhooks API client for managing webhook registrations and filters.
|
|
167
180
|
*
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AACxF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAEzD;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,OAAO,CAAQ;IAEvB,OAAO,CAAC,UAAU,CAAC,CAAyB;IAC5C,OAAO,CAAC,UAAU,CAAC,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,CAAuB;IACxC,OAAO,CAAC,IAAI,CAAC,CAAmB;IAChC,OAAO,CAAC,UAAU,CAAC,CAAyB;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAmB;IAChC,OAAO,CAAC,KAAK,CAAC,CAAoB;IAClC,OAAO,CAAC,UAAU,CAAC,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAwB;IAE1C;;;;;;OAMG;IACH,YAAY,MAAM,CAAC,EAAE,oBAAoB,EAUxC;IAED;;;;;;;;OAQG;IACH,IAAI,SAAS,IAAI,uBAAuB,CASvC;IAED;;;;;;;;OAQG;IACH,IAAI,SAAS,IAAI,uBAAuB,CASvC;IAED;;;;;;;;OAQG;IACH,IAAI,OAAO,IAAI,qBAAqB,CASnC;IAED;;;;;;;;OAQG;IACH,IAAI,GAAG,IAAI,iBAAiB,CAS3B;IAED;;;;;;;;OAQG;IACH,IAAI,SAAS,IAAI,uBAAuB,CASvC;IAED;;;;;;;;OAQG;IACH,IAAI,GAAG,IAAI,iBAAiB,CAS3B;IAED;;;;;;;;OAQG;IACH,IAAI,IAAI,IAAI,kBAAkB,CAS7B;IAED;;;;;;;;OAQG;IACH,IAAI,SAAS,IAAI,uBAAuB,CASvC;IAED;;;;;;;;OAQG;IACH,IAAI,QAAQ,IAAI,sBAAsB,CASrC;IAMD;;;;;;;;OAQG;IACH,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC,CAGpC;IAED;;;;;;;OAOG;IACH,KAAK,IAAI,IAAI,CAgBZ;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,WAAW,IAAI,gBAAgB,CAE9B;IAED;;OAEG;IACH,OAAO,CAAC,UAAU;IAMlB;;;OAGG;IACH,OAAO,CAAC,aAAa;CAgBrB"}
|
package/dist/errors.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
OneRosterSchoolCreateInput,
|
|
29
29
|
OneRosterScoreScaleCreateInput,
|
|
30
30
|
OneRosterUserCreateInput,
|
|
31
|
+
PersistReportingQueryInput,
|
|
31
32
|
PowerPathCreateExternalPlacementTestInput,
|
|
32
33
|
PowerPathCreateExternalTestOutInput,
|
|
33
34
|
PowerPathCreateInternalTestInput,
|
|
@@ -40,6 +41,7 @@ import {
|
|
|
40
41
|
PowerPathLessonPlanOperationsInput,
|
|
41
42
|
PowerPathLessonPlanUpdateStudentItemResponseInput,
|
|
42
43
|
PowerPathLessonPlansCreateInput,
|
|
44
|
+
PowerPathMakeExternalStudentTestOutAssignmentInput,
|
|
43
45
|
PowerPathMakeExternalTestAssignmentInput,
|
|
44
46
|
PowerPathPlacementQueryParams,
|
|
45
47
|
PowerPathPlacementResetUserPlacementInput,
|
|
@@ -76,12 +78,14 @@ import {
|
|
|
76
78
|
QuestionAnsweredInput,
|
|
77
79
|
QuestionGradedInput,
|
|
78
80
|
QuestionSeenInput,
|
|
81
|
+
ReportingQueryInput,
|
|
82
|
+
ReportingUserEmail,
|
|
79
83
|
TimeSpentInput,
|
|
80
84
|
WebhookCreateInput,
|
|
81
85
|
WebhookFilterCreateInput,
|
|
82
86
|
WebhookFilterUpdateInput,
|
|
83
87
|
WebhookUpdateInput
|
|
84
|
-
} from "./chunk-
|
|
88
|
+
} from "./chunk-87h1b7ca.js";
|
|
85
89
|
import {
|
|
86
90
|
ApiError,
|
|
87
91
|
BaseTransport,
|
|
@@ -107,7 +111,7 @@ import {
|
|
|
107
111
|
validateUuid,
|
|
108
112
|
validateWithSchema,
|
|
109
113
|
whereToFilter
|
|
110
|
-
} from "./chunk-
|
|
114
|
+
} from "./chunk-qt3x4rwv.js";
|
|
111
115
|
import {
|
|
112
116
|
CALIPER_DATA_VERSION,
|
|
113
117
|
CALIPER_ENV_VARS,
|
|
@@ -3000,6 +3004,22 @@ class TestAssignmentsResource {
|
|
|
3000
3004
|
});
|
|
3001
3005
|
}
|
|
3002
3006
|
}
|
|
3007
|
+
// ../powerpath/src/resources/test-out.ts
|
|
3008
|
+
class TestOutResource {
|
|
3009
|
+
transport;
|
|
3010
|
+
constructor(transport) {
|
|
3011
|
+
this.transport = transport;
|
|
3012
|
+
}
|
|
3013
|
+
getEligibility(studentId, subject) {
|
|
3014
|
+
validateNonEmptyString(studentId, "studentId");
|
|
3015
|
+
validateNonEmptyString(subject, "subject");
|
|
3016
|
+
return this.transport.request(`${this.transport.paths.base}/test-out/getTestOutEligibility/${encodeURIComponent(studentId)}/${encodeURIComponent(subject)}`);
|
|
3017
|
+
}
|
|
3018
|
+
createAssignment(input) {
|
|
3019
|
+
validateWithSchema(PowerPathMakeExternalStudentTestOutAssignmentInput, input, "make external student test out assignment");
|
|
3020
|
+
return this.transport.request(`${this.transport.paths.base}/test-out/makeExternalStudentTestOutAssignment`, { method: "POST", body: input });
|
|
3021
|
+
}
|
|
3022
|
+
}
|
|
3003
3023
|
// ../powerpath/src/factory.ts
|
|
3004
3024
|
function createPowerPathClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
3005
3025
|
return class PowerPathClient {
|
|
@@ -3012,6 +3032,7 @@ function createPowerPathClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
|
3012
3032
|
screening;
|
|
3013
3033
|
syllabus;
|
|
3014
3034
|
testAssignments;
|
|
3035
|
+
testOut;
|
|
3015
3036
|
constructor(config = {}) {
|
|
3016
3037
|
const resolved = resolveToProvider6(config, registry);
|
|
3017
3038
|
if (resolved.mode === "transport") {
|
|
@@ -3044,6 +3065,7 @@ function createPowerPathClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
|
3044
3065
|
this.screening = new ScreeningResource(this.transport);
|
|
3045
3066
|
this.syllabus = new SyllabusResource(this.transport);
|
|
3046
3067
|
this.testAssignments = new TestAssignmentsResource(this.transport);
|
|
3068
|
+
this.testOut = new TestOutResource(this.transport);
|
|
3047
3069
|
}
|
|
3048
3070
|
getTransport() {
|
|
3049
3071
|
return this.transport;
|
|
@@ -3623,6 +3645,187 @@ function createQtiClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
|
3623
3645
|
|
|
3624
3646
|
// ../qti/src/client.ts
|
|
3625
3647
|
var QtiClient = createQtiClient();
|
|
3648
|
+
// ../reporting/src/constants.ts
|
|
3649
|
+
var REPORTING_ENV_VARS = {
|
|
3650
|
+
baseUrl: ["TIMEBACK_API_BASE_URL", "TIMEBACK_BASE_URL", "REPORTING_BASE_URL"],
|
|
3651
|
+
authUrl: ["TIMEBACK_API_AUTH_URL", "TIMEBACK_AUTH_URL", "REPORTING_TOKEN_URL"],
|
|
3652
|
+
clientId: ["TIMEBACK_API_CLIENT_ID", "TIMEBACK_CLIENT_ID", "REPORTING_CLIENT_ID"],
|
|
3653
|
+
clientSecret: [
|
|
3654
|
+
"TIMEBACK_API_CLIENT_SECRET",
|
|
3655
|
+
"TIMEBACK_CLIENT_SECRET",
|
|
3656
|
+
"REPORTING_CLIENT_SECRET"
|
|
3657
|
+
]
|
|
3658
|
+
};
|
|
3659
|
+
|
|
3660
|
+
// ../reporting/src/lib/resolve.ts
|
|
3661
|
+
function resolveToProvider8(config, registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
3662
|
+
return resolveToProvider(config, REPORTING_ENV_VARS, registry);
|
|
3663
|
+
}
|
|
3664
|
+
|
|
3665
|
+
// ../reporting/src/utils.ts
|
|
3666
|
+
var log7 = createScopedLogger("reporting");
|
|
3667
|
+
|
|
3668
|
+
// ../reporting/src/lib/transport.ts
|
|
3669
|
+
class Transport7 extends BaseTransport {
|
|
3670
|
+
paths;
|
|
3671
|
+
constructor(config) {
|
|
3672
|
+
super({ config, logger: log7 });
|
|
3673
|
+
this.paths = config.paths;
|
|
3674
|
+
}
|
|
3675
|
+
async callTool(name, args) {
|
|
3676
|
+
const response = await this.request(this.paths.mcp, {
|
|
3677
|
+
method: "POST",
|
|
3678
|
+
body: {
|
|
3679
|
+
jsonrpc: "2.0",
|
|
3680
|
+
id: crypto.randomUUID(),
|
|
3681
|
+
method: "tools/call",
|
|
3682
|
+
params: {
|
|
3683
|
+
name,
|
|
3684
|
+
arguments: args
|
|
3685
|
+
}
|
|
3686
|
+
}
|
|
3687
|
+
});
|
|
3688
|
+
if (response.error) {
|
|
3689
|
+
throw new ApiError(response.error.message, 500, response.error.data ?? response.error);
|
|
3690
|
+
}
|
|
3691
|
+
const rawContent = response.result?.content?.[0]?.text;
|
|
3692
|
+
if (!rawContent) {
|
|
3693
|
+
throw new ApiError("Missing reporting MCP result content", 500, response);
|
|
3694
|
+
}
|
|
3695
|
+
let payload;
|
|
3696
|
+
try {
|
|
3697
|
+
payload = JSON.parse(rawContent);
|
|
3698
|
+
} catch {
|
|
3699
|
+
throw new ApiError("Invalid reporting MCP response payload", 500, {
|
|
3700
|
+
body: rawContent
|
|
3701
|
+
});
|
|
3702
|
+
}
|
|
3703
|
+
const hasToolError = response.result?.isError === true || typeof payload === "object" && payload !== null && "isError" in payload && payload.isError === true;
|
|
3704
|
+
if (hasToolError) {
|
|
3705
|
+
const message = typeof payload === "object" && payload !== null && "error" in payload && typeof payload.error === "string" ? payload.error : `Reporting MCP tool failed: ${name}`;
|
|
3706
|
+
throw new ApiError(message, 500, payload);
|
|
3707
|
+
}
|
|
3708
|
+
return payload;
|
|
3709
|
+
}
|
|
3710
|
+
}
|
|
3711
|
+
|
|
3712
|
+
// ../reporting/src/resources/admin.ts
|
|
3713
|
+
class AdminResource {
|
|
3714
|
+
transport;
|
|
3715
|
+
constructor(transport) {
|
|
3716
|
+
this.transport = transport;
|
|
3717
|
+
}
|
|
3718
|
+
checkGroupMembership(email) {
|
|
3719
|
+
const validEmail = validateWithSchema(ReportingUserEmail, email, "reporting email");
|
|
3720
|
+
log7.debug("Checking reporting group membership", { email: validEmail });
|
|
3721
|
+
const path = this.transport.paths.adminGroupCheck.replace("{email}", encodeURIComponent(validEmail));
|
|
3722
|
+
return this.transport.request(path);
|
|
3723
|
+
}
|
|
3724
|
+
addToGroup(email) {
|
|
3725
|
+
const validEmail = validateWithSchema(ReportingUserEmail, email, "reporting email");
|
|
3726
|
+
log7.debug("Adding user to reporting group", { email: validEmail });
|
|
3727
|
+
const path = this.transport.paths.adminGroupAdd.replace("{email}", encodeURIComponent(validEmail));
|
|
3728
|
+
return this.transport.request(path, { method: "POST" });
|
|
3729
|
+
}
|
|
3730
|
+
removeFromGroup(email) {
|
|
3731
|
+
const validEmail = validateWithSchema(ReportingUserEmail, email, "reporting email");
|
|
3732
|
+
log7.debug("Removing user from reporting group", { email: validEmail });
|
|
3733
|
+
const path = this.transport.paths.adminGroupRemove.replace("{email}", encodeURIComponent(validEmail));
|
|
3734
|
+
return this.transport.request(path, { method: "DELETE" });
|
|
3735
|
+
}
|
|
3736
|
+
}
|
|
3737
|
+
// ../reporting/src/resources/queries.ts
|
|
3738
|
+
class QueriesResource {
|
|
3739
|
+
transport;
|
|
3740
|
+
constructor(transport) {
|
|
3741
|
+
this.transport = transport;
|
|
3742
|
+
}
|
|
3743
|
+
run(sql) {
|
|
3744
|
+
const input = validateWithSchema(ReportingQueryInput, { sql }, "reporting query");
|
|
3745
|
+
log7.debug("Running reporting query");
|
|
3746
|
+
return this.transport.callTool("getData", input);
|
|
3747
|
+
}
|
|
3748
|
+
}
|
|
3749
|
+
// ../reporting/src/resources/saved-queries.ts
|
|
3750
|
+
class SavedQueriesResource {
|
|
3751
|
+
transport;
|
|
3752
|
+
constructor(transport) {
|
|
3753
|
+
this.transport = transport;
|
|
3754
|
+
}
|
|
3755
|
+
execute(id) {
|
|
3756
|
+
validateUuid(id, "savedQueryId");
|
|
3757
|
+
log7.debug("Executing saved reporting query", { id });
|
|
3758
|
+
const path = this.transport.paths.savedQueryExecute.replace("{id}", encodeURIComponent(id));
|
|
3759
|
+
return this.transport.request(path);
|
|
3760
|
+
}
|
|
3761
|
+
create(input) {
|
|
3762
|
+
const payload = validateWithSchema(PersistReportingQueryInput, input, "saved reporting query");
|
|
3763
|
+
log7.debug("Creating saved reporting query", { endpointName: payload.endpointName });
|
|
3764
|
+
return this.transport.callTool("persistQueryToAPI", payload);
|
|
3765
|
+
}
|
|
3766
|
+
list() {
|
|
3767
|
+
log7.debug("Listing saved reporting queries");
|
|
3768
|
+
return this.transport.callTool("listApiEndpoints", {});
|
|
3769
|
+
}
|
|
3770
|
+
remove(id) {
|
|
3771
|
+
validateUuid(id, "savedQueryId");
|
|
3772
|
+
log7.debug("Removing saved reporting query", { id });
|
|
3773
|
+
return this.transport.callTool("removeApiEndpoint", {
|
|
3774
|
+
endpointId: id
|
|
3775
|
+
});
|
|
3776
|
+
}
|
|
3777
|
+
}
|
|
3778
|
+
// ../reporting/src/factory.ts
|
|
3779
|
+
function createReportingClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
3780
|
+
return class ReportingClient {
|
|
3781
|
+
transport;
|
|
3782
|
+
_provider;
|
|
3783
|
+
queries;
|
|
3784
|
+
savedQueries;
|
|
3785
|
+
admin;
|
|
3786
|
+
constructor(config = {}) {
|
|
3787
|
+
const resolved = resolveToProvider8(config, registry);
|
|
3788
|
+
if (resolved.mode === "transport") {
|
|
3789
|
+
this.transport = resolved.transport;
|
|
3790
|
+
log7.info("Client initialized with custom transport");
|
|
3791
|
+
} else {
|
|
3792
|
+
const { provider } = resolved;
|
|
3793
|
+
const { baseUrl, paths } = provider.getEndpointWithPaths("reporting");
|
|
3794
|
+
const tokenProvider = provider.getTokenProvider("reporting");
|
|
3795
|
+
if (!tokenProvider) {
|
|
3796
|
+
throw new Error("Reporting API requires authentication");
|
|
3797
|
+
}
|
|
3798
|
+
this._provider = provider;
|
|
3799
|
+
this.transport = new Transport7({
|
|
3800
|
+
baseUrl,
|
|
3801
|
+
tokenProvider,
|
|
3802
|
+
timeout: provider.timeout,
|
|
3803
|
+
paths
|
|
3804
|
+
});
|
|
3805
|
+
log7.info("Client initialized", {
|
|
3806
|
+
platform: provider.platform,
|
|
3807
|
+
env: provider.env,
|
|
3808
|
+
baseUrl
|
|
3809
|
+
});
|
|
3810
|
+
}
|
|
3811
|
+
this.queries = new QueriesResource(this.transport);
|
|
3812
|
+
this.savedQueries = new SavedQueriesResource(this.transport);
|
|
3813
|
+
this.admin = new AdminResource(this.transport);
|
|
3814
|
+
}
|
|
3815
|
+
getTransport() {
|
|
3816
|
+
return this.transport;
|
|
3817
|
+
}
|
|
3818
|
+
checkAuth() {
|
|
3819
|
+
if (!this._provider) {
|
|
3820
|
+
throw new Error("Cannot check auth: client initialized with custom transport");
|
|
3821
|
+
}
|
|
3822
|
+
return this._provider.checkAuth();
|
|
3823
|
+
}
|
|
3824
|
+
};
|
|
3825
|
+
}
|
|
3826
|
+
|
|
3827
|
+
// ../reporting/src/client.ts
|
|
3828
|
+
var ReportingClient = createReportingClient();
|
|
3626
3829
|
// ../webhooks/src/constants.ts
|
|
3627
3830
|
var WEBHOOKS_ENV_VARS = {
|
|
3628
3831
|
baseUrl: ["TIMEBACK_API_BASE_URL", "TIMEBACK_BASE_URL", "WEBHOOKS_BASE_URL"],
|
|
@@ -3636,18 +3839,18 @@ var WEBHOOKS_ENV_VARS = {
|
|
|
3636
3839
|
};
|
|
3637
3840
|
|
|
3638
3841
|
// ../webhooks/src/lib/resolve.ts
|
|
3639
|
-
function
|
|
3842
|
+
function resolveToProvider9(config, registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
3640
3843
|
return resolveToProvider(config, WEBHOOKS_ENV_VARS, registry);
|
|
3641
3844
|
}
|
|
3642
3845
|
|
|
3643
3846
|
// ../webhooks/src/utils.ts
|
|
3644
|
-
var
|
|
3847
|
+
var log8 = createScopedLogger("webhooks");
|
|
3645
3848
|
|
|
3646
3849
|
// ../webhooks/src/lib/transport.ts
|
|
3647
|
-
class
|
|
3850
|
+
class Transport8 extends BaseTransport {
|
|
3648
3851
|
paths;
|
|
3649
3852
|
constructor(config) {
|
|
3650
|
-
super({ config, logger:
|
|
3853
|
+
super({ config, logger: log8 });
|
|
3651
3854
|
this.paths = config.paths;
|
|
3652
3855
|
}
|
|
3653
3856
|
}
|
|
@@ -3663,13 +3866,13 @@ class WebhooksResource {
|
|
|
3663
3866
|
if (sensor) {
|
|
3664
3867
|
params.sensor = sensor;
|
|
3665
3868
|
}
|
|
3666
|
-
|
|
3869
|
+
log8.debug("Listing webhooks", { sensor });
|
|
3667
3870
|
const response = await this.transport.request(this.transport.paths.webhookList, { params });
|
|
3668
3871
|
return response.webhooks;
|
|
3669
3872
|
}
|
|
3670
3873
|
async get(id) {
|
|
3671
3874
|
validateNonEmptyString(id, "webhookId");
|
|
3672
|
-
|
|
3875
|
+
log8.debug("Getting webhook", { id });
|
|
3673
3876
|
const path = this.transport.paths.webhookGet.replace("{id}", encodeURIComponent(id));
|
|
3674
3877
|
const response = await this.transport.request(path);
|
|
3675
3878
|
if (!response.webhook) {
|
|
@@ -3679,15 +3882,15 @@ class WebhooksResource {
|
|
|
3679
3882
|
}
|
|
3680
3883
|
async create(input) {
|
|
3681
3884
|
validateWithSchema(WebhookCreateInput, input, "webhook");
|
|
3682
|
-
|
|
3885
|
+
log8.debug("Creating webhook", { name: input.name });
|
|
3683
3886
|
const response = await this.transport.request(this.transport.paths.webhookCreate, { method: "POST", body: input });
|
|
3684
|
-
|
|
3887
|
+
log8.info("Webhook created", { id: response.webhook.id, name: response.webhook.name });
|
|
3685
3888
|
return response.webhook;
|
|
3686
3889
|
}
|
|
3687
3890
|
async update(id, input) {
|
|
3688
3891
|
validateNonEmptyString(id, "webhookId");
|
|
3689
3892
|
validateWithSchema(WebhookUpdateInput, input, "webhook");
|
|
3690
|
-
|
|
3893
|
+
log8.debug("Updating webhook", { id });
|
|
3691
3894
|
const path = this.transport.paths.webhookUpdate.replace("{id}", encodeURIComponent(id));
|
|
3692
3895
|
const response = await this.transport.request(path, {
|
|
3693
3896
|
method: "PUT",
|
|
@@ -3697,32 +3900,32 @@ class WebhooksResource {
|
|
|
3697
3900
|
}
|
|
3698
3901
|
async delete(id) {
|
|
3699
3902
|
validateNonEmptyString(id, "webhookId");
|
|
3700
|
-
|
|
3903
|
+
log8.debug("Deleting webhook", { id });
|
|
3701
3904
|
const path = this.transport.paths.webhookDelete.replace("{id}", encodeURIComponent(id));
|
|
3702
3905
|
const response = await this.transport.request(path, {
|
|
3703
3906
|
method: "DELETE"
|
|
3704
3907
|
});
|
|
3705
|
-
|
|
3908
|
+
log8.info("Webhook deleted", { id });
|
|
3706
3909
|
return response;
|
|
3707
3910
|
}
|
|
3708
3911
|
async activate(id) {
|
|
3709
3912
|
validateNonEmptyString(id, "webhookId");
|
|
3710
|
-
|
|
3913
|
+
log8.debug("Activating webhook", { id });
|
|
3711
3914
|
const path = this.transport.paths.webhookActivate.replace("{id}", encodeURIComponent(id));
|
|
3712
3915
|
const response = await this.transport.request(path, {
|
|
3713
3916
|
method: "PUT"
|
|
3714
3917
|
});
|
|
3715
|
-
|
|
3918
|
+
log8.info("Webhook activated", { id });
|
|
3716
3919
|
return response.webhook;
|
|
3717
3920
|
}
|
|
3718
3921
|
async deactivate(id) {
|
|
3719
3922
|
validateNonEmptyString(id, "webhookId");
|
|
3720
|
-
|
|
3923
|
+
log8.debug("Deactivating webhook", { id });
|
|
3721
3924
|
const path = this.transport.paths.webhookDeactivate.replace("{id}", encodeURIComponent(id));
|
|
3722
3925
|
const response = await this.transport.request(path, {
|
|
3723
3926
|
method: "PUT"
|
|
3724
3927
|
});
|
|
3725
|
-
|
|
3928
|
+
log8.info("Webhook deactivated", { id });
|
|
3726
3929
|
return response.webhook;
|
|
3727
3930
|
}
|
|
3728
3931
|
}
|
|
@@ -3733,13 +3936,13 @@ class WebhookFiltersResource {
|
|
|
3733
3936
|
this.transport = transport;
|
|
3734
3937
|
}
|
|
3735
3938
|
async list() {
|
|
3736
|
-
|
|
3939
|
+
log8.debug("Listing webhook filters");
|
|
3737
3940
|
const response = await this.transport.request(this.transport.paths.webhookFilterList);
|
|
3738
3941
|
return response.filters;
|
|
3739
3942
|
}
|
|
3740
3943
|
async get(id) {
|
|
3741
3944
|
validateNonEmptyString(id, "webhookFilterId");
|
|
3742
|
-
|
|
3945
|
+
log8.debug("Getting webhook filter", { id });
|
|
3743
3946
|
const path = this.transport.paths.webhookFilterGet.replace("{id}", encodeURIComponent(id));
|
|
3744
3947
|
const response = await this.transport.request(path);
|
|
3745
3948
|
if (!response.filter) {
|
|
@@ -3749,25 +3952,25 @@ class WebhookFiltersResource {
|
|
|
3749
3952
|
}
|
|
3750
3953
|
async listByWebhook(webhookId) {
|
|
3751
3954
|
validateNonEmptyString(webhookId, "webhookId");
|
|
3752
|
-
|
|
3955
|
+
log8.debug("Listing webhook filters by webhook", { webhookId });
|
|
3753
3956
|
const path = this.transport.paths.webhookFiltersByWebhook.replace("{webhookId}", encodeURIComponent(webhookId));
|
|
3754
3957
|
const response = await this.transport.request(path);
|
|
3755
3958
|
return response.filters;
|
|
3756
3959
|
}
|
|
3757
3960
|
async create(input) {
|
|
3758
3961
|
validateWithSchema(WebhookFilterCreateInput, input, "webhook filter");
|
|
3759
|
-
|
|
3962
|
+
log8.debug("Creating webhook filter", {
|
|
3760
3963
|
webhookId: input.webhookId,
|
|
3761
3964
|
filterKey: input.filterKey
|
|
3762
3965
|
});
|
|
3763
3966
|
const response = await this.transport.request(this.transport.paths.webhookFilterCreate, { method: "POST", body: input });
|
|
3764
|
-
|
|
3967
|
+
log8.info("Webhook filter created", { webhookId: input.webhookId });
|
|
3765
3968
|
return response.filter;
|
|
3766
3969
|
}
|
|
3767
3970
|
async update(id, input) {
|
|
3768
3971
|
validateNonEmptyString(id, "webhookFilterId");
|
|
3769
3972
|
validateWithSchema(WebhookFilterUpdateInput, input, "webhook filter");
|
|
3770
|
-
|
|
3973
|
+
log8.debug("Updating webhook filter", { id });
|
|
3771
3974
|
const path = this.transport.paths.webhookFilterUpdate.replace("{id}", encodeURIComponent(id));
|
|
3772
3975
|
const response = await this.transport.request(path, {
|
|
3773
3976
|
method: "PUT",
|
|
@@ -3777,12 +3980,12 @@ class WebhookFiltersResource {
|
|
|
3777
3980
|
}
|
|
3778
3981
|
async delete(id) {
|
|
3779
3982
|
validateNonEmptyString(id, "webhookFilterId");
|
|
3780
|
-
|
|
3983
|
+
log8.debug("Deleting webhook filter", { id });
|
|
3781
3984
|
const path = this.transport.paths.webhookFilterDelete.replace("{id}", encodeURIComponent(id));
|
|
3782
3985
|
const response = await this.transport.request(path, {
|
|
3783
3986
|
method: "DELETE"
|
|
3784
3987
|
});
|
|
3785
|
-
|
|
3988
|
+
log8.info("Webhook filter deleted", { id });
|
|
3786
3989
|
return response;
|
|
3787
3990
|
}
|
|
3788
3991
|
}
|
|
@@ -3794,10 +3997,10 @@ function createWebhooksClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
|
3794
3997
|
webhooks;
|
|
3795
3998
|
webhookFilters;
|
|
3796
3999
|
constructor(config = {}) {
|
|
3797
|
-
const resolved =
|
|
4000
|
+
const resolved = resolveToProvider9(config, registry);
|
|
3798
4001
|
if (resolved.mode === "transport") {
|
|
3799
4002
|
this.transport = resolved.transport;
|
|
3800
|
-
|
|
4003
|
+
log8.info("Client initialized with custom transport");
|
|
3801
4004
|
} else {
|
|
3802
4005
|
const { provider } = resolved;
|
|
3803
4006
|
const { baseUrl, paths } = provider.getEndpointWithPaths("webhooks");
|
|
@@ -3806,13 +4009,13 @@ function createWebhooksClient(registry = DEFAULT_PROVIDER_REGISTRY) {
|
|
|
3806
4009
|
throw new Error("Webhooks API requires authentication");
|
|
3807
4010
|
}
|
|
3808
4011
|
this._provider = provider;
|
|
3809
|
-
this.transport = new
|
|
4012
|
+
this.transport = new Transport8({
|
|
3810
4013
|
baseUrl,
|
|
3811
4014
|
tokenProvider,
|
|
3812
4015
|
timeout: provider.timeout,
|
|
3813
4016
|
paths
|
|
3814
4017
|
});
|
|
3815
|
-
|
|
4018
|
+
log8.info("Client initialized", {
|
|
3816
4019
|
platform: provider.platform,
|
|
3817
4020
|
env: provider.env,
|
|
3818
4021
|
baseUrl
|
|
@@ -3866,6 +4069,7 @@ class TimebackClient {
|
|
|
3866
4069
|
_powerpath;
|
|
3867
4070
|
_clr;
|
|
3868
4071
|
_case;
|
|
4072
|
+
_reporting;
|
|
3869
4073
|
_webhooks;
|
|
3870
4074
|
constructor(config) {
|
|
3871
4075
|
const resolved = resolveToProvider(config ?? {}, TIMEBACK_ENV_VARS);
|
|
@@ -3930,6 +4134,14 @@ class TimebackClient {
|
|
|
3930
4134
|
}
|
|
3931
4135
|
return this._case;
|
|
3932
4136
|
}
|
|
4137
|
+
get reporting() {
|
|
4138
|
+
this.assertOpen();
|
|
4139
|
+
this.assertService("reporting");
|
|
4140
|
+
if (!this._reporting) {
|
|
4141
|
+
this._reporting = new ReportingClient({ provider: this.provider });
|
|
4142
|
+
}
|
|
4143
|
+
return this._reporting;
|
|
4144
|
+
}
|
|
3933
4145
|
get webhooks() {
|
|
3934
4146
|
this.assertOpen();
|
|
3935
4147
|
this.assertService("webhooks");
|
|
@@ -3954,6 +4166,7 @@ class TimebackClient {
|
|
|
3954
4166
|
this._powerpath = undefined;
|
|
3955
4167
|
this._clr = undefined;
|
|
3956
4168
|
this._case = undefined;
|
|
4169
|
+
this._reporting = undefined;
|
|
3957
4170
|
this._webhooks = undefined;
|
|
3958
4171
|
this._closed = true;
|
|
3959
4172
|
}
|
package/dist/utils.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timeback/core",
|
|
3
|
-
"version": "0.2.1-beta.
|
|
3
|
+
"version": "0.2.1-beta.20260315040428",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"@timeback/oneroster": "0.2.0",
|
|
47
47
|
"@timeback/powerpath": "0.2.0",
|
|
48
48
|
"@timeback/qti": "0.2.0",
|
|
49
|
+
"@timeback/reporting": "0.1.0",
|
|
49
50
|
"@timeback/webhooks": "0.2.0",
|
|
50
51
|
"@types/bun": "latest",
|
|
51
52
|
"esbuild": "^0.27.3"
|