@channel.io/app-sdk-server 0.7.3 → 0.8.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.
- package/dist/__tests__/native-client.test.js +55 -1
- package/dist/__tests__/native-client.test.js.map +1 -1
- package/dist/__tests__/proxy-api.test.js +39 -3
- package/dist/__tests__/proxy-api.test.js.map +1 -1
- package/dist/__tests__/token-manager.test.js +330 -552
- package/dist/__tests__/token-manager.test.js.map +1 -1
- package/dist/appstore/client.d.ts +3 -0
- package/dist/appstore/client.d.ts.map +1 -1
- package/dist/appstore/client.js +3 -0
- package/dist/appstore/client.js.map +1 -1
- package/dist/native/client.d.ts +3 -1
- package/dist/native/client.d.ts.map +1 -1
- package/dist/native/client.js +0 -19
- package/dist/native/client.js.map +1 -1
- package/dist/native/proxy-api.d.ts +13 -1
- package/dist/native/proxy-api.d.ts.map +1 -1
- package/dist/native/proxy-api.js +18 -0
- package/dist/native/proxy-api.js.map +1 -1
- package/dist/native/proxy-api.types.d.ts +1 -231
- package/dist/native/proxy-api.types.d.ts.map +1 -1
- package/dist/native/proxy-api.types.js +0 -8
- package/dist/native/proxy-api.types.js.map +1 -1
- package/dist/nestjs/channel-app.module.d.ts.map +1 -1
- package/dist/nestjs/channel-app.module.js +51 -6
- package/dist/nestjs/channel-app.module.js.map +1 -1
- package/dist/nestjs/channel-app.service.d.ts +6 -14
- package/dist/nestjs/channel-app.service.d.ts.map +1 -1
- package/dist/nestjs/channel-app.service.js +52 -50
- package/dist/nestjs/channel-app.service.js.map +1 -1
- package/dist/nestjs/channel-app.service.test.js +121 -23
- package/dist/nestjs/channel-app.service.test.js.map +1 -1
- package/dist/nestjs/types.d.ts +10 -0
- package/dist/nestjs/types.d.ts.map +1 -1
- package/dist/nestjs/types.js.map +1 -1
- package/dist/simple/channel-app.d.ts +3 -0
- package/dist/simple/channel-app.d.ts.map +1 -1
- package/dist/simple/channel-app.js +11 -4
- package/dist/simple/channel-app.js.map +1 -1
- package/dist/simple/index.d.ts.map +1 -1
- package/dist/simple/index.js +1 -0
- package/dist/simple/index.js.map +1 -1
- package/dist/token/cache.js +3 -3
- package/dist/token/cache.js.map +1 -1
- package/dist/token/manager.d.ts +20 -114
- package/dist/token/manager.d.ts.map +1 -1
- package/dist/token/manager.js +151 -202
- package/dist/token/manager.js.map +1 -1
- package/dist/token/types.d.ts +13 -25
- package/dist/token/types.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/nestjs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/nestjs/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,IAAI,CAAC;IACzD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,KAAK,YAAY,GAAG,IAAI,GAAG,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,gBAAgB,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,mDAAmD;IAEnD,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,uBAAuB,CAAC,GAAG,uBAAuB,CAAC;IAC3F,8CAA8C;IAC9C,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,wBAAwB;IACxB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,eAAgC,CAAC"}
|
package/dist/nestjs/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/nestjs/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/nestjs/types.ts"],"names":[],"mappings":"AAgFA;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC"}
|
|
@@ -65,6 +65,9 @@ export declare class ChannelApp {
|
|
|
65
65
|
}
|
|
66
66
|
/**
|
|
67
67
|
* Simple service for handling function calls
|
|
68
|
+
*
|
|
69
|
+
* @deprecated This legacy simple service is unused by the SDK and will be removed in the next minor release.
|
|
70
|
+
* Use `ChannelAppModule` with decorators instead.
|
|
68
71
|
*/
|
|
69
72
|
declare class ChannelAppSimpleService implements OnModuleInit {
|
|
70
73
|
private readonly functions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-app.d.ts","sourceRoot":"","sources":["../../src/simple/channel-app.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,YAAY,EAQlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,oBAAoB,EAEpB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAQlC,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;gBAE/B,OAAO,EAAE,gBAAgB;IAIrC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EACjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EACpE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,IAAI;IAyBP;;OAEG;IACH,QAAQ,IAAI,aAAa;
|
|
1
|
+
{"version":3,"file":"channel-app.d.ts","sourceRoot":"","sources":["../../src/simple/channel-app.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAIlB,KAAK,YAAY,EAQlB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,oBAAoB,EAEpB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAQlC,UAAU,wBAAwB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;gBAE/B,OAAO,EAAE,gBAAgB;IAIrC;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC,SAAS,EACjC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EACpE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,IAAI;IAyBP;;OAEG;IACH,QAAQ,IAAI,aAAa;CAe1B;AAED;;;;;GAKG;AACH,cACM,uBAAwB,YAAW,YAAY;IAKjD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAI7C,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,CAAC,EAEhD,OAAO,EAAE,gBAAgB;IAGtC,YAAY;YAcJ,YAAY;IAsCpB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyBrF,YAAY,IAAI,oBAAoB;CAwBrC;AA2CD,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -10,7 +10,6 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
|
-
var ChannelAppSimpleService_1;
|
|
14
13
|
import { Module, Injectable, Inject, Logger, Controller, Put, Body, Param, HttpException, HttpStatus, } from "@nestjs/common";
|
|
15
14
|
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
16
15
|
import { FunctionNotFoundError } from "@channel.io/app-sdk-core";
|
|
@@ -86,9 +85,11 @@ export class ChannelApp {
|
|
|
86
85
|
providers: [
|
|
87
86
|
{ provide: SIMPLE_FUNCTIONS, useValue: this.functions },
|
|
88
87
|
{ provide: SIMPLE_OPTIONS, useValue: this.options },
|
|
88
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
89
89
|
ChannelAppSimpleService,
|
|
90
90
|
],
|
|
91
91
|
controllers: [ChannelAppSimpleController],
|
|
92
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
92
93
|
exports: [ChannelAppSimpleService],
|
|
93
94
|
global: true,
|
|
94
95
|
};
|
|
@@ -96,11 +97,14 @@ export class ChannelApp {
|
|
|
96
97
|
}
|
|
97
98
|
/**
|
|
98
99
|
* Simple service for handling function calls
|
|
100
|
+
*
|
|
101
|
+
* @deprecated This legacy simple service is unused by the SDK and will be removed in the next minor release.
|
|
102
|
+
* Use `ChannelAppModule` with decorators instead.
|
|
99
103
|
*/
|
|
100
|
-
let ChannelAppSimpleService =
|
|
104
|
+
let ChannelAppSimpleService = class ChannelAppSimpleService {
|
|
101
105
|
functions;
|
|
102
106
|
options;
|
|
103
|
-
logger = new Logger(
|
|
107
|
+
logger = new Logger("ChannelAppSimpleService");
|
|
104
108
|
constructor(functions, options) {
|
|
105
109
|
this.functions = functions;
|
|
106
110
|
this.options = options;
|
|
@@ -117,6 +121,7 @@ let ChannelAppSimpleService = ChannelAppSimpleService_1 = class ChannelAppSimple
|
|
|
117
121
|
}
|
|
118
122
|
}
|
|
119
123
|
async autoRegister() {
|
|
124
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
120
125
|
const client = new AppStoreClient({
|
|
121
126
|
appId: this.options.appId,
|
|
122
127
|
appSecret: this.options.appSecret,
|
|
@@ -191,7 +196,7 @@ let ChannelAppSimpleService = ChannelAppSimpleService_1 = class ChannelAppSimple
|
|
|
191
196
|
};
|
|
192
197
|
}
|
|
193
198
|
};
|
|
194
|
-
ChannelAppSimpleService =
|
|
199
|
+
ChannelAppSimpleService = __decorate([
|
|
195
200
|
Injectable(),
|
|
196
201
|
__param(0, Inject(SIMPLE_FUNCTIONS)),
|
|
197
202
|
__param(1, Inject(SIMPLE_OPTIONS)),
|
|
@@ -202,6 +207,7 @@ ChannelAppSimpleService = ChannelAppSimpleService_1 = __decorate([
|
|
|
202
207
|
*/
|
|
203
208
|
let ChannelAppSimpleController = class ChannelAppSimpleController {
|
|
204
209
|
service;
|
|
210
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
205
211
|
constructor(service) {
|
|
206
212
|
this.service = service;
|
|
207
213
|
}
|
|
@@ -240,5 +246,6 @@ let ChannelAppSimpleModule = class ChannelAppSimpleModule {
|
|
|
240
246
|
ChannelAppSimpleModule = __decorate([
|
|
241
247
|
Module({})
|
|
242
248
|
], ChannelAppSimpleModule);
|
|
249
|
+
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
243
250
|
export { ChannelAppSimpleService };
|
|
244
251
|
//# sourceMappingURL=channel-app.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-app.js","sourceRoot":"","sources":["../../src/simple/channel-app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel-app.js","sourceRoot":"","sources":["../../src/simple/channel-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simple/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simple/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/simple/index.js
CHANGED
package/dist/simple/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/simple/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/simple/index.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC"}
|
package/dist/token/cache.js
CHANGED
|
@@ -17,14 +17,14 @@ export class InMemoryTokenCache {
|
|
|
17
17
|
if (!entry)
|
|
18
18
|
return Promise.resolve(null);
|
|
19
19
|
// Check if expired
|
|
20
|
-
if (Date.now()
|
|
20
|
+
if (Date.now() >= entry.expiresAt) {
|
|
21
21
|
this.cache.delete(key);
|
|
22
22
|
return Promise.resolve(null);
|
|
23
23
|
}
|
|
24
24
|
return Promise.resolve(entry.token);
|
|
25
25
|
}
|
|
26
26
|
set(key, token, ttlMs) {
|
|
27
|
-
const expiresAt = ttlMs ? Date.now() + ttlMs : token.
|
|
27
|
+
const expiresAt = ttlMs !== undefined ? Date.now() + ttlMs : token.expiresAt;
|
|
28
28
|
this.cache.set(key, { token, expiresAt });
|
|
29
29
|
return Promise.resolve();
|
|
30
30
|
}
|
|
@@ -42,7 +42,7 @@ export class InMemoryTokenCache {
|
|
|
42
42
|
cleanup() {
|
|
43
43
|
const now = Date.now();
|
|
44
44
|
for (const [key, entry] of this.cache.entries()) {
|
|
45
|
-
if (now
|
|
45
|
+
if (now >= entry.expiresAt) {
|
|
46
46
|
this.cache.delete(key);
|
|
47
47
|
}
|
|
48
48
|
}
|
package/dist/token/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/token/cache.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,KAAK,GAAG,IAAI,GAAG,EAAqD,CAAC;IACrE,eAAe,GAA0C,IAAI,CAAC;IAEtE,YAAY,iBAAiB,GAAG,KAAK;QACnC,sCAAsC;QACtC,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzC,mBAAmB;QACnB,IAAI,IAAI,CAAC,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/token/cache.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,KAAK,GAAG,IAAI,GAAG,EAAqD,CAAC;IACrE,eAAe,GAA0C,IAAI,CAAC;IAEtE,YAAY,iBAAiB,GAAG,KAAK;QACnC,sCAAsC;QACtC,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACxB,CAAC;IAED,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAEzC,mBAAmB;QACnB,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAkB,EAAE,KAAc;QACjD,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QAC7E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;OAEG;IACK,OAAO;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI;YACrB,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACpC,CAAC;IACJ,CAAC;CACF"}
|
package/dist/token/manager.d.ts
CHANGED
|
@@ -1,140 +1,46 @@
|
|
|
1
|
-
import type { TokenManagerConfig, TokenResponse,
|
|
1
|
+
import type { TokenManagerConfig, TokenResponse, ChannelTokenRequest } from "./types.js";
|
|
2
2
|
/**
|
|
3
|
-
* Token manager for
|
|
3
|
+
* Token manager for AppStore native function tokens.
|
|
4
4
|
*
|
|
5
|
-
* Handles token issuance, caching,
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```typescript
|
|
12
|
-
* import { TokenManager } from '@channel.io/app-sdk-server';
|
|
13
|
-
*
|
|
14
|
-
* const tokenManager = new TokenManager({
|
|
15
|
-
* appId: process.env.APP_ID,
|
|
16
|
-
* appSecret: process.env.APP_SECRET,
|
|
17
|
-
* });
|
|
18
|
-
*
|
|
19
|
-
* // Get a manager token (with automatic caching and refresh)
|
|
20
|
-
* const token = await tokenManager.getManagerToken({
|
|
21
|
-
* channelId: 'channel-123',
|
|
22
|
-
* managerId: 'manager-456',
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* // Use the token for API calls
|
|
26
|
-
* await fetch('https://api.channel.io/...', {
|
|
27
|
-
* headers: {
|
|
28
|
-
* 'Authorization': `Bearer ${token.accessToken}`,
|
|
29
|
-
* },
|
|
30
|
-
* });
|
|
31
|
-
* ```
|
|
5
|
+
* Handles app/channel token issuance, caching, automatic refresh, and
|
|
6
|
+
* concurrent request deduplication. Token exchange is performed through
|
|
7
|
+
* AppStore native `issueToken` / `refreshToken` using `PUT
|
|
8
|
+
* /general/v1/native/functions`.
|
|
32
9
|
*/
|
|
33
10
|
export declare class TokenManager {
|
|
34
|
-
private readonly
|
|
11
|
+
private readonly appId;
|
|
12
|
+
private readonly appSecret;
|
|
13
|
+
private readonly appStoreUrl;
|
|
14
|
+
private readonly refreshBufferMs;
|
|
35
15
|
private readonly cache;
|
|
36
16
|
private readonly debug;
|
|
37
|
-
|
|
38
|
-
* In-flight promise map to prevent thundering herd.
|
|
39
|
-
* When multiple callers request the same token concurrently,
|
|
40
|
-
* only one actual API call is made and the result is shared.
|
|
41
|
-
*/
|
|
17
|
+
private readonly logger;
|
|
42
18
|
private readonly inFlight;
|
|
43
|
-
/**
|
|
44
|
-
* Generation counter to prevent stale in-flight promises from overwriting
|
|
45
|
-
* cache after invalidateToken() or clearCache() is called.
|
|
46
|
-
*/
|
|
47
19
|
private cacheGeneration;
|
|
48
20
|
constructor(config: TokenManagerConfig);
|
|
49
|
-
/**
|
|
50
|
-
* Get a manager token with automatic caching and refresh
|
|
51
|
-
*/
|
|
52
|
-
getManagerToken(request: ManagerTokenRequest): Promise<TokenResponse>;
|
|
53
|
-
/**
|
|
54
|
-
* Get a user token with automatic caching and refresh
|
|
55
|
-
*/
|
|
56
|
-
getUserToken(request: UserTokenRequest): Promise<TokenResponse>;
|
|
57
|
-
/**
|
|
58
|
-
* Get a channel token with automatic caching and refresh
|
|
59
|
-
*/
|
|
60
21
|
getChannelToken(request: ChannelTokenRequest): Promise<TokenResponse>;
|
|
61
|
-
/**
|
|
62
|
-
* Get an app-level token with automatic caching and refresh.
|
|
63
|
-
*
|
|
64
|
-
* App tokens are not scoped to a channel and are used for app-level
|
|
65
|
-
* operations such as `registerExtension` and
|
|
66
|
-
* `registerAlfTasks`.
|
|
67
|
-
*/
|
|
68
22
|
getAppToken(): Promise<TokenResponse>;
|
|
69
|
-
/**
|
|
70
|
-
* Manually refresh a token (bypass cache)
|
|
71
|
-
*/
|
|
72
23
|
refreshToken(refreshToken: string): Promise<TokenResponse>;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
invalidateToken(type: "app", channelId?: undefined, entityId?: undefined): Promise<void>;
|
|
77
|
-
invalidateToken(type: "manager" | "user" | "channel", channelId: string, entityId?: string): Promise<void>;
|
|
78
|
-
/**
|
|
79
|
-
* Clear all cached tokens
|
|
80
|
-
*/
|
|
24
|
+
invalidateAppToken(): Promise<void>;
|
|
25
|
+
invalidateChannelToken(channelId: string): Promise<void>;
|
|
26
|
+
private invalidateCacheKey;
|
|
81
27
|
clearCache(): Promise<void>;
|
|
82
|
-
/**
|
|
83
|
-
* Get or refresh a token with automatic caching and thundering herd prevention.
|
|
84
|
-
*
|
|
85
|
-
* When multiple concurrent callers request the same token, only one API call
|
|
86
|
-
* is made. Subsequent callers await the same in-flight promise.
|
|
87
|
-
*/
|
|
88
28
|
private getOrRefreshToken;
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
*/
|
|
29
|
+
private getOrRefreshTokenWithRetry;
|
|
30
|
+
private getOrRefreshTokenOnce;
|
|
31
|
+
private needsRefresh;
|
|
93
32
|
private dedup;
|
|
94
|
-
/**
|
|
95
|
-
* Issue a manager token
|
|
96
|
-
*/
|
|
97
|
-
private issueManagerToken;
|
|
98
|
-
/**
|
|
99
|
-
* Issue a user token
|
|
100
|
-
*/
|
|
101
|
-
private issueUserToken;
|
|
102
|
-
/**
|
|
103
|
-
* Issue a channel token
|
|
104
|
-
*/
|
|
105
33
|
private issueChannelToken;
|
|
106
|
-
/**
|
|
107
|
-
* Issue an app-level token (no channelId required)
|
|
108
|
-
*/
|
|
109
34
|
private issueAppToken;
|
|
110
|
-
/**
|
|
111
|
-
* Cache a token
|
|
112
|
-
*/
|
|
113
35
|
private cacheToken;
|
|
114
|
-
|
|
115
|
-
* Build a cache key
|
|
116
|
-
*/
|
|
36
|
+
private cacheTokenIfCurrent;
|
|
117
37
|
private buildCacheKey;
|
|
118
|
-
|
|
119
|
-
* Make an API request to Channel.io
|
|
120
|
-
*/
|
|
121
|
-
private apiRequest;
|
|
122
|
-
/**
|
|
123
|
-
* Normalize token response (handle different API response formats)
|
|
124
|
-
*/
|
|
38
|
+
private nativeFunctionRequest;
|
|
125
39
|
private normalizeTokenResponse;
|
|
126
|
-
/**
|
|
127
|
-
* Debug logging
|
|
128
|
-
*/
|
|
129
40
|
private log;
|
|
130
|
-
|
|
131
|
-
* Cleanup resources (call when shutting down)
|
|
132
|
-
*/
|
|
41
|
+
private sanitizeLogError;
|
|
133
42
|
destroy(): void;
|
|
134
43
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Token manager error
|
|
137
|
-
*/
|
|
138
44
|
export declare class TokenManagerError extends Error {
|
|
139
45
|
readonly statusCode?: number | undefined;
|
|
140
46
|
readonly responseBody?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/token/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EAEb,mBAAmB,
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/token/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EAEb,mBAAmB,EAGpB,MAAM,YAAY,CAAC;AAuBpB;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,EAAE,kBAAkB;IAUhC,eAAe,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrE,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC;IAKrC,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAO1D,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhD,kBAAkB;IAM1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAMnB,iBAAiB;YAcjB,0BAA0B;YAuB1B,qBAAqB;IAwCnC,OAAO,CAAC,YAAY;YAIN,KAAK;YAcL,iBAAiB;YAQjB,aAAa;YAOb,UAAU;YAYV,mBAAmB;IAYjC,OAAO,CAAC,aAAa;YAMP,qBAAqB;IA2CnC,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,GAAG;IAYX,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,IAAI,IAAI;CAKhB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aAGxB,UAAU,CAAC,EAAE,MAAM;aACnB,YAAY,CAAC,EAAE,MAAM;gBAFrC,OAAO,EAAE,MAAM,EACC,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,YAAY,CAAC,EAAE,MAAM,YAAA;CAKxC"}
|