wabe 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -52,6 +52,8 @@ await run();
52
52
  - **Database**: A powerful, scalable database to store and manage you data.
53
53
  - **GraphQL API**: A flexible and powerful GraphQL API (following GraphQL Relay standard) to interact with your data.
54
54
  - **Hooks**: Powerful hooks system to execute custom actions before or after database requests.
55
+ - **Email**: Send emails with your favorite provider with very simple integration.
56
+ - **Payment**: Accept payments with Stripe or create your own payment provider adapter.
55
57
 
56
58
  ## Contributing
57
59
 
package/dist/index.d.ts CHANGED
@@ -60,11 +60,16 @@ export type Scalars = {
60
60
  };
61
61
  };
62
62
  declare enum AuthenticationProvider {
63
- Google = "Google"
63
+ Google = "google",
64
+ EmailPassword = "emailPassword"
64
65
  }
65
66
  declare enum SecondaryFactor {
66
67
  EmailOtp = "EmailOTP"
67
68
  }
69
+ declare enum Currency {
70
+ Eur = "eur",
71
+ Usd = "usd"
72
+ }
68
73
  /** User class */
69
74
  export type User = {
70
75
  __typename?: "User";
@@ -218,6 +223,34 @@ export type RoleAclObjectRolesAcl = {
218
223
  read: Scalars["Boolean"]["output"];
219
224
  write: Scalars["Boolean"]["output"];
220
225
  };
226
+ export type Payment = {
227
+ __typename?: "Payment";
228
+ id: Scalars["ID"]["output"];
229
+ user?: Maybe<User>;
230
+ amount: Scalars["Int"]["output"];
231
+ currency: Currency;
232
+ acl?: Maybe<PaymentAclObject>;
233
+ createdAt?: Maybe<Scalars["Date"]["output"]>;
234
+ updatedAt?: Maybe<Scalars["Date"]["output"]>;
235
+ search?: Maybe<Array<Maybe<Scalars["String"]["output"]>>>;
236
+ };
237
+ export type PaymentAclObject = {
238
+ __typename?: "PaymentACLObject";
239
+ users?: Maybe<Array<Maybe<PaymentAclObjectUsersAcl>>>;
240
+ roles?: Maybe<Array<Maybe<PaymentAclObjectRolesAcl>>>;
241
+ };
242
+ export type PaymentAclObjectUsersAcl = {
243
+ __typename?: "PaymentACLObjectUsersACL";
244
+ userId: Scalars["String"]["output"];
245
+ read: Scalars["Boolean"]["output"];
246
+ write: Scalars["Boolean"]["output"];
247
+ };
248
+ export type PaymentAclObjectRolesAcl = {
249
+ __typename?: "PaymentACLObjectRolesACL";
250
+ roleId: Scalars["String"]["output"];
251
+ read: Scalars["Boolean"]["output"];
252
+ write: Scalars["Boolean"]["output"];
253
+ };
221
254
  export type SignInWithInput = {
222
255
  authentication?: InputMaybe<SignInWithAuthenticationInput>;
223
256
  };
@@ -259,12 +292,13 @@ export type SignUpWithAuthenticationOtpInput = {
259
292
  code?: InputMaybe<Scalars["String"]["input"]>;
260
293
  };
261
294
  export type WabeSchemaScalars = "Phone";
262
- export type WabeSchemaEnums = "AuthenticationProvider" | "SecondaryFactor" | "PaymentMode" | "PaymentReccuringInterval" | "Currency";
295
+ export type WabeSchemaEnums = "RoleEnum" | "AuthenticationProvider" | "SecondaryFactor" | "PaymentMode" | "PaymentReccuringInterval" | "Currency";
263
296
  export type WabeSchemaTypes = {
264
297
  User: User;
265
298
  Post: Post;
266
299
  _Session: _Session;
267
300
  Role: Role;
301
+ Payment: Payment;
268
302
  };
269
303
  export interface WabeContext<T extends WabeTypes> {
270
304
  response?: WobeResponse;
@@ -290,11 +324,12 @@ export type WhereConditional<T extends keyof WabeTypes["types"], K extends keyof
290
324
  AND?: Array<WhereType<T, K>>;
291
325
  };
292
326
  export type WhereType<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T]> = Partial<WhereAggregation<T, K>> & WhereConditional<T, K>;
327
+ export type OrderType<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T]> = Record<K, "ASC" | "DESC">;
293
328
  export interface AdapterOptions {
294
329
  databaseUrl: string;
295
330
  databaseName: string;
296
331
  }
297
- export type MutationData<T extends keyof WabeTypes["types"]> = Record<keyof WabeTypes["types"][T], any>;
332
+ export type MutationData<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T]> = Record<K, any>;
298
333
  export interface CountOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T]> {
299
334
  className: T;
300
335
  where?: WhereType<T, K>;
@@ -308,9 +343,10 @@ export interface GetObjectOptions<T extends keyof WabeTypes["types"], K extends
308
343
  context: WabeContext<any>;
309
344
  skipHooks?: boolean;
310
345
  }
311
- export interface GetObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]> {
346
+ export interface GetObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]> {
312
347
  className: T;
313
348
  where?: WhereType<T, W>;
349
+ order?: OrderType<T, X>;
314
350
  fields: Array<K | "*">;
315
351
  offset?: number;
316
352
  first?: number;
@@ -319,30 +355,32 @@ export interface GetObjectsOptions<T extends keyof WabeTypes["types"], K extends
319
355
  }
320
356
  export interface CreateObjectOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]> {
321
357
  className: T;
322
- data: MutationData<W>;
358
+ data: MutationData<T, W>;
323
359
  fields: Array<K | "*">;
324
360
  context: WabeContext<any>;
325
361
  }
326
- export interface CreateObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]> {
362
+ export interface CreateObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]> {
327
363
  className: T;
328
- data: Array<MutationData<W>>;
364
+ data: Array<MutationData<T, W>>;
329
365
  fields: Array<K | "*">;
330
366
  offset?: number;
331
367
  first?: number;
368
+ order?: OrderType<T, X>;
332
369
  context: WabeContext<any>;
333
370
  }
334
371
  export interface UpdateObjectOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]> {
335
372
  className: T;
336
373
  id: string;
337
374
  where?: WhereType<T, W>;
338
- data: MutationData<W>;
375
+ data: MutationData<T, W>;
339
376
  fields: Array<K | "*">;
340
377
  context: WabeContext<any>;
341
378
  }
342
- export interface UpdateObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]> {
379
+ export interface UpdateObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]> {
343
380
  className: T;
344
381
  where: WhereType<T, W>;
345
- data: MutationData<W>;
382
+ order?: OrderType<T, X>;
383
+ data: MutationData<T, W>;
346
384
  fields: Array<K | "*">;
347
385
  offset?: number;
348
386
  first?: number;
@@ -355,9 +393,10 @@ export interface DeleteObjectOptions<T extends keyof WabeTypes["types"], K exten
355
393
  fields: Array<K | "*">;
356
394
  context: WabeContext<any>;
357
395
  }
358
- export interface DeleteObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]> {
396
+ export interface DeleteObjectsOptions<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]> {
359
397
  className: T;
360
398
  where: WhereType<T, W>;
399
+ order?: OrderType<T, X>;
361
400
  fields: Array<K | "*">;
362
401
  offset?: number;
363
402
  first?: number;
@@ -373,14 +412,15 @@ export interface DatabaseAdapter {
373
412
  clearDatabase(): Promise<void>;
374
413
  count<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T]>(params: CountOptions<T, K>): Promise<number>;
375
414
  getObject<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T]>(params: GetObjectOptions<T, K>): Promise<OutputType<T, K>>;
376
- getObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: GetObjectsOptions<T, K, W>): Promise<OutputType<T, K>[]>;
415
+ getObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]>(params: GetObjectsOptions<T, K, W, X>): Promise<OutputType<T, K>[]>;
377
416
  createObject<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: CreateObjectOptions<T, K, W>): Promise<OutputType<T, K>>;
378
- createObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: CreateObjectsOptions<T, K, W>): Promise<OutputType<T, K>[]>;
417
+ createObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]>(params: CreateObjectsOptions<T, K, W, X>): Promise<OutputType<T, K>[]>;
379
418
  updateObject<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: UpdateObjectOptions<T, K, W>): Promise<OutputType<T, K>>;
380
- updateObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: UpdateObjectsOptions<T, K, W>): Promise<OutputType<T, K>[]>;
419
+ updateObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]>(params: UpdateObjectsOptions<T, K, W, X>): Promise<OutputType<T, K>[]>;
381
420
  deleteObject<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: DeleteObjectOptions<T, K, W>): Promise<void>;
382
- deleteObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T]>(params: DeleteObjectsOptions<T, K, W>): Promise<void>;
421
+ deleteObjects<T extends keyof WabeTypes["types"], K extends keyof WabeTypes["types"][T], W extends keyof WabeTypes["types"][T], X extends keyof WabeTypes["types"][T]>(params: DeleteObjectsOptions<T, K, W, X>): Promise<void>;
383
422
  }
423
+ export declare const buildMongoOrderQuery: <T extends unknown, K extends keyof Record<any, any>[T]>(order?: OrderType<T, K>) => Record<string, any>;
384
424
  export declare const buildMongoWhereQuery: <T extends unknown, K extends keyof Record<any, any>[T]>(where?: WhereType<T, K>) => Record<string, any>;
385
425
  export declare class MongoAdapter<T extends WabeTypes> implements DatabaseAdapter {
386
426
  options: AdapterOptions;
@@ -393,13 +433,13 @@ export declare class MongoAdapter<T extends WabeTypes> implements DatabaseAdapte
393
433
  count<U extends keyof T["types"], K extends keyof T["types"][U]>(params: CountOptions<U, K>): Promise<number>;
394
434
  clearDatabase(): Promise<void>;
395
435
  getObject<U extends keyof T["types"], K extends keyof T["types"][U]>(params: GetObjectOptions<U, K>): Promise<OutputType<U, K>>;
396
- getObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: GetObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
436
+ getObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>(params: GetObjectsOptions<U, K, W, X>): Promise<OutputType<U, K>[]>;
397
437
  createObject<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: CreateObjectOptions<U, K, W>): Promise<OutputType<U, K>>;
398
- createObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: CreateObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
438
+ createObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>(params: CreateObjectsOptions<U, K, W, X>): Promise<OutputType<U, K>[]>;
399
439
  updateObject<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: UpdateObjectOptions<U, K, W>): Promise<OutputType<U, K>>;
400
- updateObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: UpdateObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
440
+ updateObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>(params: UpdateObjectsOptions<U, K, W, X>): Promise<OutputType<U, K>[]>;
401
441
  deleteObject<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: DeleteObjectOptions<U, K, W>): Promise<void>;
402
- deleteObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>(params: DeleteObjectsOptions<U, K, W>): Promise<void>;
442
+ deleteObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>(params: DeleteObjectsOptions<U, K, W, X>): Promise<void>;
403
443
  }
404
444
  export interface InMemoryCacheOptions {
405
445
  /**
@@ -459,13 +499,13 @@ export declare class DatabaseController<T extends WabeTypes> {
459
499
  count<U extends keyof T["types"], K extends keyof T["types"][U]>(params: CountOptions<U, K>): Promise<number>;
460
500
  clearDatabase(): Promise<void>;
461
501
  getObject<U extends keyof T["types"], K extends keyof T["types"][U]>({ fields, className, context, skipHooks, id, where, }: GetObjectOptions<U, K>): Promise<OutputType<U, K>>;
462
- getObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ className, fields, context, where, skipHooks, first, offset, }: GetObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
502
+ getObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>({ className, fields, context, where, skipHooks, first, offset, order, }: GetObjectsOptions<U, K, W, X>): Promise<OutputType<U, K>[]>;
463
503
  createObject<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ className, context, data, fields }: CreateObjectOptions<U, K, W>): Promise<OutputType<U, K>>;
464
- createObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ data, fields, className, context, first, offset, }: CreateObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
504
+ createObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>({ data, fields, className, context, first, offset, order, }: CreateObjectsOptions<U, K, W, X>): Promise<OutputType<any, K>[]>;
465
505
  updateObject<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ id, className, context, data, fields }: UpdateObjectOptions<U, K, W>): Promise<OutputType<keyof T["types"], K>>;
466
- updateObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ className, where, context, fields, data, first, offset, }: UpdateObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
506
+ updateObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>({ className, where, context, fields, data, first, offset, order, }: UpdateObjectsOptions<U, K, W, X>): Promise<OutputType<any, K>[]>;
467
507
  deleteObject<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ context, className, id, fields }: DeleteObjectOptions<U, K, W>): Promise<OutputType<U, K>>;
468
- deleteObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U]>({ className, context, fields, where, first, offset, }: DeleteObjectsOptions<U, K, W>): Promise<OutputType<U, K>[]>;
508
+ deleteObjects<U extends keyof T["types"], K extends keyof T["types"][U], W extends keyof T["types"][U], X extends keyof T["types"][U]>({ className, context, fields, where, first, offset, order, }: DeleteObjectsOptions<U, K, W, X>): Promise<OutputType<U, K>[]>;
469
509
  }
470
510
  export declare enum DatabaseEnum {
471
511
  Mongo = "mongo"
@@ -475,6 +515,75 @@ export interface DatabaseConfig {
475
515
  url: string;
476
516
  name: string;
477
517
  }
518
+ export declare enum OperationType {
519
+ AfterCreate = "AfterCreate",
520
+ AfterUpdate = "afterUpdate",
521
+ AfterDelete = "afterDelete",
522
+ AfterRead = "afterRead",
523
+ BeforeCreate = "beforeInsert",
524
+ BeforeUpdate = "beforeUpdate",
525
+ BeforeDelete = "beforeDelete",
526
+ BeforeRead = "beforeRead"
527
+ }
528
+ export type Hook<T extends WabeTypes, K extends keyof WabeTypes["types"]> = {
529
+ operationType: OperationType;
530
+ className?: K;
531
+ priority: number;
532
+ callback: (hookObject: HookObject<T, K>) => Promise<void> | void;
533
+ };
534
+ export declare const _findHooksByPriority: <T extends unknown>({ className, operationType, priority, config, }: {
535
+ operationType: OperationType;
536
+ className: T;
537
+ priority: number;
538
+ config: WabeConfig<any>;
539
+ }) => Promise<Hook<any, any>[]>;
540
+ export declare const initializeHook: <T extends unknown>({ className, newData, context, }: {
541
+ className: T;
542
+ newData?: MutationData<any, any> | undefined;
543
+ context: WabeContext<any>;
544
+ }) => {
545
+ runOnSingleObject: ({ operationType, id, object: inputObject, }: {
546
+ operationType: OperationType;
547
+ id?: string | undefined;
548
+ object?: OutputType<any, any> | undefined;
549
+ }) => Promise<{
550
+ object: undefined;
551
+ newData: {};
552
+ } | {
553
+ object: OutputType<any, any>;
554
+ newData: MutationData<T, keyof WabeSchemaTypes[T]>;
555
+ }>;
556
+ runOnMultipleObjects: ({ operationType, where, objects: inputObjects, }: {
557
+ operationType: OperationType;
558
+ where?: WhereType<any, any> | undefined;
559
+ objects?: OutputType<any, any>[] | undefined;
560
+ }) => Promise<{
561
+ objects: never[];
562
+ newData: MutationData<any, any>[];
563
+ } | {
564
+ objects: OutputType<any, any>[];
565
+ newData: Awaited<MutationData<T, keyof WabeSchemaTypes[T]>>[];
566
+ }>;
567
+ };
568
+ export declare const getDefaultHooks: () => Hook<any, any>[];
569
+ declare class HookObject<T extends WabeTypes, K extends keyof WabeTypes["types"]> {
570
+ className: K;
571
+ private newData;
572
+ private operationType;
573
+ context: WabeContext<T>;
574
+ object: Partial<Record<keyof T["types"][K], any>>;
575
+ constructor({ newData, className, operationType, context, object, }: {
576
+ className: K;
577
+ newData?: MutationData<K, keyof T["types"][K]>;
578
+ operationType: OperationType;
579
+ context: WabeContext<T>;
580
+ object: Partial<Record<keyof T["types"][K], any>>;
581
+ });
582
+ getUser(): User | null | undefined;
583
+ isFieldUpdate(field: keyof T["types"][K]): boolean | undefined;
584
+ upsertNewData(field: keyof T["types"][K], value: any): void;
585
+ getNewData(): MutationData<K, keyof T["types"][K]>;
586
+ }
478
587
  export type WabePrimaryTypes = "String" | "Int" | "Float" | "Boolean" | "Email" | "Date" | "File";
479
588
  export type WabeCustomTypes = "Array" | "Object";
480
589
  export type WabeRelationTypes = "Pointer" | "Relation";
@@ -546,7 +655,7 @@ export type ResolverType<T extends WabeTypes> = {
546
655
  description?: string;
547
656
  resolve: (...args: any) => any;
548
657
  } & ({
549
- type: WabePrimaryTypes;
658
+ type: WabePrimaryTypes | T["enums"] | T["scalars"];
550
659
  } | {
551
660
  type: "Object";
552
661
  outputObject: ClassInterface<T>;
@@ -584,7 +693,34 @@ export interface PermissionProperties {
584
693
  */
585
694
  authorizedRoles?: Array<string>;
586
695
  }
587
- export type ClassPermissions = Partial<Record<PermissionsOperations, PermissionProperties>>;
696
+ /**
697
+ * ACL properties
698
+ * Automatically create ACL object before insert of the object in the database
699
+ * Allow you to specify which user can read or write the object
700
+ * You can specify "self" to allow only the user that created the object to read or write it
701
+ * You can specify "all" to allow all users to read or write the object
702
+ * For some custom use cases, you can specify a callback function that will be called before
703
+ * inserting the object in the database.
704
+ * Authorized roles is more restristive that at the class level. You can have a role access on all the class
705
+ * except one object.
706
+ * If the array of authorized users is empty, no user is authorized
707
+ * If the array of authorized users is undefined, everyone is authorized
708
+ */
709
+ export type ACLProperties = {
710
+ authorizedUsers: {
711
+ read: Array<"self">;
712
+ write: Array<"self">;
713
+ };
714
+ authorizedRoles: {
715
+ read: Array<string>;
716
+ write: Array<string>;
717
+ };
718
+ } | {
719
+ callback?: (hookObject: HookObject<any, any>) => void | Promise<void>;
720
+ };
721
+ export type ClassPermissions = Partial<Record<PermissionsOperations, PermissionProperties> & {
722
+ acl: ACLProperties;
723
+ }>;
588
724
  export type SearchableFields = Array<string>;
589
725
  export type ClassIndexes = Array<{
590
726
  field: string;
@@ -625,6 +761,7 @@ export declare class Schema<T extends WabeTypes> {
625
761
  mergeResolvers(defaultResolvers: TypeResolver<T>): TypeResolver<T>;
626
762
  defaultResolvers(): TypeResolver<T>;
627
763
  sessionClass(): ClassInterface<T>;
764
+ paymentClass(): ClassInterface<T>;
628
765
  roleClass(): ClassInterface<T>;
629
766
  userClass(): ClassInterface<T>;
630
767
  defaultFields(): SchemaFields<T>;
@@ -702,80 +839,14 @@ export interface Provider {
702
839
  refreshToken(options: refreshTokenOptions): Promise<void>;
703
840
  }
704
841
  declare enum AuthenticationProvider$1 {
705
- Google = "Google"
842
+ Google = "google",
843
+ EmailPassword = "emailPassword"
706
844
  }
707
845
  export interface WabeRoute {
708
846
  method: "GET" | "POST" | "PUT" | "DELETE";
709
847
  path: string;
710
848
  handler: WobeHandler<WobeCustomContext<any>>;
711
849
  }
712
- declare class HookObject<T extends WabeTypes, K = keyof T["types"]> {
713
- className: string;
714
- private newData;
715
- private operationType;
716
- context: WabeContext<T>;
717
- object: Record<keyof WabeTypes["types"][T], any>;
718
- constructor({ newData, className, operationType, context, object, }: {
719
- className: K;
720
- newData?: MutationData<T>;
721
- operationType: OperationType;
722
- context: WabeContext<T>;
723
- object: Record<keyof WabeTypes["types"][T], any>;
724
- });
725
- getUser(): User | null | undefined;
726
- isFieldUpdate(field: keyof WabeTypes["types"][T]): boolean | undefined;
727
- upsertNewData(field: keyof WabeTypes["types"][T], value: any): void;
728
- getNewData(): MutationData<T>;
729
- }
730
- export declare enum OperationType {
731
- AfterCreate = "AfterCreate",
732
- AfterUpdate = "afterUpdate",
733
- AfterDelete = "afterDelete",
734
- AfterRead = "afterRead",
735
- BeforeCreate = "beforeInsert",
736
- BeforeUpdate = "beforeUpdate",
737
- BeforeDelete = "beforeDelete",
738
- BeforeRead = "beforeRead"
739
- }
740
- export type Hook<T extends WabeTypes> = {
741
- operationType: OperationType;
742
- className?: T;
743
- priority: number;
744
- callback: (hookObject: HookObject<T>) => Promise<void> | void;
745
- };
746
- export type TypedNewData<T extends keyof WabeTypes["types"]> = Record<keyof WabeTypes["types"][T], any>;
747
- export declare const _findHooksByPriority: <T extends unknown>({ className, operationType, priority, config, }: {
748
- operationType: OperationType;
749
- className: T;
750
- priority: number;
751
- config: WabeConfig<any>;
752
- }) => Promise<Hook<any>[]>;
753
- export declare const initializeHook: <T extends unknown>({ className, newData, context, }: {
754
- className: T;
755
- newData?: TypedNewData<any> | undefined;
756
- context: WabeContext<any>;
757
- }) => {
758
- runOnSingleObject: ({ operationType, id, object: inputObject, }: {
759
- operationType: OperationType;
760
- id?: string | undefined;
761
- object?: OutputType<any, any> | undefined;
762
- }) => Promise<{
763
- object: undefined;
764
- newData: {};
765
- } | {
766
- object: OutputType<any, any>;
767
- newData: MutationData<any>;
768
- }>;
769
- runOnMultipleObjects: ({ operationType, where, objects: inputObjects, }: {
770
- operationType: OperationType;
771
- where?: WhereType<any, any> | undefined;
772
- objects?: OutputType<any, any>[] | undefined;
773
- }) => Promise<{
774
- objects: OutputType<any, any>[];
775
- newData: MutationData<any>[];
776
- }>;
777
- };
778
- export declare const getDefaultHooks: () => Hook<any>[];
779
850
  export type DevWabeTypes = {
780
851
  types: WabeSchemaTypes;
781
852
  scalars: WabeSchemaScalars;
@@ -822,7 +893,7 @@ declare class EmailController implements EmailAdapter {
822
893
  constructor(adapter: EmailAdapter);
823
894
  send(options: EmailSendOptions): Promise<string>;
824
895
  }
825
- export declare enum Currency {
896
+ declare enum Currency$1 {
826
897
  EUR = "eur",
827
898
  USD = "usd"
828
899
  }
@@ -848,20 +919,55 @@ export type Product = {
848
919
  unitAmount: number;
849
920
  quantity: number;
850
921
  };
922
+ export interface OnPaymentSucceedOptions {
923
+ created: string;
924
+ amount: number;
925
+ customerEmail: string | null;
926
+ billingDetails: {
927
+ address: {
928
+ city: string | null;
929
+ country: string | null;
930
+ line1: string | null;
931
+ line2: string | null;
932
+ postalCode: string | null;
933
+ state: string | null;
934
+ };
935
+ name: string | null;
936
+ phone: string | null;
937
+ };
938
+ currency: string;
939
+ paymentMethodTypes: Array<string>;
940
+ }
941
+ export interface OnPaymentFailedOptions {
942
+ created: string;
943
+ amount: number;
944
+ messageError: string;
945
+ paymentMethodTypes: Array<string>;
946
+ }
851
947
  export interface PaymentConfig {
852
948
  adapter: PaymentAdapter;
853
949
  supportedPaymentMethods: Array<PaymentMethod>;
854
- currency: Currency;
950
+ currency: Currency$1;
951
+ onPaymentSucceed?: (options: OnPaymentSucceedOptions) => Promise<void>;
952
+ onPaymentFailed?: (options: OnPaymentFailedOptions) => Promise<void>;
855
953
  }
856
954
  export type Invoice = {
857
955
  amountDue: number;
858
956
  amountPaid: number;
859
- currency: Currency;
957
+ currency: Currency$1;
860
958
  id: string;
861
959
  created: number;
862
960
  invoiceUrl: string;
863
961
  isPaid: boolean;
864
962
  };
963
+ export type Transaction = {
964
+ customerEmail: string;
965
+ amount: number;
966
+ currency: Currency$1;
967
+ created: number;
968
+ isSubscription: boolean;
969
+ reccuringInterval?: "month" | "year";
970
+ };
865
971
  export type CreateCustomerOptions = {
866
972
  customerName?: string;
867
973
  customerEmail: string;
@@ -870,7 +976,7 @@ export type CreateCustomerOptions = {
870
976
  paymentMethod: PaymentMethod;
871
977
  };
872
978
  export type CreatePaymentOptions = {
873
- currency: Currency;
979
+ currency: Currency$1;
874
980
  customerEmail: string;
875
981
  products: Array<Product>;
876
982
  paymentMethod: Array<PaymentMethod>;
@@ -880,13 +986,37 @@ export type CreatePaymentOptions = {
880
986
  automaticTax?: boolean;
881
987
  recurringInterval?: "month" | "year";
882
988
  };
989
+ export type InitWebhookOptions = {
990
+ webhookUrl: string;
991
+ };
883
992
  export type CancelSubscriptionOptions = {
884
993
  email: string;
885
994
  };
886
995
  export type GetInvoicesOptions = {
887
996
  email: string;
888
997
  };
998
+ export type GetTotalRevenueOptions = {
999
+ startRangeTimestamp?: number;
1000
+ endRangeTimestamp?: number;
1001
+ charge: "net" | "gross";
1002
+ };
1003
+ export type GetAllTransactionsOptions = {
1004
+ startRangeTimestamp?: number;
1005
+ endRangeTimestamp?: number;
1006
+ first?: number;
1007
+ };
1008
+ export type GetCustomerByIdOptions = {
1009
+ id: string;
1010
+ };
889
1011
  export interface PaymentAdapter {
1012
+ /**
1013
+ * Get a customer by id
1014
+ * @param id The customer id
1015
+ * @returns The customer
1016
+ */
1017
+ getCustomerById: (options: GetCustomerByIdOptions) => Promise<{
1018
+ email: string | null;
1019
+ }>;
890
1020
  /**
891
1021
  * Create a customer
892
1022
  * @param options CreateCustomerOptions
@@ -910,18 +1040,48 @@ export interface PaymentAdapter {
910
1040
  * @returns The invoices of a customer
911
1041
  */
912
1042
  getInvoices: (options: GetInvoicesOptions) => Promise<Invoice[]>;
1043
+ /**
1044
+ * Get total revenue
1045
+ * @param options The type of charge (net or gross) and the start and end range timestamps to get the total revenue
1046
+ * @returns The total amount
1047
+ */
1048
+ getTotalRevenue: (options: GetTotalRevenueOptions) => Promise<number>;
1049
+ /**
1050
+ * Get the list of all transactions
1051
+ * @param options The start and end range timestamps to get the transactions
1052
+ * @returns The list of transactions
1053
+ */
1054
+ getAllTransactions: (options: GetAllTransactionsOptions) => Promise<Transaction[]>;
1055
+ /**
1056
+ * Get the hypothetical revenue of subscriptions
1057
+ * @returns The hypothetical revenue of subscriptions
1058
+ */
1059
+ getHypotheticalSubscriptionRevenue: () => Promise<number>;
1060
+ /**
1061
+ * Init the webhook for succeed and failed payments
1062
+ * @param options The webhook url
1063
+ */
1064
+ initWebhook: (options: InitWebhookOptions) => Promise<void>;
913
1065
  }
914
1066
  declare class PaymentController implements PaymentAdapter {
915
1067
  private adapter;
916
1068
  private config;
917
1069
  constructor(paymentConfig: PaymentConfig);
1070
+ getCustomerById(options: GetCustomerByIdOptions): Promise<{
1071
+ email: string | null;
1072
+ }>;
1073
+ initWebhook({ webhookUrl }: InitWebhookOptions): Promise<void>;
918
1074
  createCustomer(options: CreateCustomerOptions): Promise<string>;
919
1075
  createPayment(options: Omit<CreatePaymentOptions, "currency" | "paymentMethod">): Promise<string>;
920
1076
  cancelSubscription(options: CancelSubscriptionOptions): Promise<void>;
921
1077
  getInvoices(options: GetInvoicesOptions): Promise<Invoice[]>;
1078
+ getTotalRevenue(options: GetTotalRevenueOptions): Promise<number>;
1079
+ getAllTransactions(options: GetAllTransactionsOptions): Promise<Transaction[]>;
1080
+ getHypotheticalSubscriptionRevenue(): Promise<number>;
922
1081
  }
923
1082
  export interface WabeConfig<T extends WabeTypes> {
924
1083
  port: number;
1084
+ publicUrl?: string;
925
1085
  schema?: SchemaInterface<T>;
926
1086
  database: DatabaseConfig;
927
1087
  codegen?: {
@@ -933,7 +1093,7 @@ export interface WabeConfig<T extends WabeTypes> {
933
1093
  authentication?: AuthenticationConfig<T>;
934
1094
  routes?: WabeRoute[];
935
1095
  rootKey: string;
936
- hooks?: Hook<any>[];
1096
+ hooks?: Hook<T, any>[];
937
1097
  email?: EmailConfig;
938
1098
  payment?: PaymentConfig;
939
1099
  file?: FileConfig;
@@ -955,7 +1115,8 @@ export declare class Wabe<T extends WabeTypes> {
955
1115
  server: Wobe<WobeCustomContext<T>>;
956
1116
  config: WabeConfig<T>;
957
1117
  controllers: WabeControllers<T>;
958
- constructor({ port, schema, database, authentication, rootKey, codegen, hooks, file, email, payment, routes, }: WabeConfig<T>);
1118
+ constructor({ port, schema, database, authentication, rootKey, codegen, hooks, file, email, payment, routes, publicUrl, }: WabeConfig<T>);
1119
+ loadRoleEnum(): void;
959
1120
  loadAuthenticationMethods(): void;
960
1121
  loadHooks(): void;
961
1122
  loadDefaultRoutes(): void;
@@ -1042,6 +1203,7 @@ export declare class Google implements OAuth2ProviderWithPKCE {
1042
1203
 
1043
1204
  export {
1044
1205
  AuthenticationProvider$1 as AuthenticationProvider,
1206
+ Currency$1 as Currency,
1045
1207
  };
1046
1208
 
1047
1209
  export {};