@timeback/sdk 0.1.4 → 0.1.6

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.
Files changed (71) hide show
  1. package/README.md +46 -23
  2. package/dist/client/adapters/react/index.d.ts +1 -2
  3. package/dist/client/adapters/react/index.d.ts.map +1 -1
  4. package/dist/client/adapters/react/index.js +30 -33
  5. package/dist/client/adapters/react/provider.d.ts +1 -2
  6. package/dist/client/adapters/react/provider.d.ts.map +1 -1
  7. package/dist/client/adapters/solid/context.d.ts +1 -2
  8. package/dist/client/adapters/solid/context.d.ts.map +1 -1
  9. package/dist/client/adapters/solid/context.tsx +1 -2
  10. package/dist/client/adapters/solid/index.d.ts +1 -2
  11. package/dist/client/adapters/solid/index.d.ts.map +1 -1
  12. package/dist/client/adapters/solid/index.ts +1 -2
  13. package/dist/client/adapters/svelte/index.d.ts +1 -2
  14. package/dist/client/adapters/svelte/index.d.ts.map +1 -1
  15. package/dist/client/adapters/svelte/index.ts +1 -2
  16. package/dist/client/adapters/svelte/stores.d.ts +1 -2
  17. package/dist/client/adapters/svelte/stores.d.ts.map +1 -1
  18. package/dist/client/adapters/svelte/stores.ts +1 -2
  19. package/dist/client/adapters/vue/index.d.ts +1 -2
  20. package/dist/client/adapters/vue/index.d.ts.map +1 -1
  21. package/dist/client/adapters/vue/index.ts +1 -2
  22. package/dist/client/adapters/vue/provider.d.ts +1 -2
  23. package/dist/client/adapters/vue/provider.d.ts.map +1 -1
  24. package/dist/client/adapters/vue/provider.ts +1 -2
  25. package/dist/client/index.d.ts +1 -1
  26. package/dist/client/index.d.ts.map +1 -1
  27. package/dist/client/lib/activity/activity.class.d.ts +21 -21
  28. package/dist/client/lib/activity/activity.class.d.ts.map +1 -1
  29. package/dist/client/lib/activity/index.d.ts +0 -1
  30. package/dist/client/lib/activity/index.d.ts.map +1 -1
  31. package/dist/client/namespaces/activity.d.ts +13 -8
  32. package/dist/client/namespaces/activity.d.ts.map +1 -1
  33. package/dist/client.d.ts +4 -4
  34. package/dist/client.d.ts.map +1 -1
  35. package/dist/client.js +30 -34
  36. package/dist/edge.d.ts +1 -1
  37. package/dist/index.d.ts +1 -5
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +25888 -6188
  40. package/dist/server/adapters/express.js +19592 -927
  41. package/dist/server/adapters/nuxt.js +19596 -931
  42. package/dist/server/adapters/solid-start.js +19594 -929
  43. package/dist/server/adapters/tanstack-start.js +19592 -927
  44. package/dist/server/handlers/activity.d.ts +4 -7
  45. package/dist/server/handlers/activity.d.ts.map +1 -1
  46. package/dist/server/handlers/user.d.ts.map +1 -1
  47. package/dist/server/lib/build-activity-events.d.ts +29 -1
  48. package/dist/server/lib/build-activity-events.d.ts.map +1 -1
  49. package/dist/server/lib/index.d.ts +2 -4
  50. package/dist/server/lib/index.d.ts.map +1 -1
  51. package/dist/server/lib/resolve.d.ts +112 -0
  52. package/dist/server/lib/resolve.d.ts.map +1 -0
  53. package/dist/server/timeback-identity.d.ts +2 -2
  54. package/dist/server/timeback.d.ts +2 -2
  55. package/dist/server/timeback.d.ts.map +1 -1
  56. package/dist/server/types.d.ts +152 -27
  57. package/dist/server/types.d.ts.map +1 -1
  58. package/dist/shared/types.d.ts +118 -9
  59. package/dist/shared/types.d.ts.map +1 -1
  60. package/package.json +4 -8
  61. package/dist/client/lib/activity/activity.d.ts +0 -16
  62. package/dist/client/lib/activity/activity.d.ts.map +0 -1
  63. package/dist/config.d.ts +0 -20
  64. package/dist/config.d.ts.map +0 -1
  65. package/dist/config.js +0 -0
  66. package/dist/server/lib/resolve-activity-course.d.ts +0 -22
  67. package/dist/server/lib/resolve-activity-course.d.ts.map +0 -1
  68. package/dist/server/lib/resolve-timeback-id.d.ts +0 -28
  69. package/dist/server/lib/resolve-timeback-id.d.ts.map +0 -1
  70. package/dist/server/lib/resolve-timeback-user.d.ts +0 -42
  71. package/dist/server/lib/resolve-timeback-user.d.ts.map +0 -1
@@ -47,6 +47,8 @@ export interface TimebackProfile {
47
47
  dailyXp?: number;
48
48
  dailyLessons?: number;
49
49
  dailyActiveMinutes?: number;
50
+ dailyAccuracy?: number;
51
+ dailyMasteredUnits?: number;
50
52
  };
51
53
  }
52
54
  /**
@@ -96,23 +98,104 @@ export interface TimebackAuthUser extends TimebackProfile {
96
98
  claims: IdentityClaims;
97
99
  }
98
100
  /**
99
- * Course selector for activity tracking.
101
+ * Course selector by subject and grade (grade-based apps).
100
102
  *
101
- * This should correspond to a unique course entry in `timeback.config.ts`.
103
+ * Use this for traditional K-12 apps where courses are identified by subject + grade.
102
104
  */
103
- export interface ActivityCourseRef {
105
+ export interface SubjectGradeCourseRef {
104
106
  subject: TimebackSubject;
105
107
  grade: TimebackGrade;
106
108
  }
109
+ /**
110
+ * Course selector by code (grade-less apps).
111
+ *
112
+ * Use this for apps without grade levels (e.g., CS platforms) where courses
113
+ * are identified by a unique course code.
114
+ */
115
+ export interface CourseCodeRef {
116
+ code: string;
117
+ }
118
+ /**
119
+ * Course selector for activity tracking.
120
+ *
121
+ * This should correspond to a unique course entry in `timeback.config.json`.
122
+ *
123
+ * Two selector modes are supported:
124
+ * - **Grade-based**: `{ subject, grade }` — K-12 style
125
+ * - **Grade-less**: `{ code }` — CS/skill-based
126
+ *
127
+ * @example Grade-based
128
+ * ```typescript
129
+ * { subject: 'Math', grade: 3 }
130
+ * ```
131
+ *
132
+ * @example Grade-less
133
+ * ```typescript
134
+ * { code: 'CS-101' }
135
+ * ```
136
+ */
137
+ export type ActivityCourseRef = SubjectGradeCourseRef | CourseCodeRef;
138
+ /**
139
+ * Type guard: Check if a course ref uses subject+grade identity.
140
+ *
141
+ * @param ref - Course reference to check
142
+ * @returns True if grade-based selector
143
+ */
144
+ export declare function isSubjectGradeCourseRef(ref: ActivityCourseRef): ref is SubjectGradeCourseRef;
107
145
  /**
108
146
  * Activity start parameters.
147
+ *
148
+ * @remarks
149
+ * The `id` field is treated as a **slug** (not a URL). The SDK derives the
150
+ * canonical activity URL (`event.object.id`) from:
151
+ * - The configured sensor URL
152
+ * - The course selector (subject + grade or code)
153
+ * - This slug (URI-encoded)
154
+ *
155
+ * This allows upstream systems to process activities without requiring
156
+ * pre-synced OneRoster component resources.
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * // Grade-based course
161
+ * timeback.activity.start({
162
+ * id: 'fractions-with-like-denominators', // slug
163
+ * name: 'Fractions with Like Denominators', // human-readable
164
+ * course: { subject: 'Math', grade: 3 },
165
+ * })
166
+ * // => object.id: https://sensor.example.com/activities/Math/g3/fractions-with-like-denominators
167
+ *
168
+ * // Grade-less course
169
+ * timeback.activity.start({
170
+ * id: 'intro-to-loops',
171
+ * name: 'Introduction to Loops',
172
+ * course: { code: 'CS-101' },
173
+ * })
174
+ * // => object.id: https://sensor.example.com/activities/CS-101/intro-to-loops
175
+ * ```
109
176
  */
110
177
  export interface ActivityParams {
111
- /** Unique identifier for the learning object */
178
+ /**
179
+ * Activity slug (stable identifier for the learning object).
180
+ *
181
+ * This is used to construct the canonical activity URL sent to Caliper.
182
+ * Use a short, URL-safe slug like `"fractions-with-like-denominators"` or
183
+ * `"lesson-1"`. Special characters will be URI-encoded.
184
+ *
185
+ * @example 'fractions-with-like-denominators'
186
+ * @example 'ccss.math.content.3.nf.a.1'
187
+ * @example 'lesson-1'
188
+ */
112
189
  id: string;
113
- /** Display name of the activity */
190
+ /**
191
+ * Human-readable display name of the activity.
192
+ *
193
+ * This is sent as `object.activity.name` in Caliper events.
194
+ *
195
+ * @example 'Fractions with Like Denominators'
196
+ */
114
197
  name: string;
115
- /** Course selector (must match a unique course in timeback.config.ts) */
198
+ /** Course selector (must match a unique course in timeback.config.json) */
116
199
  course: ActivityCourseRef;
117
200
  }
118
201
  /**
@@ -130,13 +213,23 @@ export interface ActivityMetrics {
130
213
  }
131
214
  /**
132
215
  * Activity state sent to the server when ending.
216
+ *
217
+ * @see {@link ActivityParams} for documentation on `id` and `name` semantics.
133
218
  */
134
219
  export interface ActivityEndPayload {
135
- /** Unique identifier for the learning object */
220
+ /**
221
+ * Activity slug (stable identifier for the learning object).
222
+ *
223
+ * @see {@link ActivityParams.id}
224
+ */
136
225
  id: string;
137
- /** Display name of the activity */
226
+ /**
227
+ * Human-readable display name of the activity.
228
+ *
229
+ * @see {@link ActivityParams.name}
230
+ */
138
231
  name: string;
139
- /** Course selector (must match a unique course in timeback.config.ts) */
232
+ /** Course selector (must match a unique course in timeback.config.json) */
140
233
  course: ActivityCourseRef;
141
234
  /** ISO 8601 timestamp when activity started */
142
235
  startedAt: string;
@@ -148,6 +241,22 @@ export interface ActivityEndPayload {
148
241
  pausedMs: number;
149
242
  /** Activity metrics */
150
243
  metrics: ActivityMetrics;
244
+ /**
245
+ * Attempt number for this activity (1-based).
246
+ *
247
+ * If provided, this is forwarded to Caliper events as `generated.attempt`.
248
+ */
249
+ attemptNumber?: number;
250
+ /**
251
+ * App-reported course progress (per enrollment), as a percentage from 0–100.
252
+ *
253
+ * This is forwarded to Caliper events as `generated.extensions.pctCompleteApp`.
254
+ *
255
+ * @remarks
256
+ * - Scale: 0 to 100 (not 0 to 1)
257
+ * - Values outside 0–100 are clamped by the SDK server handler if present
258
+ */
259
+ pctCompleteApp?: number;
151
260
  }
152
261
  /**
153
262
  * Activity submission response.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@timeback/sdk",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Timeback SDK for frontend and backend integration",
5
5
  "type": "module",
6
6
  "exports": {
@@ -12,10 +12,6 @@
12
12
  "types": "./dist/client.d.ts",
13
13
  "import": "./dist/client.js"
14
14
  },
15
- "./config": {
16
- "types": "./dist/config.d.ts",
17
- "import": "./dist/config.js"
18
- },
19
15
  "./identity": {
20
16
  "types": "./dist/identity.d.ts",
21
17
  "import": "./dist/identity.js"
@@ -81,12 +77,12 @@
81
77
  "test": "bun test --no-env-file unit.test.ts"
82
78
  },
83
79
  "dependencies": {
84
- "@timeback/core": "0.1.2",
85
- "jiti": "^2.6.1",
80
+ "@timeback/core": "0.1.3",
81
+ "c12": "^3.3.3",
86
82
  "zod": "^4.2.1"
87
83
  },
88
84
  "devDependencies": {
89
- "@timeback/caliper": "0.1.1",
85
+ "@timeback/caliper": "0.1.2",
90
86
  "@timeback/internal-cli-infra": "0.0.0",
91
87
  "@timeback/internal-logger": "0.0.0",
92
88
  "@timeback/internal-utils": "0.0.0",
@@ -1,16 +0,0 @@
1
- /**
2
- * Activity Factory
3
- *
4
- * Factory function for creating activity trackers.
5
- */
6
- import { Activity } from './activity.class';
7
- import type { ActivityEndPayload, ActivityParams } from '../../../shared/types';
8
- /**
9
- * Create an activity tracker.
10
- *
11
- * @param params - Activity parameters
12
- * @param sendActivity - Function to send activity to server
13
- * @returns Activity handle
14
- */
15
- export declare function createActivity(params: ActivityParams, sendActivity: (payload: ActivityEndPayload) => Promise<void>): Activity;
16
- //# sourceMappingURL=activity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../../../src/client/lib/activity/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAE/E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1D,QAAQ,CAEV"}
package/dist/config.d.ts DELETED
@@ -1,20 +0,0 @@
1
- /**
2
- * Types for `timeback.config.ts` (app configuration).
3
- *
4
- * This module is intended to be imported via the subpath export:
5
- *
6
- * ```ts
7
- * import type { TimebackConfig } from '@timeback/sdk/config'
8
- * ```
9
- *
10
- * Note: `TimebackConfig` here refers to the **app config file** shape, not the
11
- * SDK initialization config exported from `timeback`'s main entrypoint.
12
- */
13
- /**
14
- * App configuration type used by `timeback.config.ts`.
15
- *
16
- * Alias of `AppConfig`, exported under the name commonly used by consumers.
17
- */
18
- export type { AppConfig as TimebackConfig, AppConfig } from './server/types';
19
- export {};
20
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;GAIG;AACH,YAAY,EAAE,SAAS,IAAI,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,EAAE,CAAA"}
package/dist/config.js DELETED
File without changes
@@ -1,22 +0,0 @@
1
- import type { ActivityCourseRef } from '../../shared/types';
2
- import type { AppConfig } from '../types';
3
- /**
4
- * Resolve a course config entry from an activity course selector.
5
- *
6
- * @param courses - Configured courses from `timeback.config.ts`
7
- * @param courseRef - Course selector sent from the client
8
- * @returns Matched course config entry
9
- * @throws {ActivityCourseResolutionError} When selector is unknown or ambiguous
10
- */
11
- export declare function resolveActivityCourse(courses: AppConfig['courses'], courseRef: ActivityCourseRef): AppConfig['courses'][number];
12
- /**
13
- * Error thrown when a client-provided course selector cannot be resolved against config.
14
- */
15
- export declare class ActivityCourseResolutionError extends Error {
16
- readonly code: 'unknown_course' | 'ambiguous_course';
17
- readonly subject: ActivityCourseRef['subject'];
18
- readonly grade: ActivityCourseRef['grade'];
19
- readonly count?: number;
20
- constructor(code: ActivityCourseResolutionError['code'], courseRef: ActivityCourseRef, count?: number);
21
- }
22
- //# sourceMappingURL=resolve-activity-course.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-activity-course.d.ts","sourceRoot":"","sources":["../../../src/server/lib/resolve-activity-course.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AAEzC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,EAC7B,SAAS,EAAE,iBAAiB,GAC1B,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAc9B;AAED;;GAEG;AACH,qBAAa,6BAA8B,SAAQ,KAAK;IACvD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CAAA;IACpD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IAEvB,YACC,IAAI,EAAE,6BAA6B,CAAC,MAAM,CAAC,EAC3C,SAAS,EAAE,iBAAiB,EAC5B,KAAK,CAAC,EAAE,MAAM,EAOd;CACD"}
@@ -1,28 +0,0 @@
1
- import { TimebackUserResolutionError } from './resolve-timeback-user';
2
- import type { TimebackClient } from '@timeback/core';
3
- import type { ApiCredentials, Environment, IdentityConfig } from '../types';
4
- /**
5
- * Map a Timeback user resolution error code to an HTTP status for handlers.
6
- *
7
- * @param err - Timeback user resolution error
8
- * @returns HTTP status code
9
- */
10
- export declare function resolveStatusForUserResolutionError(err: TimebackUserResolutionError): number;
11
- /**
12
- * Resolve the canonical Timeback user ID for server-side activity submission.
13
- *
14
- * @param params - Resolution parameters
15
- * @returns Timeback user ID
16
- * @throws {TimebackUserResolutionError} When resolution fails
17
- */
18
- export declare function resolveTimebackIdForActivity(params: {
19
- env: Environment;
20
- api: ApiCredentials;
21
- identity: IdentityConfig;
22
- user: {
23
- id: string;
24
- email: string;
25
- };
26
- client: TimebackClient;
27
- }): Promise<string>;
28
- //# sourceMappingURL=resolve-timeback-id.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-timeback-id.d.ts","sourceRoot":"","sources":["../../../src/server/lib/resolve-timeback-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,2BAA2B,EAAE,MAAM,yBAAyB,CAAA;AAEjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE3E;;;;;GAKG;AACH,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,2BAA2B,GAAG,MAAM,CAE5F;AAED;;;;;;GAMG;AACH,wBAAsB,4BAA4B,CAAC,MAAM,EAAE;IAC1D,GAAG,EAAE,WAAW,CAAA;IAChB,GAAG,EAAE,cAAc,CAAA;IACnB,QAAQ,EAAE,cAAc,CAAA;IACxB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACnC,MAAM,EAAE,cAAc,CAAA;CACtB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBlB"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Timeback User Resolution
3
- *
4
- * Resolves the Timeback user by email using server credentials.
5
- */
6
- import { TimebackClient } from '@timeback/core';
7
- import type { TimebackAuthUser } from '../../shared/types';
8
- import type { ApiCredentials, Environment, OIDCUserInfo, TimebackUserResolutionErrorCode } from '../types';
9
- /**
10
- * Error thrown when Timeback user resolution fails.
11
- */
12
- export declare class TimebackUserResolutionError extends Error {
13
- readonly code: TimebackUserResolutionErrorCode;
14
- constructor(message: string, code: TimebackUserResolutionErrorCode);
15
- }
16
- interface ResolveTimebackUserByEmailParams {
17
- /** Environment (staging/production) */
18
- env: Environment;
19
- /** API credentials for Timeback API */
20
- apiCredentials: ApiCredentials;
21
- /** OIDC user info from the IdP */
22
- userInfo: OIDCUserInfo;
23
- /**
24
- * Optional pre-configured Timeback client to use (e.g. `timeback.api`).
25
- *
26
- * When provided, this function will use it and will NOT close it.
27
- */
28
- client?: TimebackClient;
29
- }
30
- /**
31
- * Resolve a TimebackAuthUser by looking up the Timeback user via email.
32
- *
33
- * Uses server API credentials to query OneRoster for a user matching the IdP email.
34
- * Strict mode: fails if no user found or if multiple users match (ambiguous).
35
- *
36
- * @param params - Resolution parameters
37
- * @returns Resolved TimebackAuthUser with Timeback profile and IdP claims
38
- * @throws {TimebackUserResolutionError} If resolution fails
39
- */
40
- export declare function resolveTimebackUserByEmail(params: ResolveTimebackUserByEmailParams): Promise<TimebackAuthUser>;
41
- export {};
42
- //# sourceMappingURL=resolve-timeback-user.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-timeback-user.d.ts","sourceRoot":"","sources":["../../../src/server/lib/resolve-timeback-user.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAM/C,OAAO,KAAK,EAAkB,gBAAgB,EAAmB,MAAM,oBAAoB,CAAA;AAC3F,OAAO,KAAK,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,+BAA+B,EAC/B,MAAM,UAAU,CAAA;AAIjB;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;aAGpC,IAAI,EAAE,+BAA+B;IAFtD,YACC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,+BAA+B,EAIrD;CACD;AAED,UAAU,gCAAgC;IACzC,uCAAuC;IACvC,GAAG,EAAE,WAAW,CAAA;IAChB,uCAAuC;IACvC,cAAc,EAAE,cAAc,CAAA;IAC9B,kCAAkC;IAClC,QAAQ,EAAE,YAAY,CAAA;IACtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAA;CACvB;AAkBD;;;;;;;;;GASG;AACH,wBAAsB,0BAA0B,CAC/C,MAAM,EAAE,gCAAgC,GACtC,OAAO,CAAC,gBAAgB,CAAC,CAuG3B"}