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

@etothepii/satisfactory-file-parser

Package Overview
Dependencies
Maintainers
1
Versions
89
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@etothepii/satisfactory-file-parser - npm Package Compare versions

Comparing version 0.1.21 to 0.1.22

build/parser/satisfactory/objects/GUIDInfo.d.ts

3

build/index.d.ts
export * from './parser/satisfactory/blueprint/blueprint.types';
export { DataFields } from './parser/satisfactory/objects/DataFields';
export * from './parser/satisfactory/objects/GUIDInfo';
export { ObjectReference } from './parser/satisfactory/objects/ObjectReference';

@@ -7,2 +8,4 @@ export * from './parser/satisfactory/objects/Property';

export { SaveEntity } from './parser/satisfactory/objects/SaveEntity';
export * from './parser/satisfactory/objects/ue/GUID';
export * from './parser/satisfactory/objects/ue/MD5Hash';
export { Level } from './parser/satisfactory/save/level.class';

@@ -9,0 +12,0 @@ export { SatisfactorySave } from './parser/satisfactory/save/satisfactory-save';

@@ -21,2 +21,3 @@ "use strict";

Object.defineProperty(exports, "DataFields", { enumerable: true, get: function () { return DataFields_1.DataFields; } });
__exportStar(require("./parser/satisfactory/objects/GUIDInfo"), exports);
var ObjectReference_1 = require("./parser/satisfactory/objects/ObjectReference");

@@ -29,2 +30,4 @@ Object.defineProperty(exports, "ObjectReference", { enumerable: true, get: function () { return ObjectReference_1.ObjectReference; } });

Object.defineProperty(exports, "SaveEntity", { enumerable: true, get: function () { return SaveEntity_1.SaveEntity; } });
__exportStar(require("./parser/satisfactory/objects/ue/GUID"), exports);
__exportStar(require("./parser/satisfactory/objects/ue/MD5Hash"), exports);
var level_class_1 = require("./parser/satisfactory/save/level.class");

@@ -31,0 +34,0 @@ Object.defineProperty(exports, "Level", { enumerable: true, get: function () { return level_class_1.Level; } });

9

build/parser/satisfactory/objects/ObjectReference.d.ts
import { BinaryReadable } from "../../byte/binary-readable.interface";
import { ByteWriter } from "../../byte/byte-writer.class";
export declare class ObjectReference {
export type ObjectReference = {
levelName: string;
pathName: string;
constructor(levelName: string, pathName: string);
static Parse(reader: BinaryReadable): ObjectReference;
static Serialize(writer: ByteWriter, ref: ObjectReference): void;
};
export declare namespace ObjectReference {
const read: (reader: BinaryReadable) => ObjectReference;
const write: (writer: ByteWriter, ref: ObjectReference) => void;
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ObjectReference = void 0;
class ObjectReference {
constructor(levelName, pathName) {
this.levelName = levelName;
this.pathName = pathName;
}
static Parse(reader) {
return new ObjectReference(reader.readString(), reader.readString());
}
static Serialize(writer, ref) {
var ObjectReference;
(function (ObjectReference) {
ObjectReference.read = (reader) => {
return {
levelName: reader.readString(),
pathName: reader.readString()
};
};
ObjectReference.write = (writer, ref) => {
writer.writeString(ref.levelName);
writer.writeString(ref.pathName);
}
}
exports.ObjectReference = ObjectReference;
};
})(ObjectReference = exports.ObjectReference || (exports.ObjectReference = {}));
;
import { ByteWriter } from "../../..";
import { BinaryReadable } from "../../byte/binary-readable.interface";
import { col4, vec3, vec4 } from "../structs/util.types";
import { GUIDInfo } from './GUIDInfo';
import { ObjectReference } from "./ObjectReference";

@@ -19,8 +20,5 @@ export type PropertiesMap = {

export declare abstract class BasicProperty extends AbstractBaseProperty {
guidInfo: GUID;
constructor(type: string, ueType: string, guidInfo: GUID, index?: number);
guidInfo: GUIDInfo;
constructor(type: string, ueType: string, guidInfo: GUIDInfo, index?: number);
}
export type GUID = undefined | Uint8Array;
export declare const ParseGUID: (reader: BinaryReadable) => GUID;
export declare const SerializeGUID: (writer: ByteWriter, guid: GUID) => void;
export type OverheadResult = {

@@ -31,3 +29,3 @@ overhead: number;

value: boolean;
constructor(value: boolean, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: boolean, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): BoolProperty;

@@ -45,3 +43,3 @@ static ReadValue(reader: BinaryReadable): boolean;

value: BytePropertyValue;
constructor(value: BytePropertyValue, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: BytePropertyValue, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): ByteProperty;

@@ -55,3 +53,3 @@ static ReadValue(reader: BinaryReadable): number;

value: number;
constructor(value: number, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: number, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): Int8Property;

@@ -65,3 +63,3 @@ static ReadValue(reader: BinaryReadable): number;

value: number;
constructor(value: number, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: number, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): Uint8Property;

@@ -75,3 +73,3 @@ static ReadValue(reader: BinaryReadable): number;

value: number;
constructor(value: number, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: number, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): Int32Property;

@@ -85,3 +83,3 @@ static ReadValue(reader: BinaryReadable): number;

value: number;
constructor(value: number, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: number, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): Uint32Property;

@@ -95,3 +93,3 @@ static ReadValue(reader: BinaryReadable): number;

value: string;
constructor(value: string, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: string, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): Int64Property;

@@ -105,3 +103,3 @@ static ReadValue(reader: BinaryReadable): string;

value: number;
constructor(value: number, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: number, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): FloatProperty;

@@ -115,3 +113,3 @@ static CalcOverhead(property: FloatProperty): number;

value: number;
constructor(value: number, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: number, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): DoubleProperty;

@@ -125,3 +123,3 @@ static ReadValue(reader: BinaryReadable): number;

value: string;
constructor(value: string, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: string, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): StrProperty;

@@ -135,3 +133,3 @@ static ReadValue(reader: BinaryReadable): string;

value: ObjectReference;
constructor(value: ObjectReference, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: ObjectReference, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): ObjectProperty;

@@ -151,3 +149,3 @@ static ReadValue(reader: BinaryReadable): ObjectReference;

value: string;
}, ueType?: string, guidInfo?: GUID, index?: number);
}, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): EnumProperty;

@@ -177,3 +175,3 @@ static ReadValue(reader: BinaryReadable): string;

value: TextPropertyValue;
constructor(value: TextPropertyValue, ueType?: string, guidInfo?: GUID, index?: number);
constructor(value: TextPropertyValue, ueType?: string, guidInfo?: GUIDInfo, index?: number);
static Parse(reader: BinaryReadable, ueType: string, index?: number): TextProperty;

@@ -180,0 +178,0 @@ static ParseValue(reader: BinaryReadable): TextPropertyValue;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SerializeFINLuaProcessorStateStorage = exports.ReadFINLuaProcessorStateStorage = exports.SerializeFINNetworkTrace = exports.ReadFINNetworkTrace = exports.SerializeDynamicStructData = exports.ParseDynamicStructData = exports.MapProperty = exports.SetProperty = exports.ArrayProperty = exports.StructProperty = exports.TextProperty = exports.EnumProperty = exports.ObjectProperty = exports.StrProperty = exports.DoubleProperty = exports.FloatProperty = exports.Int64Property = exports.Uint32Property = exports.Int32Property = exports.Uint8Property = exports.Int8Property = exports.ByteProperty = exports.BoolProperty = exports.SerializeGUID = exports.ParseGUID = exports.BasicProperty = exports.AbstractBaseProperty = exports.AbstractProperty = void 0;
exports.SerializeFINLuaProcessorStateStorage = exports.ReadFINLuaProcessorStateStorage = exports.SerializeFINNetworkTrace = exports.ReadFINNetworkTrace = exports.SerializeDynamicStructData = exports.ParseDynamicStructData = exports.MapProperty = exports.SetProperty = exports.ArrayProperty = exports.StructProperty = exports.TextProperty = exports.EnumProperty = exports.ObjectProperty = exports.StrProperty = exports.DoubleProperty = exports.FloatProperty = exports.Int64Property = exports.Uint32Property = exports.Int32Property = exports.Uint8Property = exports.Int8Property = exports.ByteProperty = exports.BoolProperty = exports.BasicProperty = exports.AbstractBaseProperty = exports.AbstractProperty = void 0;
const util_types_1 = require("../structs/util.types");
const DataFields_1 = require("./DataFields");
const GUIDInfo_1 = require("./GUIDInfo");
const ObjectReference_1 = require("./ObjectReference");

@@ -29,19 +30,2 @@ class AbstractProperty {

exports.BasicProperty = BasicProperty;
const ParseGUID = (reader) => {
const hasGuid = reader.readByte() === 1;
let guid;
if (hasGuid) {
throw new Error('Unexpected!');
guid = reader.readBytes(16);
}
return guid;
};
exports.ParseGUID = ParseGUID;
const SerializeGUID = (writer, guid) => {
writer.writeByte(guid ? 1 : 0);
if (guid) {
writer.writeBytes(guid);
}
};
exports.SerializeGUID = SerializeGUID;
class BoolProperty extends BasicProperty {

@@ -54,3 +38,3 @@ constructor(value, ueType = 'BoolProperty', guidInfo = undefined, index = 0) {

const value = BoolProperty.ReadValue(reader);
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
return new BoolProperty(value, ueType, guidInfo, index);

@@ -66,3 +50,3 @@ }

BoolProperty.SerializeValue(writer, property.value);
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
}

@@ -81,3 +65,3 @@ static SerializeValue(writer, value) {

const type = reader.readString();
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
let value;

@@ -107,3 +91,3 @@ if (type === 'None') {

writer.writeString(property.value.type);
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
if (property.value.type === 'None') {

@@ -127,3 +111,3 @@ ByteProperty.SerializeValue(writer, property.value.value);

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = Int8Property.ReadValue(reader);

@@ -139,3 +123,3 @@ return new Int8Property(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
Int8Property.SerializeValue(writer, property.value);

@@ -154,3 +138,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = Uint8Property.ReadValue(reader);

@@ -166,3 +150,3 @@ return new Uint8Property(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
Uint8Property.SerializeValue(writer, property.value);

@@ -181,3 +165,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = Int32Property.ReadValue(reader);

@@ -193,3 +177,3 @@ return new Int32Property(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
Int32Property.SerializeValue(writer, property.value);

@@ -208,3 +192,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = Uint32Property.ReadValue(reader);

@@ -220,3 +204,3 @@ return new Uint32Property(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
Uint32Property.SerializeValue(writer, property.value);

@@ -235,3 +219,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = Int64Property.ReadValue(reader);

@@ -247,3 +231,3 @@ return new Int64Property(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
Int64Property.SerializeValue(writer, property.value);

@@ -262,3 +246,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = FloatProperty.ReadValue(reader);

@@ -274,3 +258,3 @@ return new FloatProperty(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
FloatProperty.SerializeValue(writer, property.value);

@@ -289,3 +273,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = DoubleProperty.ReadValue(reader);

@@ -301,3 +285,3 @@ return new DoubleProperty(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
DoubleProperty.SerializeValue(writer, property.value);

@@ -316,3 +300,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = StrProperty.ReadValue(reader);

@@ -328,3 +312,3 @@ return new StrProperty(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
StrProperty.SerializeValue(writer, property.value);

@@ -343,3 +327,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = ObjectProperty.ReadValue(reader);

@@ -359,3 +343,3 @@ return new ObjectProperty(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
ObjectProperty.SerializeValue(writer, property.value);

@@ -376,3 +360,3 @@ }

let name = reader.readString();
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = EnumProperty.ReadValue(reader);

@@ -390,3 +374,3 @@ const property = new EnumProperty({ name, value }, ueType, guidInfo, index);

writer.writeString(property.value.name);
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
EnumProperty.SerializeValue(writer, property.value.value);

@@ -405,3 +389,3 @@ }

static Parse(reader, ueType, index = 0) {
const guidInfo = (0, exports.ParseGUID)(reader);
const guidInfo = GUIDInfo_1.GUIDInfo.read(reader);
const value = TextProperty.ParseValue(reader);

@@ -459,3 +443,3 @@ return new TextProperty(value, ueType, guidInfo, index);

static Serialize(writer, property) {
(0, exports.SerializeGUID)(writer, property.guidInfo);
GUIDInfo_1.GUIDInfo.write(writer, property.guidInfo);
TextProperty.SerializeValue(writer, property.value);

@@ -1103,3 +1087,3 @@ }

const networkTrace = {};
networkTrace.ref = ObjectReference_1.ObjectReference.Parse(reader);
networkTrace.ref = ObjectReference_1.ObjectReference.read(reader);
networkTrace.hasPrev = reader.readInt32();

@@ -1118,3 +1102,3 @@ if (networkTrace.hasPrev) {

const networkTrace = {};
ObjectReference_1.ObjectReference.Serialize(writer, obj.ref);
ObjectReference_1.ObjectReference.write(writer, obj.ref);
writer.writeInt32(obj.hasPrev);

@@ -1139,3 +1123,3 @@ if (obj.hasPrev) {

for (let i = 0; i < refCount; i++) {
stateStorage.references.push(ObjectReference_1.ObjectReference.Parse(reader));
stateStorage.references.push(ObjectReference_1.ObjectReference.read(reader));
}

@@ -1156,3 +1140,3 @@ stateStorage.thread = reader.readString();

for (const ref of stateStorage.references) {
ObjectReference_1.ObjectReference.Serialize(writer, ref);
ObjectReference_1.ObjectReference.write(writer, ref);
}

@@ -1159,0 +1143,0 @@ writer.writeString(stateStorage.thread);

@@ -42,3 +42,3 @@ "use strict";

for (let i = 0; i < componentCount; i++) {
var componentRef = ObjectReference_1.ObjectReference.Parse(reader);
var componentRef = ObjectReference_1.ObjectReference.read(reader);
entity.components.push(componentRef);

@@ -45,0 +45,0 @@ }

@@ -144,3 +144,3 @@ "use strict";

for (const collectable of collectables) {
ObjectReference_1.ObjectReference.Serialize(writer, collectable);
ObjectReference_1.ObjectReference.write(writer, collectable);
}

@@ -153,3 +153,3 @@ }

for (let i = 0; i < countSmthing; i++) {
const collectable = ObjectReference_1.ObjectReference.Parse(reader);
const collectable = ObjectReference_1.ObjectReference.read(reader);
collected.push(collectable);

@@ -156,0 +156,0 @@ }

"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -34,3 +11,3 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

const parser_error_1 = require("../../error/parser.error");
const FMD5Hash = __importStar(require("../objects/ue/FMD5Hash"));
const MD5Hash_1 = require("../objects/ue/MD5Hash");
const asynchronous_level_class_1 = require("./asynchronous-level.class");

@@ -125,3 +102,3 @@ const level_class_1 = require("./level.class");

if (this.header.saveHeaderType >= 12) {
this.header.consistencyHashBytes = FMD5Hash.readMD5Hash(this);
this.header.consistencyHashBytes = MD5Hash_1.MD5Hash.read(this);
}

@@ -128,0 +105,0 @@ if (this.header.saveHeaderType >= 13) {

@@ -12,3 +12,3 @@ "use strict";

const file_types_1 = require("../../file.types");
const FMD5Hash_1 = require("../objects/ue/FMD5Hash");
const MD5Hash_1 = require("../objects/ue/MD5Hash");
const level_class_1 = require("./level.class");

@@ -49,3 +49,3 @@ const save_reader_1 = require("./save-reader");

if (header.saveHeaderType >= 12) {
(0, FMD5Hash_1.writeMD5Hash)(writer, header.consistencyHashBytes);
MD5Hash_1.MD5Hash.write(writer, header.consistencyHashBytes);
}

@@ -52,0 +52,0 @@ if (header.saveHeaderType >= 13) {

@@ -1,2 +0,2 @@

import { MD5Hash } from '../objects/ue/FMD5Hash';
import { MD5Hash } from '../objects/ue/MD5Hash';
export interface ModData {

@@ -3,0 +3,0 @@ Reference: string;

{
"name": "@etothepii/satisfactory-file-parser",
"author": "etothepii",
"version": "0.1.21",
"version": "0.1.22",
"description": "A file parser for satisfactory files. Includes save files and blueprint files.",

@@ -6,0 +6,0 @@ "types": "./build/index.d.ts",

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