@crimson-education/sdk 0.3.1 → 0.3.4

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.
@@ -291,6 +291,7 @@ class OAuthAdapter {
291
291
  parseTokenResponse(data) {
292
292
  var _a, _b;
293
293
  const accessToken = data.access_token;
294
+ const idToken = data.id_token;
294
295
  const expiresIn = (_a = data.expires_in) !== null && _a !== void 0 ? _a : 3600;
295
296
  const refreshToken = data.refresh_token;
296
297
  const scope = data.scope;
@@ -303,6 +304,7 @@ class OAuthAdapter {
303
304
  }
304
305
  return {
305
306
  accessToken,
307
+ idToken,
306
308
  refreshToken,
307
309
  expiresAt: Date.now() + expiresIn * 1000,
308
310
  scope: scope === null || scope === void 0 ? void 0 : scope.split(" "),
@@ -40,6 +40,8 @@ export interface OAuthConfig {
40
40
  export interface OAuthTokens {
41
41
  /** Access token */
42
42
  accessToken: string;
43
+ /** ID token (if openid scope was requested) */
44
+ idToken?: string;
43
45
  /** Refresh token (if granted) */
44
46
  refreshToken?: string;
45
47
  /** Token type (always Bearer) */
@@ -16,6 +16,8 @@ export declare class CrimsonClient {
16
16
  private clientId;
17
17
  private clientVersion;
18
18
  private clientPlatform;
19
+ private appName;
20
+ private appTenant;
19
21
  private oauthAdapter?;
20
22
  constructor(config: CrimsonClientConfig);
21
23
  /**
@@ -66,6 +68,25 @@ export declare class CrimsonClient {
66
68
  * Check if user is authenticated
67
69
  */
68
70
  isAuthenticated(): boolean;
71
+ /**
72
+ * Get the current app name
73
+ */
74
+ getAppName(): string;
75
+ /**
76
+ * Set the app name for multi-tenant identity resolution
77
+ * @param name - Application name (e.g., 'indigo')
78
+ */
79
+ setAppName(name: string): void;
80
+ /**
81
+ * Get the current app tenant
82
+ */
83
+ getAppTenant(): string;
84
+ /**
85
+ * Set the target tenant for multi-tenant identity resolution.
86
+ * Use this when switching between tenant tabs in the UI.
87
+ * @param tenant - Tenant name (e.g., 'crimsonapp', 'collegewise', 'indigo')
88
+ */
89
+ setAppTenant(tenant: string): void;
69
90
  fetch<T>(path: string, options?: RequestInit): Promise<T>;
70
91
  /**
71
92
  * Get the current authentication token
@@ -58,6 +58,8 @@ class CrimsonClient {
58
58
  this.clientId = config.clientId || "unknown";
59
59
  this.clientVersion = config.clientVersion || SDK_VERSION;
60
60
  this.clientPlatform = detectPlatform();
61
+ this.appName = config.appName || "";
62
+ this.appTenant = config.appTenant || "";
61
63
  // Warn if clientId is not set
62
64
  if (!config.clientId) {
63
65
  console.warn("[CrimsonSDK] clientId not set. Consider setting it for better API tracking.");
@@ -161,6 +163,33 @@ class CrimsonClient {
161
163
  // For token mode, assume authenticated (token provider handles this)
162
164
  return true;
163
165
  }
166
+ /**
167
+ * Get the current app name
168
+ */
169
+ getAppName() {
170
+ return this.appName;
171
+ }
172
+ /**
173
+ * Set the app name for multi-tenant identity resolution
174
+ * @param name - Application name (e.g., 'indigo')
175
+ */
176
+ setAppName(name) {
177
+ this.appName = name;
178
+ }
179
+ /**
180
+ * Get the current app tenant
181
+ */
182
+ getAppTenant() {
183
+ return this.appTenant;
184
+ }
185
+ /**
186
+ * Set the target tenant for multi-tenant identity resolution.
187
+ * Use this when switching between tenant tabs in the UI.
188
+ * @param tenant - Tenant name (e.g., 'crimsonapp', 'collegewise', 'indigo')
189
+ */
190
+ setAppTenant(tenant) {
191
+ this.appTenant = tenant;
192
+ }
164
193
  fetch(path_1) {
165
194
  return __awaiter(this, arguments, void 0, function* (path, options = {}) {
166
195
  const token = yield this.getToken();
@@ -171,6 +200,13 @@ class CrimsonClient {
171
200
  const headers = Object.assign({ "Content-Type": "application/json", Authorization: `${scheme} ${token}`,
172
201
  // Client identification headers for API tracking
173
202
  "X-Client-ID": this.clientId, "X-Client-Version": this.clientVersion, "X-Client-Platform": this.clientPlatform }, options.headers);
203
+ // Add app identity headers for multi-tenant resolution (required for Indigo API)
204
+ if (this.appName) {
205
+ headers["X-App-Name"] = this.appName;
206
+ }
207
+ if (this.appTenant) {
208
+ headers["X-App-Tenant"] = this.appTenant;
209
+ }
174
210
  const url = `${this.baseUrl}${path.startsWith("/") ? path : `/${path}`}`;
175
211
  const response = yield fetch(url, Object.assign(Object.assign({}, options), { headers }));
176
212
  if (!response.ok) {
@@ -50,6 +50,15 @@ export interface TemplateMissionCreateInput {
50
50
  content: string;
51
51
  }[];
52
52
  }
53
+ export interface AddTemplateMissionToRoadmapInput {
54
+ templateMissionId: string;
55
+ userId: string;
56
+ startAt?: string | null;
57
+ dueDate?: string | null;
58
+ status?: string;
59
+ taskIds?: string[];
60
+ ignoreLink?: boolean;
61
+ }
53
62
  export declare class MissionLibraryApi {
54
63
  private client;
55
64
  constructor(client: CrimsonClient);
@@ -57,6 +66,10 @@ export declare class MissionLibraryApi {
57
66
  * List template missions with pagination
58
67
  */
59
68
  listTemplateMissions(filters?: TemplateMissionFilters): Promise<PaginatedResult<TemplateMission>>;
69
+ /**
70
+ * List custom template missions with pagination
71
+ */
72
+ listCustomTemplateMissions(filters?: TemplateMissionFilters): Promise<PaginatedResult<TemplateMission>>;
60
73
  /**
61
74
  * Create a new template mission
62
75
  */
@@ -82,6 +95,14 @@ export declare class MissionLibraryApi {
82
95
  * Copy a template mission to a user's roadmap
83
96
  */
84
97
  copyTemplateMission(input: CopyTemplateMissionInput): Promise<TemplateMission[]>;
98
+ /**
99
+ * Add a template mission to a user's roadmap (create or update)
100
+ */
101
+ addToRoadmap(input: AddTemplateMissionToRoadmapInput): Promise<{
102
+ missionId: string;
103
+ isNew: boolean;
104
+ updated: boolean;
105
+ }>;
85
106
  /**
86
107
  * Bulk assign missions from templates
87
108
  */
@@ -49,6 +49,30 @@ class MissionLibraryApi {
49
49
  return this.client.fetch(path);
50
50
  });
51
51
  }
52
+ /**
53
+ * List custom template missions with pagination
54
+ */
55
+ listCustomTemplateMissions(filters) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const params = new URLSearchParams();
58
+ // Start/Limit
59
+ if ((filters === null || filters === void 0 ? void 0 : filters.start) !== undefined) {
60
+ params.append("start", String(filters.start));
61
+ }
62
+ if ((filters === null || filters === void 0 ? void 0 : filters.limit) !== undefined) {
63
+ params.append("limit", String(filters.limit));
64
+ }
65
+ // Keyword
66
+ if (filters === null || filters === void 0 ? void 0 : filters.keyword) {
67
+ params.append("keyword", filters.keyword);
68
+ }
69
+ const query = params.toString();
70
+ const path = query
71
+ ? `/roadmap/library/custom-missions?${query}`
72
+ : "/roadmap/library/custom-missions";
73
+ return this.client.fetch(path);
74
+ });
75
+ }
52
76
  /**
53
77
  * Create a new template mission
54
78
  */
@@ -145,6 +169,17 @@ class MissionLibraryApi {
145
169
  });
146
170
  });
147
171
  }
172
+ /**
173
+ * Add a template mission to a user's roadmap (create or update)
174
+ */
175
+ addToRoadmap(input) {
176
+ return __awaiter(this, void 0, void 0, function* () {
177
+ return this.client.fetch("/roadmap/library/missions/add-to-roadmap", {
178
+ method: "POST",
179
+ body: JSON.stringify(input),
180
+ });
181
+ });
182
+ }
148
183
  /**
149
184
  * Bulk assign missions from templates
150
185
  */
@@ -36,6 +36,18 @@ export interface CrimsonClientConfigBase {
36
36
  * SDK version override. Defaults to the SDK package version.
37
37
  */
38
38
  clientVersion?: string;
39
+ /**
40
+ * Application name for multi-tenant identity resolution.
41
+ * Required for Indigo API endpoints.
42
+ * @example 'indigo'
43
+ */
44
+ appName?: string;
45
+ /**
46
+ * Target tenant name for multi-tenant identity resolution.
47
+ * Required for Indigo API endpoints.
48
+ * @example 'crimsonapp', 'collegewise', 'indigo'
49
+ */
50
+ appTenant?: string;
39
51
  }
40
52
  /**
41
53
  * Configuration using a token provider function
@@ -7,7 +7,7 @@ export { useTasks, useAllUserTasks, useTasksByRoadmapId, useTasksInfinite, useCr
7
7
  export { useUsers, useUser, userKeys } from "./useUsers";
8
8
  export { useCurrentUserRoles, useMyStudents, accountKeys } from "./useAccount";
9
9
  export { useRoadmapContext } from "./useRoadmapContext";
10
- export { useTemplateMissions, useTemplateMissionsInfinite, useTemplateTasks, useTemplateTasksInfinite, useTemplateMissionDetail, useUpdateTemplateMission, useCopyTemplateMission, useAssignBulkMission, useAssignBulkTask, useCreateFromPredefinedTasks, missionLibraryKeys, useCreateTemplateMission, useDeleteTemplateMission, } from "./useMissionLibrary";
10
+ export { useTemplateMissions, useTemplateMissionsInfinite, useTemplateTasks, useTemplateTasksInfinite, useTemplateMissionDetail, useUpdateTemplateMission, useCopyTemplateMission, useAssignBulkMission, useAssignBulkTask, useCreateFromPredefinedTasks, missionLibraryKeys, useCreateTemplateMission, useDeleteTemplateMission, useTemplateMissionAddToRoadmap, useCustomTemplateMissionsInfinite, } from "./useMissionLibrary";
11
11
  export { useStudentProfile, useStudentPrefilledInfo, studentProfileKeys, } from "./useStudentProfile";
12
12
  export { useIndigoMe, useStudentTutors, useTutorStudents, indigoKeys, } from "./useIndigo";
13
13
  export * from "./useGradeTemplates";
@@ -14,7 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.indigoKeys = exports.useTutorStudents = exports.useStudentTutors = exports.useIndigoMe = exports.studentProfileKeys = exports.useStudentPrefilledInfo = exports.useStudentProfile = exports.useDeleteTemplateMission = exports.useCreateTemplateMission = exports.missionLibraryKeys = exports.useCreateFromPredefinedTasks = exports.useAssignBulkTask = exports.useAssignBulkMission = exports.useCopyTemplateMission = exports.useUpdateTemplateMission = exports.useTemplateMissionDetail = exports.useTemplateTasksInfinite = exports.useTemplateTasks = exports.useTemplateMissionsInfinite = exports.useTemplateMissions = exports.useRoadmapContext = exports.accountKeys = exports.useMyStudents = exports.useCurrentUserRoles = exports.userKeys = exports.useUser = exports.useUsers = exports.useTaskActivities = exports.useTaskCreators = exports.useGetDownloadUrl = exports.taskKeys = exports.useBulkUpdateTasks = exports.useBulkDeleteTasks = exports.useDeleteTask = exports.useUpdateTask = exports.useCreateTask = exports.useTasksInfinite = exports.useTasksByRoadmapId = exports.useAllUserTasks = exports.useTasks = exports.missionKeys = exports.useDeleteMission = exports.useUpdateMission = exports.useCreateMission = exports.useMissionsInfinite = exports.useMissions = exports.useOAuthCallback = exports.useOAuth = exports.useQueryClient = exports.useAuthState = void 0;
17
+ exports.useStudentTutors = exports.useIndigoMe = exports.studentProfileKeys = exports.useStudentPrefilledInfo = exports.useStudentProfile = exports.useCustomTemplateMissionsInfinite = exports.useTemplateMissionAddToRoadmap = exports.useDeleteTemplateMission = exports.useCreateTemplateMission = exports.missionLibraryKeys = exports.useCreateFromPredefinedTasks = exports.useAssignBulkTask = exports.useAssignBulkMission = exports.useCopyTemplateMission = exports.useUpdateTemplateMission = exports.useTemplateMissionDetail = exports.useTemplateTasksInfinite = exports.useTemplateTasks = exports.useTemplateMissionsInfinite = exports.useTemplateMissions = exports.useRoadmapContext = exports.accountKeys = exports.useMyStudents = exports.useCurrentUserRoles = exports.userKeys = exports.useUser = exports.useUsers = exports.useTaskActivities = exports.useTaskCreators = exports.useGetDownloadUrl = exports.taskKeys = exports.useBulkUpdateTasks = exports.useBulkDeleteTasks = exports.useDeleteTask = exports.useUpdateTask = exports.useCreateTask = exports.useTasksInfinite = exports.useTasksByRoadmapId = exports.useAllUserTasks = exports.useTasks = exports.missionKeys = exports.useDeleteMission = exports.useUpdateMission = exports.useCreateMission = exports.useMissionsInfinite = exports.useMissions = exports.useOAuthCallback = exports.useOAuth = exports.useQueryClient = exports.useAuthState = void 0;
18
+ exports.indigoKeys = exports.useTutorStudents = void 0;
18
19
  var useAuthState_1 = require("./useAuthState");
19
20
  Object.defineProperty(exports, "useAuthState", { enumerable: true, get: function () { return useAuthState_1.useAuthState; } });
20
21
  var react_query_1 = require("@tanstack/react-query");
@@ -67,6 +68,8 @@ Object.defineProperty(exports, "useCreateFromPredefinedTasks", { enumerable: tru
67
68
  Object.defineProperty(exports, "missionLibraryKeys", { enumerable: true, get: function () { return useMissionLibrary_1.missionLibraryKeys; } });
68
69
  Object.defineProperty(exports, "useCreateTemplateMission", { enumerable: true, get: function () { return useMissionLibrary_1.useCreateTemplateMission; } });
69
70
  Object.defineProperty(exports, "useDeleteTemplateMission", { enumerable: true, get: function () { return useMissionLibrary_1.useDeleteTemplateMission; } });
71
+ Object.defineProperty(exports, "useTemplateMissionAddToRoadmap", { enumerable: true, get: function () { return useMissionLibrary_1.useTemplateMissionAddToRoadmap; } });
72
+ Object.defineProperty(exports, "useCustomTemplateMissionsInfinite", { enumerable: true, get: function () { return useMissionLibrary_1.useCustomTemplateMissionsInfinite; } });
70
73
  var useStudentProfile_1 = require("./useStudentProfile");
71
74
  Object.defineProperty(exports, "useStudentProfile", { enumerable: true, get: function () { return useStudentProfile_1.useStudentProfile; } });
72
75
  Object.defineProperty(exports, "useStudentPrefilledInfo", { enumerable: true, get: function () { return useStudentProfile_1.useStudentPrefilledInfo; } });
@@ -13,6 +13,9 @@ export declare function useTemplateMissionsInfinite(filters?: Omit<TemplateMissi
13
13
  enabled?: boolean;
14
14
  pageSize?: number;
15
15
  }): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<import("../../core/types").PaginatedResult<TemplateMission>, unknown>, Error>;
16
+ export declare function useCustomTemplateMissionsInfinite(filters?: Omit<TemplateMissionFilters, "start" | "limit">, options?: {
17
+ enabled?: boolean;
18
+ }): import("@tanstack/react-query").UseInfiniteQueryResult<import("@tanstack/react-query").InfiniteData<import("../../core/types").PaginatedResult<TemplateMission>, unknown>, Error>;
16
19
  export declare function useTemplateTasks(filters?: TemplateTaskFilters, enabled?: boolean): import("@tanstack/react-query").UseQueryResult<import("../../core/types").PaginatedResult<TemplateTask>, Error>;
17
20
  export declare function useTemplateTasksInfinite(filters?: Omit<TemplateTaskFilters, "start" | "limit">, options?: {
18
21
  enabled?: boolean;
@@ -36,3 +39,8 @@ export declare function useAssignBulkTask(): import("@tanstack/react-query").Use
36
39
  msg?: string;
37
40
  }, Error, AssignBulkTaskInput[], unknown>;
38
41
  export declare function useCreateFromPredefinedTasks(): import("@tanstack/react-query").UseMutationResult<TemplateTask[], Error, CreateFromPredefinedInput, unknown>;
42
+ export declare function useTemplateMissionAddToRoadmap(): import("@tanstack/react-query").UseMutationResult<{
43
+ missionId: string;
44
+ isNew: boolean;
45
+ updated: boolean;
46
+ }, Error, import("../../core/missionLibrary").AddTemplateMissionToRoadmapInput, unknown>;
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.missionLibraryKeys = void 0;
14
14
  exports.useTemplateMissions = useTemplateMissions;
15
15
  exports.useTemplateMissionsInfinite = useTemplateMissionsInfinite;
16
+ exports.useCustomTemplateMissionsInfinite = useCustomTemplateMissionsInfinite;
16
17
  exports.useTemplateTasks = useTemplateTasks;
17
18
  exports.useTemplateTasksInfinite = useTemplateTasksInfinite;
18
19
  exports.useTemplateMissionDetail = useTemplateMissionDetail;
@@ -23,6 +24,7 @@ exports.useCopyTemplateMission = useCopyTemplateMission;
23
24
  exports.useAssignBulkMission = useAssignBulkMission;
24
25
  exports.useAssignBulkTask = useAssignBulkTask;
25
26
  exports.useCreateFromPredefinedTasks = useCreateFromPredefinedTasks;
27
+ exports.useTemplateMissionAddToRoadmap = useTemplateMissionAddToRoadmap;
26
28
  const react_query_1 = require("@tanstack/react-query");
27
29
  const provider_1 = require("../provider");
28
30
  const useMissions_1 = require("./useMissions");
@@ -66,6 +68,26 @@ function useTemplateMissionsInfinite(filters, options) {
66
68
  enabled,
67
69
  });
68
70
  }
71
+ function useCustomTemplateMissionsInfinite(filters, options) {
72
+ var _a;
73
+ const client = (0, provider_1.useCrimsonClient)();
74
+ const enabled = (_a = options === null || options === void 0 ? void 0 : options.enabled) !== null && _a !== void 0 ? _a : true;
75
+ return (0, react_query_1.useInfiniteQuery)({
76
+ queryKey: [...exports.missionLibraryKeys.all, "custom-missions", "infinite", filters],
77
+ queryFn: () => __awaiter(this, void 0, void 0, function* () {
78
+ return client.library.listCustomTemplateMissions(Object.assign({}, filters));
79
+ }),
80
+ initialPageParam: 0,
81
+ getNextPageParam: (lastPage) => {
82
+ if (!(lastPage === null || lastPage === void 0 ? void 0 : lastPage.pagination))
83
+ return undefined;
84
+ return lastPage.pagination.hasMore
85
+ ? lastPage.pagination.start + lastPage.pagination.limit
86
+ : undefined;
87
+ },
88
+ enabled,
89
+ });
90
+ }
69
91
  // --- Template Tasks ---
70
92
  function useTemplateTasks(filters, enabled = true) {
71
93
  const client = (0, provider_1.useCrimsonClient)();
@@ -120,6 +142,8 @@ function useUpdateTemplateMission() {
120
142
  groups: ['custom']
121
143
  })
122
144
  });
145
+ const customMissionsKey = [...exports.missionLibraryKeys.all, "custom-missions", "infinite"];
146
+ queryClient.invalidateQueries({ queryKey: customMissionsKey });
123
147
  },
124
148
  });
125
149
  }
@@ -134,6 +158,8 @@ function useCreateTemplateMission() {
134
158
  groups: ["custom"],
135
159
  }),
136
160
  });
161
+ const customMissionsKey = [...exports.missionLibraryKeys.all, "custom-missions", "infinite"];
162
+ queryClient.invalidateQueries({ queryKey: customMissionsKey });
137
163
  },
138
164
  });
139
165
  }
@@ -149,6 +175,8 @@ function useDeleteTemplateMission() {
149
175
  queryClient.invalidateQueries({
150
176
  queryKey: exports.missionLibraryKeys.missions(),
151
177
  });
178
+ const customMissionsKey = [...exports.missionLibraryKeys.all, "custom-missions", "infinite"];
179
+ queryClient.invalidateQueries({ queryKey: customMissionsKey });
152
180
  },
153
181
  });
154
182
  }
@@ -230,3 +258,30 @@ function useCreateFromPredefinedTasks() {
230
258
  },
231
259
  });
232
260
  }
261
+ function useTemplateMissionAddToRoadmap() {
262
+ const client = (0, provider_1.useCrimsonClient)();
263
+ const queryClient = (0, react_query_1.useQueryClient)();
264
+ return (0, react_query_1.useMutation)({
265
+ mutationFn: (input) => client.library.addToRoadmap(input),
266
+ onSuccess: (data, variables) => {
267
+ // Invalidate mission list for the user
268
+ queryClient.invalidateQueries({
269
+ queryKey: useMissions_1.missionKeys.list(variables.userId),
270
+ });
271
+ // Invalidate infinite query for the user
272
+ queryClient.invalidateQueries({
273
+ queryKey: [...useMissions_1.missionKeys.all, "infinite", variables.userId],
274
+ });
275
+ // Invalidate all tasks as new tasks might have been created
276
+ queryClient.invalidateQueries({
277
+ queryKey: useTasks_1.taskKeys.all,
278
+ });
279
+ // If we know the updated mission ID, invalidate its detail
280
+ if (data.missionId) {
281
+ queryClient.invalidateQueries({
282
+ queryKey: exports.missionLibraryKeys.missionDetail(data.missionId),
283
+ });
284
+ }
285
+ },
286
+ });
287
+ }
@@ -12,5 +12,17 @@ export interface CrimsonProviderProps {
12
12
  * Examples: 'new-roadmap', 'capstone', 'admin-dashboard'
13
13
  */
14
14
  clientId?: string;
15
+ /**
16
+ * Application name for multi-tenant identity resolution.
17
+ * Required for Indigo API endpoints.
18
+ * @example 'indigo'
19
+ */
20
+ appName?: string;
21
+ /**
22
+ * Initial target tenant for multi-tenant identity resolution.
23
+ * Can be changed dynamically via client.setAppTenant().
24
+ * @example 'crimsonapp', 'collegewise', 'indigo'
25
+ */
26
+ appTenant?: string;
15
27
  }
16
- export declare function CrimsonProvider({ children, apiUrl, allowedParentOrigins, queryClient: externalQueryClient, clientId, }: CrimsonProviderProps): import("react/jsx-runtime").JSX.Element;
28
+ export declare function CrimsonProvider({ children, apiUrl, allowedParentOrigins, queryClient: externalQueryClient, clientId, appName, appTenant, }: CrimsonProviderProps): import("react/jsx-runtime").JSX.Element;
@@ -16,7 +16,7 @@ function useCrimsonClient() {
16
16
  }
17
17
  return ctx.client;
18
18
  }
19
- function CrimsonProvider({ children, apiUrl, allowedParentOrigins, queryClient: externalQueryClient, clientId, }) {
19
+ function CrimsonProvider({ children, apiUrl, allowedParentOrigins, queryClient: externalQueryClient, clientId, appName, appTenant, }) {
20
20
  const [queryClient] = (0, react_1.useState)(() => externalQueryClient ||
21
21
  new react_query_1.QueryClient({
22
22
  defaultOptions: {
@@ -31,7 +31,9 @@ function CrimsonProvider({ children, apiUrl, allowedParentOrigins, queryClient:
31
31
  apiUrl,
32
32
  getToken: () => (0, iframe_1.getToken)() || "",
33
33
  clientId,
34
- }), [apiUrl, clientId]);
34
+ appName,
35
+ appTenant,
36
+ }), [apiUrl, clientId, appName, appTenant]);
35
37
  (0, react_1.useEffect)(() => {
36
38
  const origins = allowedParentOrigins || (0, iframe_1.getDefaultAllowedOrigins)();
37
39
  const cleanup = (0, iframe_1.setupIframeListener)(origins);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@crimson-education/sdk",
3
- "version": "0.3.1",
3
+ "version": "0.3.4",
4
4
  "description": "Crimson SDK for accessing Crimson App APIs",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",