@coasy/piece-coasy 0.1.5 → 0.1.6

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.
Files changed (30) hide show
  1. package/.eslintrc.json +5 -1
  2. package/package.json +1 -1
  3. package/src/index.ts +57 -8
  4. package/src/lib/actions/create-event-participant.ts +25 -0
  5. package/src/lib/actions/create-funnel-participant.ts +10 -17
  6. package/src/lib/actions/create-voucher.ts +46 -0
  7. package/src/lib/actions/enroll-user-course.ts +30 -0
  8. package/src/lib/actions/find-event.ts +20 -0
  9. package/src/lib/common/actions.ts +24 -0
  10. package/src/lib/common/coasyClient.ts +11 -9
  11. package/src/lib/common/triggers.ts +40 -25
  12. package/src/lib/triggers/cancelled-membership.ts +51 -0
  13. package/src/lib/triggers/cancelled-order-item.ts +61 -0
  14. package/src/lib/triggers/cancelled-order.ts +61 -0
  15. package/src/lib/triggers/cancelled-orderprocess.ts +52 -0
  16. package/src/lib/triggers/cancelled-subscription.ts +51 -0
  17. package/src/lib/triggers/get-events.ts +41 -0
  18. package/src/lib/triggers/new-app-user-sign-up.ts +34 -0
  19. package/src/lib/triggers/new-auth-event.ts +49 -37
  20. package/src/lib/triggers/new-customer.ts +46 -0
  21. package/src/lib/triggers/new-event-participant.ts +56 -0
  22. package/src/lib/triggers/new-funnel-participant.ts +33 -22
  23. package/src/lib/triggers/new-lead.ts +51 -0
  24. package/src/lib/triggers/new-membership.ts +51 -0
  25. package/src/lib/triggers/new-order-item.ts +62 -0
  26. package/src/lib/triggers/new-order.ts +61 -0
  27. package/src/lib/triggers/new-subscription.ts +51 -0
  28. package/src/lib/triggers/new-webinar-participant.ts +48 -30
  29. package/src/lib/triggers/webinar-participant-attend.ts +73 -0
  30. package/src/lib/triggers/webinar-participant-reminder.ts +72 -0
@@ -0,0 +1,52 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'CANCELLED_ORDERPROCESS';
14
+
15
+ export const cancelledOrderprocess = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'cancelledOrderprocess',
18
+ displayName: 'Cancelled Order Process',
19
+ description:
20
+ 'Triggers when a customer starts checkout but does not finish within 1 hour.',
21
+ props: {
22
+ mainOfferIds: Property.Array({
23
+ displayName: 'Main Offer IDs',
24
+ description: 'IDs of main offers to react to',
25
+ required: false,
26
+ }),
27
+ },
28
+ sampleData: {},
29
+ type: TriggerStrategy.WEBHOOK,
30
+ onEnable: (context) =>
31
+ createCoasyTrigger({
32
+ triggerName,
33
+ webhookUrl: context.webhookUrl,
34
+ auth: context.auth,
35
+ filter: context.propsValue,
36
+ store: context.store,
37
+ }),
38
+ onDisable: (context) =>
39
+ destroyCoasyTrigger({
40
+ triggerName,
41
+ auth: context.auth,
42
+ store: context.store,
43
+ }),
44
+ test: (context) =>
45
+ testCoasyTrigger({
46
+ triggerName,
47
+ auth: context.auth,
48
+ }),
49
+ async run(context) {
50
+ return [context.payload.body];
51
+ },
52
+ });
@@ -0,0 +1,51 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'CANCELLED_SUBSCRIPTION';
14
+
15
+ export const cancelledSubscription = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'cancelledSubscription',
18
+ displayName: 'Cancelled Subscription',
19
+ description: 'Triggers when a customer requests a subscription cancellation.',
20
+ props: {
21
+ membershipTypeIds: Property.Array({
22
+ displayName: 'Membership Type IDs',
23
+ description: 'IDs of membership types to react to',
24
+ required: false,
25
+ }),
26
+ },
27
+ sampleData: {},
28
+ type: TriggerStrategy.WEBHOOK,
29
+ onEnable: (context) =>
30
+ createCoasyTrigger({
31
+ triggerName,
32
+ webhookUrl: context.webhookUrl,
33
+ auth: context.auth,
34
+ filter: context.propsValue,
35
+ store: context.store,
36
+ }),
37
+ onDisable: (context) =>
38
+ destroyCoasyTrigger({
39
+ triggerName,
40
+ auth: context.auth,
41
+ store: context.store,
42
+ }),
43
+ test: (context) =>
44
+ testCoasyTrigger({
45
+ triggerName,
46
+ auth: context.auth,
47
+ }),
48
+ async run(context) {
49
+ return [context.payload.body];
50
+ },
51
+ });
@@ -0,0 +1,41 @@
1
+ import { createTrigger, TriggerStrategy } from '@activepieces/pieces-framework';
2
+ import { coasyAuth } from '../..';
3
+ import {
4
+ createCoasyTrigger,
5
+ destroyCoasyTrigger,
6
+ testCoasyTrigger,
7
+ } from '../common/triggers';
8
+
9
+ const triggerName = 'GET_EVENTS';
10
+
11
+ export const getEvents = createTrigger({
12
+ auth: coasyAuth,
13
+ name: 'getEvents',
14
+ displayName: 'Get Events',
15
+ description: 'Get a list of all events.',
16
+ props: {},
17
+ sampleData: {},
18
+ type: TriggerStrategy.WEBHOOK,
19
+ onEnable: (context) =>
20
+ createCoasyTrigger({
21
+ triggerName,
22
+ webhookUrl: context.webhookUrl,
23
+ auth: context.auth,
24
+ filter: context.propsValue,
25
+ store: context.store,
26
+ }),
27
+ onDisable: (context) =>
28
+ destroyCoasyTrigger({
29
+ triggerName,
30
+ auth: context.auth,
31
+ store: context.store,
32
+ }),
33
+ test: (context) =>
34
+ testCoasyTrigger({
35
+ triggerName,
36
+ auth: context.auth,
37
+ }),
38
+ async run(context) {
39
+ return [context.payload.body];
40
+ },
41
+ });
@@ -0,0 +1,34 @@
1
+ import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework';
2
+ import { coasyAuth } from '../..';
3
+ import { createCoasyTrigger, destroyCoasyTrigger, testCoasyTrigger } from '../common/triggers';
4
+
5
+ const triggerName = "NEW_APP_USER_SIGN_UP";
6
+
7
+ export const newAppUserSignUp = createTrigger({
8
+ auth: coasyAuth,
9
+ name: 'newAppUserSignUp',
10
+ displayName: 'New App User Sign Up',
11
+ description: 'Triggers when a new app user sign up.',
12
+ props: {},
13
+ sampleData: {},
14
+ type: TriggerStrategy.WEBHOOK,
15
+ onEnable: (context) => createCoasyTrigger({
16
+ triggerName,
17
+ webhookUrl: context.webhookUrl,
18
+ auth: context.auth,
19
+ filter: context.propsValue,
20
+ store: context.store
21
+ }),
22
+ onDisable: (context) => destroyCoasyTrigger({
23
+ triggerName,
24
+ auth: context.auth,
25
+ store: context.store
26
+ }),
27
+ test: (context) => testCoasyTrigger({
28
+ triggerName,
29
+ auth: context.auth
30
+ }),
31
+ async run(context) {
32
+ return [context.payload.body];
33
+ }
34
+ });
@@ -15,58 +15,70 @@ export const newAuthEvent = createTrigger({
15
15
  description: 'categories of trigger',
16
16
  required: true,
17
17
  options: {
18
- options: [{
19
- value: "CustomEmailSender",
20
- label: "Custom Email Sender"
21
- }, {
22
- value: "UserMigration",
23
- label: "User Migration"
24
- }, {
25
- value: "DefineAuthChallenge",
26
- label: "Define Auth Challenge"
27
- }, {
28
- value: "CreateAuthChallenge",
29
- label: "Create Auth Challenge"
30
- }, {
31
- value: "VerifyAuthChallengeResponse",
32
- label: "Verify Auth Challenge Response"
33
- }]
34
- }
18
+ options: [
19
+ {
20
+ value: 'CustomEmailSender',
21
+ label: 'Custom Email Sender',
22
+ },
23
+ {
24
+ value: 'UserMigration',
25
+ label: 'User Migration',
26
+ },
27
+ {
28
+ value: 'DefineAuthChallenge',
29
+ label: 'Define Auth Challenge',
30
+ },
31
+ {
32
+ value: 'CreateAuthChallenge',
33
+ label: 'Create Auth Challenge',
34
+ },
35
+ {
36
+ value: 'VerifyAuthChallengeResponse',
37
+ label: 'Verify Auth Challenge Response',
38
+ },
39
+ ],
40
+ },
35
41
  }),
36
42
  triggerNames: Property.StaticMultiSelectDropdown({
37
43
  displayName: 'Triggers',
38
44
  description: 'Select triggers to react on',
39
45
  required: true,
40
46
  options: {
41
- options: [{
42
- value: "SignUp",
43
- label: "Sign Up"
44
- }, {
45
- value: "ResendCode",
46
- label: "Resend Code"
47
- }, {
48
- value: "ForgotPassword",
49
- label: "Forgot Password"
50
- }, {
51
- value: "Authentication",
52
- label: "Authentication"
53
- }, {
54
- value: "ELSE",
55
- label: "Else"
56
- }]
57
- }
58
- })
47
+ options: [
48
+ {
49
+ value: 'SignUp',
50
+ label: 'Sign Up',
51
+ },
52
+ {
53
+ value: 'ResendCode',
54
+ label: 'Resend Code',
55
+ },
56
+ {
57
+ value: 'ForgotPassword',
58
+ label: 'Forgot Password',
59
+ },
60
+ {
61
+ value: 'Authentication',
62
+ label: 'Authentication',
63
+ },
64
+ {
65
+ value: 'ELSE',
66
+ label: 'Else',
67
+ },
68
+ ],
69
+ },
70
+ }),
59
71
  },
60
72
  sampleData: {},
61
73
  type: TriggerStrategy.WEBHOOK,
62
- onEnable : (context) => createCoasyTrigger({
74
+ onEnable: (context) => createCoasyTrigger({
63
75
  triggerName,
64
76
  webhookUrl: context.webhookUrl,
65
77
  auth: context.auth,
66
78
  filter: context.propsValue,
67
79
  store: context.store
68
80
  }),
69
- onDisable : (context) => destroyCoasyTrigger({
81
+ onDisable: (context) => destroyCoasyTrigger({
70
82
  triggerName,
71
83
  auth: context.auth,
72
84
  store: context.store
@@ -0,0 +1,46 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'NEW_CUSTOMER';
14
+
15
+ export const newCustomer = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'newCustomer',
18
+ displayName: 'New Customer',
19
+ description: 'Triggers when a new Customer is created.',
20
+ props: {},
21
+ sampleData: {},
22
+ type: TriggerStrategy.WEBHOOK,
23
+ onEnable: (context) =>
24
+ createCoasyTrigger({
25
+ triggerName,
26
+ webhookUrl: context.webhookUrl,
27
+ auth: context.auth,
28
+ filter: context.propsValue,
29
+ store: context.store,
30
+ }),
31
+ onDisable: (context) =>
32
+ destroyCoasyTrigger({
33
+ triggerName,
34
+ auth: context.auth,
35
+ store: context.store,
36
+ }),
37
+ test: (context) =>
38
+ testCoasyTrigger({
39
+ triggerName,
40
+ auth: context.auth,
41
+ }),
42
+ async run(context) {
43
+ console.log(context);
44
+ return [context.payload.body];
45
+ },
46
+ });
@@ -0,0 +1,56 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'NEW_EVENT_PARTICIPANT';
14
+
15
+ export const newEventParticipant = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'newEventParticipant',
18
+ displayName: 'New Event Participant',
19
+ description: 'Triggers when a new Event Participant is created.',
20
+ props: {
21
+ eventIds: Property.Array({
22
+ displayName: 'Event IDs',
23
+ description: 'IDs of events to react to',
24
+ required: false,
25
+ }),
26
+ eventTypeIds: Property.Array({
27
+ displayName: 'Event Type IDs',
28
+ description: 'IDs of event types to react to',
29
+ required: false,
30
+ }),
31
+ },
32
+ sampleData: {},
33
+ type: TriggerStrategy.WEBHOOK,
34
+ onEnable: (context) =>
35
+ createCoasyTrigger({
36
+ triggerName,
37
+ webhookUrl: context.webhookUrl,
38
+ auth: context.auth,
39
+ filter: context.propsValue,
40
+ store: context.store,
41
+ }),
42
+ onDisable: (context) =>
43
+ destroyCoasyTrigger({
44
+ triggerName,
45
+ auth: context.auth,
46
+ store: context.store,
47
+ }),
48
+ test: (context) =>
49
+ testCoasyTrigger({
50
+ triggerName,
51
+ auth: context.auth,
52
+ }),
53
+ async run(context) {
54
+ return [context.payload.body];
55
+ },
56
+ });
@@ -1,8 +1,16 @@
1
- import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework';
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
2
6
  import { coasyAuth } from '../..';
3
- import { createCoasyTrigger, destroyCoasyTrigger, testCoasyTrigger } from '../common/triggers';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
4
12
 
5
- const triggerName = "NEW_FUNNEL_PARTICIPANT";
13
+ const triggerName = 'NEW_FUNNEL_PARTICIPANT';
6
14
 
7
15
  export const newFunnelParticipant = createTrigger({
8
16
  auth: coasyAuth,
@@ -13,28 +21,31 @@ export const newFunnelParticipant = createTrigger({
13
21
  funnelIds: Property.Array({
14
22
  displayName: 'Funnel IDs',
15
23
  description: 'IDs of funnel to react to',
16
- required: false
17
- })
24
+ required: false,
25
+ }),
18
26
  },
19
27
  sampleData: {},
20
28
  type: TriggerStrategy.WEBHOOK,
21
- onEnable : (context) => createCoasyTrigger({
22
- triggerName,
23
- webhookUrl: context.webhookUrl,
24
- auth: context.auth,
25
- filter: context.propsValue,
26
- store: context.store
27
- }),
28
- onDisable : (context) => destroyCoasyTrigger({
29
- triggerName,
30
- auth: context.auth,
31
- store: context.store
32
- }),
33
- test: (context) => testCoasyTrigger({
34
- triggerName,
35
- auth: context.auth
36
- }),
29
+ onEnable: (context) =>
30
+ createCoasyTrigger({
31
+ triggerName,
32
+ webhookUrl: context.webhookUrl,
33
+ auth: context.auth,
34
+ filter: context.propsValue,
35
+ store: context.store,
36
+ }),
37
+ onDisable: (context) =>
38
+ destroyCoasyTrigger({
39
+ triggerName,
40
+ auth: context.auth,
41
+ store: context.store,
42
+ }),
43
+ test: (context) =>
44
+ testCoasyTrigger({
45
+ triggerName,
46
+ auth: context.auth,
47
+ }),
37
48
  async run(context) {
38
49
  return [context.payload.body];
39
- }
50
+ },
40
51
  });
@@ -0,0 +1,51 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'NEW_LEAD';
14
+
15
+ export const newLead = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'newLead',
18
+ displayName: 'New Lead',
19
+ description: 'Triggers when a new lead is created.',
20
+ props: {
21
+ funnelId: Property.ShortText({
22
+ displayName: 'Funnel ID',
23
+ description: 'ID of funnel to react to',
24
+ required: false,
25
+ }),
26
+ },
27
+ sampleData: {},
28
+ type: TriggerStrategy.WEBHOOK,
29
+ onEnable: (context) =>
30
+ createCoasyTrigger({
31
+ triggerName,
32
+ webhookUrl: context.webhookUrl,
33
+ auth: context.auth,
34
+ filter: context.propsValue,
35
+ store: context.store,
36
+ }),
37
+ onDisable: (context) =>
38
+ destroyCoasyTrigger({
39
+ triggerName,
40
+ auth: context.auth,
41
+ store: context.store,
42
+ }),
43
+ test: (context) =>
44
+ testCoasyTrigger({
45
+ triggerName,
46
+ auth: context.auth,
47
+ }),
48
+ async run(context) {
49
+ return [context.payload.body];
50
+ },
51
+ });
@@ -0,0 +1,51 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'NEW_MEMBERSHIP';
14
+
15
+ export const newMembership = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'newMembership',
18
+ displayName: 'New Membership',
19
+ description: 'Triggers when a new membership is created.',
20
+ props: {
21
+ membershipTypeIds: Property.Array({
22
+ displayName: 'Membership Type IDs',
23
+ description: 'IDs of membership types to react to',
24
+ required: false,
25
+ }),
26
+ },
27
+ sampleData: {},
28
+ type: TriggerStrategy.WEBHOOK,
29
+ onEnable: (context) =>
30
+ createCoasyTrigger({
31
+ triggerName,
32
+ webhookUrl: context.webhookUrl,
33
+ auth: context.auth,
34
+ filter: context.propsValue,
35
+ store: context.store,
36
+ }),
37
+ onDisable: (context) =>
38
+ destroyCoasyTrigger({
39
+ triggerName,
40
+ auth: context.auth,
41
+ store: context.store,
42
+ }),
43
+ test: (context) =>
44
+ testCoasyTrigger({
45
+ triggerName,
46
+ auth: context.auth,
47
+ }),
48
+ async run(context) {
49
+ return [context.payload.body];
50
+ },
51
+ });
@@ -0,0 +1,62 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'NEW_ORDER_ITEM';
14
+
15
+ export const newOrderItem = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'newOrderItem',
18
+ displayName: 'New Order Item',
19
+ description: 'Triggers for each item in a new Order.',
20
+ props: {
21
+ mainOfferIds: Property.Array({
22
+ displayName: 'Main Offer IDs',
23
+ description: 'IDs of main offers to react to',
24
+ required: false,
25
+ }),
26
+ selectedPaymentPlans: Property.Array({
27
+ displayName: 'Selected Payment Plans',
28
+ description: 'Payment plans to filter by',
29
+ required: false,
30
+ }),
31
+ selectedShippingOptions: Property.Array({
32
+ displayName: 'Selected Shipping Options',
33
+ description: 'Shipping options to filter by',
34
+ required: false,
35
+ }),
36
+ },
37
+
38
+ sampleData: {},
39
+ type: TriggerStrategy.WEBHOOK,
40
+ onEnable: (context) =>
41
+ createCoasyTrigger({
42
+ triggerName,
43
+ webhookUrl: context.webhookUrl,
44
+ auth: context.auth,
45
+ filter: context.propsValue,
46
+ store: context.store,
47
+ }),
48
+ onDisable: (context) =>
49
+ destroyCoasyTrigger({
50
+ triggerName,
51
+ auth: context.auth,
52
+ store: context.store,
53
+ }),
54
+ test: (context) =>
55
+ testCoasyTrigger({
56
+ triggerName,
57
+ auth: context.auth,
58
+ }),
59
+ async run(context) {
60
+ return [context.payload.body];
61
+ },
62
+ });
@@ -0,0 +1,61 @@
1
+ import {
2
+ createTrigger,
3
+ Property,
4
+ TriggerStrategy,
5
+ } from '@activepieces/pieces-framework';
6
+ import { coasyAuth } from '../..';
7
+ import {
8
+ createCoasyTrigger,
9
+ destroyCoasyTrigger,
10
+ testCoasyTrigger,
11
+ } from '../common/triggers';
12
+
13
+ const triggerName = 'NEW_ORDER';
14
+
15
+ export const newOrder = createTrigger({
16
+ auth: coasyAuth,
17
+ name: 'newOrder',
18
+ displayName: 'New Order',
19
+ description: 'Triggers when a new order is created.',
20
+ props: {
21
+ mainOfferIds: Property.Array({
22
+ displayName: 'Main Offer IDs',
23
+ description: 'IDs of main offers to react to',
24
+ required: false,
25
+ }),
26
+ selectedPaymentPlans: Property.Array({
27
+ displayName: 'Selected Payment Plans',
28
+ description: 'Payment plans to filter by',
29
+ required: false,
30
+ }),
31
+ selectedShippingOptions: Property.Array({
32
+ displayName: 'Selected Shipping Options',
33
+ description: 'Shipping options to filter by',
34
+ required: false,
35
+ }),
36
+ },
37
+ sampleData: {},
38
+ type: TriggerStrategy.WEBHOOK,
39
+ onEnable: (context) =>
40
+ createCoasyTrigger({
41
+ triggerName,
42
+ webhookUrl: context.webhookUrl,
43
+ auth: context.auth,
44
+ filter: context.propsValue,
45
+ store: context.store,
46
+ }),
47
+ onDisable: (context) =>
48
+ destroyCoasyTrigger({
49
+ triggerName,
50
+ auth: context.auth,
51
+ store: context.store,
52
+ }),
53
+ test: (context) =>
54
+ testCoasyTrigger({
55
+ triggerName,
56
+ auth: context.auth,
57
+ }),
58
+ async run(context) {
59
+ return [context.payload.body];
60
+ },
61
+ });