json-object-editor 0.10.210 → 0.10.222

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.
@@ -1,257 +1,59 @@
1
+ // import { Configuration, PlaidApi, PlaidEnvironments } from 'plaid';
2
+
1
3
  function Money() {
4
+ const plaid = require('plaid');
2
5
  var self = this;
3
- const plaid = require("plaid");
4
- var environment = plaid.environments.development;
5
6
  var plaidClient;
6
7
  var ACCESS_TOKEN = "";
7
8
  var PUBLIC_TOKEN = null;
8
9
 
9
- var ACCESS_TOKENS
10
- //initPlaidClient();
10
+ var ACCESS_TOKENS;
11
11
 
12
12
  function initPlaidClient() {
13
- //console.log('plaidinit',plaidClient);
14
- if(plaidClient){ return;}
15
- logit('initializing plaid client')
16
- try {
17
- var client_id = JOE.Cache.settings.PLAID_CLIENTID;
18
- var secret = JOE.Cache.settings.PLAID_SECRET_development;
19
- var public_key = JOE.Cache.settings.PLAID_PUBLIC_KEY;
20
- ACCESS_TOKENS = JOE.Cache.settings.PLAID_ACCESS_TOKENS && JSON.parse(JOE.Cache.settings.PLAID_ACCESS_TOKENS);
21
- //console.log(ACCESS_TOKENS);
22
- plaidClient = new plaid.Client(
23
- client_id,
24
- secret,
25
- public_key,
26
- environment,
27
- { version: "2018-05-22" }
28
- );
29
- return true;
30
- } catch (e) {
31
- logit("plaid client init error",e);
32
- return e;
33
- }
34
- }
35
- function checkPlaidClient(res){
36
- var p = initPlaidClient();
37
- if(!plaidClient){
38
- res.jsonp(p);
39
- return false;
40
- }
41
- return true;
42
- }
43
-
44
- function getAT(data){
45
- var AT = ACCESS_TOKENS[data.bank];
46
- if(!AT){return false;}
47
- return AT.access_token;
48
- }
49
-
50
- this.getPublicToken = function(data, request, response){
51
- var p = initPlaidClient();
52
- if(!plaidClient){
53
- return p;
54
- }
55
- var AT = ACCESS_TOKENS[data.bank];
56
- if(!AT)return {error:'bank not found'}
57
- logit(AT);
58
- plaidClient.createPublicToken(AT.access_token, (err,data)=>{
59
- response.jsonp({err,data})
13
+ //console.log('plaidinit',plaidClient);
14
+ if(plaidClient){ return;}
15
+ logit('initializing plaid client')
16
+ try {
17
+ const configuration = new Configuration({
18
+ basePath: PlaidEnvironments.development,
19
+ baseOptions: {
20
+ headers: {
21
+ 'PLAID-CLIENT-ID': CLIENT_ID,
22
+ 'PLAID-SECRET': SECRET,
23
+ },
24
+ },
60
25
  });
61
- return { use_callback: true };
62
- }
63
- this.getItem = function(data, request, response){
64
- var p = initPlaidClient();
65
- if(!plaidClient){
66
- return p;
67
- }
68
- var AT = getAT(data);
26
+ var client_id = JOE.Cache.settings.PLAID_CLIENTID;
27
+ var secret = JOE.Cache.settings.PLAID_SECRET_development;
28
+ var public_key = JOE.Cache.settings.PLAID_PUBLIC_KEY;
29
+ ACCESS_TOKENS = JOE.Cache.settings.PLAID_ACCESS_TOKENS && JSON.parse(JOE.Cache.settings.PLAID_ACCESS_TOKENS);
30
+ //console.log(ACCESS_TOKENS);
69
31
 
70
- if(!AT){return {error:'access token not found',ACCESS_TOKENS};}
71
- //plaidClient.getItem(ACCESS_TOKEN, cb);
72
- plaidClient.getItem(AT, (err,pdata)=>{
73
- response.jsonp({err,pdata,data})
74
- });
75
- return { use_callback: true };
76
- }
77
-
78
- this.get_access_token = function(data, request, response) {
79
- var p = initPlaidClient();
80
- if(!plaidClient){
81
- return p;
82
- }
83
- console.log(data);
84
- PUBLIC_TOKEN = (request.query && request.query.public_token)
85
- ||(request.body && request.body.public_token);
86
- plaidClient.exchangePublicToken(PUBLIC_TOKEN, function(
87
- error,
88
- tokenResponse
89
- ) {
90
- if (error != null) {
91
- console.log("Could not exchange public_token!" + "\n" + error);
92
- return response.jsonp({ error });
93
- }
94
- ACCESS_TOKEN = tokenResponse.access_token;
95
- ITEM_ID = tokenResponse.item_id;
96
- console.log("Access Token: " + ACCESS_TOKEN);
97
- console.log("Item ID: " + ITEM_ID);
98
- response.jsonp({ error: false });
99
- });
100
- return { use_callback: true };
101
- };
102
- this.accounts = function(data, request, response){
103
- var p = initPlaidClient();
104
- if(!plaidClient){
105
- return p;
106
- }
107
- var AT = getAT(data);
108
- if(!AT)return {error:'bank not found'}
109
- plaidClient.getAccounts(AT, (err, result) => {
110
- // Handle err
111
- if(err){
112
- response.json({error:err});
113
- }else{
114
- const accounts = result.accounts;
115
- response.jsonp(result);
116
- }
117
- });
118
- return { use_callback: true };
119
- }
120
- this.accountNumbers = function(data, request, response){
121
- var p = initPlaidClient();
122
- if(!plaidClient){
123
- return p;
32
+ configuration.headers={
33
+ 'PLAID-CLIENT-ID': client_id,
34
+ 'PLAID-SECRET': secret,
124
35
  }
125
- var AT = getAT(data);
126
- if(!AT)return {error:'bank not found'}
127
- plaidClient.getAuth(AT,{}, (err, result) => {
128
- // Handle err
129
- if(err){
130
- response.json({error:err});
131
- }else{
132
- var accounts = result.accounts;
133
- response.jsonp(result);
134
- }
135
- });
136
- return { use_callback: true };
137
- }
138
- this.transactions = function(data, request, response,specs={}){
139
- var p = initPlaidClient();
140
- if(!plaidClient){
141
- return p;
142
- }
143
- var request = request || (data && data.request);
144
- console.log('params',data);
145
- var AT = request.query.at || (data.account && data.account.access_token)|| getAT(data);
146
- var account_ids = request.query.account_ids && (request.query.account_ids.split(',')) || null;
147
- console.log('accounts',account_ids);
148
- console.log('AT',AT)
149
- var curDate = new Date();
150
- var start_date = data.start_date || curDate.getFullYear()+'-01-01';
151
- var end_date = data.end_date || new Date().format('Y-m-d');
152
- var count = data.count || 500;
153
- if(!AT){return {error:'access token not found',ACCESS_TOKENS};}
154
- plaidClient.getTransactions(AT, start_date, end_date, {count,account_ids}, (error,pdata)=>{
155
-
156
- if(!specs.callback){
157
- if(error){
158
- return response.jsonp({error})
159
- }
160
- if(!request.query.full){
161
- return response.jsonp({error,transactions:pdata.transactions})
162
- }
163
- response.jsonp({error,pdata,data})
164
- }else{
165
- logit('[money] using callback')
166
- specs.callback(error,pdata,data)
167
- return;
168
- }
169
- });
170
36
 
171
- if(!specs.async){
172
- return { use_callback: true };
173
- }
37
+ plaidClient = new PlaidApi(configuration);
38
+ return true;
39
+ } catch (e) {
40
+ logit("plaid client init error",e);
41
+ return e;
174
42
  }
175
- this.institutions = function(data, req, res) {
176
- var p = initPlaidClient();
177
- if(!plaidClient){
178
- return p;
179
- }
180
- var callback = function(err, mfaResponse, response) {
181
- res.jsonp({
182
- err: err,
183
- mfaResponse: mfaResponse,
184
- response: response,
185
- environments: plaid.environments
186
- });
187
- };
188
- if (data["id"]) {
189
- plaid.getInstitution(data["id"], environment, callback);
190
- } else {
191
- plaid.getInstitutions(environment, callback);
192
- }
193
- return { use_callback: true };
194
- };
195
-
196
- this.authTest = function(data, req, res) {
197
- if (!plaidClient) {
198
- initPlaidClient();
199
- }
200
- try {
201
- var user = data["username"] || "plaid_test";
202
- var pass = data["password"] || "plaid_good";
203
-
204
- var credentials = { username: user, password: pass };
205
- var institution_type = "wells"; //wf
206
- plaidClient.addAuthUser(institution_type, credentials, function(
207
- err,
208
- mfaResponse,
209
- response
210
- ) {
211
- res.jsonp({ err: err, mfaResponse: mfaResponse, response: response });
212
- });
213
-
214
- return { use_callback: true };
215
- } catch (e) {
216
- return { error: e };
217
- }
218
- };
219
-
220
- this.connect = function(data, req, res) {
221
- if (!plaidClient) {
222
- initPlaidClient();
223
- }
224
- try {
225
- var user = data["username"] || "plaid_test";
226
- var pass = data["password"] || "plaid_good";
43
+ }
227
44
 
228
- var credentials = { username: user, password: pass };
229
- var institution_type = "wells"; //wf
230
- plaidClient.addConnectUser(institution_type, credentials, function(
231
- err,
232
- mfaResponse,
233
- response
234
- ) {
235
- res.jsonp({ err: err, mfaResponse: mfaResponse, response: response });
236
- });
45
+ this.LinkTest = async function(data, request, response){
46
+ initPlaidClient();
47
+ const pResponse = await plaidClient.itemPublicTokenExchange({ public_token });
48
+ const access_token = pResponse.data.access_token;
49
+ const accounts_response = await plaidClient.accountsGet({ access_token });
50
+ const accounts = accounts_response.data.accounts;
237
51
 
238
- return { use_callback: true };
239
- } catch (e) {
240
- return { error: e };
241
- }
242
- };
52
+ response.jsonp({ error: false,accounts });
53
+ return { use_callback: true };
54
+ }
243
55
 
244
- this.token = function(data, req, res) {
245
- var public_token = data["token"];
246
- var callback = function(err, mfaResponse, response) {
247
- res.jsonp({ err: err, mfaResponse: mfaResponse, response: response });
248
- };
249
- try {
250
- plaidClient.exchangeToken(public_token, callback);
251
- } catch (e) {
252
- return { error: e };
253
- }
254
- };
56
+
255
57
 
256
58
  this.default = function(data, req, res) {
257
59
  res.jsonp({ data: data });
@@ -89,16 +89,11 @@ var schema = {
89
89
  fields:function(){
90
90
  return [
91
91
  'name',
92
- {section_start:'notes',collapsed:function(){
93
- return !(i.info || i.description)
94
- }},
95
- 'info',
96
- 'description',
97
- {section_end:'notes'},
98
92
 
99
93
  {section_start:'items'},
100
94
  {
101
95
  name:'items',
96
+ display:"existing items",
102
97
  type:'objectReference',
103
98
  values:function(list){
104
99
  var haystack = [];
@@ -110,37 +105,50 @@ var schema = {
110
105
  },
111
106
  {name:'addingredient',label:false, type:'create',schema:'ingredient',width:'50%'},
112
107
  {name:'addtask',label:false, type:'create',schema:'task',width:'50%'},
113
- {name:'custom_items',type:"objectList",properties:[
108
+ {name:'custom_items', display:'freeform items',type:"objectList",properties:[
114
109
  'name',
115
- {name:'type',width:'120px'}
116
- ]},
110
+ {name:'type',width:'80px'},
111
+ {name:'sub_complete',display:'done',type:'boolean',width:'50px'}
112
+ ],
113
+ template:function(obj,subobj){
114
+ var done = (subobj.sub_complete)?'joe-strike':'';
115
+ return`<joe-subtext>${subobj.type ||''}</joe-subtext>
116
+ <joe-title class="${done}">${subobj.name}</joe-title>`
117
+ }},
117
118
  {section_end:'items'},
118
-
119
+ {section_start:'notes',collapsed:function(){
120
+ return !(i.info || i.description)
121
+ }},
122
+ 'info',
123
+ 'description',
124
+ {section_end:'notes'},
119
125
  {sidebar_start:'right',collapsed:function(i){
120
126
  return (i.list_type || (i.tags || i.tags.length));
121
127
  }},
122
- 'status',
123
- {name:'date',type:'date',native:true},
124
- 'reports',
125
- {section_start:'details'},
126
- {name:'list_type',display:"List Type",
127
- autocomplete:{text:true},
128
- values:function(i){
129
- //get list list types
130
- var listTypes = [];
131
- for(var l=0;l<_joe.Data.list.length;l++){
132
- let lt = _joe.Data.list[l].list_type;
133
- if(lt){
134
- listTypes.push(lt);
128
+ {section_start:'activity'},
129
+ 'status',
130
+ {name:'date',type:'date',native:true},
131
+ 'reports',
132
+ {section_start:'activity'},
133
+ {section_start:'classification'},
134
+ {name:'list_type',display:"List Type",
135
+ autocomplete:{text:true},
136
+ values:function(i){
137
+ //get list list types
138
+ var listTypes = [];
139
+ for(var l=0;l<_joe.Data.list.length;l++){
140
+ let lt = _joe.Data.list[l].list_type;
141
+ if(lt){
142
+ listTypes.push(lt);
143
+ }
135
144
  }
136
- }
137
- listTypes = Array.from(new Set(listTypes));
138
- return listTypes;
139
- }},
140
- 'tags',
141
- {section_end:'details'},
145
+ listTypes = Array.from(new Set(listTypes));
146
+ return listTypes;
147
+ }},
148
+ 'tags',
149
+ {section_end:'classification'},
142
150
  {section_start:'access'},
143
- '_protected',
151
+ '_protected',
144
152
  {section_end:'access'},
145
153
  {sidebar_end:'right'},
146
154
  {section_start:'system',collapsed:true},
@@ -136,15 +136,21 @@ var page = {
136
136
  'updated',
137
137
  {name:'preview',type:'content',run:function(item){
138
138
  if(item.site){
139
- var site = _joe.Data.site.where({_id:item.site})[0]||{};
139
+ var site = $J.get(_joe.current.object.site);
140
+ //_joe.Data.site.where({_id:item.site})[0]||{};
140
141
 
141
- var path = __jsc.PORT?('/'+site.url+'/'+item.path).replace('//','/'):'//'+location.hostname+':'+__jsc.sitesPort+'/'+(site.url+'/'+item.path).replace('//','/');
142
+ //var path = __jsc.PORT?('/'+site.url+'/'+item.path).replace('//','/'):'//'+location.hostname+':'+__jsc.sitesPort+'/'+(site.url+'/'+item.path).replace('//','/');
143
+ var path = location.origin + (site.path||'')+item.path;
142
144
 
143
-
144
- return `<joe-subtitle>${path}</joe-subtitle><joe-button class="joe-button joe-iconed-button joe-preview-button full-width" \
145
- onclick="window.open('${path}?editor=true');">`
146
- +'Preview Page'
147
- +'</joe-button>';
145
+ return `
146
+ <joe-subtext>${location.origin}</joe-subtext>
147
+ <joe-subtitle>${(site.path||'')+item.path}</joe-subtitle>
148
+ <joe-button class="joe-button joe-iconed-button joe-preview-button full-width"
149
+ onclick="window.open('${path}');">Preview</joe-button>
150
+ <joe-button class="joe-button joe-iconed-button full-width"
151
+ onclick="window.open('${path}?editor=true');">Editor</joe-button>`
152
+
153
+ ;
148
154
  }else{
149
155
  return 'no site selected';
150
156
  }
@@ -152,8 +158,15 @@ var page = {
152
158
  {section_start:'Adv'},
153
159
  {extend:'site',specs:{rerender:'preview'}},
154
160
  {name:'path',
155
- onblur:'if(this.value[0] != \'/\'){this.value = \'/\'+this.value;}'
156
- +'_joe.Fields.rerender(\'preview\');'/*rerender:'preview'*/,
161
+ // onblur:'if(this.value[0] != \'/\'){this.value = \'/\'+this.value;}'
162
+ // +'_joe.Fields.rerender(\'preview\');'/*rerender:'preview'*/,
163
+ // onblur:function(a,b,c){
164
+ // console.log(a,b,c);
165
+ // if(this.value[0] != "/"){this.value = "/"+this.value;};
166
+ // return this.value;
167
+ // //+'_joe.Fields.rerender(\'preview\');'
168
+ // },
169
+ rerender:'preview',
157
170
  comment:'use /:reference for dynamic pages'
158
171
  },
159
172
 
@@ -24,7 +24,12 @@ var user = function(){return{
24
24
  }*/
25
25
 
26
26
  },
27
- itemExpander:'email<br/>${email}<br/>bio<br/>${description}',
27
+ itemExpander:function(u){
28
+ return `<joe-subtext>email</joe-subtext>
29
+ ${u.email}
30
+ <br/>
31
+ ${u.description}`;
32
+ },
28
33
  menuicon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="-20 -20 140 140"><g><path d="M74 79.4c-4-6.8-13.3-14.9-24-14.9S30 72.6 26 79.4a44.1 44.1 0 0 0 24 6.7A44.1 44.1 0 0 0 74 79.4Z"/><circle cx="50" cy="39.3" r="18.8"/><path d="M50 14.9A35.1 35.1 0 1 1 14.9 50 35.1 35.1 0 0 1 50 14.9m0-1A36.1 36.1 0 1 0 86.1 50 36.1 36.1 0 0 0 50 13.9Z"/><path d="M90 50A40 40 0 1 1 50 10 40 40 0 0 1 90 50ZM50 13.9A36.1 36.1 0 1 0 86.1 50 36.1 36.1 0 0 0 50 13.9Z"/></g></svg>',
29
34
  stripeColor:function(item){
30
35
  return item.color;
@@ -45,7 +50,8 @@ var user = function(){return{
45
50
  subs = subs.concat(_joe.Filter.Options.tags());
46
51
  subs.push({group_end:'tags'});
47
52
 
48
- var roles = _joe.Utils.Settings('CUSTOM_ROLES');
53
+ var roles = _joe.Utils.Settings('CUSTOM_ROLES') || [];
54
+
49
55
  ss_roles = roles.map(r=>{
50
56
  return{ name:r.name,
51
57
  filter:{custom_roles:{$in:[r._id]}}