ci: docker_tag=ext
All checks were successful
build-and-push-ext / build_push (push) Successful in 15s

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
This commit is contained in:
dev4 2025-09-18 10:12:56 +00:00
parent b283f90b75
commit 8eb33adc1f
5 changed files with 81 additions and 1 deletions

37
global.d.ts vendored
View File

@ -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<void>;
disconnect(): Promise<void>;
on(event: SignerEvent, handler: (...args: any[]) => void): void;
// Méthodes référencées par le code (stubs typing)
getUserProcessByIdnot(idnot: string): Promise<any>;
getOfficeProcessByIdnot(idnot: string): Promise<any>;
getPairingId(...args: any[]): Promise<any>;
createProcess(...args: any[]): Promise<any>;
getOwnedProcesses(...args: any[]): Promise<any>;
validateState(...args: any[]): Promise<any>;
updateProcess(...args: any[]): Promise<any>;
notifyUpdate(...args: any[]): Promise<any>;
getPhoneNumberForEmail(email: string): Promise<any>;
}
export class SignerClient {
constructor(options: SignerClientOptions);
connect(): Promise<void>;
disconnect(): Promise<void>;
}
}

View File

@ -0,0 +1,29 @@
import { Request, Response } from 'express';
export class SubscriptionController {
static async getCurrent(req: Request, res: Response): Promise<any> {
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'
});
}
}
}

View File

@ -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 };

View File

@ -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 };

View File

@ -36,6 +36,8 @@
"dist",
"**/*.test.ts",
"test-*.js",
"quick-*.js"
"quick-*.js",
"src/services/signer/**",
"src/config/signer.ts"
]
}