You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							206 lines
						
					
					
						
							6.3 KiB
						
					
					
				
			
		
		
	
	
							206 lines
						
					
					
						
							6.3 KiB
						
					
					
				| import cookie from '../plugin';
 | |
| import { expectType } from 'tsd';
 | |
| import * as fastifyCookieStar from '..';
 | |
| import fastifyCookieCjsImport = require('..');
 | |
| import fastifyCookieDefault, { fastifyCookie as fastifyCookieNamed  } from '..';
 | |
| import fastify, { FastifyInstance,  FastifyReply, setCookieWrapper } from 'fastify';
 | |
| 
 | |
| const fastifyCookieCjs = require('..');
 | |
| 
 | |
| const app: FastifyInstance = fastify();
 | |
| app.register(fastifyCookieNamed);
 | |
| app.register(fastifyCookieDefault);
 | |
| app.register(fastifyCookieCjs);
 | |
| app.register(fastifyCookieCjsImport.default);
 | |
| app.register(fastifyCookieCjsImport.fastifyCookie);
 | |
| app.register(fastifyCookieStar.default);
 | |
| app.register(fastifyCookieStar.fastifyCookie);
 | |
| 
 | |
| expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieNamed);
 | |
| expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieDefault);
 | |
| expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieCjsImport.default);
 | |
| expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieCjsImport.fastifyCookie);
 | |
| expectType<fastifyCookieStar.FastifyCookie>(fastifyCookieStar.default);
 | |
| expectType<fastifyCookieStar.FastifyCookie>(
 | |
|   fastifyCookieStar.fastifyCookie
 | |
| );
 | |
| expectType<any>(fastifyCookieCjs);
 | |
| 
 | |
| expectType<fastifyCookieStar.Sign>(fastifyCookieDefault.sign);
 | |
| expectType<fastifyCookieStar.Unsign>(fastifyCookieDefault.unsign);
 | |
| expectType<fastifyCookieStar.SignerFactory >(fastifyCookieDefault.signerFactory );
 | |
| 
 | |
| expectType<fastifyCookieStar.Sign>(fastifyCookieNamed.sign);
 | |
| expectType<fastifyCookieStar.Unsign>(fastifyCookieNamed.unsign);
 | |
| expectType<fastifyCookieStar.SignerFactory >(fastifyCookieNamed.signerFactory );
 | |
| 
 | |
| const server = fastify();
 | |
| 
 | |
| server.register(cookie);
 | |
| 
 | |
| server.after((_err) => {
 | |
|   expectType<{ [key: string]: string }>(
 | |
|     // See https://github.com/fastify/fastify-cookie#manual-cookie-parsing
 | |
|     server.parseCookie('sessionId=aYb4uTIhdBXC')
 | |
|   );
 | |
| 
 | |
|   server.get('/', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     expectType<string | undefined>(test);
 | |
| 
 | |
|     expectType<setCookieWrapper>(reply.cookie);
 | |
|     expectType<setCookieWrapper>(reply.setCookie);
 | |
| 
 | |
|     expectType<FastifyReply>(
 | |
|       reply
 | |
|         .setCookie('test', test!, { domain: 'example.com', path: '/' })
 | |
|         .clearCookie('foo')
 | |
|         .send({ hello: 'world' })
 | |
|     );
 | |
|   });
 | |
| });
 | |
| 
 | |
| const serverWithHttp2 = fastify({ http2: true });
 | |
| 
 | |
| serverWithHttp2.register(cookie);
 | |
| 
 | |
| serverWithHttp2.after(() => {
 | |
|   serverWithHttp2.get('/', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     reply
 | |
|       .setCookie('test', test!, { domain: 'example.com', path: '/' })
 | |
|       .clearCookie('foo')
 | |
|       .send({ hello: 'world' });
 | |
|   });
 | |
| });
 | |
| 
 | |
| const testSamesiteOptionsApp = fastify();
 | |
| 
 | |
| testSamesiteOptionsApp.register(cookie);
 | |
| testSamesiteOptionsApp.after(() => {
 | |
|   server.get('/test-samesite-option-true', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     reply.setCookie('test', test!, { sameSite: true }).send({ hello: 'world' });
 | |
|   });
 | |
|   server.get('/test-samesite-option-false', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     reply.setCookie('test', test!, { sameSite: false }).send({ hello: 'world' });
 | |
|   });
 | |
|   server.get('/test-samesite-option-lax', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     reply.setCookie('test', test!, { sameSite: 'lax' }).send({ hello: 'world' });
 | |
|   });
 | |
|   server.get('/test-samesite-option-strict', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     reply
 | |
|       .setCookie('test', test!, { sameSite: 'strict' })
 | |
|       .send({ hello: 'world' });
 | |
|   });
 | |
|   server.get('/test-samesite-option-none', (request, reply) => {
 | |
|     const test = request.cookies.test;
 | |
|     reply
 | |
|       .setCookie('test', test!, { sameSite: 'none' })
 | |
|       .send({ hello: 'world' });
 | |
|   });
 | |
| });
 | |
| 
 | |
| const appWithImplicitHttpSigned = fastify();
 | |
| 
 | |
| appWithImplicitHttpSigned.register(cookie, {
 | |
|   secret: 'testsecret',
 | |
| });
 | |
| appWithImplicitHttpSigned.register(cookie, {
 | |
|   secret: 'testsecret',
 | |
|   algorithm: 'sha512'
 | |
| });
 | |
| appWithImplicitHttpSigned.after(() => {
 | |
|   server.get('/', (request, reply) => {
 | |
|     appWithImplicitHttpSigned.unsignCookie(request.cookies.test!);
 | |
|     appWithImplicitHttpSigned.unsignCookie('test');
 | |
| 
 | |
|     reply.unsignCookie(request.cookies.test!);
 | |
|     reply.unsignCookie('test');
 | |
| 
 | |
|     request.unsignCookie(request.cookies.anotherTest!);
 | |
|     request.unsignCookie('anotherTest');
 | |
| 
 | |
|     reply.send({ hello: 'world' });
 | |
|   });
 | |
| });
 | |
| 
 | |
| const appWithRotationSecret = fastify();
 | |
| 
 | |
| appWithRotationSecret.register(cookie, {
 | |
|   secret: ['testsecret'],
 | |
| });
 | |
| appWithRotationSecret.after(() => {
 | |
|   server.get('/', (request, reply) => {
 | |
|     reply.unsignCookie(request.cookies.test!);
 | |
|     const { valid, renew, value } = reply.unsignCookie('test');
 | |
| 
 | |
|     expectType<boolean>(valid);
 | |
|     expectType<boolean>(renew);
 | |
|     expectType<string | null>(value);
 | |
| 
 | |
|     reply.send({ hello: 'world' });
 | |
|   });
 | |
| });
 | |
| 
 | |
| const appWithParseOptions = fastify();
 | |
| 
 | |
| const parseOptions: fastifyCookieStar.CookieSerializeOptions = {
 | |
|   domain: 'example.com',
 | |
|   encode: (value: string) => value,
 | |
|   expires: new Date(),
 | |
|   httpOnly: true,
 | |
|   maxAge: 3600,
 | |
|   path: '/',
 | |
|   sameSite: 'lax',
 | |
|   secure: true,
 | |
|   signed: true,
 | |
| };
 | |
| expectType<fastifyCookieStar.CookieSerializeOptions>(parseOptions);
 | |
| 
 | |
| appWithParseOptions.register(cookie, {
 | |
|   secret: 'testsecret',
 | |
|   parseOptions,
 | |
| });
 | |
| appWithParseOptions.after(() => {
 | |
|   server.get('/', (request, reply) => {
 | |
|     const { valid, renew, value } = reply.unsignCookie(request.cookies.test!);
 | |
| 
 | |
|     expectType<boolean>(valid);
 | |
|     expectType<boolean>(renew);
 | |
|     expectType<string | null>(value);
 | |
|   });
 | |
| });
 | |
| 
 | |
| const appWithCustomSigner = fastify()
 | |
| 
 | |
| appWithCustomSigner.register(cookie, {
 | |
|   secret: {
 | |
|     sign: (x) => x + '.signed',
 | |
|     unsign: (x) => {
 | |
|       if (x.endsWith('.signed')) { return { renew: false, valid: true, value: x.slice(0, -7) } }
 | |
|       return { renew: false, valid: false, value: null }
 | |
|     }
 | |
|   }
 | |
| })
 | |
| appWithCustomSigner.after(() => {
 | |
|   server.get('/', (request, reply) => {
 | |
|     reply.unsignCookie(request.cookies.test!)
 | |
|     const { valid, renew, value } = reply.unsignCookie('test')
 | |
| 
 | |
|     expectType<boolean>(valid)
 | |
|     expectType<boolean>(renew)
 | |
|     expectType<string | null>(value)
 | |
| 
 | |
|     reply.send({ hello: 'world' })
 | |
|   })
 | |
| })
 | |
| 
 | |
| new fastifyCookieStar.Signer('secretString')
 | |
| new fastifyCookieStar.Signer(['secretStringInArray'])
 | |
| const signer = new fastifyCookieStar.Signer(['secretStringInArray'], 'sha256')
 | |
| signer.sign('Lorem Ipsum')
 | |
| signer.unsign('Lorem Ipsum') |