Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

daf-core

Package Overview
Dependencies
Maintainers
6
Versions
151
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

daf-core - npm Package Compare versions

Comparing version 5.0.0 to 5.1.0

2

build/graphql/graphql-core.d.ts

@@ -89,3 +89,3 @@ import { Agent } from '../agent';

};
export declare const typeDefs = "\n enum WhereOperation {\n Not\n LessThan\n LessThanOrEqual\n MoreThan\n MoreThanOrEqual\n Equal\n Like\n Between\n In\n Any\n IsNull\n }\n\n enum OrderDirection {\n ASC\n DESC\n }\n\n enum MessagesColumns {\n saveDate\n updateDate\n createdAt\n expiresAt\n threadId\n type\n replyTo\n replyUrl\n from\n to\n }\n\n input MessagesWhere {\n column: MessagesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input MessagesOrder {\n column: MessagesColumns!\n direction: OrderDirection!\n }\n\n input MessagesInput {\n where: [MessagesWhere]\n order: [MessagesOrder]\n take: Int\n skip: Int\n }\n\n\n\n enum IdentitiesColumns {\n saveDate\n updateDate\n did\n provider\n }\n\n input IdentitiesWhere {\n column: IdentitiesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input IdentitiesOrder {\n column: IdentitiesColumns!\n direction: OrderDirection!\n }\n\n input IdentitiesInput {\n where: [IdentitiesWhere]\n order: [IdentitiesOrder]\n take: Int\n skip: Int\n }\n\n\n enum PresentationsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n audience\n }\n\n input PresentationsWhere {\n column: PresentationsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input PresentationsOrder {\n column: PresentationsColumns!\n direction: OrderDirection!\n }\n\n input PresentationsInput {\n where: [PresentationsWhere]\n order: [PresentationsOrder]\n take: Int\n skip: Int\n }\n\n\n enum CredentialsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n subject\n }\n\n input CredentialsWhere {\n column: CredentialsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input CredentialsOrder {\n column: CredentialsColumns!\n direction: OrderDirection!\n }\n\n input CredentialsInput {\n where: [CredentialsWhere]\n order: [CredentialsOrder]\n take: Int\n skip: Int\n }\n\n\n enum ClaimsColumns {\n issuanceDate\n expirationDate\n context\n credentialType\n type\n value\n issuer\n subject\n }\n\n input ClaimsWhere {\n column: ClaimsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input ClaimsOrder {\n column: ClaimsColumns!\n direction: OrderDirection!\n }\n\n input ClaimsInput {\n where: [ClaimsWhere]\n order: [ClaimsOrder]\n take: Int\n skip: Int\n }\n\n\n\n extend type Query {\n identity(did: String!): Identity\n identities(input: IdentitiesInput): [Identity]\n message(id: ID!): Message\n messages(input: MessagesInput): [Message]\n messagesCount(input: MessagesInput): Int\n presentation(hash: ID!): Presentation\n presentations(input: PresentationsInput): [Presentation]\n presentationsCount(input: PresentationsInput): Int\n credential(hash: ID!): Credential\n credentials(input: CredentialsInput): [Credential]\n credentialsCount(input: CredentialsInput): Int\n claim(hash: ID!): Claim\n claims(input: ClaimsInput): [Claim]\n claimsCount(input: ClaimsInput): Int\n }\n\n input MetaDataInput {\n type: String!\n value: String\n }\n extend type Mutation {\n handleMessage(raw: String!, meta: [MetaDataInput], save: Boolean = true): Message\n }\n\n\n extend type Identity {\n shortDid: String!\n latestClaimValue(type: String): String\n saveDate: Date!\n updateDate: Date!\n }\n\n scalar Object\n scalar Date\n \n type Message {\n id: ID!\n saveDate: Date!\n updateDate: Date!\n createdAt: Date\n expiresAt: Date\n threadId: String\n type: String!\n raw: String\n data: Object\n replyTo: [String]\n replyUrl: String\n from: Identity\n to: Identity\n metaData: [MetaData]\n presentations: [Presentation]\n credentials: [Credential]\n }\n\n type MetaData {\n type: String!\n value: String\n }\n\n type Presentation {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n audience: [Identity]!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentials: [Credential]\n messages: [Message]\n }\n \n type Credential {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n subject: Identity\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentialSubject: Object\n claims: [Claim]\n presentations: [Presentation]\n messages: [Message]\n }\n\n type Claim {\n hash: ID!\n issuer: Identity!\n subject: Identity\n credential: Credential!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n credentialType: [String]\n type: String!\n value: String!\n isObj: Boolean\n } \n";
export declare const typeDefs = "\n enum WhereOperation {\n Not\n LessThan\n LessThanOrEqual\n MoreThan\n MoreThanOrEqual\n Equal\n Like\n Between\n In\n Any\n IsNull\n }\n\n enum OrderDirection {\n ASC\n DESC\n }\n\n enum MessagesColumns {\n saveDate\n updateDate\n createdAt\n expiresAt\n threadId\n type\n replyTo\n replyUrl\n from\n to\n }\n\n input MessagesWhere {\n column: MessagesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input MessagesOrder {\n column: MessagesColumns!\n direction: OrderDirection!\n }\n\n input MessagesInput {\n where: [MessagesWhere]\n order: [MessagesOrder]\n take: Int\n skip: Int\n }\n\n\n\n enum IdentitiesColumns {\n saveDate\n updateDate\n did\n provider\n }\n\n input IdentitiesWhere {\n column: IdentitiesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input IdentitiesOrder {\n column: IdentitiesColumns!\n direction: OrderDirection!\n }\n\n input IdentitiesInput {\n where: [IdentitiesWhere]\n order: [IdentitiesOrder]\n take: Int\n skip: Int\n }\n\n\n enum PresentationsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n audience\n }\n\n input PresentationsWhere {\n column: PresentationsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input PresentationsOrder {\n column: PresentationsColumns!\n direction: OrderDirection!\n }\n\n input PresentationsInput {\n where: [PresentationsWhere]\n order: [PresentationsOrder]\n take: Int\n skip: Int\n }\n\n\n enum CredentialsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n subject\n }\n\n input CredentialsWhere {\n column: CredentialsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input CredentialsOrder {\n column: CredentialsColumns!\n direction: OrderDirection!\n }\n\n input CredentialsInput {\n where: [CredentialsWhere]\n order: [CredentialsOrder]\n take: Int\n skip: Int\n }\n\n\n enum ClaimsColumns {\n issuanceDate\n expirationDate\n context\n credentialType\n type\n value\n issuer\n subject\n }\n\n input ClaimsWhere {\n column: ClaimsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input ClaimsOrder {\n column: ClaimsColumns!\n direction: OrderDirection!\n }\n\n input ClaimsInput {\n where: [ClaimsWhere]\n order: [ClaimsOrder]\n take: Int\n skip: Int\n }\n\n\n\n extend type Query {\n identity(did: String!): Identity\n identities(input: IdentitiesInput): [Identity]\n message(id: ID!): Message\n messages(input: MessagesInput): [Message]\n messagesCount(input: MessagesInput): Int\n presentation(hash: ID!): Presentation\n presentations(input: PresentationsInput): [Presentation]\n presentationsCount(input: PresentationsInput): Int\n credential(hash: ID!): Credential\n credentials(input: CredentialsInput): [Credential]\n credentialsCount(input: CredentialsInput): Int\n claim(hash: ID!): Claim\n claims(input: ClaimsInput): [Claim]\n claimsCount(input: ClaimsInput): Int\n }\n\n input MetaDataInput {\n type: String!\n value: String\n }\n extend type Mutation {\n handleMessage(raw: String!, metaData: [MetaDataInput], save: Boolean = true): Message\n }\n\n\n extend type Identity {\n shortDid: String!\n latestClaimValue(type: String): String\n saveDate: Date!\n updateDate: Date!\n }\n\n scalar Object\n scalar Date\n \n type Message {\n id: ID!\n saveDate: Date!\n updateDate: Date!\n createdAt: Date\n expiresAt: Date\n threadId: String\n type: String!\n raw: String\n data: Object\n replyTo: [String]\n replyUrl: String\n from: Identity\n to: Identity\n metaData: [MetaData]\n presentations: [Presentation]\n credentials: [Credential]\n }\n\n type MetaData {\n type: String!\n value: String\n }\n\n type Presentation {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n audience: [Identity]!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentials: [Credential]\n messages: [Message]\n }\n \n type Credential {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n subject: Identity\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentialSubject: Object\n claims: [Claim]\n presentations: [Presentation]\n messages: [Message]\n }\n\n type Claim {\n hash: ID!\n issuer: Identity!\n subject: Identity\n credential: Credential!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n credentialType: [String]\n type: String!\n value: String!\n isObj: Boolean\n } \n";
//# sourceMappingURL=graphql-core.d.ts.map

@@ -396,3 +396,13 @@ "use strict";

handleMessage: function (_, args, ctx) { return __awaiter(void 0, void 0, void 0, function () {
var authMeta;
return __generator(this, function (_a) {
if (ctx.authenticatedDid) {
authMeta = { type: "sender", value: ctx.authenticatedDid };
if (Array.isArray(args.metaData)) {
args.metaData.push(authMeta);
}
else {
args.metaData = [authMeta];
}
}
return [2 /*return*/, ctx.agent.handleMessage(args)];

@@ -682,3 +692,3 @@ });

};
exports.typeDefs = "\n enum WhereOperation {\n Not\n LessThan\n LessThanOrEqual\n MoreThan\n MoreThanOrEqual\n Equal\n Like\n Between\n In\n Any\n IsNull\n }\n\n enum OrderDirection {\n ASC\n DESC\n }\n\n enum MessagesColumns {\n saveDate\n updateDate\n createdAt\n expiresAt\n threadId\n type\n replyTo\n replyUrl\n from\n to\n }\n\n input MessagesWhere {\n column: MessagesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input MessagesOrder {\n column: MessagesColumns!\n direction: OrderDirection!\n }\n\n input MessagesInput {\n where: [MessagesWhere]\n order: [MessagesOrder]\n take: Int\n skip: Int\n }\n\n\n\n enum IdentitiesColumns {\n saveDate\n updateDate\n did\n provider\n }\n\n input IdentitiesWhere {\n column: IdentitiesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input IdentitiesOrder {\n column: IdentitiesColumns!\n direction: OrderDirection!\n }\n\n input IdentitiesInput {\n where: [IdentitiesWhere]\n order: [IdentitiesOrder]\n take: Int\n skip: Int\n }\n\n\n enum PresentationsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n audience\n }\n\n input PresentationsWhere {\n column: PresentationsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input PresentationsOrder {\n column: PresentationsColumns!\n direction: OrderDirection!\n }\n\n input PresentationsInput {\n where: [PresentationsWhere]\n order: [PresentationsOrder]\n take: Int\n skip: Int\n }\n\n\n enum CredentialsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n subject\n }\n\n input CredentialsWhere {\n column: CredentialsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input CredentialsOrder {\n column: CredentialsColumns!\n direction: OrderDirection!\n }\n\n input CredentialsInput {\n where: [CredentialsWhere]\n order: [CredentialsOrder]\n take: Int\n skip: Int\n }\n\n\n enum ClaimsColumns {\n issuanceDate\n expirationDate\n context\n credentialType\n type\n value\n issuer\n subject\n }\n\n input ClaimsWhere {\n column: ClaimsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input ClaimsOrder {\n column: ClaimsColumns!\n direction: OrderDirection!\n }\n\n input ClaimsInput {\n where: [ClaimsWhere]\n order: [ClaimsOrder]\n take: Int\n skip: Int\n }\n\n\n\n extend type Query {\n identity(did: String!): Identity\n identities(input: IdentitiesInput): [Identity]\n message(id: ID!): Message\n messages(input: MessagesInput): [Message]\n messagesCount(input: MessagesInput): Int\n presentation(hash: ID!): Presentation\n presentations(input: PresentationsInput): [Presentation]\n presentationsCount(input: PresentationsInput): Int\n credential(hash: ID!): Credential\n credentials(input: CredentialsInput): [Credential]\n credentialsCount(input: CredentialsInput): Int\n claim(hash: ID!): Claim\n claims(input: ClaimsInput): [Claim]\n claimsCount(input: ClaimsInput): Int\n }\n\n input MetaDataInput {\n type: String!\n value: String\n }\n extend type Mutation {\n handleMessage(raw: String!, meta: [MetaDataInput], save: Boolean = true): Message\n }\n\n\n extend type Identity {\n shortDid: String!\n latestClaimValue(type: String): String\n saveDate: Date!\n updateDate: Date!\n }\n\n scalar Object\n scalar Date\n \n type Message {\n id: ID!\n saveDate: Date!\n updateDate: Date!\n createdAt: Date\n expiresAt: Date\n threadId: String\n type: String!\n raw: String\n data: Object\n replyTo: [String]\n replyUrl: String\n from: Identity\n to: Identity\n metaData: [MetaData]\n presentations: [Presentation]\n credentials: [Credential]\n }\n\n type MetaData {\n type: String!\n value: String\n }\n\n type Presentation {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n audience: [Identity]!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentials: [Credential]\n messages: [Message]\n }\n \n type Credential {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n subject: Identity\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentialSubject: Object\n claims: [Claim]\n presentations: [Presentation]\n messages: [Message]\n }\n\n type Claim {\n hash: ID!\n issuer: Identity!\n subject: Identity\n credential: Credential!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n credentialType: [String]\n type: String!\n value: String!\n isObj: Boolean\n } \n";
exports.typeDefs = "\n enum WhereOperation {\n Not\n LessThan\n LessThanOrEqual\n MoreThan\n MoreThanOrEqual\n Equal\n Like\n Between\n In\n Any\n IsNull\n }\n\n enum OrderDirection {\n ASC\n DESC\n }\n\n enum MessagesColumns {\n saveDate\n updateDate\n createdAt\n expiresAt\n threadId\n type\n replyTo\n replyUrl\n from\n to\n }\n\n input MessagesWhere {\n column: MessagesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input MessagesOrder {\n column: MessagesColumns!\n direction: OrderDirection!\n }\n\n input MessagesInput {\n where: [MessagesWhere]\n order: [MessagesOrder]\n take: Int\n skip: Int\n }\n\n\n\n enum IdentitiesColumns {\n saveDate\n updateDate\n did\n provider\n }\n\n input IdentitiesWhere {\n column: IdentitiesColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input IdentitiesOrder {\n column: IdentitiesColumns!\n direction: OrderDirection!\n }\n\n input IdentitiesInput {\n where: [IdentitiesWhere]\n order: [IdentitiesOrder]\n take: Int\n skip: Int\n }\n\n\n enum PresentationsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n audience\n }\n\n input PresentationsWhere {\n column: PresentationsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input PresentationsOrder {\n column: PresentationsColumns!\n direction: OrderDirection!\n }\n\n input PresentationsInput {\n where: [PresentationsWhere]\n order: [PresentationsOrder]\n take: Int\n skip: Int\n }\n\n\n enum CredentialsColumns {\n id\n issuanceDate\n expirationDate\n context\n type\n issuer\n subject\n }\n\n input CredentialsWhere {\n column: CredentialsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input CredentialsOrder {\n column: CredentialsColumns!\n direction: OrderDirection!\n }\n\n input CredentialsInput {\n where: [CredentialsWhere]\n order: [CredentialsOrder]\n take: Int\n skip: Int\n }\n\n\n enum ClaimsColumns {\n issuanceDate\n expirationDate\n context\n credentialType\n type\n value\n issuer\n subject\n }\n\n input ClaimsWhere {\n column: ClaimsColumns!\n value: [String]\n not: Boolean\n op: WhereOperation\n }\n\n input ClaimsOrder {\n column: ClaimsColumns!\n direction: OrderDirection!\n }\n\n input ClaimsInput {\n where: [ClaimsWhere]\n order: [ClaimsOrder]\n take: Int\n skip: Int\n }\n\n\n\n extend type Query {\n identity(did: String!): Identity\n identities(input: IdentitiesInput): [Identity]\n message(id: ID!): Message\n messages(input: MessagesInput): [Message]\n messagesCount(input: MessagesInput): Int\n presentation(hash: ID!): Presentation\n presentations(input: PresentationsInput): [Presentation]\n presentationsCount(input: PresentationsInput): Int\n credential(hash: ID!): Credential\n credentials(input: CredentialsInput): [Credential]\n credentialsCount(input: CredentialsInput): Int\n claim(hash: ID!): Claim\n claims(input: ClaimsInput): [Claim]\n claimsCount(input: ClaimsInput): Int\n }\n\n input MetaDataInput {\n type: String!\n value: String\n }\n extend type Mutation {\n handleMessage(raw: String!, metaData: [MetaDataInput], save: Boolean = true): Message\n }\n\n\n extend type Identity {\n shortDid: String!\n latestClaimValue(type: String): String\n saveDate: Date!\n updateDate: Date!\n }\n\n scalar Object\n scalar Date\n \n type Message {\n id: ID!\n saveDate: Date!\n updateDate: Date!\n createdAt: Date\n expiresAt: Date\n threadId: String\n type: String!\n raw: String\n data: Object\n replyTo: [String]\n replyUrl: String\n from: Identity\n to: Identity\n metaData: [MetaData]\n presentations: [Presentation]\n credentials: [Credential]\n }\n\n type MetaData {\n type: String!\n value: String\n }\n\n type Presentation {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n audience: [Identity]!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentials: [Credential]\n messages: [Message]\n }\n \n type Credential {\n hash: ID!\n id: String\n raw: String!\n issuer: Identity!\n subject: Identity\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n type: [String]\n credentialSubject: Object\n claims: [Claim]\n presentations: [Presentation]\n messages: [Message]\n }\n\n type Claim {\n hash: ID!\n issuer: Identity!\n subject: Identity\n credential: Credential!\n issuanceDate: Date!\n expirationDate: Date\n context: [String]\n credentialType: [String]\n type: String!\n value: String!\n isObj: Boolean\n } \n";
//# sourceMappingURL=graphql-core.js.map

@@ -23,6 +23,6 @@ export { Agent, EventTypes, Resolver } from './agent';

import { Presentation } from './entities/presentation';
import { Message } from './entities/message';
import { Message, MetaData } from './entities/message';
export declare const Entities: (typeof Key | typeof Identity | typeof Claim | typeof Credential | typeof Presentation | typeof Message)[];
export { KeyType, Key, Identity, Message, Claim, Credential, Presentation };
export { KeyType, Key, Identity, Message, Claim, Credential, Presentation, MetaData };
export { migrations } from './migrations';
//# sourceMappingURL=index.d.ts.map

@@ -6,2 +6,18 @@ # Change Log

# [5.1.0](https://github.com/uport-project/daf/compare/v5.0.0...v5.1.0) (2020-05-06)
### Bug Fixes
* resolvers and handlers didn't match schema ([85c38a2](https://github.com/uport-project/daf/commit/85c38a206a163e3ed601b1ad2ac330f275d7ac4a))
### Features
* pass along authentication metadata into handlers ([199426b](https://github.com/uport-project/daf/commit/199426b4dba9013d34fea92585583487abdae041))
# [5.0.0](https://github.com/uport-project/daf/compare/v4.5.0...v5.0.0) (2020-05-05)

@@ -8,0 +24,0 @@

{
"name": "daf-core",
"description": "DID Agent Framework Core",
"version": "5.0.0",
"version": "5.1.0",
"main": "build/index.js",

@@ -32,3 +32,3 @@ "types": "build/index.d.ts",

"keywords": [],
"gitHead": "0598d89ace6a005d1053659a7865b5f5761bb636"
"gitHead": "d5e3c01650dc70eedfc38f557013375af2c72dcc"
}

@@ -309,2 +309,10 @@ import {

) => {
if (ctx.authenticatedDid) {
const authMeta = {type: "sender", value: ctx.authenticatedDid};
if (Array.isArray(args.metaData)) {
args.metaData.push(authMeta)
} else {
args.metaData = [authMeta]
}
}
return ctx.agent.handleMessage(args)

@@ -673,3 +681,3 @@ },

extend type Mutation {
handleMessage(raw: String!, meta: [MetaDataInput], save: Boolean = true): Message
handleMessage(raw: String!, metaData: [MetaDataInput], save: Boolean = true): Message
}

@@ -676,0 +684,0 @@

@@ -28,8 +28,8 @@ export { Agent, EventTypes, Resolver } from './agent'

import { Presentation } from './entities/presentation'
import { Message } from './entities/message'
import { Message, MetaData } from './entities/message'
export const Entities = [Key, Identity, Message, Claim, Credential, Presentation]
export { KeyType, Key, Identity, Message, Claim, Credential, Presentation }
export { KeyType, Key, Identity, Message, Claim, Credential, Presentation, MetaData }
export { migrations } from './migrations'
export { migrations } from './migrations'

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc