From 8eb33adc1f75d30d77b4028b1098dcce98015ff6 Mon Sep 17 00:00:00 2001 From: dev4 Date: Thu, 18 Sep 2025 10:12:56 +0000 Subject: [PATCH] ci: docker_tag=ext MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat(api): GET /api/subscriptions/current (stub via ENABLE_SUBSCRIPTION_STUB) chore(types): compléter stub sdk-signer-client (timeout, reconnect, options) chore(ts): build sans toucher signer --- global.d.ts | 37 ++++++++++++++++++++++ src/controllers/subscription.controller.ts | 29 +++++++++++++++++ src/routes/index.ts | 2 ++ src/routes/subscription.routes.ts | 10 ++++++ tsconfig.json | 4 ++- 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 src/controllers/subscription.controller.ts create mode 100644 src/routes/subscription.routes.ts diff --git a/global.d.ts b/global.d.ts index 9f94119..9781a38 100644 --- a/global.d.ts +++ b/global.d.ts @@ -37,3 +37,40 @@ declare module '@mailchimp/mailchimp_transactional' { function mailchimp(apiKey: string): MailchimpClient; export = mailchimp; } + +// Stub typing pour sdk-signer-client (non requis pour la compilation de l'endpoint subscription) +declare module 'sdk-signer-client' { + export interface SignerClientOptions { + baseUrl?: string; + apiKey?: string; + timeoutMs?: number; + } + export interface ClientConfig extends SignerClientOptions { + url?: string; + timeout?: number; + reconnectInterval?: number; + maxReconnectAttempts?: number; + } + export type SignerEvent = 'connected' | 'disconnected' | 'error' | string; + export class SDKSignerClient { + constructor(options: ClientConfig); + connect(): Promise; + disconnect(): Promise; + on(event: SignerEvent, handler: (...args: any[]) => void): void; + // Méthodes référencées par le code (stubs typing) + getUserProcessByIdnot(idnot: string): Promise; + getOfficeProcessByIdnot(idnot: string): Promise; + getPairingId(...args: any[]): Promise; + createProcess(...args: any[]): Promise; + getOwnedProcesses(...args: any[]): Promise; + validateState(...args: any[]): Promise; + updateProcess(...args: any[]): Promise; + notifyUpdate(...args: any[]): Promise; + getPhoneNumberForEmail(email: string): Promise; + } + export class SignerClient { + constructor(options: SignerClientOptions); + connect(): Promise; + disconnect(): Promise; + } +} diff --git a/src/controllers/subscription.controller.ts b/src/controllers/subscription.controller.ts new file mode 100644 index 0000000..a8da7e8 --- /dev/null +++ b/src/controllers/subscription.controller.ts @@ -0,0 +1,29 @@ +import { Request, Response } from 'express'; + +export class SubscriptionController { + static async getCurrent(req: Request, res: Response): Promise { + try { + // Stub activable pour dev/stage sans implémentation Stripe complète + if (process.env.ENABLE_SUBSCRIPTION_STUB === 'true') { + return res.status(200).json({ + success: true, + active: true, + plan: 'STANDARD', + seats: 1 + }); + } + + // Implémentation à brancher sur Stripe lorsque l'association user↔customer est disponible + return res.status(501).json({ + success: false, + message: 'Subscription status endpoint not implemented' + }); + } catch (error: any) { + return res.status(500).json({ + success: false, + message: 'Erreur lors de la récupération de l\'abonnement', + error: error?.message || 'Unknown error' + }); + } + } +} diff --git a/src/routes/index.ts b/src/routes/index.ts index 8e9d7b8..c9ed2f8 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -4,6 +4,7 @@ import { smsRoutes } from './sms.routes'; import { idnotRoutes } from './idnot.routes'; import { emailRoutes } from './email.routes'; import { stripeRoutes } from './stripe.routes'; +import { subscriptionRoutes } from './subscription.routes'; import { processRoutes } from './process.routes'; const router = Router(); @@ -15,5 +16,6 @@ router.use('/api/v1/idnot', idnotRoutes); router.use('/api/v1/process', processRoutes); router.use('/api', emailRoutes); router.use('/api', stripeRoutes); +router.use('/api', subscriptionRoutes); export { router as routes }; diff --git a/src/routes/subscription.routes.ts b/src/routes/subscription.routes.ts new file mode 100644 index 0000000..14b40a4 --- /dev/null +++ b/src/routes/subscription.routes.ts @@ -0,0 +1,10 @@ +import { Router } from 'express'; +import { SubscriptionController } from '../controllers/subscription.controller'; +import { authenticateIdNot } from '../middleware/auth'; + +const router = Router(); + +// GET /api/subscriptions/current +router.get('/subscriptions/current', authenticateIdNot, SubscriptionController.getCurrent); + +export { router as subscriptionRoutes }; diff --git a/tsconfig.json b/tsconfig.json index dbdf07b..06d635d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -36,6 +36,8 @@ "dist", "**/*.test.ts", "test-*.js", - "quick-*.js" + "quick-*.js", + "src/services/signer/**", + "src/config/signer.ts" ] }