@channel.io/app-sdk-server 0.7.3 → 0.9.0

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 (50) hide show
  1. package/dist/__tests__/native-client.test.js +55 -1
  2. package/dist/__tests__/native-client.test.js.map +1 -1
  3. package/dist/__tests__/proxy-api.test.js +39 -3
  4. package/dist/__tests__/proxy-api.test.js.map +1 -1
  5. package/dist/__tests__/token-manager.test.js +330 -552
  6. package/dist/__tests__/token-manager.test.js.map +1 -1
  7. package/dist/appstore/client.d.ts +3 -0
  8. package/dist/appstore/client.d.ts.map +1 -1
  9. package/dist/appstore/client.js +3 -0
  10. package/dist/appstore/client.js.map +1 -1
  11. package/dist/native/client.d.ts +3 -1
  12. package/dist/native/client.d.ts.map +1 -1
  13. package/dist/native/client.js +0 -19
  14. package/dist/native/client.js.map +1 -1
  15. package/dist/native/proxy-api.d.ts +13 -1
  16. package/dist/native/proxy-api.d.ts.map +1 -1
  17. package/dist/native/proxy-api.js +18 -0
  18. package/dist/native/proxy-api.js.map +1 -1
  19. package/dist/native/proxy-api.types.d.ts +1 -231
  20. package/dist/native/proxy-api.types.d.ts.map +1 -1
  21. package/dist/native/proxy-api.types.js +0 -8
  22. package/dist/native/proxy-api.types.js.map +1 -1
  23. package/dist/nestjs/channel-app.module.d.ts.map +1 -1
  24. package/dist/nestjs/channel-app.module.js +51 -6
  25. package/dist/nestjs/channel-app.module.js.map +1 -1
  26. package/dist/nestjs/channel-app.service.d.ts +6 -14
  27. package/dist/nestjs/channel-app.service.d.ts.map +1 -1
  28. package/dist/nestjs/channel-app.service.js +52 -50
  29. package/dist/nestjs/channel-app.service.js.map +1 -1
  30. package/dist/nestjs/channel-app.service.test.js +121 -23
  31. package/dist/nestjs/channel-app.service.test.js.map +1 -1
  32. package/dist/nestjs/types.d.ts +10 -0
  33. package/dist/nestjs/types.d.ts.map +1 -1
  34. package/dist/nestjs/types.js.map +1 -1
  35. package/dist/simple/channel-app.d.ts +3 -0
  36. package/dist/simple/channel-app.d.ts.map +1 -1
  37. package/dist/simple/channel-app.js +11 -4
  38. package/dist/simple/channel-app.js.map +1 -1
  39. package/dist/simple/index.d.ts.map +1 -1
  40. package/dist/simple/index.js +1 -0
  41. package/dist/simple/index.js.map +1 -1
  42. package/dist/token/cache.js +3 -3
  43. package/dist/token/cache.js.map +1 -1
  44. package/dist/token/manager.d.ts +20 -114
  45. package/dist/token/manager.d.ts.map +1 -1
  46. package/dist/token/manager.js +151 -202
  47. package/dist/token/manager.js.map +1 -1
  48. package/dist/token/types.d.ts +13 -25
  49. package/dist/token/types.d.ts.map +1 -1
  50. package/package.json +2 -2
@@ -1,174 +1,122 @@
1
1
  import { InMemoryTokenCache } from "./cache.js";
2
- /**
3
- * Default refresh buffer: 5 minutes before expiry
4
- */
5
2
  const DEFAULT_REFRESH_BUFFER_MS = 5 * 60 * 1000;
3
+ const DEFAULT_APPSTORE_URL = "https://app-store.channel.io";
4
+ const DEFAULT_REQUEST_TIMEOUT_MS = 10_000;
5
+ const MAX_TOKEN_INVALIDATION_RETRIES = 2;
6
6
  /**
7
- * Default Channel.io API base URL
8
- */
9
- const DEFAULT_API_BASE_URL = "https://api.channel.io";
10
- /**
11
- * Token manager for Channel.io App SDK
12
- *
13
- * Handles token issuance, caching, and automatic refresh for:
14
- * - Manager tokens (for desk/agent operations)
15
- * - User tokens (for user-facing operations)
16
- * - Channel tokens (for channel-level operations)
17
- *
18
- * @example
19
- * ```typescript
20
- * import { TokenManager } from '@channel.io/app-sdk-server';
7
+ * Token manager for AppStore native function tokens.
21
8
  *
22
- * const tokenManager = new TokenManager({
23
- * appId: process.env.APP_ID,
24
- * appSecret: process.env.APP_SECRET,
25
- * });
26
- *
27
- * // Get a manager token (with automatic caching and refresh)
28
- * const token = await tokenManager.getManagerToken({
29
- * channelId: 'channel-123',
30
- * managerId: 'manager-456',
31
- * });
32
- *
33
- * // Use the token for API calls
34
- * await fetch('https://api.channel.io/...', {
35
- * headers: {
36
- * 'Authorization': `Bearer ${token.accessToken}`,
37
- * },
38
- * });
39
- * ```
9
+ * Handles app/channel token issuance, caching, automatic refresh, and
10
+ * concurrent request deduplication. Token exchange is performed through
11
+ * AppStore native `issueToken` / `refreshToken` using `PUT
12
+ * /general/v1/native/functions`.
40
13
  */
41
14
  export class TokenManager {
42
- config;
15
+ appId;
16
+ appSecret;
17
+ appStoreUrl;
18
+ refreshBufferMs;
43
19
  cache;
44
20
  debug;
45
- /**
46
- * In-flight promise map to prevent thundering herd.
47
- * When multiple callers request the same token concurrently,
48
- * only one actual API call is made and the result is shared.
49
- */
21
+ logger;
50
22
  inFlight = new Map();
51
- /**
52
- * Generation counter to prevent stale in-flight promises from overwriting
53
- * cache after invalidateToken() or clearCache() is called.
54
- */
55
23
  cacheGeneration = 0;
56
24
  constructor(config) {
57
- this.config = {
58
- ...config,
59
- apiBaseUrl: config.apiBaseUrl ?? DEFAULT_API_BASE_URL,
60
- refreshBufferMs: config.refreshBufferMs ?? DEFAULT_REFRESH_BUFFER_MS,
61
- };
25
+ this.appId = config.appId;
26
+ this.appSecret = config.appSecret;
27
+ this.appStoreUrl = config.appStoreUrl ?? DEFAULT_APPSTORE_URL;
28
+ this.refreshBufferMs = config.refreshBufferMs ?? DEFAULT_REFRESH_BUFFER_MS;
62
29
  this.cache = config.cacheStorage ?? new InMemoryTokenCache();
63
30
  this.debug = config.debug ?? false;
31
+ this.logger = config.logger;
64
32
  }
65
- /**
66
- * Get a manager token with automatic caching and refresh
67
- */
68
- async getManagerToken(request) {
69
- const cacheKey = this.buildCacheKey("manager", request.channelId, request.managerId);
70
- return this.getOrRefreshToken(cacheKey, () => this.issueManagerToken(request));
71
- }
72
- /**
73
- * Get a user token with automatic caching and refresh
74
- */
75
- async getUserToken(request) {
76
- const cacheKey = this.buildCacheKey("user", request.channelId, request.userId);
77
- return this.getOrRefreshToken(cacheKey, () => this.issueUserToken(request));
78
- }
79
- /**
80
- * Get a channel token with automatic caching and refresh
81
- */
82
33
  async getChannelToken(request) {
83
34
  const cacheKey = this.buildCacheKey("channel", request.channelId);
84
35
  return this.getOrRefreshToken(cacheKey, () => this.issueChannelToken(request));
85
36
  }
86
- /**
87
- * Get an app-level token with automatic caching and refresh.
88
- *
89
- * App tokens are not scoped to a channel and are used for app-level
90
- * operations such as `registerExtension` and
91
- * `registerAlfTasks`.
92
- */
93
37
  async getAppToken() {
94
38
  const cacheKey = this.buildCacheKey("app");
95
39
  return this.getOrRefreshToken(cacheKey, () => this.issueAppToken());
96
40
  }
97
- /**
98
- * Manually refresh a token (bypass cache)
99
- */
100
41
  async refreshToken(refreshToken) {
101
- const response = await this.apiRequest("/app/v1/token/refresh", {
102
- method: "POST",
103
- body: JSON.stringify({ refreshToken }),
42
+ const response = await this.nativeFunctionRequest("refreshToken", {
43
+ refreshToken,
104
44
  });
105
45
  return this.normalizeTokenResponse(response);
106
46
  }
107
- async invalidateToken(type, channelId, entityId) {
108
- const cacheKey = this.buildCacheKey(type, channelId, entityId);
47
+ async invalidateAppToken() {
48
+ await this.invalidateCacheKey(this.buildCacheKey("app"));
49
+ }
50
+ async invalidateChannelToken(channelId) {
51
+ await this.invalidateCacheKey(this.buildCacheKey("channel", channelId));
52
+ }
53
+ async invalidateCacheKey(cacheKey) {
109
54
  this.cacheGeneration++;
110
55
  this.inFlight.delete(cacheKey);
111
56
  await this.cache.delete(cacheKey);
112
57
  }
113
- /**
114
- * Clear all cached tokens
115
- */
116
58
  async clearCache() {
117
59
  this.cacheGeneration++;
118
60
  this.inFlight.clear();
119
61
  await this.cache.clear();
120
62
  }
121
- /**
122
- * Get or refresh a token with automatic caching and thundering herd prevention.
123
- *
124
- * When multiple concurrent callers request the same token, only one API call
125
- * is made. Subsequent callers await the same in-flight promise.
126
- */
127
63
  async getOrRefreshToken(cacheKey, issueToken) {
128
- // Try to get from cache
129
64
  const cached = await this.cache.get(cacheKey);
130
- if (cached) {
131
- // Check if token needs refresh (within buffer period)
132
- const now = Date.now();
133
- const expiresAt = cached.token.expiresAt;
134
- const needsRefresh = now >= expiresAt - this.config.refreshBufferMs;
135
- if (!needsRefresh) {
136
- this.log(`Cache hit for ${cacheKey}`);
137
- return cached.token;
65
+ if (cached && !this.needsRefresh(cached)) {
66
+ this.log(`Cache hit for ${cacheKey}`);
67
+ return cached.token;
68
+ }
69
+ return this.dedup(cacheKey, () => this.getOrRefreshTokenWithRetry(cacheKey, issueToken));
70
+ }
71
+ async getOrRefreshTokenWithRetry(cacheKey, issueToken) {
72
+ for (let attempt = 0; attempt <= MAX_TOKEN_INVALIDATION_RETRIES; attempt++) {
73
+ const token = await this.getOrRefreshTokenOnce(cacheKey, issueToken);
74
+ if (token) {
75
+ return token;
138
76
  }
139
- // Try to refresh using refresh token (with thundering herd prevention)
77
+ if (attempt < MAX_TOKEN_INVALIDATION_RETRIES) {
78
+ this.log(`Token invalidated while resolving ${cacheKey}; retrying ` +
79
+ `(${attempt + 1}/${MAX_TOKEN_INVALIDATION_RETRIES})`);
80
+ }
81
+ }
82
+ throw new TokenManagerError(`Token invalidated while resolving ${cacheKey}; retry limit exceeded`);
83
+ }
84
+ async getOrRefreshTokenOnce(cacheKey, issueToken) {
85
+ const latest = await this.cache.get(cacheKey);
86
+ if (latest && !this.needsRefresh(latest)) {
87
+ this.log(`Cache hit for ${cacheKey}`);
88
+ return latest.token;
89
+ }
90
+ const generation = this.cacheGeneration;
91
+ if (latest) {
140
92
  this.log(`Token expiring soon, refreshing for ${cacheKey}`);
141
- const refreshGen = this.cacheGeneration;
142
93
  try {
143
- return await this.dedup(cacheKey, async () => {
144
- const refreshed = await this.refreshToken(cached.token.refreshToken);
145
- if (this.cacheGeneration === refreshGen) {
146
- await this.cacheToken(cacheKey, refreshed);
147
- }
94
+ const refreshed = await this.refreshToken(latest.token.refreshToken);
95
+ if (await this.cacheTokenIfCurrent(cacheKey, refreshed, generation)) {
148
96
  return refreshed;
149
- });
97
+ }
98
+ this.log(`Token invalidated while refreshing for ${cacheKey}`);
99
+ return null;
150
100
  }
151
101
  catch (error) {
152
- this.log(`Refresh failed, re-issuing token for ${cacheKey}`, error);
153
- // Fall through to issue new token
102
+ this.log(`Refresh failed, re-issuing token for ${cacheKey}`, this.sanitizeLogError(error));
103
+ if (this.cacheGeneration !== generation) {
104
+ this.log(`Token invalidated after refresh failure for ${cacheKey}`);
105
+ return null;
106
+ }
154
107
  }
155
108
  }
156
- // Issue new token (with thundering herd prevention)
157
109
  this.log(`Issuing new token for ${cacheKey}`);
158
- const genBefore = this.cacheGeneration;
159
- return this.dedup(cacheKey, async () => {
160
- const token = await issueToken();
161
- // Only cache if no invalidation occurred while this request was in-flight
162
- if (this.cacheGeneration === genBefore) {
163
- await this.cacheToken(cacheKey, token);
164
- }
110
+ const token = await issueToken();
111
+ if (await this.cacheTokenIfCurrent(cacheKey, token, generation)) {
165
112
  return token;
166
- });
113
+ }
114
+ this.log(`Token invalidated while issuing for ${cacheKey}`);
115
+ return null;
116
+ }
117
+ needsRefresh(cached) {
118
+ return Date.now() >= cached.expiresAt - this.refreshBufferMs;
167
119
  }
168
- /**
169
- * Deduplicate concurrent requests for the same cache key.
170
- * If there's already an in-flight request, return its promise instead of starting a new one.
171
- */
172
120
  async dedup(cacheKey, fn) {
173
121
  const existing = this.inFlight.get(cacheKey);
174
122
  if (existing) {
@@ -181,120 +129,121 @@ export class TokenManager {
181
129
  this.inFlight.set(cacheKey, promise);
182
130
  return promise;
183
131
  }
184
- /**
185
- * Issue a manager token
186
- */
187
- async issueManagerToken(request) {
188
- const response = await this.apiRequest(`/app/v1/channels/${request.channelId}/managers/${request.managerId}/token`, { method: "POST" });
189
- return this.normalizeTokenResponse(response);
190
- }
191
- /**
192
- * Issue a user token
193
- */
194
- async issueUserToken(request) {
195
- const response = await this.apiRequest(`/app/v1/channels/${request.channelId}/users/${request.userId}/token`, { method: "POST" });
196
- return this.normalizeTokenResponse(response);
197
- }
198
- /**
199
- * Issue a channel token
200
- */
201
132
  async issueChannelToken(request) {
202
- const response = await this.apiRequest(`/app/v1/channels/${request.channelId}/token`, { method: "POST" });
133
+ const response = await this.nativeFunctionRequest("issueToken", {
134
+ secret: this.appSecret,
135
+ channelId: request.channelId,
136
+ });
203
137
  return this.normalizeTokenResponse(response);
204
138
  }
205
- /**
206
- * Issue an app-level token (no channelId required)
207
- */
208
139
  async issueAppToken() {
209
- const response = await this.apiRequest("/app/v1/token", { method: "POST" });
140
+ const response = await this.nativeFunctionRequest("issueToken", {
141
+ secret: this.appSecret,
142
+ });
210
143
  return this.normalizeTokenResponse(response);
211
144
  }
212
- /**
213
- * Cache a token
214
- */
215
145
  async cacheToken(key, token) {
146
+ const expiresAt = Date.now() + token.expiresIn * 1000;
216
147
  const cached = {
217
148
  token,
218
149
  cachedAt: Date.now(),
150
+ expiresAt,
219
151
  key,
220
152
  };
221
- // TTL is until token expires
222
- const ttlMs = token.expiresAt - Date.now();
153
+ const ttlMs = expiresAt - Date.now();
223
154
  await this.cache.set(key, cached, ttlMs > 0 ? ttlMs : undefined);
224
155
  }
225
- /**
226
- * Build a cache key
227
- */
228
- buildCacheKey(type, channelId, entityId) {
229
- const parts = [this.config.appId, type];
156
+ async cacheTokenIfCurrent(key, token, generation) {
157
+ if (this.cacheGeneration !== generation) {
158
+ return false;
159
+ }
160
+ await this.cacheToken(key, token);
161
+ return this.cacheGeneration === generation;
162
+ }
163
+ buildCacheKey(type, channelId) {
164
+ const parts = [this.appId, type];
230
165
  if (channelId)
231
166
  parts.push(channelId);
232
- if (entityId)
233
- parts.push(entityId);
234
167
  return parts.join(":");
235
168
  }
236
- /**
237
- * Make an API request to Channel.io
238
- */
239
- async apiRequest(path, options = {}) {
240
- const url = `${this.config.apiBaseUrl}${path}`;
241
- const headers = {
242
- "Content-Type": "application/json",
243
- "X-App-Id": this.config.appId,
244
- "X-App-Secret": this.config.appSecret,
245
- ...options.headers,
246
- };
247
- const response = await fetch(url, {
248
- ...options,
249
- headers,
250
- });
169
+ async nativeFunctionRequest(method, params) {
170
+ const url = `${this.appStoreUrl}/general/v1/native/functions`;
171
+ const controller = new AbortController();
172
+ const timeout = setTimeout(() => controller.abort(), DEFAULT_REQUEST_TIMEOUT_MS);
173
+ let response;
174
+ try {
175
+ response = await fetch(url, {
176
+ method: "PUT",
177
+ headers: {
178
+ "Content-Type": "application/json",
179
+ },
180
+ body: JSON.stringify({ method, params }),
181
+ signal: controller.signal,
182
+ });
183
+ }
184
+ finally {
185
+ clearTimeout(timeout);
186
+ }
251
187
  if (!response.ok) {
252
188
  const errorBody = await response.text();
253
- throw new TokenManagerError(`API request failed: ${String(response.status)} ${response.statusText}`, response.status, errorBody);
189
+ throw new TokenManagerError(`Native function token request failed: ${String(response.status)} ${response.statusText}`, response.status, errorBody);
254
190
  }
255
- return response.json();
191
+ const body = (await response.json());
192
+ if (body.error) {
193
+ throw new TokenManagerError(body.error.message, body.error.code, JSON.stringify(body.error.data));
194
+ }
195
+ return body.result;
256
196
  }
257
- /**
258
- * Normalize token response (handle different API response formats)
259
- */
260
197
  normalizeTokenResponse(response) {
261
- const expiresIn = response.expiresIn ?? response.expires_in ?? 3600;
262
- const refreshTokenExpiresIn = response.refreshTokenExpiresIn ?? response.refresh_token_expires_in ?? 604800;
198
+ if (!response ||
199
+ typeof response.accessToken !== "string" ||
200
+ response.accessToken.length === 0 ||
201
+ typeof response.refreshToken !== "string" ||
202
+ response.refreshToken.length === 0 ||
203
+ typeof response.expiresIn !== "number" ||
204
+ !Number.isFinite(response.expiresIn) ||
205
+ response.expiresIn <= 0) {
206
+ throw new TokenManagerError("Invalid native token response", undefined, JSON.stringify(response));
207
+ }
263
208
  return {
264
- accessToken: response.accessToken ?? response.access_token ?? "",
265
- refreshToken: response.refreshToken ?? response.refresh_token ?? "",
266
- expiresIn,
267
- expiresAt: response.expiresAt ?? Date.now() + expiresIn * 1000,
268
- refreshTokenExpiresAt: response.refreshTokenExpiresAt ?? Date.now() + refreshTokenExpiresIn * 1000,
269
- tokenType: response.tokenType ?? response.token_type ?? "Bearer",
270
- scopes: response.scopes ?? (response.scope ? response.scope.split(" ") : []),
209
+ accessToken: response.accessToken,
210
+ refreshToken: response.refreshToken,
211
+ expiresIn: response.expiresIn,
271
212
  };
272
213
  }
273
- /**
274
- * Debug logging
275
- */
276
214
  log(message, error) {
277
- if (this.debug) {
278
- if (error) {
279
- console.debug(`[TokenManager] ${message}`, error);
280
- }
281
- else {
282
- console.debug(`[TokenManager] ${message}`);
283
- }
215
+ if (!this.debug || !this.logger) {
216
+ return;
217
+ }
218
+ if (error) {
219
+ this.logger.debug(message, error);
220
+ }
221
+ else {
222
+ this.logger.debug(message);
284
223
  }
285
224
  }
286
- /**
287
- * Cleanup resources (call when shutting down)
288
- */
225
+ sanitizeLogError(error) {
226
+ if (error instanceof TokenManagerError) {
227
+ return {
228
+ name: error.name,
229
+ message: error.message,
230
+ statusCode: error.statusCode,
231
+ };
232
+ }
233
+ if (error instanceof Error) {
234
+ return {
235
+ name: error.name,
236
+ message: error.message,
237
+ };
238
+ }
239
+ return { message: String(error) };
240
+ }
289
241
  destroy() {
290
242
  if (this.cache instanceof InMemoryTokenCache) {
291
243
  this.cache.destroy();
292
244
  }
293
245
  }
294
246
  }
295
- /**
296
- * Token manager error
297
- */
298
247
  export class TokenManagerError extends Error {
299
248
  statusCode;
300
249
  responseBody;
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/token/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/token/manager.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,7 @@
2
2
  * Token types and interfaces for Channel.io App SDK
3
3
  */
4
4
  /**
5
- * Token response from Channel.io token issuance
5
+ * Token response from AppStore native issueToken / refreshToken.
6
6
  */
7
7
  export interface TokenResponse {
8
8
  /** Access token for API calls */
@@ -11,14 +11,6 @@ export interface TokenResponse {
11
11
  refreshToken: string;
12
12
  /** Token expiration time in seconds */
13
13
  expiresIn: number;
14
- /** Token expiration timestamp (Unix milliseconds) */
15
- expiresAt: number;
16
- /** Refresh token expiration timestamp (Unix milliseconds) */
17
- refreshTokenExpiresAt: number;
18
- /** Token type (usually "Bearer") */
19
- tokenType: string;
20
- /** Granted scopes */
21
- scopes: string[];
22
14
  }
23
15
  /**
24
16
  * Cached token entry with metadata
@@ -28,6 +20,8 @@ export interface CachedToken {
28
20
  token: TokenResponse;
29
21
  /** When this cache entry was created */
30
22
  cachedAt: number;
23
+ /** Access token expiration timestamp derived by the SDK (Unix milliseconds) */
24
+ expiresAt: number;
31
25
  /** Cache key identifier */
32
26
  key: string;
33
27
  }
@@ -45,6 +39,12 @@ export interface TokenCacheStorage {
45
39
  /** Clear all cached tokens */
46
40
  clear(): Promise<void>;
47
41
  }
42
+ /**
43
+ * Logger interface accepted by TokenManager.
44
+ */
45
+ export interface TokenManagerLogger {
46
+ debug(message: string, ...optionalParams: unknown[]): void;
47
+ }
48
48
  /**
49
49
  * Token manager configuration
50
50
  */
@@ -53,28 +53,16 @@ export interface TokenManagerConfig {
53
53
  appId: string;
54
54
  /** App secret */
55
55
  appSecret: string;
56
- /** Channel.io API base URL (default: https://api.channel.io) */
57
- apiBaseUrl?: string;
56
+ /** AppStore API base URL (default: https://app-store.channel.io) */
57
+ appStoreUrl?: string;
58
58
  /** Custom cache storage (default: in-memory) */
59
59
  cacheStorage?: TokenCacheStorage;
60
60
  /** Buffer time before expiry to trigger refresh (default: 5 minutes) */
61
61
  refreshBufferMs?: number;
62
62
  /** Enable debug logging */
63
63
  debug?: boolean;
64
- }
65
- /**
66
- * Token request for issuing manager token
67
- */
68
- export interface ManagerTokenRequest {
69
- channelId: string;
70
- managerId: string;
71
- }
72
- /**
73
- * Token request for issuing user token
74
- */
75
- export interface UserTokenRequest {
76
- channelId: string;
77
- userId: string;
64
+ /** Logger used when debug logging is enabled */
65
+ logger?: TokenManagerLogger;
78
66
  }
79
67
  /**
80
68
  * Token request for issuing channel token
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/token/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,yBAAyB;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,4BAA4B;IAC5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,8BAA8B;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/token/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,KAAK,EAAE,aAAa,CAAC;IACrB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,gCAAgC;IAChC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC9C,yBAAyB;IACzB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,4BAA4B;IAC5B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,8BAA8B;IAC9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa;IACb,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gDAAgD;IAChD,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,wEAAwE;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@channel.io/app-sdk-server",
3
- "version": "0.7.3",
3
+ "version": "0.9.0",
4
4
  "description": "NestJS server SDK for Channel.io apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,7 +23,7 @@
23
23
  "dependencies": {
24
24
  "zod": "^3.24.1",
25
25
  "zod-to-json-schema": "^3.24.1",
26
- "@channel.io/app-sdk-core": "0.7.3"
26
+ "@channel.io/app-sdk-core": "0.9.0"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@nestjs/common": ">=10.0.0",