@inversifyjs/http-better-auth 5.6.2 → 6.0.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/lib/index.d.ts CHANGED
@@ -3,7 +3,6 @@ export { FastifyUserSession } from './auth/decorators/FastifyUserSession.js';
3
3
  export { ExpressUserSession } from './auth/decorators/ExpressUserSession.js';
4
4
  export { HonoUserSession } from './auth/decorators/HonoUserSession.js';
5
5
  export { UwebSocketsUserSession } from './auth/decorators/UwebSocketsUserSession.js';
6
- export { BetterAuthExpress4ContainerModule } from './auth/services/BetterAuthExpress4ContainerModule.js';
7
6
  export { BetterAuthExpressContainerModule } from './auth/services/BetterAuthExpressContainerModule.js';
8
7
  export { BetterAuthFastifyContainerModule } from './auth/services/BetterAuthFastifyContainerModule.js';
9
8
  export { BetterAuthHonoContainerModule } from './auth/services/BetterAuthHonoContainerModule.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,wDAAwD,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AACzG,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,oCAAoC,EAAE,MAAM,yDAAyD,CAAC;AAE/G,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,wDAAwD,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,oCAAoC,EAAE,MAAM,yDAAyD,CAAC;AAE/G,YAAY,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC"}
package/lib/index.js CHANGED
@@ -3,7 +3,6 @@ export { FastifyUserSession } from './auth/decorators/FastifyUserSession.js';
3
3
  export { ExpressUserSession } from './auth/decorators/ExpressUserSession.js';
4
4
  export { HonoUserSession } from './auth/decorators/HonoUserSession.js';
5
5
  export { UwebSocketsUserSession } from './auth/decorators/UwebSocketsUserSession.js';
6
- export { BetterAuthExpress4ContainerModule } from './auth/services/BetterAuthExpress4ContainerModule.js';
7
6
  export { BetterAuthExpressContainerModule } from './auth/services/BetterAuthExpressContainerModule.js';
8
7
  export { BetterAuthFastifyContainerModule } from './auth/services/BetterAuthFastifyContainerModule.js';
9
8
  export { BetterAuthHonoContainerModule } from './auth/services/BetterAuthHonoContainerModule.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,wDAAwD,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AACzG,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,oCAAoC,EAAE,MAAM,yDAAyD,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,wDAAwD,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,gCAAgC,EAAE,MAAM,qDAAqD,CAAC;AACvG,OAAO,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAC;AACjG,OAAO,EAAE,oCAAoC,EAAE,MAAM,yDAAyD,CAAC"}
package/package.json CHANGED
@@ -5,30 +5,28 @@
5
5
  },
6
6
  "description": "InversifyJs http Better Auth package",
7
7
  "dependencies": {
8
- "@inversifyjs/http-core": "5.6.2",
8
+ "@inversifyjs/http-core": "5.7.0",
9
9
  "statuses": "^2.0.2"
10
10
  },
11
11
  "devDependencies": {
12
- "@hono/node-server": "2.1.3",
12
+ "@hono/node-server": "2.1.4",
13
13
  "@inversifyjs/eslint-plugin-require-extensions": "0.2.0",
14
- "@inversifyjs/http-express": "5.6.2",
15
- "@inversifyjs/http-express-v4": "5.6.2",
16
- "@inversifyjs/http-fastify": "5.6.2",
17
- "@inversifyjs/http-hono": "5.6.2",
18
- "@inversifyjs/http-uwebsockets": "5.6.2",
14
+ "@inversifyjs/http-express": "5.7.0",
15
+ "@inversifyjs/http-fastify": "5.7.0",
16
+ "@inversifyjs/http-hono": "5.7.0",
17
+ "@inversifyjs/http-uwebsockets": "5.7.0",
19
18
  "@stryker-mutator/core": "10.0.0",
20
19
  "@stryker-mutator/typescript-checker": "10.0.0",
21
20
  "@stryker-mutator/vitest-runner": "10.0.0",
22
21
  "@types/better-sqlite3": "^9.6.0",
23
22
  "@types/express": "5.0.6",
24
- "@types/express4": "npm:@types/express@4.17.25",
25
23
  "@types/node": "24.19.1",
26
24
  "@types/statuses": "2.0.6",
27
25
  "@vitest/coverage-v8": "5.0.3",
28
26
  "better-sqlite3": "^13.0.3",
29
- "eslint": "10.11.0",
27
+ "eslint": "10.12.0",
30
28
  "fastify": "5.12.5",
31
- "hono": "4.13.12",
29
+ "hono": "4.13.13",
32
30
  "prettier": "3.9.9",
33
31
  "rimraf": "6.1.3",
34
32
  "typescript": "6.0.3",
@@ -66,7 +64,7 @@
66
64
  "type": "git",
67
65
  "url": "git+https://github.com/inversify/monorepo.git"
68
66
  },
69
- "version": "5.6.2",
67
+ "version": "6.0.0",
70
68
  "type": "module",
71
69
  "scripts": {
72
70
  "build": "tsc",
@@ -1,3 +0,0 @@
1
- import { type Newable } from 'inversify';
2
- export declare function buildBetterAuthExpress4Controller(basePath: string, serviceIdentifier: symbol): Newable<unknown>;
3
- //# sourceMappingURL=buildBetterAuthExpress4Controller.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildBetterAuthExpress4Controller.d.ts","sourceRoot":"","sources":["../../../src/auth/calculations/buildBetterAuthExpress4Controller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAKjD,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC,CA4BlB"}
@@ -1,45 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- var __param = (this && this.__param) || function (paramIndex, decorator) {
11
- return function (target, key) { decorator(target, key, paramIndex); }
12
- };
13
- import { All, Controller, Request, Response } from '@inversifyjs/http-core';
14
- import { toNodeHandler } from 'better-auth/node';
15
- import { inject } from 'inversify';
16
- import { betterAuthServiceIdentifier } from '../models/betterAuthServiceIdentifier.js';
17
- export function buildBetterAuthExpress4Controller(basePath, serviceIdentifier) {
18
- let BetterAuthExpress4Controller = class BetterAuthExpress4Controller {
19
- #handler;
20
- constructor(auth) {
21
- this.#handler = toNodeHandler(auth);
22
- }
23
- async handle(req, res) {
24
- await this.#handler(req, res);
25
- }
26
- };
27
- __decorate([
28
- All('/*'),
29
- __param(0, Request()),
30
- __param(1, Response()),
31
- __metadata("design:type", Function),
32
- __metadata("design:paramtypes", [Object, Object]),
33
- __metadata("design:returntype", Promise)
34
- ], BetterAuthExpress4Controller.prototype, "handle", null);
35
- BetterAuthExpress4Controller = __decorate([
36
- Controller({
37
- path: basePath,
38
- serviceIdentifier,
39
- }),
40
- __param(0, inject(betterAuthServiceIdentifier)),
41
- __metadata("design:paramtypes", [Object])
42
- ], BetterAuthExpress4Controller);
43
- return BetterAuthExpress4Controller;
44
- }
45
- //# sourceMappingURL=buildBetterAuthExpress4Controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildBetterAuthExpress4Controller.js","sourceRoot":"","sources":["../../../src/auth/calculations/buildBetterAuthExpress4Controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE5E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAgB,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AAEvF,MAAM,UAAU,iCAAiC,CAC/C,QAAgB,EAChB,iBAAyB;IAEzB,IAIM,4BAA4B,GAJlC,MAIM,4BAA4B;QACvB,QAAQ,CAGE;QAEnB,YAEE,IAA0B;YAE1B,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QAGY,AAAN,KAAK,CAAC,MAAM,CACN,GAAoB,EACnB,GAAqB;YAEjC,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,CAAC;KACF,CAAA;IANc;QADZ,GAAG,CAAC,IAAI,CAAC;QAEP,WAAA,OAAO,EAAE,CAAA;QACT,WAAA,QAAQ,EAAE,CAAA;;;;8DAGZ;IAnBG,4BAA4B;QAJjC,UAAU,CAAC;YACV,IAAI,EAAE,QAAQ;YACd,iBAAiB;SAClB,CAAC;QAQG,WAAA,MAAM,CAAC,2BAA2B,CAAC,CAAA;;OAPlC,4BAA4B,CAoBjC;IAED,OAAO,4BAA4B,CAAC;AACtC,CAAC"}
@@ -1,9 +0,0 @@
1
- import { type BetterAuthOptions } from 'better-auth';
2
- import { type Newable } from 'inversify';
3
- import { type BetterAuth } from '../models/BetterAuth.js';
4
- import { BaseBetterAuthContainerModule } from './BaseBetterAuthContainerModule.js';
5
- export declare class BetterAuthExpress4ContainerModule<TOptions extends BetterAuthOptions, TFactory extends (...args: any[]) => BetterAuth<TOptions> | Promise<BetterAuth<TOptions>>> extends BaseBetterAuthContainerModule<TOptions, TFactory> {
6
- static fromOptions<TOptions extends BetterAuthOptions>(basePath: string, betterAuth: BetterAuth<TOptions>, transform?: (controllerClass: Newable<unknown>) => Newable<unknown>): BetterAuthExpress4ContainerModule<TOptions, () => BetterAuth<TOptions>>;
7
- protected _buildBetterAuthControllerClass(basePath: string, serviceIdentifier: symbol): Newable<unknown>;
8
- }
9
- //# sourceMappingURL=BetterAuthExpress4ContainerModule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BetterAuthExpress4ContainerModule.d.ts","sourceRoot":"","sources":["../../../src/auth/services/BetterAuthExpress4ContainerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,qBAAa,iCAAiC,CAC5C,QAAQ,SAAS,iBAAiB,EAClC,QAAQ,SAAS,CAEf,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,UAAU,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CACzD,SAAQ,6BAA6B,CAAC,QAAQ,EAAE,QAAQ,CAAC;WAC3C,WAAW,CAAC,QAAQ,SAAS,iBAAiB,EAC1D,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,EAChC,SAAS,CAAC,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAClE,iCAAiC,CAAC,QAAQ,EAAE,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;cASvD,+BAA+B,CAChD,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,OAAO,CAAC;CAGpB"}
@@ -1,11 +0,0 @@
1
- import { buildBetterAuthExpress4Controller } from '../calculations/buildBetterAuthExpress4Controller.js';
2
- import { BaseBetterAuthContainerModule } from './BaseBetterAuthContainerModule.js';
3
- export class BetterAuthExpress4ContainerModule extends BaseBetterAuthContainerModule {
4
- static fromOptions(basePath, betterAuth, transform) {
5
- return new BetterAuthExpress4ContainerModule(basePath, () => betterAuth, [], transform);
6
- }
7
- _buildBetterAuthControllerClass(basePath, serviceIdentifier) {
8
- return buildBetterAuthExpress4Controller(basePath, serviceIdentifier);
9
- }
10
- }
11
- //# sourceMappingURL=BetterAuthExpress4ContainerModule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BetterAuthExpress4ContainerModule.js","sourceRoot":"","sources":["../../../src/auth/services/BetterAuthExpress4ContainerModule.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iCAAiC,EAAE,MAAM,sDAAsD,CAAC;AAEzG,OAAO,EAAE,6BAA6B,EAAE,MAAM,oCAAoC,CAAC;AAEnF,MAAM,OAAO,iCAMX,SAAQ,6BAAiD;IAClD,MAAM,CAAC,WAAW,CACvB,QAAgB,EAChB,UAAgC,EAChC,SAAmE;QAEnE,OAAO,IAAI,iCAAiC,CAC1C,QAAQ,EACR,GAAG,EAAE,CAAC,UAAU,EAChB,EAAE,EACF,SAAS,CACV,CAAC;IACJ,CAAC;IAEkB,+BAA+B,CAChD,QAAgB,EAChB,iBAAyB;QAEzB,OAAO,iCAAiC,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IACxE,CAAC;CACF"}
@@ -1,4 +0,0 @@
1
- import { type Container } from 'inversify';
2
- import { type Server } from '../../../models/Server.js';
3
- export declare function buildExpress4Server(container: Container): Promise<Server>;
4
- //# sourceMappingURL=buildExpress4Server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildExpress4Server.d.ts","sourceRoot":"","sources":["../../../../../src/server/adapter/express4/actions/buildExpress4Server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAExD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,MAAM,CAAC,CAgDjB"}
@@ -1,36 +0,0 @@
1
- import http from 'node:http';
2
- import { InversifyExpressHttpAdapter } from '@inversifyjs/http-express-v4';
3
- export async function buildExpress4Server(container) {
4
- const adapter = new InversifyExpressHttpAdapter(container, {
5
- logger: true,
6
- useCookies: true,
7
- });
8
- const application = await adapter.build();
9
- const httpServer = http.createServer(application);
10
- return new Promise((resolve) => {
11
- httpServer.listen(0, '127.0.0.1', () => {
12
- const address = httpServer.address();
13
- if (address === null || typeof address === 'string') {
14
- throw new Error('Failed to get server address');
15
- }
16
- const server = {
17
- host: address.address,
18
- port: address.port,
19
- shutdown: async () => {
20
- await new Promise((resolve, reject) => {
21
- httpServer.close((error) => {
22
- if (error !== undefined) {
23
- reject(error);
24
- }
25
- else {
26
- resolve();
27
- }
28
- });
29
- });
30
- },
31
- };
32
- resolve(server);
33
- });
34
- });
35
- }
36
- //# sourceMappingURL=buildExpress4Server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"buildExpress4Server.js","sourceRoot":"","sources":["../../../../../src/server/adapter/express4/actions/buildExpress4Server.ts"],"names":[],"mappings":"AAAA,OAAO,IAA8B,MAAM,WAAW,CAAC;AAGvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAM3E,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAoB;IAEpB,MAAM,OAAO,GAAgC,IAAI,2BAA2B,CAC1E,SAAS,EACT;QACE,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE,IAAI;KACjB,CACF,CAAC;IAEF,MAAM,WAAW,GAAyB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IAChE,MAAM,UAAU,GAAgB,IAAI,CAAC,YAAY,CAC/C,WAA8B,CAC/B,CAAC;IAEF,OAAO,IAAI,OAAO,CAChB,CAAC,OAAsD,EAAE,EAAE;QACzD,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAgC,UAAU,CAAC,OAAO,EAAE,CAAC;YAElE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YAED,MAAM,MAAM,GAAW;gBACrB,IAAI,EAAE,OAAO,CAAC,OAAO;gBACrB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,KAAK,IAAmB,EAAE;oBAClC,MAAM,IAAI,OAAO,CACf,CACE,OAAkD,EAClD,MAAkC,EAClC,EAAE;wBACF,UAAU,CAAC,KAAK,CAAC,CAAC,KAAwB,EAAE,EAAE;4BAC5C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gCACxB,MAAM,CAAC,KAAK,CAAC,CAAC;4BAChB,CAAC;iCAAM,CAAC;gCACN,OAAO,EAAE,CAAC;4BACZ,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC,CACF,CAAC;gBACJ,CAAC;aACF,CAAC;YAEF,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;AACJ,CAAC"}