Transaction

6a42a2c1cfd8a70dbb25524117489af412d8cd3c5086f628c1fa0f5baa259ca4
( - )
184,376
2021-05-04 04:19:16
1
6,570 B

4 Outputs

Total Output:
  • jrunM{"in":0,"ref":["native://Jig","f97d4ac2a3d6f5ed09fad4a4f341619dc5a3773d9844ff95c99c5d4f8388de2f_o1","b44a203acd6215d2d24b33a41f730e9acf2591c4ae27ecafc8d88ef83da9ddea_o1?berry=5de5ca0a3a67ffa2ce87a6cf242df668a6137be63426ea655793cd934a39f659&hash=6b7481feb6dbf77edd16ac84b83d265452ea930fd38bae046baf872727612166&version=5"],"out":["ecd35a48328514369fc7e95e0f0610a9dbc638a9458fc7942a94830e12387830","111b1a3b04a7ae252576ea76cfa2c8cc7bfbd45928e3ede624524fe000d96461"],"del":[],"cre":["mu97FuDfo5pg7w7rufebTJdfFKBekSkLJA","mu97FuDfo5pg7w7rufebTJdfFKBekSkLJA"],"exec":[{"op":"DEPLOY","data":["class MediaItem extends Jig {\n init(ownerPubKey, data) {\n expect(ownerPubKey).toBeString();\n expect(caller).toBeInstanceOf(MediaDispenser);\n MediaItem.validateProps(data);\n this.data = data;\n this.owner = ownerPubKey;\n }\n send(to, key, validationMsg) {\n expect(key).toBeString('Key is not a string');\n expect(key.length).toBeGreaterThan(0, 'Empty key is invalid');\n expect(validationMsg).toBeString('Validation msg is not a string');\n expect(validationMsg.length).toBeGreaterThan(0, 'Empty validation msg string is invalid');\n // TODO get PubKey.fromString working w/ Run\n expect(to).toBeString('Recipient is not a string');\n expect(to.length).toBeGreaterThan(0, 'Recipient is invalid');\n this.owner = to;\n this.data.key = key;\n this.data.validationMsg = validationMsg;\n }\n static validateProps(props) {\n const { Item, ItemRequired, ItemContent, ItemContentRequired, Media, MediaRequired, } = MediaItem.validation;\n function entriesLoop(obj, fn) {\n Object\n .entries(obj)\n .forEach(fn);\n }\n function validateRequired(obj, requiredList) {\n return requiredList.every(key => expect(obj[key]).toBeDefined(`Missing required property \"${key}\". Obj: ${JSON.stringify(obj)}`));\n }\n validateRequired(props, ItemRequired);\n entriesLoop(props, ([key, val]) => {\n expect(val)[Item[key]]?.(`Item validation failed: Key \"${key}\" / Val: \"${val}\"`);\n });\n const media = [\n props.thumb,\n ...props.content.map(c => c.media),\n ];\n media.forEach(m => {\n validateRequired(m, MediaRequired);\n entriesLoop(m, ([key, val]) => {\n if (key === 'mimeType') {\n expect(MIME_TYPES.includes(val))\n .toBe(true, `Media mime type not recognized: ${val}`);\n }\n else {\n expect(val)[Media[key]](`Media item validation failed: Key \"${key}\" / Val: ${val}`);\n }\n });\n });\n props\n .content\n .forEach(c => {\n entriesLoop(c, ([key, val]) => {\n if (key !== 'media') {\n validateRequired(c, ItemContentRequired);\n expect(val)[ItemContent[key]]('Content validation failed: ', key, val);\n }\n });\n });\n }\n}",{"deps":{"Jig":{"$jig":0},"MIME_TYPES":["application/epub+zip","application/pdf","audio/aac","audio/mpeg","audio/ogg","audio/wav","audio/webm","image/bmp","image/gif","image/jpeg","image/png","image/webp","video/mpeg","video/ogg","video/webm"],"MediaDispenser":{"$jig":4},"expect":{"$jig":1}},"metadata":{"author":"DavidDoesStuff","description":"Media collection with public and private content.","emoji":"📖","image":{"$jig":2}},"validation":{"Item":{"batchItemNumber":"toBeNumber","batchNumber":"toBeNumber","categories":"toBeArray","content":"toBeArray","createdBy":"toBeString","creationDate":"toBeString","description":"toBeString","instantiatedBy":"toBeString","itemNumber":"toBeNumber","key":"toBeString","meta":"toBeObject","thumb":"toBeObject","title":"toBeString","type":"toBeString","validationMsg":"toBeString"},"ItemContent":{"description":"toBeString","title":"toBeString"},"ItemContentRequired":["title","description"],"ItemRequired":["creationDate","createdBy","title","type","description","thumb","content"],"ItemValidation":{"key":"toBeString","msg":"toBeString"},"Media":{"encrypted":"toBeBoolean","tx":"toBeString"},"MediaRequired":["tx"]}},"class MediaDispenser extends Jig {\n init(ownerPubKey, data) {\n const { maxBatches = 0, maxIssues = 0, mediaData, } = data;\n expect(maxBatches).toBeNumber();\n expect(maxIssues).toBeNumber();\n expect(ownerPubKey).toBeString();\n MediaItem.validateProps(mediaData);\n const { creationDate, createdBy, categories = [], } = mediaData;\n this.owner = ownerPubKey;\n this.data = {\n maxIssues,\n maxBatches,\n mediaData,\n creationDate,\n batchRuns: [],\n createdBy,\n categories,\n };\n }\n send(to) {\n this.owner = to;\n }\n create(count) {\n expect(count).toBeNumber();\n expect(count).toBeGreaterThan(0);\n const data = this.data;\n if (data.maxBatches) {\n expect(data.batchRuns.length).toBeLessThan(data.maxBatches);\n }\n const totalIssued = data.batchRuns.reduce((sum, issued) => sum + issued, 0);\n if (data.maxIssues) {\n expect(totalIssued + count).toBeLessThan(data.maxIssues);\n }\n const batchNumber = data.batchRuns.length + 1;\n const newIssues = [];\n for (let x = 0; x < count; x++) {\n const batchItemNumber = x + 1;\n newIssues.push(new MediaItem(this.owner, {\n instantiatedBy: this.origin,\n batchNumber,\n itemNumber: totalIssued + batchItemNumber,\n batchItemNumber,\n ...this.data.mediaData,\n }));\n }\n this.data.batchRuns.push(count);\n return newIssues;\n }\n}",{"deps":{"Jig":{"$dup":["1","deps","Jig"]},"MediaItem":{"$jig":3},"expect":{"$dup":["1","deps","expect"]}},"metadata":{"author":"DavidDoesStuff","description":"Creates and tracks media items.","emoji":"📖","image":{"$dup":["1","metadata","image"]}}}]}]}
    https://whatsonchain.com/tx/6a42a2c1cfd8a70dbb25524117489af412d8cd3c5086f628c1fa0f5baa259ca4