// Type definitions for parse 2.10
// Project: https://parseplatform.org/
// Definitions by: Ullisen Media Group
// David Poetzsch-Heffter
// Cedric Kemp
// Flavio Negrão
// Wes Grimes
// Otherwise SAS
// Andrew Goldis
// Alexandre Hétu Rivard
// Diamond Lewis
// Jong Eun Lee
// Colin Ulin
// Robert Helms
// Julien Quere
// Yago Tomé
// Thibault MOCELLIN
// Raschid JF Rafaelly
// Jeff Gu Kang
// Bui Tan Loc
// Linus Unnebäck
// Patrick O'Sullivan
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 3.7
///
///
///
import { EventEmitter } from 'events';
declare enum ErrorCode {
OTHER_CAUSE = -1,
INTERNAL_SERVER_ERROR = 1,
CONNECTION_FAILED = 100,
OBJECT_NOT_FOUND = 101,
INVALID_QUERY = 102,
INVALID_CLASS_NAME = 103,
MISSING_OBJECT_ID = 104,
INVALID_KEY_NAME = 105,
INVALID_POINTER = 106,
INVALID_JSON = 107,
COMMAND_UNAVAILABLE = 108,
NOT_INITIALIZED = 109,
INCORRECT_TYPE = 111,
INVALID_CHANNEL_NAME = 112,
PUSH_MISCONFIGURED = 115,
OBJECT_TOO_LARGE = 116,
OPERATION_FORBIDDEN = 119,
CACHE_MISS = 120,
INVALID_NESTED_KEY = 121,
INVALID_FILE_NAME = 122,
INVALID_ACL = 123,
TIMEOUT = 124,
INVALID_EMAIL_ADDRESS = 125,
MISSING_CONTENT_TYPE = 126,
MISSING_CONTENT_LENGTH = 127,
INVALID_CONTENT_LENGTH = 128,
FILE_TOO_LARGE = 129,
FILE_SAVE_ERROR = 130,
DUPLICATE_VALUE = 137,
INVALID_ROLE_NAME = 139,
EXCEEDED_QUOTA = 140,
SCRIPT_FAILED = 141,
VALIDATION_ERROR = 142,
INVALID_IMAGE_DATA = 150,
UNSAVED_FILE_ERROR = 151,
INVALID_PUSH_TIME_ERROR = 152,
FILE_DELETE_ERROR = 153,
REQUEST_LIMIT_EXCEEDED = 155,
INVALID_EVENT_NAME = 160,
USERNAME_MISSING = 200,
PASSWORD_MISSING = 201,
USERNAME_TAKEN = 202,
EMAIL_TAKEN = 203,
EMAIL_MISSING = 204,
EMAIL_NOT_FOUND = 205,
SESSION_MISSING = 206,
MUST_CREATE_USER_THROUGH_SIGNUP = 207,
ACCOUNT_ALREADY_LINKED = 208,
INVALID_SESSION_TOKEN = 209,
LINKED_ID_MISSING = 250,
INVALID_LINKED_SESSION = 251,
UNSUPPORTED_SERVICE = 252,
AGGREGATE_ERROR = 600,
FILE_READ_ERROR = 601,
X_DOMAIN_REQUEST = 602,
}
declare global {
namespace Parse {
let applicationId: string;
let javaScriptKey: string | undefined;
let liveQueryServerURL: string;
let masterKey: string | undefined;
let serverAuthToken: string | undefined;
let serverAuthType: string | undefined;
let serverURL: string;
interface BatchSizeOption {
batchSize?: number;
}
interface CascadeSaveOption {
/** If `false`, nested objects will not be saved (default is `true`). */
cascadeSave?: boolean;
}
interface SuccessOption {
success?: Function;
}
interface ErrorOption {
error?: Function;
}
interface FullOptions {
success?: Function;
error?: Function;
useMasterKey?: boolean;
sessionToken?: string;
installationId?: string;
progress?: Function;
}
interface RequestOptions {
useMasterKey?: boolean;
sessionToken?: string;
installationId?: string;
batchSize?: number;
include?: string | string[];
progress?: Function;
}
interface SuccessFailureOptions extends SuccessOption, ErrorOption { }
interface SignUpOptions {
useMasterKey?: boolean;
installationId?: string;
}
interface SessionTokenOption {
sessionToken?: string;
}
interface WaitOption {
/**
* Set to true to wait for the server to confirm success
* before triggering an event.
*/
wait?: boolean;
}
interface UseMasterKeyOption {
/**
* In Cloud Code and Node only, causes the Master Key to be used for this request.
*/
useMasterKey?: boolean;
}
interface ScopeOptions extends SessionTokenOption, UseMasterKeyOption { }
interface SilentOption {
/**
* Set to true to avoid firing the event.
*/
silent?: boolean;
}
interface Pointer {
__type: string;
className: string;
objectId: string;
}
interface AuthData {
[key: string]: any;
}
interface BaseAttributes {
createdAt: Date;
objectId: string;
updatedAt: Date;
}
interface JSONBaseAttributes {
createdAt: string;
objectId: string;
updatedAt: string;
}
/**
* Creates a new ACL.
* If no argument is given, the ACL has no permissions for anyone.
* If the argument is a Parse.User, the ACL will have read and write
* permission for only that user.
* If the argument is any other JSON object, that object will be interpretted
* as a serialized ACL created with toJSON().
* @see Parse.Object#setACL
*
*
An ACL, or Access Control List can be added to any
* Parse.Object to restrict access to only a subset of users
* of your application.
*/
class ACL {
permissionsById: any;
constructor(arg1?: any);
setPublicReadAccess(allowed: boolean): void;
getPublicReadAccess(): boolean;
setPublicWriteAccess(allowed: boolean): void;
getPublicWriteAccess(): boolean;
setReadAccess(userId: User | string, allowed: boolean): void;
getReadAccess(userId: User | string): boolean;
setWriteAccess(userId: User | string, allowed: boolean): void;
getWriteAccess(userId: User | string): boolean;
setRoleReadAccess(role: Role | string, allowed: boolean): void;
getRoleReadAccess(role: Role | string): boolean;
setRoleWriteAccess(role: Role | string, allowed: boolean): void;
getRoleWriteAccess(role: Role | string): boolean;
toJSON(): any;
}
/**
* A Parse.File is a local representation of a file that is saved to the Parse
* cloud.
* @param name The file's name. This will be prefixed by a unique
* value once the file has finished saving. The file name must begin with
* an alphanumeric character, and consist of alphanumeric characters,
* periods, spaces, underscores, or dashes.
* @param data The data for the file, as either:
* 1. an Array of byte value Numbers, or
* 2. an Object like { base64: "..." } with a base64-encoded String.
* 3. a File object selected with a file upload control. (3) only works
* in Firefox 3.6+, Safari 6.0.2+, Chrome 7+, and IE 10+.
* For example:
* var fileUploadControl = $("#profilePhotoFileUpload")[0];
* if (fileUploadControl.files.length > 0) {
* var file = fileUploadControl.files[0];
* var name = "photo.jpg";
* var parseFile = new Parse.File(name, file);
* parseFile.save().then(function() {
* // The file has been saved to Parse.
* }, function(error) {
* // The file either could not be read, or could not be saved to Parse.
* });
* }
* @param type Optional Content-Type header to use for the file. If
* this is omitted, the content type will be inferred from the name's
* extension.
*/
class File {
constructor(name: string, data: number[] | { base64: string } | { size: number; type: string; } | { uri: string }, type?: string);
/**
* Return the data for the file, downloading it if not already present.
* Data is present if initialized with Byte Array, Base64 or Saved with Uri.
* Data is cleared if saved with File object selected with a file upload control
*
* @returns Promise that is resolved with base64 data
*/
getData(): Promise;
name(): string;
save(options?: SuccessFailureOptions): Promise;
toJSON(): { __type: string, name: string, url: string };
url(options?: { forceSecure: boolean }): string;
}
/**
* Creates a new GeoPoint with any of the following forms:
*
* new GeoPoint(otherGeoPoint)
* new GeoPoint(30, 30)
* new GeoPoint([30, 30])
* new GeoPoint({latitude: 30, longitude: 30})
* new GeoPoint() // defaults to (0, 0)
*
*
*
Represents a latitude / longitude point that may be associated
* with a key in a ParseObject or used as a reference point for geo queries.
* This allows proximity-based queries on the key.
*
*
Only one key in a class may contain a GeoPoint.
*
*
Example:
* var point = new Parse.GeoPoint(30.0, -20.0);
* var object = new Parse.Object("PlaceObject");
* object.set("location", point);
* object.save();
*/
class GeoPoint {
latitude: number;
longitude: number;
constructor(latitude: number, longitude: number);
constructor(coords?: { latitude: number, longitude: number } | [number, number]);
current(options?: SuccessFailureOptions): GeoPoint;
radiansTo(point: GeoPoint): number;
kilometersTo(point: GeoPoint): number;
milesTo(point: GeoPoint): number;
toJSON(): any;
}
/**
* A class that is used to access all of the children of a many-to-many relationship.
* Each instance of Parse.Relation is associated with a particular parent object and key.
*/
class Relation {
parent: S;
key: string;
targetClassName: string;
constructor(parent?: S, key?: string);
// Adds a Parse.Object or an array of Parse.Objects to the relation.
add(object: T | T[]): void;
// Returns a Parse.Query that is limited to objects in this relation.
query(): Query;
// Removes a Parse.Object or an array of Parse.Objects from this relation.
remove(object: T | T[]): void;
toJSON(): any;
}
interface Attributes {
[key: string]: any;
}
/**
* Creates a new model with defined attributes. A client id (cid) is
* automatically generated and assigned for you.
*
*
You won't normally call this method directly. It is recommended that
* you use a subclass of Parse.Object instead, created by calling
* extend.
*
*
However, if you don't want to use a subclass, or aren't sure which
* subclass is appropriate, you can use this form:
* var object = new Parse.Object("ClassName");
*
* That is basically equivalent to:
* var MyClass = Parse.Object.extend("ClassName");
* var object = new MyClass();
*
Parse.Query defines a query that is used to fetch Parse.Objects. The
* most common use case is finding all objects that match a query through the
* find method. For example, this sample code fetches all objects
* of class MyClass. It calls a different function depending on
* whether the fetch succeeded or not.
*
*
* var query = new Parse.Query(MyClass);
* query.find({
* success: function(results) {
* // results is an array of Parse.Object.
* },
*
* error: function(error) {
* // error is an instance of Parse.Error.
* }
* });
*
*
A Parse.Query can also be used to retrieve a single object whose id is
* known, through the get method. For example, this sample code fetches an
* object of class MyClass and id myId. It calls a
* different function depending on whether the fetch succeeded or not.
*
*
* var query = new Parse.Query(MyClass);
* query.get(myId, {
* success: function(object) {
* // object is an instance of Parse.Object.
* },
*
* error: function(object, error) {
* // error is an instance of Parse.Error.
* }
* });
*
*
A Parse.Query can also be used to count the number of objects that match
* the query without retrieving all of those objects. For example, this
* sample code counts the number of objects of the class MyClass
*
* var query = new Parse.Query(MyClass);
* query.count({
* success: function(number) {
* // There are number instances of MyClass.
* },
*
* error: function(error) {
* // error is an instance of Parse.Error.
* }
* });
*/
class Query {
objectClass: any;
className: string;
constructor(objectClass: string | (new (...args: any[]) => T | Object));
static and(...args: Array>): Query;
static fromJSON(className: string, json: any): Query;
static nor(...args: Array>): Query;
static or(...var_args: Array>): Query;
addAscending(key: K | K[]): this;
addDescending(key: K | K[]): this;
ascending(key: K | K[]): this;
aggregate(pipeline: Query.AggregationOptions | Query.AggregationOptions[]): Promise;
containedBy(key: K, values: Array): this;
containedIn(key: K, values: Array): this;
contains(key: K, substring: string): this;
containsAll(key: K, values: any[]): this;
containsAllStartingWith(key: K, values: any[]): this;
count(options?: Query.CountOptions): Promise;
descending(key: K | K[]): this;
doesNotExist(key: K): this;
doesNotMatchKeyInQuery>(key: K, queryKey: X, query: Query): this;
doesNotMatchQuery(key: K, query: Query): this;
distinct(key: K): Promise;
each(callback: Function, options?: Query.EachOptions): Promise;
endsWith(key: K, suffix: string): this;
equalTo(key: K, value: T['attributes'][K] | (T['attributes'][K] extends Object ? Pointer : never)): this;
exists(key: K): this;
find(options?: Query.FindOptions): Promise;
first(options?: Query.FirstOptions): Promise;
fromLocalDatastore(): void;
fromPin(): void;
fromPinWithName(name: string): void;
fullText(key: K, value: string, options?: Query.FullTextOptions): this;
get(objectId: string, options?: Query.GetOptions): Promise;
greaterThan(key: K, value: T['attributes'][K]): this;
greaterThanOrEqualTo(key: K, value: T['attributes'][K]): this;
include(key: K | K[]): this;
includeAll(): Query;
lessThan(key: K, value: T['attributes'][K]): this;
lessThanOrEqualTo(key: K, value: T['attributes'][K]): this;
limit(n: number): Query;
matches(key: K, regex: RegExp, modifiers?: string): this;
matchesKeyInQuery>(key: K, queryKey: X, query: Query): this;
matchesQuery(key: K, query: Query): this;
near(key: K, point: GeoPoint): this;
notContainedIn(key: K, values: Array): this;
notEqualTo(key: K, value: T['attributes'][K]): this;
polygonContains(key: K, point: GeoPoint): this;
select(...keys: K[]): this;
skip(n: number): Query;
sortByTextScore(): this;
startsWith(key: K, prefix: string): this;
subscribe(): Promise;
toJSON(): any;
withJSON(json: any): this;
withinGeoBox(key: K, southwest: GeoPoint, northeast: GeoPoint): this;
withinKilometers(key: K, point: GeoPoint, maxDistance: number): this;
withinMiles(key: K, point: GeoPoint, maxDistance: number): this;
withinPolygon(key: K, points: number[][]): this;
withinRadians(key: K, point: GeoPoint, maxDistance: number): this;
}
namespace Query {
interface EachOptions extends SuccessFailureOptions, ScopeOptions { }
interface CountOptions extends SuccessFailureOptions, ScopeOptions { }
interface FindOptions extends SuccessFailureOptions, ScopeOptions { }
interface FirstOptions extends SuccessFailureOptions, ScopeOptions { }
interface GetOptions extends SuccessFailureOptions, ScopeOptions { }
// According to http://docs.parseplatform.org/rest/guide/#aggregate-queries
interface AggregationOptions {
group?: { objectId?: string; [key: string]: any };
match?: { [key: string]: any };
project?: { [key: string]: any };
limit?: number;
skip?: number;
// Sort documentation https://docs.mongodb.com/v3.2/reference/operator/aggregation/sort/#pipe._S_sort
sort?: { [key: string]: 1 | -1 };
}
// According to https://parseplatform.org/Parse-SDK-JS/api/2.1.0/Parse.Query.html#fullText
interface FullTextOptions {
language?: string;
caseSensitive?: boolean;
diacriticSensitive?: boolean;
}
}
/**
* Represents a LiveQuery Subscription.
*
* @see https://docs.parseplatform.org/js/guide/#live-queries
* @see NodeJS.EventEmitter
*
* Events list
* ---
* `open` - when you call `query.subscribe()`, we send a subscribe request to
* the LiveQuery server, when we get the confirmation from the LiveQuery server,
* this event will be emitted. When the client loses WebSocket connection to the
* LiveQuery server, we will try to auto reconnect the LiveQuery server. If we
* reconnect the LiveQuery server and successfully resubscribe the ParseQuery,
* you'll also get this event.
*
* ```
* subscription.on('open', () => {});
* ```
* ---
* `create` - when a new ParseObject is created and it fulfills the ParseQuery you subscribe,
* you'll get this event. The object is the ParseObject which is created.
*
* ```
* subscription.on('create', (object: Parse.Object) => {});
* ```
* ---
* `update` event - when an existing ParseObject which fulfills the ParseQuery you subscribe
* is updated (The ParseObject fulfills the ParseQuery before and after changes),
* you'll get this event. The object is the ParseObject which is updated.
* Its content is the latest value of the ParseObject.
*
* ```
* subscription.on('update', (object: Parse.Object) => {});
* ```
* ---
* `enter` event - when an existing ParseObject's old value doesn't fulfill the ParseQuery
* but its new value fulfills the ParseQuery, you'll get this event. The object is the
* ParseObject which enters the ParseQuery. Its content is the latest value of the ParseObject.
*
* ```
* subscription.on('enter', (object: Parse.Object) => {});
* ```
* ---
* `update` event - when an existing ParseObject's old value fulfills the ParseQuery but its new value
* doesn't fulfill the ParseQuery, you'll get this event. The object is the ParseObject
* which leaves the ParseQuery. Its content is the latest value of the ParseObject.
*
* ```
* subscription.on('leave', (object: Parse.Object) => {});
* ```
* ---
* `delete` event - when an existing ParseObject which fulfills the ParseQuery is deleted, you'll
* get this event. The object is the ParseObject which is deleted.
*
* ```
* subscription.on('delete', (object: Parse.Object) => {});
* ```
* ---
* `close` event - when the client loses the WebSocket connection to the LiveQuery
* server and we stop receiving events, you'll get this event.
*
* ```
* subscription.on('close', () => {});
* ```
*/
class LiveQuerySubscription extends EventEmitter {
/**
* Creates an instance of LiveQuerySubscription.
*
* @param id
* @param query
* @param [sessionToken]
*/
constructor(id: string, query: string, sessionToken?: string);
on(event: 'open' | 'create' | 'update' | 'enter' | 'leave' | 'delete' | 'close', listener: (object: Object) => void): this;
/**
* Closes the subscription.
*
*/
unsubscribe(): void;
}
/**
* Represents a Role on the Parse server. Roles represent groupings of
* Users for the purposes of granting permissions (e.g. specifying an ACL
* for an Object). Roles are specified by their sets of child users and
* child roles, all of which are granted any permissions that the parent
* role has.
*
*
Roles must have a name (which cannot be changed after creation of the
* role), and must specify an ACL.
* A Parse.Role is a local representation of a role persisted to the Parse
* cloud.
*/
interface Role extends Object {
getRoles(): Relation;
getUsers(): Relation;
getName(): string;
setName(name: string, options?: SuccessFailureOptions): any;
}
interface RoleConstructor extends ObjectStatic {
new (name: string, acl: ACL): Role>;
new(name: string, acl: ACL): Role;
}
const Role: RoleConstructor;
class Config {
static get(options?: UseMasterKeyOption): Promise;
static current(): Config;
static save(attr: any, options?: { [attr: string]: boolean }): Promise;
get(attr: string): any;
escape(attr: string): any;
}
interface Session extends Object {
getSessionToken(): string;
isCurrentSessionRevocable(): boolean;
}
interface SessionConstructor extends ObjectStatic {
new (attributes: T): Session;
new(): Session;
current(): Promise;
}
const Session: SessionConstructor;
/**
*
*
A Parse.User object is a local representation of a user persisted to the
* Parse cloud. This class is a subclass of a Parse.Object, and retains the
* same functionality of a Parse.Object, but also extends it with various
* user specific methods, like authentication, signing up, and validation of
* uniqueness.
*/
interface User extends Object {
signUp(attrs?: any, options?: SignUpOptions): Promise;
logIn(options?: FullOptions): Promise;
authenticated(): boolean;
isCurrent(): boolean;
getEmail(): string | undefined;
setEmail(email: string, options?: SuccessFailureOptions): boolean;
getUsername(): string | undefined;
setUsername(username: string, options?: SuccessFailureOptions): boolean;
setPassword(password: string, options?: SuccessFailureOptions): boolean;
getSessionToken(): string;
linkWith(user: User, authData: AuthData, options: FullOptions): Promise;
_linkWith(provider: any, options: { authData?: AuthData }, saveOpts?: FullOptions): Promise;
}
interface UserConstructor extends ObjectStatic {
new (attributes: T): User;
new(attributes?: Attributes): User;
allowCustomUserClass(isAllowed: boolean): void;
become(sessionToken: string, options?: UseMasterKeyOption): Promise;
current(): T | undefined;
currentAsync(): Promise;
signUp(username: string, password: string, attrs: any, options?: SignUpOptions): Promise;
logIn(username: string, password: string, options?: FullOptions): Promise;
logOut(): Promise;
requestPasswordReset(email: string, options?: SuccessFailureOptions): Promise;
extend(protoProps?: any, classProps?: any): any;
hydrate(userJSON: any): Promise;
enableUnsafeCurrentUser(): void;
}
const User: UserConstructor;
/**
* A Parse.Schema object is for handling schema data from Parse.
* All the schemas methods require MasterKey.
*
* @param className Parse Class string
*
* https://parseplatform.org/Parse-SDK-JS/api/master/Parse.Schema.html
*
* ```
* const schema = new Parse.Schema('MyClass');
* schema.addString('field');
* schema.addIndex('index_name', { field: 1 });
* schema.save();
* ```
*/
class Schema {
constructor(className: string);
/**
* Static method to get all schemas
*
* @return A promise that is resolved with the result when
* the query completes.
*/
static all(): Promise;
addArray(name: string, options?: Schema.FieldOptions): this;
addBoolean(name: string, options?: Schema.FieldOptions): this;
addDate(name: string, options?: Schema.FieldOptions): this;
addField(name: string, type?: T, options?: Schema.FieldOptions): this;
addFile(name: string, options?: Schema.FieldOptions): this;
addGeoPoint(name: string, options?: Schema.FieldOptions): this;
/**
* Adding an Index to Create / Update a Schema
* @param name Name of the field that will be created on Parse
* @param index `{ 'field': value }` where `field` should exist in the schema before using addIndex.
* @return Returns the schema, so you can chain this call.
* @example
* ```
* schema.addIndex('index_name', {'field': 1});
* ```
*/
addIndex(name: string, index: Schema.Index): this;
addNumber(name: string, options?: Schema.FieldOptions): this;
addObject(name: string, options?: Schema.FieldOptions