qrusty-client 0.1.0

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 (34) hide show
  1. package/README.md +69 -0
  2. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  3. package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  4. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  5. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  6. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  7. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  8. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  9. package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  10. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  11. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  12. package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  13. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  14. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  15. package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  16. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  17. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  18. package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  19. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  20. package/docs/index.html +65 -0
  21. package/docs/index.js.html +136 -0
  22. package/docs/module-QrustyClient-QrustyClient.html +1317 -0
  23. package/docs/module-QrustyClient.html +172 -0
  24. package/docs/scripts/linenumber.js +25 -0
  25. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  26. package/docs/scripts/prettify/lang-css.js +2 -0
  27. package/docs/scripts/prettify/prettify.js +28 -0
  28. package/docs/styles/jsdoc-default.css +358 -0
  29. package/docs/styles/prettify-jsdoc.css +111 -0
  30. package/docs/styles/prettify-tomorrow.css +132 -0
  31. package/index.js +85 -0
  32. package/jsdoc.json +13 -0
  33. package/package.json +19 -0
  34. package/test.js +20 -0
@@ -0,0 +1,358 @@
1
+ @font-face {
2
+ font-family: 'Open Sans';
3
+ font-weight: normal;
4
+ font-style: normal;
5
+ src: url('../fonts/OpenSans-Regular-webfont.eot');
6
+ src:
7
+ local('Open Sans'),
8
+ local('OpenSans'),
9
+ url('../fonts/OpenSans-Regular-webfont.eot?#iefix') format('embedded-opentype'),
10
+ url('../fonts/OpenSans-Regular-webfont.woff') format('woff'),
11
+ url('../fonts/OpenSans-Regular-webfont.svg#open_sansregular') format('svg');
12
+ }
13
+
14
+ @font-face {
15
+ font-family: 'Open Sans Light';
16
+ font-weight: normal;
17
+ font-style: normal;
18
+ src: url('../fonts/OpenSans-Light-webfont.eot');
19
+ src:
20
+ local('Open Sans Light'),
21
+ local('OpenSans Light'),
22
+ url('../fonts/OpenSans-Light-webfont.eot?#iefix') format('embedded-opentype'),
23
+ url('../fonts/OpenSans-Light-webfont.woff') format('woff'),
24
+ url('../fonts/OpenSans-Light-webfont.svg#open_sanslight') format('svg');
25
+ }
26
+
27
+ html
28
+ {
29
+ overflow: auto;
30
+ background-color: #fff;
31
+ font-size: 14px;
32
+ }
33
+
34
+ body
35
+ {
36
+ font-family: 'Open Sans', sans-serif;
37
+ line-height: 1.5;
38
+ color: #4d4e53;
39
+ background-color: white;
40
+ }
41
+
42
+ a, a:visited, a:active {
43
+ color: #0095dd;
44
+ text-decoration: none;
45
+ }
46
+
47
+ a:hover {
48
+ text-decoration: underline;
49
+ }
50
+
51
+ header
52
+ {
53
+ display: block;
54
+ padding: 0px 4px;
55
+ }
56
+
57
+ tt, code, kbd, samp {
58
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
59
+ }
60
+
61
+ .class-description {
62
+ font-size: 130%;
63
+ line-height: 140%;
64
+ margin-bottom: 1em;
65
+ margin-top: 1em;
66
+ }
67
+
68
+ .class-description:empty {
69
+ margin: 0;
70
+ }
71
+
72
+ #main {
73
+ float: left;
74
+ width: 70%;
75
+ }
76
+
77
+ article dl {
78
+ margin-bottom: 40px;
79
+ }
80
+
81
+ article img {
82
+ max-width: 100%;
83
+ }
84
+
85
+ section
86
+ {
87
+ display: block;
88
+ background-color: #fff;
89
+ padding: 12px 24px;
90
+ border-bottom: 1px solid #ccc;
91
+ margin-right: 30px;
92
+ }
93
+
94
+ .variation {
95
+ display: none;
96
+ }
97
+
98
+ .signature-attributes {
99
+ font-size: 60%;
100
+ color: #aaa;
101
+ font-style: italic;
102
+ font-weight: lighter;
103
+ }
104
+
105
+ nav
106
+ {
107
+ display: block;
108
+ float: right;
109
+ margin-top: 28px;
110
+ width: 30%;
111
+ box-sizing: border-box;
112
+ border-left: 1px solid #ccc;
113
+ padding-left: 16px;
114
+ }
115
+
116
+ nav ul {
117
+ font-family: 'Lucida Grande', 'Lucida Sans Unicode', arial, sans-serif;
118
+ font-size: 100%;
119
+ line-height: 17px;
120
+ padding: 0;
121
+ margin: 0;
122
+ list-style-type: none;
123
+ }
124
+
125
+ nav ul a, nav ul a:visited, nav ul a:active {
126
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
127
+ line-height: 18px;
128
+ color: #4D4E53;
129
+ }
130
+
131
+ nav h3 {
132
+ margin-top: 12px;
133
+ }
134
+
135
+ nav li {
136
+ margin-top: 6px;
137
+ }
138
+
139
+ footer {
140
+ display: block;
141
+ padding: 6px;
142
+ margin-top: 12px;
143
+ font-style: italic;
144
+ font-size: 90%;
145
+ }
146
+
147
+ h1, h2, h3, h4 {
148
+ font-weight: 200;
149
+ margin: 0;
150
+ }
151
+
152
+ h1
153
+ {
154
+ font-family: 'Open Sans Light', sans-serif;
155
+ font-size: 48px;
156
+ letter-spacing: -2px;
157
+ margin: 12px 24px 20px;
158
+ }
159
+
160
+ h2, h3.subsection-title
161
+ {
162
+ font-size: 30px;
163
+ font-weight: 700;
164
+ letter-spacing: -1px;
165
+ margin-bottom: 12px;
166
+ }
167
+
168
+ h3
169
+ {
170
+ font-size: 24px;
171
+ letter-spacing: -0.5px;
172
+ margin-bottom: 12px;
173
+ }
174
+
175
+ h4
176
+ {
177
+ font-size: 18px;
178
+ letter-spacing: -0.33px;
179
+ margin-bottom: 12px;
180
+ color: #4d4e53;
181
+ }
182
+
183
+ h5, .container-overview .subsection-title
184
+ {
185
+ font-size: 120%;
186
+ font-weight: bold;
187
+ letter-spacing: -0.01em;
188
+ margin: 8px 0 3px 0;
189
+ }
190
+
191
+ h6
192
+ {
193
+ font-size: 100%;
194
+ letter-spacing: -0.01em;
195
+ margin: 6px 0 3px 0;
196
+ font-style: italic;
197
+ }
198
+
199
+ table
200
+ {
201
+ border-spacing: 0;
202
+ border: 0;
203
+ border-collapse: collapse;
204
+ }
205
+
206
+ td, th
207
+ {
208
+ border: 1px solid #ddd;
209
+ margin: 0px;
210
+ text-align: left;
211
+ vertical-align: top;
212
+ padding: 4px 6px;
213
+ display: table-cell;
214
+ }
215
+
216
+ thead tr
217
+ {
218
+ background-color: #ddd;
219
+ font-weight: bold;
220
+ }
221
+
222
+ th { border-right: 1px solid #aaa; }
223
+ tr > th:last-child { border-right: 1px solid #ddd; }
224
+
225
+ .ancestors, .attribs { color: #999; }
226
+ .ancestors a, .attribs a
227
+ {
228
+ color: #999 !important;
229
+ text-decoration: none;
230
+ }
231
+
232
+ .clear
233
+ {
234
+ clear: both;
235
+ }
236
+
237
+ .important
238
+ {
239
+ font-weight: bold;
240
+ color: #950B02;
241
+ }
242
+
243
+ .yes-def {
244
+ text-indent: -1000px;
245
+ }
246
+
247
+ .type-signature {
248
+ color: #aaa;
249
+ }
250
+
251
+ .name, .signature {
252
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
253
+ }
254
+
255
+ .details { margin-top: 14px; border-left: 2px solid #DDD; }
256
+ .details dt { width: 120px; float: left; padding-left: 10px; padding-top: 6px; }
257
+ .details dd { margin-left: 70px; }
258
+ .details ul { margin: 0; }
259
+ .details ul { list-style-type: none; }
260
+ .details li { margin-left: 30px; padding-top: 6px; }
261
+ .details pre.prettyprint { margin: 0 }
262
+ .details .object-value { padding-top: 0; }
263
+
264
+ .description {
265
+ margin-bottom: 1em;
266
+ margin-top: 1em;
267
+ }
268
+
269
+ .code-caption
270
+ {
271
+ font-style: italic;
272
+ font-size: 107%;
273
+ margin: 0;
274
+ }
275
+
276
+ .source
277
+ {
278
+ border: 1px solid #ddd;
279
+ width: 80%;
280
+ overflow: auto;
281
+ }
282
+
283
+ .prettyprint.source {
284
+ width: inherit;
285
+ }
286
+
287
+ .source code
288
+ {
289
+ font-size: 100%;
290
+ line-height: 18px;
291
+ display: block;
292
+ padding: 4px 12px;
293
+ margin: 0;
294
+ background-color: #fff;
295
+ color: #4D4E53;
296
+ }
297
+
298
+ .prettyprint code span.line
299
+ {
300
+ display: inline-block;
301
+ }
302
+
303
+ .prettyprint.linenums
304
+ {
305
+ padding-left: 70px;
306
+ -webkit-user-select: none;
307
+ -moz-user-select: none;
308
+ -ms-user-select: none;
309
+ user-select: none;
310
+ }
311
+
312
+ .prettyprint.linenums ol
313
+ {
314
+ padding-left: 0;
315
+ }
316
+
317
+ .prettyprint.linenums li
318
+ {
319
+ border-left: 3px #ddd solid;
320
+ }
321
+
322
+ .prettyprint.linenums li.selected,
323
+ .prettyprint.linenums li.selected *
324
+ {
325
+ background-color: lightyellow;
326
+ }
327
+
328
+ .prettyprint.linenums li *
329
+ {
330
+ -webkit-user-select: text;
331
+ -moz-user-select: text;
332
+ -ms-user-select: text;
333
+ user-select: text;
334
+ }
335
+
336
+ .params .name, .props .name, .name code {
337
+ color: #4D4E53;
338
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
339
+ font-size: 100%;
340
+ }
341
+
342
+ .params td.description > p:first-child,
343
+ .props td.description > p:first-child
344
+ {
345
+ margin-top: 0;
346
+ padding-top: 0;
347
+ }
348
+
349
+ .params td.description > p:last-child,
350
+ .props td.description > p:last-child
351
+ {
352
+ margin-bottom: 0;
353
+ padding-bottom: 0;
354
+ }
355
+
356
+ .disabled {
357
+ color: #454545;
358
+ }
@@ -0,0 +1,111 @@
1
+ /* JSDoc prettify.js theme */
2
+
3
+ /* plain text */
4
+ .pln {
5
+ color: #000000;
6
+ font-weight: normal;
7
+ font-style: normal;
8
+ }
9
+
10
+ /* string content */
11
+ .str {
12
+ color: #006400;
13
+ font-weight: normal;
14
+ font-style: normal;
15
+ }
16
+
17
+ /* a keyword */
18
+ .kwd {
19
+ color: #000000;
20
+ font-weight: bold;
21
+ font-style: normal;
22
+ }
23
+
24
+ /* a comment */
25
+ .com {
26
+ font-weight: normal;
27
+ font-style: italic;
28
+ }
29
+
30
+ /* a type name */
31
+ .typ {
32
+ color: #000000;
33
+ font-weight: normal;
34
+ font-style: normal;
35
+ }
36
+
37
+ /* a literal value */
38
+ .lit {
39
+ color: #006400;
40
+ font-weight: normal;
41
+ font-style: normal;
42
+ }
43
+
44
+ /* punctuation */
45
+ .pun {
46
+ color: #000000;
47
+ font-weight: bold;
48
+ font-style: normal;
49
+ }
50
+
51
+ /* lisp open bracket */
52
+ .opn {
53
+ color: #000000;
54
+ font-weight: bold;
55
+ font-style: normal;
56
+ }
57
+
58
+ /* lisp close bracket */
59
+ .clo {
60
+ color: #000000;
61
+ font-weight: bold;
62
+ font-style: normal;
63
+ }
64
+
65
+ /* a markup tag name */
66
+ .tag {
67
+ color: #006400;
68
+ font-weight: normal;
69
+ font-style: normal;
70
+ }
71
+
72
+ /* a markup attribute name */
73
+ .atn {
74
+ color: #006400;
75
+ font-weight: normal;
76
+ font-style: normal;
77
+ }
78
+
79
+ /* a markup attribute value */
80
+ .atv {
81
+ color: #006400;
82
+ font-weight: normal;
83
+ font-style: normal;
84
+ }
85
+
86
+ /* a declaration */
87
+ .dec {
88
+ color: #000000;
89
+ font-weight: bold;
90
+ font-style: normal;
91
+ }
92
+
93
+ /* a variable name */
94
+ .var {
95
+ color: #000000;
96
+ font-weight: normal;
97
+ font-style: normal;
98
+ }
99
+
100
+ /* a function name */
101
+ .fun {
102
+ color: #000000;
103
+ font-weight: bold;
104
+ font-style: normal;
105
+ }
106
+
107
+ /* Specify class=linenums on a pre to get line numbering */
108
+ ol.linenums {
109
+ margin-top: 0;
110
+ margin-bottom: 0;
111
+ }
@@ -0,0 +1,132 @@
1
+ /* Tomorrow Theme */
2
+ /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3
+ /* Pretty printing styles. Used with prettify.js. */
4
+ /* SPAN elements with the classes below are added by prettyprint. */
5
+ /* plain text */
6
+ .pln {
7
+ color: #4d4d4c; }
8
+
9
+ @media screen {
10
+ /* string content */
11
+ .str {
12
+ color: #718c00; }
13
+
14
+ /* a keyword */
15
+ .kwd {
16
+ color: #8959a8; }
17
+
18
+ /* a comment */
19
+ .com {
20
+ color: #8e908c; }
21
+
22
+ /* a type name */
23
+ .typ {
24
+ color: #4271ae; }
25
+
26
+ /* a literal value */
27
+ .lit {
28
+ color: #f5871f; }
29
+
30
+ /* punctuation */
31
+ .pun {
32
+ color: #4d4d4c; }
33
+
34
+ /* lisp open bracket */
35
+ .opn {
36
+ color: #4d4d4c; }
37
+
38
+ /* lisp close bracket */
39
+ .clo {
40
+ color: #4d4d4c; }
41
+
42
+ /* a markup tag name */
43
+ .tag {
44
+ color: #c82829; }
45
+
46
+ /* a markup attribute name */
47
+ .atn {
48
+ color: #f5871f; }
49
+
50
+ /* a markup attribute value */
51
+ .atv {
52
+ color: #3e999f; }
53
+
54
+ /* a declaration */
55
+ .dec {
56
+ color: #f5871f; }
57
+
58
+ /* a variable name */
59
+ .var {
60
+ color: #c82829; }
61
+
62
+ /* a function name */
63
+ .fun {
64
+ color: #4271ae; } }
65
+ /* Use higher contrast and text-weight for printable form. */
66
+ @media print, projection {
67
+ .str {
68
+ color: #060; }
69
+
70
+ .kwd {
71
+ color: #006;
72
+ font-weight: bold; }
73
+
74
+ .com {
75
+ color: #600;
76
+ font-style: italic; }
77
+
78
+ .typ {
79
+ color: #404;
80
+ font-weight: bold; }
81
+
82
+ .lit {
83
+ color: #044; }
84
+
85
+ .pun, .opn, .clo {
86
+ color: #440; }
87
+
88
+ .tag {
89
+ color: #006;
90
+ font-weight: bold; }
91
+
92
+ .atn {
93
+ color: #404; }
94
+
95
+ .atv {
96
+ color: #060; } }
97
+ /* Style */
98
+ /*
99
+ pre.prettyprint {
100
+ background: white;
101
+ font-family: Consolas, Monaco, 'Andale Mono', monospace;
102
+ font-size: 12px;
103
+ line-height: 1.5;
104
+ border: 1px solid #ccc;
105
+ padding: 10px; }
106
+ */
107
+
108
+ /* Specify class=linenums on a pre to get line numbering */
109
+ ol.linenums {
110
+ margin-top: 0;
111
+ margin-bottom: 0; }
112
+
113
+ /* IE indents via margin-left */
114
+ li.L0,
115
+ li.L1,
116
+ li.L2,
117
+ li.L3,
118
+ li.L4,
119
+ li.L5,
120
+ li.L6,
121
+ li.L7,
122
+ li.L8,
123
+ li.L9 {
124
+ /* */ }
125
+
126
+ /* Alternate shading for lines */
127
+ li.L1,
128
+ li.L3,
129
+ li.L5,
130
+ li.L7,
131
+ li.L9 {
132
+ /* */ }
package/index.js ADDED
@@ -0,0 +1,85 @@
1
+ /**
2
+ * QrustyClient - Node.js client for the qrusty priority queue API
3
+ * @module QrustyClient
4
+ */
5
+ const axios = require('axios');
6
+
7
+ class QrustyClient {
8
+ /**
9
+ * Create a new QrustyClient
10
+ * @param {string} baseUrl - Base URL of the qrusty server
11
+ */
12
+ constructor(baseUrl) {
13
+ this.baseUrl = baseUrl.replace(/\/$/, '');
14
+ }
15
+
16
+ /**
17
+ * Publish a message to a queue
18
+ * @param {string} queue
19
+ * @param {number} priority
20
+ * @param {object} payload
21
+ * @param {number} [maxRetries=3]
22
+ * @returns {Promise<object>}
23
+ */
24
+ async publish(queue, priority, payload, maxRetries = 3) {
25
+ const data = { queue, priority, payload, max_retries: maxRetries };
26
+ const resp = await axios.post(`${this.baseUrl}/publish`, data);
27
+ return resp.data;
28
+ }
29
+
30
+ /**
31
+ * Consume a message from a queue
32
+ * @param {string} queue
33
+ * @param {string} consumerId
34
+ * @param {number} [timeoutSeconds=30]
35
+ * @returns {Promise<object>}
36
+ */
37
+ async consume(queue, consumerId, timeoutSeconds = 30) {
38
+ const data = { consumer_id: consumerId, timeout_seconds: timeoutSeconds };
39
+ const resp = await axios.post(`${this.baseUrl}/consume/${queue}`, data);
40
+ return resp.data;
41
+ }
42
+
43
+ /**
44
+ * Acknowledge a message
45
+ * @param {string} queue
46
+ * @param {string} messageId
47
+ * @param {string} consumerId
48
+ * @returns {Promise<object>}
49
+ */
50
+ async ack(queue, messageId, consumerId) {
51
+ const data = { message_id: messageId, consumer_id: consumerId };
52
+ const resp = await axios.post(`${this.baseUrl}/ack/${queue}`, data);
53
+ return resp.data;
54
+ }
55
+
56
+ /**
57
+ * Purge a queue
58
+ * @param {string} queue
59
+ * @returns {Promise<object>}
60
+ */
61
+ async purge(queue) {
62
+ const resp = await axios.post(`${this.baseUrl}/purge-queue/${queue}`);
63
+ return resp.data;
64
+ }
65
+
66
+ /**
67
+ * Get stats for all queues
68
+ * @returns {Promise<object>}
69
+ */
70
+ async stats() {
71
+ const resp = await axios.get(`${this.baseUrl}/stats`);
72
+ return resp.data;
73
+ }
74
+
75
+ /**
76
+ * List all queues
77
+ * @returns {Promise<object>}
78
+ */
79
+ async listQueues() {
80
+ const resp = await axios.get(`${this.baseUrl}/queues`);
81
+ return resp.data;
82
+ }
83
+ }
84
+
85
+ module.exports = QrustyClient;
package/jsdoc.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "source": {
3
+ "include": [
4
+ "index.js"
5
+ ],
6
+ "includePattern": ".js$"
7
+ },
8
+ "opts": {
9
+ "destination": "docs",
10
+ "recurse": true,
11
+ "template": "templates/default"
12
+ }
13
+ }
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "qrusty-client",
3
+ "version": "0.1.0",
4
+ "description": "Node.js client for the qrusty priority queue server API.",
5
+ "main": "index.js",
6
+ "author": "Gordon Greene <greeng3@obscure-reference.com>",
7
+ "license": "MIT",
8
+ "scripts": {
9
+ "test": "jest",
10
+ "docs": "jsdoc -c jsdoc.json"
11
+ },
12
+ "dependencies": {
13
+ "axios": "^1.6.7"
14
+ },
15
+ "devDependencies": {
16
+ "jest": "30.0.5",
17
+ "jsdoc": "^4.0.2"
18
+ }
19
+ }